When the fallback from S to WORKDIR was made conditional in EAPI 4,
src_test() was originally omitted. This has been fixed retroactively
in PMS:
https://gitweb.gentoo.org/proj/pms.git/commit/?id=0038f90a942f0856ae2533b26f709002a3ec80ae

There should be no issues with backwards compatibility of existing
ebuilds. The feature is not used in the Gentoo repository. Plus, the
scenario is very unlikely, because in src_test the fallback to WORKDIR
could only happen for an ebuild that:
- Has no files in A to be unpacked.
- Doesn't define any of the unpack, prepare, configure, compile or
  install phases (otherwise it would die in one of these phases).

Signed-off-by: Ulrich Müller <u...@gentoo.org>
---
 bin/phase-functions.sh | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index d8ebf3d3e..4c6420bfa 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -358,7 +358,7 @@ __abort_install() {
 
 __has_phase_defined_up_to() {
        local phase
-       for phase in unpack prepare configure compile install; do
+       for phase in unpack prepare configure compile test install; do
                has ${phase} ${DEFINED_PHASES} && return 0
                [[ ${phase} == $1 ]] && return 1
        done
@@ -497,8 +497,12 @@ __dyn_test() {
 
        if [ -d "${S}" ]; then
                cd "${S}"
-       else
+       elif ___eapi_has_S_WORKDIR_fallback; then
+               cd "${WORKDIR}"
+       elif [[ -z ${A} ]] && ! __has_phase_defined_up_to test; then
                cd "${WORKDIR}"
+       else
+               die "The source directory '${S}' doesn't exist"
        fi
 
        if has test ${RESTRICT} ; then
-- 
2.20.1

Attachment: signature.asc
Description: PGP signature

Reply via email to