From e7ac068da63fc6764fe097714aeea480992bb168 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 14 Oct 2006 04:07:49 +0000 Subject: Implement per-package default USE flags at the ebuild and profile levels for bug #61732. svn path=/main/trunk/; revision=4679 --- bin/ebuild.sh | 11 +++++++++++ bin/emerge | 37 ++++++++++++++++++++++++++----------- bin/repoman | 17 +++++++++++++++-- 3 files changed, 52 insertions(+), 13 deletions(-) (limited to 'bin') 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]) -- cgit v1.2.3-1-g7c22