summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Luther <SebastianLuther@gmx.de>2010-08-11 14:00:29 +0200
committerZac Medico <zmedico@gentoo.org>2010-08-11 11:10:28 -0700
commitaf52e04dd1709b5b4d48fdee90b2d04f67617234 (patch)
tree1f72e1aca944f52759b2ac350e1c7f053f3d2622
parentcc03d96314dc108964c9c1b0431a0466f20ad147 (diff)
downloadportage-af52e04dd1709b5b4d48fdee90b2d04f67617234.tar.gz
portage-af52e04dd1709b5b4d48fdee90b2d04f67617234.tar.bz2
portage-af52e04dd1709b5b4d48fdee90b2d04f67617234.zip
Make sure we don't allow REQUIRED_USE in EAPIs that don't support it
-rwxr-xr-xbin/ebuild.sh5
-rw-r--r--pym/_emerge/Package.py6
-rw-r--r--pym/portage/tests/resolver/ResolverPlayground.py6
-rw-r--r--pym/portage/tests/resolver/test_eapi.py13
4 files changed, 24 insertions, 6 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 014229446..ee565b1f7 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -2164,11 +2164,6 @@ ebuild_main() {
#the extra $(echo) commands remove newlines
[ -n "${EAPI}" ] || EAPI=0
- case "$EAPI" in
- 0|1|2|3)
- unset REQUIRED_USE
- ;;
- esac
if [ -n "${dbkey}" ] ; then
> "${dbkey}"
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index 992851bb1..90a5d03eb 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -8,7 +8,7 @@ import portage
from portage.cache.mappings import slot_dict_class
from portage.dep import isvalidatom, use_reduce, \
paren_enclose, _slot_re
-from portage.eapi import eapi_has_iuse_defaults
+from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use
from _emerge.Task import Task
if sys.hexversion >= 0x3000000:
@@ -52,6 +52,10 @@ class Package(Task):
not eapi_has_iuse_defaults(self.metadata["EAPI"]):
self._invalid_metadata('IUSE.invalid',
"IUSE contains defaults, but EAPI doesn't allow them")
+ if self.metadata["REQUIRED_USE"] and \
+ not eapi_has_required_use(self.metadata["EAPI"]):
+ self._invalid_metadata('REQUIRED_USE.invalid',
+ "REQUIRED_USE set, but EAPI doesn't allow it")
self.slot_atom = portage.dep.Atom("%s:%s" % (self.cp, slot))
self.category, self.pf = portage.catsplit(self.cpv)
self.cpv_split = portage.catpkgsplit(self.cpv)
diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/pym/portage/tests/resolver/ResolverPlayground.py
index 5b82b9a6c..d9dcdc2c8 100644
--- a/pym/portage/tests/resolver/ResolverPlayground.py
+++ b/pym/portage/tests/resolver/ResolverPlayground.py
@@ -66,6 +66,7 @@ class ResolverPlayground(object):
depend = metadata.get("DEPEND", "")
rdepend = metadata.get("RDEPEND", None)
pdepend = metadata.get("PDEPEND", None)
+ required_use = metadata.get("REQUIRED_USE", None)
f = open(ebuild_path, "w")
f.write('EAPI="' + str(eapi) + '"\n')
@@ -77,6 +78,8 @@ class ResolverPlayground(object):
f.write('RDEPEND="' + str(rdepend) + '"\n')
if rdepend is not None:
f.write('PDEPEND="' + str(pdepend) + '"\n')
+ if required_use is not None:
+ f.write('REQUIRED_USE="' + str(required_use) + '"\n')
f.close()
def _create_ebuild_manifests(self, ebuilds):
@@ -110,6 +113,7 @@ class ResolverPlayground(object):
depend = metadata.get("DEPEND", "")
rdepend = metadata.get("RDEPEND", None)
pdepend = metadata.get("PDEPEND", None)
+ required_use = metadata.get("REQUIRED_USE", None)
def write_key(key, value):
f = open(os.path.join(vdb_pkg_dir, key), "w")
@@ -126,6 +130,8 @@ class ResolverPlayground(object):
write_key("RDEPEND", rdepend)
if rdepend is not None:
write_key("PDEPEND", pdepend)
+ if required_use is not None:
+ write_key("REQUIRED_USE", required_use)
def _create_profile(self, ebuilds, installed, profile):
#Create $PORTDIR/profiles/categories
diff --git a/pym/portage/tests/resolver/test_eapi.py b/pym/portage/tests/resolver/test_eapi.py
index dec1008fb..65dd0108b 100644
--- a/pym/portage/tests/resolver/test_eapi.py
+++ b/pym/portage/tests/resolver/test_eapi.py
@@ -49,6 +49,13 @@ class EAPITestCase(TestCase):
#~ "dev-libs/A-6.2": { "EAPI": 2, "DEPEND": "dev-libs/B[bar(+)]" },
#~ "dev-libs/A-6.3": { "EAPI": 3, "DEPEND": "dev-libs/B[bar(+)]" },
#~ "dev-libs/A-6.4": { "EAPI": 4, "DEPEND": "dev-libs/B[bar(+)]" },
+
+ #EAPI-4: REQUIRED_USE
+ "dev-libs/A-7.0": { "EAPI": 0, "IUSE": "foo bar", "REQUIRED_USE": "|| ( foo bar )" },
+ "dev-libs/A-7.1": { "EAPI": 1, "IUSE": "foo +bar", "REQUIRED_USE": "|| ( foo bar )" },
+ "dev-libs/A-7.2": { "EAPI": 2, "IUSE": "foo +bar", "REQUIRED_USE": "|| ( foo bar )" },
+ "dev-libs/A-7.3": { "EAPI": 3, "IUSE": "foo +bar", "REQUIRED_USE": "|| ( foo bar )" },
+ #~ "dev-libs/A-7.4": { "EAPI": 4, "IUSE": "foo +bar", "REQUIRED_USE": "|| ( foo bar )" },
"dev-libs/B-1": {"EAPI": 1, "IUSE": "+foo"},
}
@@ -89,6 +96,12 @@ class EAPITestCase(TestCase):
#~ ResolverPlaygroundTestCase(["=dev-libs/A-6.2"], success = False),
#~ ResolverPlaygroundTestCase(["=dev-libs/A-6.3"], success = False),
#~ ResolverPlaygroundTestCase(["=dev-libs/A-6.4"], success = True, mergelist = ["dev-libs/B-1", "dev-libs/A-6.4"]),
+
+ ResolverPlaygroundTestCase(["=dev-libs/A-7.0"], success = False),
+ ResolverPlaygroundTestCase(["=dev-libs/A-7.1"], success = False),
+ ResolverPlaygroundTestCase(["=dev-libs/A-7.2"], success = False),
+ ResolverPlaygroundTestCase(["=dev-libs/A-7.3"], success = False),
+ #~ ResolverPlaygroundTestCase(["=dev-libs/A-7.4"], success = True, mergelist = ["dev-libs/A-7.4"]),
)
playground = ResolverPlayground(ebuilds=ebuilds)