diff --git a/bin/ebuild.sh b/bin/ebuild.sh index 8b1e0861a8..7ffb91e5a3 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # Prevent aliases from causing portage to act inappropriately. @@ -10,6 +10,10 @@ unalias -a unset BASH_COMPAT declare -F ___in_portage_iuse >/dev/null && export -n -f ___in_portage_iuse +if [[ -v PORTAGE_EBUILD_EXTRA_SOURCE ]]; then + source "${PORTAGE_EBUILD_EXTRA_SOURCE}" || exit 1 +fi + source "${PORTAGE_BIN_PATH}/isolated-functions.sh" || exit 1 # Set up the bash version compatibility level. This does not disable diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py index c7fa1d1e06..34aa7c4844 100644 --- a/lib/portage/package/ebuild/doebuild.py +++ b/lib/portage/package/ebuild/doebuild.py @@ -2131,9 +2131,40 @@ def spawn( logname_backup = mysettings.configdict["env"].get("LOGNAME") mysettings.configdict["env"]["LOGNAME"] = logname + eapi = mysettings["EAPI"] + + # TODO: Move into eapi.py + def eapi_does_not_export_a(eapi): + return eapi == "9" + + dont_export_a = "dont-export-a" in mysettings.features or eapi_does_not_export_a( + eapi + ) + + if dont_export_a: + orig_env = mysettings.environ() + # Copy since we are potentially removing keys from the dict. + env = orig_env.copy() + + t = env["T"] + if not os.path.isdir(t): + os.makedirs(t) + + ebuildExtraSource = os.path.join(t, "portage-ebuild-extra-source") + with open(ebuildExtraSource, mode="w") as f: + for name, value in orig_env.items(): + if name != "A": + continue + f.write(f"{name}='{value}'\n") + del env[name] + + env["PORTAGE_EBUILD_EXTRA_SOURCE"] = str(ebuildExtraSource) + else: + env = mysettings.environ() + try: if keywords.get("returnpid") or keywords.get("returnproc"): - return spawn_func(mystring, env=mysettings.environ(), **keywords) + return spawn_func(mystring, env=env, **keywords) proc = EbuildSpawnProcess( background=False,