xref: /dflybsd-src/contrib/bmake/mk/sys.clean-env.mk (revision 9e7ae5a0527a977cab412aede3a532cfe2903bbb)
1*6eef5f0cSAntonio Huete Jimenez# $Id: sys.clean-env.mk,v 1.25 2022/09/09 17:44:29 sjg Exp $
25f1e34d9SAlexandre Perrin#
35f1e34d9SAlexandre Perrin#	@(#) Copyright (c) 2009, Simon J. Gerraty
45f1e34d9SAlexandre Perrin#
55f1e34d9SAlexandre Perrin#	This file is provided in the hope that it will
65f1e34d9SAlexandre Perrin#	be of use.  There is absolutely NO WARRANTY.
75f1e34d9SAlexandre Perrin#	Permission to copy, redistribute or otherwise
85f1e34d9SAlexandre Perrin#	use this file is hereby granted provided that
95f1e34d9SAlexandre Perrin#	the above copyright notice and this notice are
105f1e34d9SAlexandre Perrin#	left intact.
115f1e34d9SAlexandre Perrin#
125f1e34d9SAlexandre Perrin#	Please send copies of changes and bug-fixes to:
135f1e34d9SAlexandre Perrin#	sjg@crufty.net
145f1e34d9SAlexandre Perrin#
155f1e34d9SAlexandre Perrin
165f1e34d9SAlexandre Perrin# This makefile would normally be included by sys.env.mk
175f1e34d9SAlexandre Perrin
185f1e34d9SAlexandre Perrin# The variables used by this makefile include:
195f1e34d9SAlexandre Perrin#
205f1e34d9SAlexandre Perrin# MAKE_ENV_SAVE_VAR_LIST
215f1e34d9SAlexandre Perrin#	The actuall list of variables from the environment that will be
225f1e34d9SAlexandre Perrin#	preserved.
235f1e34d9SAlexandre Perrin# MAKE_ENV_SAVE_PREFIX_LIST
245f1e34d9SAlexandre Perrin#	A list of prefixes to match against the environment - the results
255f1e34d9SAlexandre Perrin#	are added to MAKE_ENV_SAVE_VAR_LIST after being filtered by...
265f1e34d9SAlexandre Perrin# MAKE_ENV_SAVE_EXCLUDE_LIST
275f1e34d9SAlexandre Perrin#	A list of words or patterns which is turned into a list of :N
285f1e34d9SAlexandre Perrin#	modifiers.
295f1e34d9SAlexandre Perrin
305f1e34d9SAlexandre Perrin.if ${.MAKE.LEVEL} == 0 && ${MAKE_VERSION} >= 20100606
315f1e34d9SAlexandre Perrin# We save any env var that starts with the words in MAKE_ENV_SAVE_PREFIX_LIST.
325f1e34d9SAlexandre Perrin# This gets expanded to an egrep expression like '^(A|B|C...)'
335f1e34d9SAlexandre Perrin# and added to MAKE_ENV_SAVE_VAR_LIST below.
345f1e34d9SAlexandre Perrin# If any of these end up being too greedy, MAKE_ENV_SAVE_EXCLUDE_LIST
355f1e34d9SAlexandre Perrin# can be used to filter.
365f1e34d9SAlexandre PerrinMAKE_ENV_SAVE_PREFIX_LIST += \
375f1e34d9SAlexandre Perrin	CCACHE \
385f1e34d9SAlexandre Perrin	CVS \
395f1e34d9SAlexandre Perrin	DEBUG \
405f1e34d9SAlexandre Perrin	DISTCC \
415f1e34d9SAlexandre Perrin	HOST \
425f1e34d9SAlexandre Perrin	MACHINE \
435f1e34d9SAlexandre Perrin	MAKE \
445f1e34d9SAlexandre Perrin	MK \
455f1e34d9SAlexandre Perrin	NEED_ \
465f1e34d9SAlexandre Perrin	SB_ \
475f1e34d9SAlexandre Perrin	SSH \
485f1e34d9SAlexandre Perrin	SVN \
495f1e34d9SAlexandre Perrin	USE_ \
505f1e34d9SAlexandre Perrin	WITH_ \
515f1e34d9SAlexandre Perrin	WITHOUT_ \
525f1e34d9SAlexandre Perrin
535f1e34d9SAlexandre Perrin
545f1e34d9SAlexandre Perrin# This could be a list of vars or patterns to explicitly exclude.
55*6eef5f0cSAntonio Huete JimenezMAKE_ENV_SAVE_EXCLUDE_LIST += _
565f1e34d9SAlexandre Perrin
575f1e34d9SAlexandre Perrin# This is the actual list that we will save
585f1e34d9SAlexandre Perrin# HOME is probably something worth clobbering eg.
595f1e34d9SAlexandre Perrin# HOME=/var/empty
605f1e34d9SAlexandre PerrinMAKE_ENV_SAVE_VAR_LIST += \
615f1e34d9SAlexandre Perrin	HOME \
625f1e34d9SAlexandre Perrin	LOGNAME \
635f1e34d9SAlexandre Perrin	OBJROOT \
645f1e34d9SAlexandre Perrin	OBJTOP \
655f1e34d9SAlexandre Perrin	PATH \
665f1e34d9SAlexandre Perrin	SB \
675f1e34d9SAlexandre Perrin	SRCTOP \
685f1e34d9SAlexandre Perrin	USER \
695f1e34d9SAlexandre Perrin	${_env_vars:${MAKE_ENV_SAVE_EXCLUDE_LIST:${M_ListToSkip}}}
705f1e34d9SAlexandre Perrin
71*6eef5f0cSAntonio Huete Jimenez_env_vars != env | ${EGREP:Uegrep} '^(${MAKE_ENV_SAVE_PREFIX_LIST:ts|})' | sed 's,=.*,,'; echo
725f1e34d9SAlexandre Perrin
735f1e34d9SAlexandre Perrin_export_list =
745f1e34d9SAlexandre Perrin.for v in ${MAKE_ENV_SAVE_VAR_LIST:O:u}
755f1e34d9SAlexandre Perrin.if defined($v)
765f1e34d9SAlexandre Perrin_export_list += $v
775f1e34d9SAlexandre Perrin# Save current value
785f1e34d9SAlexandre Perrin$v := ${$v}
795f1e34d9SAlexandre Perrin.endif
805f1e34d9SAlexandre Perrin.endfor
815f1e34d9SAlexandre Perrin
825f1e34d9SAlexandre Perrin# Now, clobber the environment
835f1e34d9SAlexandre Perrin.unexport-env
845f1e34d9SAlexandre Perrin
855f1e34d9SAlexandre Perrin# This is a list of vars that we handle specially below
865f1e34d9SAlexandre Perrin_tricky_env_vars = MAKEOBJDIR OBJTOP
875f1e34d9SAlexandre Perrin# Export our selection - sans tricky ones
885f1e34d9SAlexandre Perrin.export ${_export_list:${_tricky_env_vars:${M_ListToSkip}}}
895f1e34d9SAlexandre Perrin
905f1e34d9SAlexandre Perrin# This next bit may need tweaking
915f1e34d9SAlexandre Perrin# if you don't happen to like the way I set it.
925f1e34d9SAlexandre Perrin.if defined(MAKEOBJDIR)
935f1e34d9SAlexandre Perrin# We are going to set this to the equivalent of the shell's
945f1e34d9SAlexandre Perrin# MAKEOBJDIR='${.CURDIR:S,${SRCTOP},${OBJTOP},}'
955f1e34d9SAlexandre Perrin_srctop := ${SRCTOP:U${SB_SRC:U${SB}/src}}
965f1e34d9SAlexandre Perrin_objroot := ${OBJROOT:U${SB_OBJROOT:U${SB}/${SB_OBJPREFIX}}}
97f445c897SJohn Marino.if ${MAKE_VERSION} < 20160218
985f1e34d9SAlexandre Perrin_objtop := ${OBJTOP:U${_objroot}${MACHINE}}
995f1e34d9SAlexandre Perrin# Take care of ${MACHINE}
100ca58f742SDaniel Fojt.if ${MACHINE:Nhost*} == "" || ${OBJTOP} == ${HOST_OBJTOP:Uno}
1015f1e34d9SAlexandre PerrinOBJTOP = ${_objtop:S,${HOST_TARGET}$,\${MACHINE},}
1025f1e34d9SAlexandre Perrin.else
1035f1e34d9SAlexandre PerrinOBJTOP = ${_objtop:S,${MACHINE}$,\${MACHINE},}
1045f1e34d9SAlexandre Perrin.endif
1055f1e34d9SAlexandre Perrin# Export like this
1065f1e34d9SAlexandre PerrinMAKEOBJDIR = $${.CURDIR:S,${_srctop},$${OBJTOP},}
1075f1e34d9SAlexandre Perrin#.info ${MAKE_SAVE_ENV_VARS _srctop _objroot _objtop OBJTOP MAKEOBJDIR:L:@v@${.newline}$v=${$v}@}
1085f1e34d9SAlexandre Perrin
1095f1e34d9SAlexandre Perrin# Export these as-is, and do not track...
1105f1e34d9SAlexandre Perrin# otherwise the environment will be ruined when we evaluate them below.
1115f1e34d9SAlexandre Perrin.export-env ${_tricky_env_vars}
1125f1e34d9SAlexandre Perrin
1135f1e34d9SAlexandre Perrin# Now evaluate for ourselves
1145f1e34d9SAlexandre Perrin.for v in ${_tricky_env_vars}
1155f1e34d9SAlexandre Perrin$v := ${$v}
1165f1e34d9SAlexandre Perrin.endfor
117f445c897SJohn Marino.else
118*6eef5f0cSAntonio Huete Jimenez# we cannot rely on the '$$' trick (depending on .MAKE.SAVE_DOLLARS)
119f445c897SJohn Marino# but we can export a literal (unexpanded) value
120f445c897SJohn MarinoSRCTOP := ${_srctop}
121f445c897SJohn MarinoOBJROOT := ${_objroot}
122f445c897SJohn MarinoOBJTOP = ${OBJROOT}${MACHINE}
123f445c897SJohn MarinoMAKEOBJDIR = ${.CURDIR:S,${SRCTOP},${OBJTOP},}
124f445c897SJohn Marino.export-literal SRCTOP OBJROOT ${_tricky_env_vars}
125f445c897SJohn Marino.endif
1265f1e34d9SAlexandre Perrin#.info ${_tricky_env_vars:@v@${.newline}$v=${$v}@}
127f445c897SJohn Marino#showenv:
128*6eef5f0cSAntonio Huete Jimenez#	@env | ${EGREP:Uegrep} 'OBJ|SRC'
1295f1e34d9SAlexandre Perrin.endif				# MAKEOBJDIR
1305f1e34d9SAlexandre Perrin.endif				# level 0
131