Summary: | phase-helpers.sh references non-existent BROOT variable in Gentoo Prefix environment | ||
---|---|---|---|
Product: | Portage Development | Reporter: | Ting-Wei Lan <lantw44> |
Component: | Core - Ebuild Support | Assignee: | Portage team <dev-portage> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | prefix |
Priority: | Normal | Keywords: | InVCS |
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
See Also: |
https://bugs.gentoo.org/show_bug.cgi?id=665074 https://bugs.gentoo.org/show_bug.cgi?id=655414 |
||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Bug Depends on: | |||
Bug Blocks: | 659322 |
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(-) |
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.