The $BASHPID variable is new to bash-4.0, so we need to add fallback logic
to support older versions (notably, bash-3.2).

Reported-by: Ryan Hill <dirtye...@gentoo.org>
---
 bin/ebuild-helpers/prepstrip | 4 ++--
 bin/ebuild.sh                | 2 +-
 bin/helper-functions.sh      | 2 +-
 bin/isolated-functions.sh    | 9 ++++++++-
 bin/phase-functions.sh       | 2 +-
 bin/phase-helpers.sh         | 2 +-
 6 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/bin/ebuild-helpers/prepstrip b/bin/ebuild-helpers/prepstrip
index 9b2d47c..64ea80d 100755
--- a/bin/ebuild-helpers/prepstrip
+++ b/bin/ebuild-helpers/prepstrip
@@ -116,7 +116,7 @@ save_elf_sources() {
        buildid=$(debugedit -i \
                -b "${WORKDIR}" \
                -d "${prepstrip_sources_dir}" \
-               -l "${tmpdir}/sources/${x##*/}.${BASHPID}" \
+               -l "${tmpdir}/sources/${x##*/}.${BASHPID:-$(__bashpid)}" \
                "${x}")
 }
 
@@ -208,7 +208,7 @@ process_elf() {
                # see if we can split & strip at the same time
                if [[ -n ${SPLIT_STRIP_FLAGS} ]] ; then
                        local shortname="${x##*/}.debug"
-                       local 
splitdebug="${tmpdir}/splitdebug/${shortname}.${BASHPID}"
+                       local 
splitdebug="${tmpdir}/splitdebug/${shortname}.${BASHPID:-$(__bashpid)}"
                        ${already_stripped} || \
                        ${STRIP} ${strip_flags} \
                                -f "${splitdebug}" \
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 35f4b91..be044e0 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -468,7 +468,7 @@ if [[ -n ${QA_INTERCEPTORS} ]] ; then
 fi
 
 # Subshell/helper die support (must export for the die helper).
-export EBUILD_MASTER_PID=$BASHPID
+export EBUILD_MASTER_PID=${BASHPID:-$(__bashpid)}
 trap 'exit 1' SIGTERM
 
 if ! has "$EBUILD_PHASE" clean cleanrm depend && \
diff --git a/bin/helper-functions.sh b/bin/helper-functions.sh
index 4a46278..b9bc74a 100644
--- a/bin/helper-functions.sh
+++ b/bin/helper-functions.sh
@@ -34,7 +34,7 @@ __multijob_init() {
 }
 
 __multijob_child_init() {
-       trap 'echo ${BASHPID} $? >&'${mj_write_fd} EXIT
+       trap 'echo ${BASHPID:-$(__bashpid)} $? >&'${mj_write_fd} EXIT
        trap 'exit 1' INT TERM
 }
 
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index 42d9e70..b99aec7 100644
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -98,6 +98,13 @@ nonfatal() {
        PORTAGE_NONFATAL=1 "$@"
 }
 
+__bashpid() {
+       # The BASHPID variable is new to bash-4.0, so add a hack for older
+       # versions.  This must be used like so:
+       # ${BASHPID:-$(__bashpid)}
+       sh -c 'echo ${PPID}'
+}
+
 __helpers_die() {
        if ___eapi_helpers_can_die; then
                die "$@"
@@ -216,7 +223,7 @@ die() {
        [[ -n $PORTAGE_IPC_DAEMON ]] && "$PORTAGE_BIN_PATH"/ebuild-ipc exit 1
 
        # subshell die support
-       [[ $BASHPID = $EBUILD_MASTER_PID ]] || kill -s SIGTERM 
$EBUILD_MASTER_PID
+       [[ ${BASHPID:-$(__bashpid)} == ${EBUILD_MASTER_PID} ]] || kill -s 
SIGTERM ${EBUILD_MASTER_PID}
        exit 1
 }
 
diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index 711b721..f39a024 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -830,7 +830,7 @@ __ebuild_main() {
        # setup EBUILD_MASTER_PID to refer to the current $BASHPID,
        # which seems to give the best results when further
        # nested subshells call die.
-       export EBUILD_MASTER_PID=$BASHPID
+       export EBUILD_MASTER_PID=${BASHPID:-$(__bashpid)}
        trap 'exit 1' SIGTERM
 
        #a reasonable default for $S
diff --git a/bin/phase-helpers.sh b/bin/phase-helpers.sh
index 1a7ae03..412decb 100644
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@ -469,7 +469,7 @@ unpack() {
 
 econf() {
        local x
-       local pid=${BASHPID}
+       local pid=${BASHPID:-$(__bashpid)}
 
        if ! ___eapi_has_prefix_variables; then
                local EPREFIX=
-- 
1.8.4.3


Reply via email to