distutils-r1.eclass: Handle missing BUILD_DIR for any-r1 API
authorMichał Górny <mgorny@gentoo.org>
Sun, 1 Dec 2019 16:12:55 +0000 (17:12 +0100)
committerMichał Górny <mgorny@gentoo.org>
Sun, 1 Dec 2019 20:19:34 +0000 (21:19 +0100)
When any-r1 API is used for *_all sub-phases, an implementation that
was not selected by the user may be used.  In this case,
DISTUTILS_IN_SOURCE_BUILD will not create the BUILD_DIR for this
implementation; however, the phase runner will still try to enter it
and fail.  Handle this gracefully by falling back to ${S}.

Closes: https://bugs.gentoo.org/701506
Signed-off-by: Michał Górny <mgorny@gentoo.org>
eclass/distutils-r1.eclass

index f44f0aee9c2121925265a714b2b8a5d3679d576e..0c5d6781f83d0f851ed5dd462936ca96676937dc 100644 (file)
@@ -821,7 +821,11 @@ distutils-r1_run_phase() {
        debug-print-function ${FUNCNAME} "${@}"
 
        if [[ ${DISTUTILS_IN_SOURCE_BUILD} ]]; then
-               if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then
+               # only force BUILD_DIR if implementation is explicitly enabled
+               # for building; any-r1 API may select one that is not
+               # https://bugs.gentoo.org/701506
+               if [[ ! ${DISTUTILS_SINGLE_IMPL} ]] &&
+                               has "${EPYTHON/./_}" ${PYTHON_TARGETS}; then
                        cd "${BUILD_DIR}" || die
                fi
                local BUILD_DIR=${BUILD_DIR}/build