summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-10-14 04:07:49 +0000
committerZac Medico <zmedico@gentoo.org>2006-10-14 04:07:49 +0000
commite7ac068da63fc6764fe097714aeea480992bb168 (patch)
treeda6165a2dd422c0a7d2e2f759bf60569cf516406 /bin
parent4c37e971066766d8dc4a294e20b56cca33a23cb4 (diff)
downloadportage-e7ac068da63fc6764fe097714aeea480992bb168.tar.gz
portage-e7ac068da63fc6764fe097714aeea480992bb168.tar.bz2
portage-e7ac068da63fc6764fe097714aeea480992bb168.zip
Implement per-package default USE flags at the ebuild and profile levels for bug #61732.
svn path=/main/trunk/; revision=4679
Diffstat (limited to 'bin')
-rwxr-xr-xbin/ebuild.sh11
-rwxr-xr-xbin/emerge37
-rwxr-xr-xbin/repoman17
3 files changed, 52 insertions, 13 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index e3935e593..48a457a8f 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -1514,6 +1514,17 @@ PDEPEND="$PDEPEND $E_PDEPEND"
unset E_IUSE E_DEPEND E_RDEPEND E_PDEPEND
if [ "${EBUILD_PHASE}" != "depend" ]; then
+ # Make IUSE defaults backward compatible with all the old shell code.
+ iuse_temp=""
+ for x in ${IUSE} ; do
+ if [[ ${x} == +* ]]; then
+ iuse_temp="${iuse_temp} ${x:1}"
+ else
+ iuse_temp="${iuse_temp} ${x}"
+ fi
+ done
+ export IUSE=${iuse_temp}
+ unset iuse_temp
# Lock the dbkey variables after the global phase
declare -r DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE DESCRIPTION
declare -r KEYWORDS INHERITED IUSE PDEPEND PROVIDE
diff --git a/bin/emerge b/bin/emerge
index cd03a3df7..e167ba7c1 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -622,6 +622,13 @@ def genericdict(mylist):
mynewdict[portage.dep_getkey(x)]=x
return mynewdict
+def filter_iuse_defaults(iuse):
+ for flag in iuse:
+ if flag.startswith("+"):
+ yield flag[1:]
+ else:
+ yield flag
+
class depgraph:
pkg_tree_map = {
@@ -737,7 +744,7 @@ class depgraph:
mydbapi = self.trees[myroot][self.pkg_tree_map[mytype]].dbapi
if myuse is None:
- self.pkgsettings[myroot].setcpv(mykey)
+ self.pkgsettings[myroot].setcpv(mykey, mydb=portdb)
myuse = self.pkgsettings[myroot]["USE"].split()
self.useFlags[myroot][mykey] = myuse
@@ -755,15 +762,17 @@ class depgraph:
--newuse is specified, we need to merge the package. """
if merging==0 and "--newuse" in self.myopts and \
vardbapi.cpv_exists(mykey):
- pkgsettings.setcpv(mykey)
+ pkgsettings.setcpv(mykey, mydb=portdb)
forced_flags = set()
forced_flags.update(pkgsettings.useforce)
forced_flags.update(pkgsettings.puseforce)
forced_flags.update(pkgsettings.usemask)
forced_flags.update(pkgsettings.pusemask)
old_use = vardbapi.aux_get(mykey, ["USE"])[0].split()
- iuses = set(mydbapi.aux_get(mykey, ["IUSE"])[0].split())
- old_iuse = set(vardbapi.aux_get(mykey, ["IUSE"])[0].split())
+ iuses = set(filter_iuse_defaults(
+ mydbapi.aux_get(mykey, ["IUSE"])[0].split()))
+ old_iuse = set(filter_iuse_defaults(
+ vardbapi.aux_get(mykey, ["IUSE"])[0].split()))
if iuses.symmetric_difference(
old_iuse).difference(forced_flags):
merging = 1
@@ -1158,9 +1167,10 @@ class depgraph:
myeb_pkg = portage.best(myeb_pkg_matches)
if myeb_pkg and "--newuse" in self.myopts:
- iuses = set(bindb.aux_get(myeb_pkg, ["IUSE"])[0].split())
+ iuses = set(filter_iuse_defaults(
+ bindb.aux_get(myeb_pkg, ["IUSE"])[0].split()))
old_use = bindb.aux_get(myeb_pkg, ["USE"])[0].split()
- pkgsettings.setcpv(myeb_pkg)
+ pkgsettings.setcpv(myeb_pkg, mydb=portdb)
now_use = pkgsettings["USE"].split()
forced_flags = set()
forced_flags.update(pkgsettings.useforce)
@@ -1169,7 +1179,8 @@ class depgraph:
forced_flags.update(pkgsettings.pusemask)
cur_iuse = iuses
if "--usepkgonly" not in self.myopts and myeb:
- cur_iuse = set(portdb.aux_get(myeb, ["IUSE"])[0].split())
+ cur_iuse = set(filter_iuse_defaults(
+ portdb.aux_get(myeb, ["IUSE"])[0].split()))
if iuses.symmetric_difference(
cur_iuse).difference(forced_flags):
myeb_pkg = None
@@ -1613,7 +1624,7 @@ class depgraph:
bindb = self.trees[myroot]["bintree"].dbapi
vartree = self.trees[myroot]["vartree"]
pkgsettings = self.pkgsettings[myroot]
- pkgsettings.setcpv(pkg_key)
+ pkgsettings.setcpv(pkg_key, mydb=portdb)
if pkg_key not in self.useFlags[myroot]:
if "binary" == pkg_type:
self.useFlags[myroot][pkg_key] = bindb.aux_get(
@@ -1683,7 +1694,8 @@ class depgraph:
if pkg_key in self.useFlags[myroot]:
# USE flag display
- cur_iuse = mydbapi.aux_get(pkg_key, ["IUSE"])[0].split()
+ cur_iuse = list(filter_iuse_defaults(
+ mydbapi.aux_get(pkg_key, ["IUSE"])[0].split()))
forced_flags = set()
forced_flags.update(pkgsettings.useforce)
@@ -1704,7 +1716,8 @@ class depgraph:
old_iuse, old_use = \
self.trees[x[1]]["vartree"].dbapi.aux_get(
pkg, ["IUSE", "USE"])
- old_iuse = portage.unique_array(old_iuse.split())
+ old_iuse = list(set(
+ filter_iuse_defaults(old_iuse.split())))
old_iuse.sort()
old_use = old_use.split()
is_new = False
@@ -3382,6 +3395,7 @@ def action_info(settings, trees, myopts, myfiles):
# passed on the command line
mypkgs = []
vardb = trees[settings["ROOT"]]["vartree"].dbapi
+ portdb = trees[settings["ROOT"]]["porttree"].dbapi
for x in myfiles:
mypkgs.extend(vardb.match(x))
@@ -3413,9 +3427,10 @@ def action_info(settings, trees, myopts, myfiles):
# so set diff_found so we know to print
if valuesmap[myvar] != global_vals[myvar]:
diff_values[myvar] = valuesmap[myvar]
+ valuesmap["IUSE"] = set(filter_iuse_defaults(valuesmap["IUSE"]))
valuesmap["USE"] = valuesmap["USE"].intersection(valuesmap["IUSE"])
pkgsettings.reset()
- pkgsettings.setcpv(pkg)
+ pkgsettings.setcpv(pkg, mydb=portdb)
if valuesmap["IUSE"].intersection(pkgsettings["USE"].split()) != \
valuesmap["USE"]:
diff_values["USE"] = valuesmap["USE"]
diff --git a/bin/repoman b/bin/repoman
index b8ab7312f..7b0a0fe67 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -1059,7 +1059,12 @@ for x in scanlist:
badlicsyntax = False
badprovsyntax = False
catpkg = catdir+"/"+y
- myiuse = myaux["IUSE"].split() + repoman_settings.archlist()
+ myiuse = set(repoman_settings.archlist())
+ for myflag in myaux["IUSE"].split():
+ if myflag.startswith("+"):
+ myflag = myflag[1:]
+ myiuse.add(myflag)
+
type_list, badsyntax = [], []
for mytype in ("DEPEND", "RDEPEND", "PDEPEND", "LICENSE", "PROVIDE"):
mydepstr = myaux[mytype]
@@ -1214,7 +1219,13 @@ for x in scanlist:
stats["ebuild.nesteddie"]=stats["ebuild.nesteddie"]+1
fails["ebuild.nesteddie"].append(x+"/"+y+".ebuild")
# uselist checks - global
- myuse = myaux["IUSE"].split()
+ myuse = []
+ default_use = []
+ for myflag in myaux["IUSE"].split():
+ if myflag.startswith("+"):
+ default_use.append(myflag)
+ myflag = myflag[1:]
+ myuse.append(myflag)
for mypos in range(len(myuse)-1,-1,-1):
if myuse[mypos] and (myuse[mypos] in uselist):
del myuse[mypos]
@@ -1224,6 +1235,8 @@ for x in scanlist:
for mypos in range(len(myuse)-1,-1,-1):
if myuse[mypos] and (myuse[mypos] in luselist[mykey]):
del myuse[mypos]
+ if default_use and myaux["EAPI"] == "0":
+ myuse += default_use
for mypos in range(len(myuse)):
stats["IUSE.invalid"]=stats["IUSE.invalid"]+1
fails["IUSE.invalid"].append(x+"/"+y+".ebuild: %s" % myuse[mypos])