Stop calling _scons_clean_makeopts in a subshell in order to make
it possible for the cache to be preserved. Pass the result through
SCONSOPTS variable.
---
 eclass/scons-utils.eclass   | 15 +++++++++------
 eclass/tests/scons-utils.sh |  7 ++++---
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/eclass/scons-utils.eclass b/eclass/scons-utils.eclass
index e5e309b..4da2c4a 100644
--- a/eclass/scons-utils.eclass
+++ b/eclass/scons-utils.eclass
@@ -124,8 +124,12 @@ escons() {
        fi
 
        # if SCONSOPTS are _unset_, use cleaned MAKEOPTS
-       set -- scons ${SCONSOPTS-$(_scons_clean_makeopts)} ${EXTRA_ESCONS} \
-               "${@}"
+       if [[ ! ${SCONSOPTS+set} ]]; then
+               local SCONSOPTS
+               _scons_clean_makeopts
+       fi
+
+       set -- scons ${SCONSOPTS} ${EXTRA_ESCONS} "${@}"
        echo "${@}" >&2
        "${@}"
        ret=${?}
@@ -169,9 +173,8 @@ _scons_clean_makeopts() {
        # empty MAKEOPTS give out empty SCONSOPTS
        # thus, we do need to worry about the initial setup
        if [[ ${*} = ${_SCONS_CACHE_MAKEOPTS} ]]; then
-               set -- ${_SCONS_CACHE_SCONSOPTS}
-               debug-print "Cache hit: [${*}]"
-               echo ${*}
+               SCONSOPTS=${_SCONS_CACHE_SCONSOPTS}
+               debug-print "Cache hit: [${SCONSOPTS}]"
                return
        fi
        export _SCONS_CACHE_MAKEOPTS=${*}
@@ -235,7 +238,7 @@ _scons_clean_makeopts() {
        set -- ${new_makeopts}
        export _SCONS_CACHE_SCONSOPTS=${*}
        debug-print "New SCONSOPTS: [${*}]"
-       echo ${*}
+       SCONSOPTS=${*}
 }
 
 # @FUNCTION: use_scons
diff --git a/eclass/tests/scons-utils.sh b/eclass/tests/scons-utils.sh
index df8af7a..6355c54 100755
--- a/eclass/tests/scons-utils.sh
+++ b/eclass/tests/scons-utils.sh
@@ -10,14 +10,15 @@ inherit scons-utils
 test-scons_clean_makeopts() {
        tbegin "scons_clean_makeopts() for ${1}"
 
-       local sconsopts=$(_scons_clean_makeopts ${1}) ret=0
+       local SCONSOPTS ret=0
+       _scons_clean_makeopts ${1}
 
-       if [[ ${sconsopts} != ${2-${1}} ]]; then
+       if [[ ${SCONSOPTS} != ${2-${1}} ]]; then
                eerror "Self-test failed:"
                eindent
                eerror "MAKEOPTS: ${1}"
                eerror "Expected: ${2-${1}}"
-               eerror "Actual: ${sconsopts}"
+               eerror "Actual: ${SCONSOPTS}"
                eoutdent
                ret=1
        fi
-- 
2.6.4


Reply via email to