http://forums.gentoo.org/viewtopic.php?p=7203466 I have no idea what kind of error is this. I'll temporarily disable the relevant code as it's mostly a safety check for developers. @sera, could you help me to understand it? I feel like that's a bug in paludis but considering the status of PMS, it may be just a bad spec which makes '-foo(-)' useless.
In EAPI 4, which python-exec is using, USE_EXPAND variables are added to what PMS calls IUSE_EFFECTIVE. [1] and which Portage calls implicit IUSE. That means python-exec for the sake of tests like 'use' command, or here (-) has a use flag python_single_target_python2_7. This use flag is enabled in the base profile. The reason Portage doesn't trip here is that it doesn't conform to PMS [2] I haven't wrapped my had around why having this usedeps in the first place, need to dig deeper in what python single is about. [1] http://dev.gentoo.org/~ulm/pms/4/pms.html#x1-12000012.1.1 [2] bug 366555
(In reply to comment #1) > In EAPI 4, which python-exec is using, USE_EXPAND variables are added to > what PMS calls IUSE_EFFECTIVE. [1] and which Portage calls implicit IUSE. > That means python-exec for the sake of tests like 'use' command, or here (-) > has a use flag python_single_target_python2_7. This use flag is enabled in > the base profile. Does EAPI 5 fix this? And does this mean that in EAPI < 5 all of 'foo(-)' is useless on USE_EXPAND flags? > I haven't wrapped my had around why having this usedeps in the first place, > need to dig deeper in what python single is about. Well, in this particular case (python-r1 eclass), the '-foo(-)' is a trick to make sure that package supporting being built for multiple Python implementations does not depend on a package not supporting that. In packages supporting single Python implementation only, PYTHON_SINGLE_TARGET is used to select the implementation to build. Through REQUIRED_USE, it is enforced that there's always at least one implementation selected. Therefore, we assume that if a package has at least one PYTHON_SINGLE_TARGET selected, it does not support multiple Python implementations and the developer should notice that before committing the broken dependency. Not that it's something really important to me.
(In reply to comment #2) > (In reply to comment #1) > > In EAPI 4, which python-exec is using, USE_EXPAND variables are added to > > what PMS calls IUSE_EFFECTIVE. [1] and which Portage calls implicit IUSE. > > That means python-exec for the sake of tests like 'use' command, or here (-) > > has a use flag python_single_target_python2_7. This use flag is enabled in > > the base profile. > > Does EAPI 5 fix this? And does this mean that in EAPI < 5 all of 'foo(-)' is > useless on USE_EXPAND flags? > Yes and yes. EAPI 5 supports profile iuse injection and so a different set of rules applies as to what ends up in IUSE_EFFECTIVE [3]. The relevant other bit is: "For EAPIs listed in table 5.2 as supporting profile defined IUSE injection, the variables named in USE_EXPAND and USE_EXPAND_UNPREFIXED shall have their profile-provided values reduced to contain only those values that are present in IUSE_EFFECTIVE." Bumping python-exec to EAPI 5 would make it behave as you'd expect.
Sorry, missing reference. [3] http://dev.gentoo.org/~ulm/pms/5/pms.html#x1-11900011.1.1
(In reply to comment #3) > (In reply to comment #2) > > (In reply to comment #1) > > > In EAPI 4, which python-exec is using, USE_EXPAND variables are added to > > > what PMS calls IUSE_EFFECTIVE. [1] and which Portage calls implicit IUSE. > > > That means python-exec for the sake of tests like 'use' command, or here (-) > > > has a use flag python_single_target_python2_7. This use flag is enabled in > > > the base profile. > > > > Does EAPI 5 fix this? And does this mean that in EAPI < 5 all of 'foo(-)' is > > useless on USE_EXPAND flags? > > > > Yes and yes. EAPI 5 supports profile iuse injection and so a different set > of rules applies as to what ends up in IUSE_EFFECTIVE [3]. The relevant > other bit is: > > "For EAPIs listed in table 5.2 as supporting profile defined IUSE injection, > the variables named in USE_EXPAND and USE_EXPAND_UNPREFIXED shall have their > profile-provided values reduced to contain only those values that are > present in IUSE_EFFECTIVE." Well, I always thought that bit is just about the contents of $PYTHON_SINGLE_TARGET var in the ebuild. Does the same rule apply to the use of 'python_single_target..(+)?' > Bumping python-exec to EAPI 5 would make it behave as you'd expect. Well, bumping a single ebuild is not really a solution to a problem in the eclass. I can probably make the relevant code EAPI5-conditional. But if applies to '(+)?' as well, it might mean that python-single-r1 is going to actually require EAPI 5+.
(+) suffers from the same issue, yes. Neither makes sense for USE_EXPAND in EAPI 4.
I've sent the patches to gentoo-python ml, and CC-ed you. (1) enforces EAPI=5 for python-single-r1 (where '(+)' is necessary to work), (2) re-enables the constraints in python-r1 for EAPI=5. I will commit them soon if nobody objects. I will also update my p-s-r1 packages to EAPI=5.
same issues with 2 more packages: $ sudo cave resolve world -c Done: 10330 steps These are the actions I will take, in order: r dev-libs/libpeas:0::gentoo 1.6.2-r1 to ::installed replacing 1.6.2-r1 -gjs -glade gtk python -seed (-test) PYTHON_SINGLE_TARGET: -python2_6 -python2_7* PYTHON_TARGETS: -python2_6 python2_7 build_options: symbols=split -optional_tests -trace work=tidyup Reasons: app-editors/gedit-3.6.2-r1:0::gentoo, media-gfx/eog-3.6.2:1::installed, media-sound/rhythmbox-2.97:0::installed, 2 more r app-editors/gedit:0::gentoo 3.6.2-r1 to ::installed replacing 3.6.2-r1 introspection python spell -zeitgeist (-test) PYTHON_SINGLE_TARGET: -python2_6 -python2_7* PYTHON_TARGETS: -python2_6 python2_7 build_options: symbols=split -optional_tests -trace work=tidyup Reasons: target (world::environment), gnome-base/gnome-core-apps-3.4.1:3.0::installed Total: 2 reinstalls python_single_target: python2_7: Build for Python 2.7 only Executing pretend actions: 1 of 2 * The following required use constraints are unmet for dev-libs/libpeas-1.6.2-r1: * || ( python_targets_python2_6 python_targets_python2_7 ) ^^ ( python_single_target_python2_6 python_single_target_python2_7 ) python_single_target_python2_6? ( python_targets_python2_6 ) python_single_target_python2_7? ( python_targets_python2_7 ) 2 of 2, 1 failed * The following required use constraints are unmet for app-editors/gedit-3.6.2-r1: * || ( python_targets_python2_6 python_targets_python2_7 ) ^^ ( python_single_target_python2_6 python_single_target_python2_7 ) python_single_target_python2_6? ( python_targets_python2_6 ) python_single_target_python2_7? ( python_targets_python2_7 )
(In reply to comment #7) > I've sent the patches to gentoo-python ml, and CC-ed you. (1) enforces > EAPI=5 for python-single-r1 (where '(+)' is necessary to work), (2) > re-enables the constraints in python-r1 for EAPI=5. > > I will commit them soon if nobody objects. I will also update my p-s-r1 > packages to EAPI=5. I meant using (+) is meaningless, there is a chance that (+)? still behaves as you want for both EAPI 4 and 5 but I can't tell without fully understanding the intentions / the workings of *-r1. Also as this use-deps are meant as a qa check using repoman might be a better option, I could imagine this looking rather confusing when running into it. Actually, a repoman check for (-) et.al in EAPI 4 in combination with USE_EXPAND wouldn't hurt either.
(In reply to comment #8) > same issues with 2 more packages: > > $ sudo cave resolve world -c > Done: 10330 steps > > These are the actions I will take, in order: > > r dev-libs/libpeas:0::gentoo 1.6.2-r1 to ::installed replacing 1.6.2-r1 > -gjs -glade gtk python -seed (-test) PYTHON_SINGLE_TARGET: -python2_6 > -python2_7* PYTHON_TARGETS: -python2_6 python2_7 build_options: > symbols=split -optional_tests -trace work=tidyup > Reasons: app-editors/gedit-3.6.2-r1:0::gentoo, > media-gfx/eog-3.6.2:1::installed, media-sound/rhythmbox-2.97:0::installed, 2 > more > r app-editors/gedit:0::gentoo 3.6.2-r1 to ::installed replacing 3.6.2-r1 > introspection python spell -zeitgeist (-test) PYTHON_SINGLE_TARGET: > -python2_6 -python2_7* PYTHON_TARGETS: -python2_6 python2_7 build_options: > symbols=split -optional_tests -trace work=tidyup > Reasons: target (world::environment), > gnome-base/gnome-core-apps-3.4.1:3.0::installed This looks like a different issue, Michał am I correct to assume a package should have either PYTHON_SINGLE_TARGET or PYTHON_TARGETS but never both?
(In reply to comment #9) > (In reply to comment #7) > > I've sent the patches to gentoo-python ml, and CC-ed you. (1) enforces > > EAPI=5 for python-single-r1 (where '(+)' is necessary to work), (2) > > re-enables the constraints in python-r1 for EAPI=5. > > > > I will commit them soon if nobody objects. I will also update my p-s-r1 > > packages to EAPI=5. > > I meant using (+) is meaningless, there is a chance that (+)? still behaves > as you want for both EAPI 4 and 5 but I can't tell without fully > understanding the intentions / the workings of *-r1. The idea there is that the dep looks like: python_targets_...?,python_single_targets...(+)? so that: a) if the dep target is multi-impl package (one with PYTHON_TARGETS only), the latter should succeed due to '(+)' and the former should check for matching impl, b) if the dep target is single-impl (one with PYTHON_TARGETS and PYTHON_SINGLE_TARGET), the check should succeed only if the same PYTHON_SINGLE_TARGET is chosen. The (a) checks relies on no PYTHON_SINGLE_TARGET flags being defined by the dep target, therefore all of them defaulting to (+). If Paludis makes any of them disabled, the dep will fail. Now, one more thing. Did it get to me correctly that I'd need to migrate all the dependent packages rather the one having the dep? That'd be ugly... > > Also as this use-deps are meant as a qa check using repoman might be a > better option, I could imagine this looking rather confusing when running > into it. > > Actually, a repoman check for (-) et.al in EAPI 4 in combination with > USE_EXPAND wouldn't hurt either.
(In reply to comment #11) [...] > The idea there is that the dep looks like: > > python_targets_...?,python_single_targets...(+)? > > so that: > > a) if the dep target is multi-impl package (one with PYTHON_TARGETS only), > the latter should succeed due to '(+)' and the former should check for > matching impl, > > b) if the dep target is single-impl (one with PYTHON_TARGETS and > PYTHON_SINGLE_TARGET), the check should succeed only if the same > PYTHON_SINGLE_TARGET is chosen. > > The (a) checks relies on no PYTHON_SINGLE_TARGET flags being defined by the > dep target, therefore all of them defaulting to (+). If Paludis makes any of > them disabled, the dep will fail. > Whether they are enabled or not is under the users control, I suspect Harris Landgarten still has */* PYTHON_SINGLE_TARGET: -* in his use.conf. > Now, one more thing. Did it get to me correctly that I'd need to migrate all > the dependent packages rather the one having the dep? That'd be ugly... > Yes, it's the packages you depend on that need to be EAPI bumped.
(In reply to comment #12) > (In reply to comment #11) > [...] > > The idea there is that the dep looks like: > > > > python_targets_...?,python_single_targets...(+)? > > > > so that: > > > > a) if the dep target is multi-impl package (one with PYTHON_TARGETS only), > > the latter should succeed due to '(+)' and the former should check for > > matching impl, > > > > b) if the dep target is single-impl (one with PYTHON_TARGETS and > > PYTHON_SINGLE_TARGET), the check should succeed only if the same > > PYTHON_SINGLE_TARGET is chosen. > > > > The (a) checks relies on no PYTHON_SINGLE_TARGET flags being defined by the > > dep target, therefore all of them defaulting to (+). If Paludis makes any of > > them disabled, the dep will fail. > > > > Whether they are enabled or not is under the users control, I suspect Harris > Landgarten still has */* PYTHON_SINGLE_TARGET: -* in his use.conf. Well, I can see how setting PYTHON_SINGLE_TARGET=python_other_than_default triggers a similar issue as well. > > Now, one more thing. Did it get to me correctly that I'd need to migrate all > > the dependent packages rather the one having the dep? That'd be ugly... > > > > Yes, it's the packages you depend on that need to be EAPI bumped. Well, that's bad as it means all python-r1 packages. The eclass requires EAPI=4 now so not *that kind of a big deal* but bumping the requirement like that is something harsh, esp. that some of the packages are stable already. An alternative is to make use of python-single-r1 harder, and use separate PYTHON_USEDEP and PYTHON_SINGLE_USEDEP. But that makes it hard when it comes to upgrading a dependency which has been fixed to support multiple implementations.
@ago, I'd like you ask your opinion as the master arch tester for python-r1 packages. The PMS and therefore Paludis requires all python-r1 packages to be bumped to EAPI=5 to make the USE-default-deps work correctly. Since there wasn't many changes from EAPI=4 to =5, I'd like to just bump them and raise the requirement in the eclass. This involves a few packages you have stabilized already. Would you mind me bumping those to EAPI=5? Would you like to do some kind of second arch testing run for them?
I do still have: */* PYTHON_SINGLE_TARGET: -* in use.conf Taking it out $ sudo cave resolve world -c Done: 7161 steps These are the actions I will take, in order: (nothing to do) I encountered the following errors: ! dev-python/python-exec Reasons: app-admin/eclean-kernel-0.3.2:0::installed, app-editors/gedit-3.6.2-r1:0::installed, dev-java/java-config-2.1.12-r1:2::installed, 9 more Unsuitable candidates: * dev-python/python-exec-0.2:0::installed * dev-python/python-exec-0.1:0::gentoo Did not meet dev-python/python-exec[python_targets_python2_5?,python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,-python_single_target_python2_5(-),-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)], use existing if same, installing to / from dev-libs/boost-1.52.0-r5:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing Did not meet dev-python/python-exec[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from app-admin/eclean-kernel-0.3.2:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing * dev-python/python-exec-0.1.1:0::gentoo Did not meet dev-python/python-exec[python_targets_python2_5?,python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,-python_single_target_python2_5(-),-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)], use existing if same, installing to / from dev-libs/boost-1.52.0-r5:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing Did not meet dev-python/python-exec[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from app-admin/eclean-kernel-0.3.2:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing * dev-python/python-exec-0.2:0::gentoo Did not meet dev-python/python-exec[python_targets_python2_5?,python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,-python_single_target_python2_5(-),-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)], use existing if same, installing to / from dev-libs/boost-1.52.0-r5:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing Did not meet dev-python/python-exec[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from app-admin/eclean-kernel-0.3.2:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing * dev-python/python-exec-9999:0::gentoo Masked by keyword Keywords Did not meet dev-python/python-exec[python_targets_python2_5?,python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,-python_single_target_python2_5(-),-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)], use existing if same, installing to / from dev-libs/boost-1.52.0-r5:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing Did not meet dev-python/python-exec[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from app-admin/eclean-kernel-0.3.2:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing ! dev-python/pymountboot Reasons: app-admin/eclean-kernel-0.3.2:0::installed Unsuitable candidates: * dev-python/pymountboot-0.2.2:0::installed * dev-python/pymountboot-0.2.1:0::gentoo Did not meet dev-python/pymountboot[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from app-admin/eclean-kernel-0.3.2:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing * dev-python/pymountboot-0.2.2:0::gentoo Did not meet dev-python/pymountboot[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from app-admin/eclean-kernel-0.3.2:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing * dev-python/pymountboot-9999:0::gentoo Masked by keyword Keywords Did not meet dev-python/pymountboot[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_python3_3?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from app-admin/eclean-kernel-0.3.2:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing ! dev-python/pygments Reasons: dev-python/docutils-0.9.1-r1:0::installed Unsuitable candidates: * dev-python/pygments-1.5-r1:0::installed * dev-python/pygments-1.4:0::gentoo Did not meet dev-python/pygments[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from dev-python/docutils-0.9.1-r1:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing * dev-python/pygments-1.5:0::gentoo Did not meet dev-python/pygments[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from dev-python/docutils-0.9.1-r1:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing * dev-python/pygments-1.5-r1:0::gentoo Did not meet dev-python/pygments[python_targets_python2_6?,python_targets_python2_7?,python_targets_python3_1?,python_targets_python3_2?,python_targets_pypy1_8?,python_targets_pypy1_9?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_1(-),-python_single_target_python3_2(-),-python_single_target_pypy1_8(-),-python_single_target_pypy1_9(-)], use existing if same, installing to / from dev-python/docutils-0.9.1-r1:0::installed Flag 'python_single_target_python2_7' disabled, assuming disabled if missing
bumping python-exec, pygments and pymountboot to EAPI=5 corrects the errors
(In reply to comment #16) > bumping python-exec, pygments and pymountboot to EAPI=5 corrects the errors I've bumped all the python-r1 packages to EAPI=5, hopefully not introducing any breakages.
All ebuilds are EAPI=5 now, eclasses require it so there's nothing more to do here, I think.