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