svn commit: r293286 - in head: . share/mk

Bryan Drewery bdrewery at FreeBSD.org
Thu Jan 7 00:19:04 UTC 2016


Author: bdrewery
Date: Thu Jan  7 00:19:03 2016
New Revision: 293286
URL: https://svnweb.freebsd.org/changeset/base/293286

Log:
  Move the MAKEOBJDIRPREFIX value guard to sys.mk and expand to MAKEOBJDIR.
  
  This will ensure that the variable was not set as a make override, in
  make.conf, src.conf or src-env.conf.  It allows setting the value in
  src-env.conf when using WITH_AUTO_OBJ since that case properly handles
  changing .OBJDIR (except if MAKEOBJDIRPREFIX does not yet exist which is
  being discussed to be changed).
  
  This change allows setting a default MAKEOBJDIRPREFIX via local.sys.env.mk.
  
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  head/Makefile
  head/share/mk/sys.mk

Modified: head/Makefile
==============================================================================
--- head/Makefile	Thu Jan  7 00:15:02 2016	(r293285)
+++ head/Makefile	Thu Jan  7 00:19:03 2016	(r293286)
@@ -143,13 +143,6 @@ TGTS+=	${BITGTS}
 
 PATH=	/sbin:/bin:/usr/sbin:/usr/bin
 MAKEOBJDIRPREFIX?=	/usr/obj
-_MAKEOBJDIRPREFIX!= /usr/bin/env -i PATH=${PATH} ${MAKE} \
-    ${.MAKEFLAGS:MMAKEOBJDIRPREFIX=*} __MAKE_CONF=${__MAKE_CONF} \
-    -f /dev/null -V MAKEOBJDIRPREFIX dummy
-.if !empty(_MAKEOBJDIRPREFIX)
-.error MAKEOBJDIRPREFIX can only be set in environment, not as a global\
-	(in make.conf(5)) or command-line variable.
-.endif
 
 # We often need to use the tree's version of make to build it.
 # Choices add to complexity though.

Modified: head/share/mk/sys.mk
==============================================================================
--- head/share/mk/sys.mk	Thu Jan  7 00:15:02 2016	(r293285)
+++ head/share/mk/sys.mk	Thu Jan  7 00:19:03 2016	(r293286)
@@ -33,6 +33,13 @@ __ENV_ONLY_OPTIONS:= \
 	${__DEFAULT_YES_OPTIONS} \
 	${__DEFAULT_DEPENDENT_OPTIONS:H}
 
+__ENV_ONLY_VARS= \
+	MAKEOBJDIR \
+	MAKEOBJDIRPREFIX
+.for _var in ${__ENV_ONLY_VARS}
+_pre_includes_${_var:tl}:=	${${_var}:U__null}
+.endfor
+
 # early include for customization
 # see local.sys.mk below
 # Not included when building in fmake compatibility mode (still needed
@@ -50,6 +57,9 @@ __ENV_ONLY_OPTIONS:= \
 .endif
 .endif
 .if ${MK_AUTO_OBJ} == "yes"
+# Reset, since it is allowed to be set from src-env.conf included before this.
+_pre_includes_makeobjdirprefix:= ${MAKEOBJDIRPREFIX:U__null}
+_pre_includes_makeobjdir:= ${MAKEOBJDIR:U__null}
 # This needs to be done early - before .PATH is computed
 # Don't do this for 'make showconfig' as it enables all options where meta mode
 # is not expected.
@@ -410,6 +420,15 @@ __MAKE_SHELL?=/bin/sh
 	path=${__MAKE_SHELL}
 .endif
 
+# Ensure MAKEOBJDIRPREFIX was not incorrectly set.
+.for _var in ${__ENV_ONLY_VARS}
+.if ${.MAKEOVERRIDES:M${_var}} || (defined(${_var}) && \
+    ${${_var}} != ${_pre_includes_${_var:tl}})
+.error ${_var} can only be set in environment, not as a global (in make.conf(5)) or command-line variable.
+.endif
+.undef _pre_includes_${_var:tl}
+.endfor
+
 # Hack for ports compatibility. Historically, ports makefiles have
 # assumed they can examine MACHINE_CPU without including anything
 # because this was automatically included in sys.mk. For /usr/src,


More information about the svn-src-all mailing list