summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/ebuild.sh27
-rwxr-xr-xbin/isolated-functions.sh2
2 files changed, 21 insertions, 8 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 78c423278..2a5a1a53d 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -984,7 +984,8 @@ dyn_install() {
# the global environment though, in case the user wants to repeat
# this phase (like with FEATURES=noauto and the ebuild command).
unset S _E_DOCDESTTREE_ _E_EXEDESTTREE_
- save_ebuild_env | filter_readonly_variables --filter-sandbox > environment
+ save_ebuild_env | filter_readonly_variables \
+ --filter-sandbox --allow-extra-vars > environment
)
bzip2 -f9 environment
@@ -1349,19 +1350,21 @@ READONLY_EBUILD_METADATA="DEPEND DESCRIPTION
EAPI HOMEPAGE INHERITED IUSE KEYWORDS LICENSE
PDEPEND PROVIDE RDEPEND RESTRICT SLOT SRC_URI"
-READONLY_PORTAGE_VARS="A CATEGORY D EBUILD EBUILD_PHASE \
- EBUILD_SH_ARGS EMERGE_FROM FILESDIR P PF PN \
+READONLY_PORTAGE_VARS="D EBUILD EBUILD_PHASE \
+ EBUILD_SH_ARGS EMERGE_FROM FILESDIR \
PORTAGE_BIN_PATH PORTAGE_PYM_PATH PORTAGE_MUTABLE_FILTERED_VARS \
- PORTAGE_TMPDIR PR PV PVR T WORKDIR"
+ PORTAGE_SAVED_READONLY_VARS PORTAGE_TMPDIR T WORKDIR"
+
+PORTAGE_SAVED_READONLY_VARS="A CATEGORY P PF PN PR PV PVR"
# Variables that portage sets but doesn't mark readonly.
# In order to prevent changed values from causing unexpected
# interference, they are filtered out of the environment when
# it is saved or loaded (any mutations do not persist).
-PORTAGE_MUTABLE_FILTERED_VARS="AA"
+PORTAGE_MUTABLE_FILTERED_VARS="AA HOSTNAME"
# @FUNCTION: filter_readonly_variables
-# @DESCRIPTION: [--filter-sandbox]
+# @DESCRIPTION: [--filter-sandbox] [--allow-extra-vars]
# Read an environment from stdin and echo to stdout while filtering readonly
# variables.
#
@@ -1369,6 +1372,9 @@ PORTAGE_MUTABLE_FILTERED_VARS="AA"
# is only desired in certain cases, such as during preprocessing or when
# saving environment.bz2 for a binary or installed package.
#
+# ---allow-extra-vars causes some extra vars to be allowd through, such
+# as ${PORTAGE_SAVED_READONLY_VARS} and ${PORTAGE_MUTABLE_FILTERED_VARS}.
+#
# In bash-3.2_p20+ an attempt to assign BASH_*, FUNCNAME, GROUPS or any
# readonly variable cause the shell to exit while executing the "source"
# builtin command. To avoid this problem, this function filters those
@@ -1381,12 +1387,19 @@ filter_readonly_variables() {
SANDBOX_DEBUG_LOG SANDBOX_DISABLED SANDBOX_LIB
SANDBOX_LOG"
filtered_vars="${readonly_bash_vars} ${READONLY_PORTAGE_VARS}
- ${PORTAGE_MUTABLE_FILTERED_VARS} BASH_[_[:alnum:]]*"
+ BASH_[_[:alnum:]]*"
if hasq --filter-sandbox $* ; then
filtered_vars="${filtered_vars} SANDBOX_[_[:alnum:]]*"
else
filtered_vars="${filtered_vars} ${filtered_sandbox_vars}"
fi
+ if ! hasq --allow-extra-vars $* ; then
+ filtered_vars="
+ ${filtered_vars}
+ ${PORTAGE_SAVED_READONLY_VARS}
+ ${PORTAGE_MUTABLE_FILTERED_VARS}
+ "
+ fi
set -f
for x in ${filtered_vars} ; do
var_grep="${var_grep}|${x}"
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index 62824b2bc..43ad1c384 100755
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -391,7 +391,7 @@ save_ebuild_env() {
(
# misc variables set by bash
- unset BASH HOSTNAME HOSTTYPE IFS MACHTYPE OLDPWD \
+ unset BASH HOSTTYPE IFS MACHTYPE OLDPWD \
OPTERR OPTIND OSTYPE PS4 PWD SHELL SHLVL
# misc variables inherited from the calling environment