In file bin/phase-helpers.sh, function ___best_version_and_has_version_common, there is a case statement: case ${root_arg} in -r) root=${ROOT%/}/${EPREFIX#/} ;; -d) root=${ESYSROOT} ;; -b) root=${BROOT:-/} ;; esac There is no BROOT variable and it causes has_version to fail with 'Invalid ROOT' error. Reproducible: Always Steps to Reproduce: Run 'emerge libevdev' in a Gentoo Prefix environment. Actual Results: >>> Emerging (1 of 1) dev-libs/libevdev-1.5.9-r1::gentoo * libevdev-1.5.9.tar.xz BLAKE2B SHA512 size ;-) ... [ ok ] has_version: Invalid ROOT: / * ERROR: dev-libs/libevdev-1.5.9-r1::gentoo failed (setup phase): * has_version: unexpected ebuild-ipc exit code: 3 * * Call stack: * ebuild.sh, line 124: Called pkg_setup * ebuild.sh, line 371: Called python-any-r1_pkg_setup * python-any-r1.eclass, line 353: Called python_setup * python-any-r1.eclass, line 320: Called _python_EPYTHON_supported 'python2.7' * python-any-r1.eclass, line 262: Called python_is_installed 'python2_7' * python-utils-r1.eclass, line 1121: Called has_version '-b' '>=dev-lang/python-2.7.5-r2:2.7' * phase-helpers.sh, line 961: Called ___best_version_and_has_version_common '-b' '>=dev-lang/python-2.7.5-r2:2.7' * phase-helpers.sh, line 946: Called die * The specific snippet of code: * die "${FUNCNAME[1]}: unexpected ebuild-ipc exit code: ${retval}" * Expected Results: libevdev should be built and installed successfully. It can be worked around by setting BROOT to EROOT in the ebuild.
I've filed bug 665074 for the python eclass(es), since PMS says BROOT is only valid during src_* phases, so calling has_version -b during pkg_setup is invalid.
Patch posted for review: https://github.com/gentoo/portage/pull/363 https://archives.gentoo.org/gentoo-portage-dev/message/8da8fbf9c911f538653860b8ee51e386
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/proj/portage.git/commit/?id=102220e1f71341e9bc85236074813f191bb389a4 commit 102220e1f71341e9bc85236074813f191bb389a4 Author: Zac Medico <zmedico@gentoo.org> AuthorDate: 2018-09-02 21:55:56 +0000 Commit: Zac Medico <zmedico@gentoo.org> CommitDate: 2018-09-03 17:38:15 +0000 phase-helpers.sh: has/best_version -b in any phase (bug 665038) Since BROOT is only defined in src_* phases, make has/best_version -b use the equivalent /${PORTAGE_OVERRIDE_EPREFIX#/} value that is defined in all phases. This makes has/best_version -b in EAPI 7 behave exactly the same as --host-root behaves in EAPI 6, allowing python ebuilds to call python_setup in any ebuild phase. Bug: https://bugs.gentoo.org/665038 Reviewed-by: Brian Dolbec <dolsen@gentoo.org> bin/phase-helpers.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)