On Wednesday 28 September 2005 10:23, Jason Stubbs wrote:
> On Wednesday 28 September 2005 00:35, Donnie Berkholz wrote:
> > What I have done in my ebuilds using USE_EXPAND is add extra IUSE-like
> > variables, for example:
> >
> > IUSE_VIDEO_CARDS="radeon sis mga"
> > IUSE_INPUT_DEVICES="synaptics wacom"
> >
> > for `use video_cards_sis` etc..
> >
> > This would allow for possible QA checks. Potentially, portage could look
> > through and display things at --verbose like:
> >
> > [ebuild  N    ] x11-base/x11-drm-20050807 +dga -nls VIDEO_CARDS="+sis
> > +mga -radeon" 538 kB [2]
>
> This output is exactly what my patch gives, but it currently works by
> inspecting IUSE. However, it should be possible to indirectly pull the
> information from the above flags instead. Adding support for a
> USE_EXPAND_HIDDEN var should cover USERLAND and friends as well (although
> those would still need to be defined in IUSE_USERLAND="...")

<warcraft voice>Job's done!</warcraft voice>
diff -uNr 2.0-original/bin/ebuild.sh 2.0/bin/ebuild.sh
--- 2.0-original/bin/ebuild.sh	2005-09-26 11:48:16.000000000 +0900
+++ 2.0/bin/ebuild.sh	2005-09-28 11:32:47.000000000 +0900
@@ -129,7 +129,7 @@
 	local x
 	
 	# Make sure we have this USE flag in IUSE
-	if ! hasq "${u}" ${IUSE} ${E_IUSE} && ! hasq "${u}" ${PORTAGE_ARCHLIST} selinux; then
+	if ! hasq "${u}" ${IUSE} ${E_IUSE} ${IUSE_EXPAND} && ! hasq "${u}" ${PORTAGE_ARCHLIST} selinux; then
 		echo "QA Notice: USE Flag '${u}' not in IUSE for ${CATEGORY}/${PF}" >&2
 	fi
 
@@ -1870,6 +1870,17 @@
 		fi
 		;;
 	depend)
+		# Create IUSE_EXPAND from child variables
+		for EXPAND_VAR in $USE_EXPAND; do
+			EXPAND_NAME="IUSE_${EXPAND_VAR}"
+			EXPAND_VAL="${!EXPAND_NAME}"
+			[ -z "${EXPAND_VAL}" ] && continue
+			LOWER_VAR="`echo ${EXPAND_VAR} | awk '{print tolower($0)}'`"
+			for VAL in ${EXPAND_VAL}; do
+				IUSE_EXPAND="${IUSE_EXPAND} ${LOWER_VAR}_${VAL}"
+			done
+		done
+
 		export SANDBOX_ON="0"
 		set -f
 
@@ -1899,13 +1910,13 @@
 		echo `echo "$PDEPEND"`     >> $dbkey
 		echo `echo "$PROVIDE"`     >> $dbkey
 		echo `echo "${EAPI:-0}"`   >> $dbkey
+		echo `echo "${IUSE_EXPAND}"` >> $dbkey
 		echo `echo "$UNUSED_01"`   >> $dbkey
 		echo `echo "$UNUSED_02"`   >> $dbkey
 		echo `echo "$UNUSED_03"`   >> $dbkey
 		echo `echo "$UNUSED_04"`   >> $dbkey
 		echo `echo "$UNUSED_05"`   >> $dbkey
 		echo `echo "$UNUSED_06"`   >> $dbkey
-		echo `echo "$UNUSED_07"`   >> $dbkey
 		set +f
 		#make sure it is writable by our group:
 		exit 0
diff -uNr 2.0-original/bin/emerge 2.0/bin/emerge
--- 2.0-original/bin/emerge	2005-09-27 13:16:09.000000000 +0900
+++ 2.0/bin/emerge	2005-09-28 12:09:49.000000000 +0900
@@ -1466,6 +1466,31 @@
 
 		if "--verbose" in myopts:
 			overlays = string.split(portage.settings['PORTDIR_OVERLAY'])
+			use_expand = portage.settings["USE_EXPAND"].lower().split()
+			use_expand_hidden = portage.settings["USE_EXPAND_HIDDEN"].lower().split()
+			for exp in use_expand[:]:
+				if exp in use_expand_hidden:
+					use_expand.remove(exp)
+
+			def create_use_string(iuse, cur_use, old_use, masked_use):
+				usestr=""
+				for flag in iuse:
+					usechange=""
+					if old_use:
+						if (flag in old_use and flag not in cur_use) or (flag not in old_use and flag in cur_use):
+							usechange="*"
+
+					if flag in cur_use:
+						if usechange == "*":
+							substr = green("+"+flag)
+						else:
+							substr = red("+"+flag)
+					elif flag in masked_use:
+						substr = blue("(-"+flag+")")
+					else:
+						substr = blue("-"+flag)
+					usestr += substr + usechange + " "
+				return usestr
 
 		if "--tree" in myopts:
 			mylist.reverse()
@@ -1558,18 +1583,29 @@
 					try:
 						if x[0] == "binary":
 							iuse_split = string.split(portage.db["/"]["bintree"].dbapi.aux_get(x[2],["IUSE"])[0])
+							iuse_expand_split = portage.db["/"]["bintree"].dbapi.aux_get(x[2],["IUSE_EXPAND"])[0].split()
 						elif x[0] == "ebuild":
 							iuse_split = string.split(portage.portdb.aux_get(x[2],["IUSE"])[0])
+							iuse_expand_split = portage.portdb.aux_get(x[2],["IUSE_EXPAND"])[0].split()
 						else:
 							iuse_split = []
+							iuse_expand_split = []
 					except SystemExit, e:
 						raise # Needed else can't exit
 					except:
 						portage.writemsg("!!! Error getting IUSE (report this to bugs.gentoo.org)\n")
 						portage.writemsg("!!! %s\n" % x)
 						iuse_split = []
+						iuse_expand_split = []
+
+					iuse_split = portage.unique_array(iuse_split)
 					iuse_split.sort()
-					old_use=None
+					iuse_expand_split = portage.unique_array(iuse_expand_split)
+					iuse_expand_split.sort()
+
+					cur_use = self.applied_useflags[x[2]]
+
+					old_use = []
 					if myoldbest:
 						pkg=myoldbest
 					else:
@@ -1581,24 +1617,25 @@
 							raise # Needed else can't exit
 						except:
 							pass
-					iuse=""
-					now_use=self.applied_useflags[x[2]]
-					for ebuild_iuse in portage_util.unique_array(iuse_split):
-						usechange=""
-						if old_use:
-							if (old_use.count(ebuild_iuse) and not now_use.count(ebuild_iuse)) or (not old_use.count(ebuild_iuse) and now_use.count(ebuild_iuse)):
-								usechange="*"
-
-						if ebuild_iuse in self.applied_useflags[x[2]]:
-							if usechange == "*":
-								iuse=green("+"+ebuild_iuse)
-							else:
-								iuse=red("+"+ebuild_iuse)
-						elif ebuild_iuse in portage.settings.usemask:
-							iuse=blue("(-"+ebuild_iuse+")")
-						else:
-							iuse=blue("-"+ebuild_iuse)
-						verboseadd+=iuse+usechange+" "
+
+					verboseadd += create_use_string(iuse_split, cur_use, old_use, portage.settings.usemask)
+
+					for expvar in use_expand:
+						expiuse = []
+						expcur = []
+						expold = []
+						expmask = []
+						for flag in iuse_expand_split:
+							if flag.startswith(expvar+"_"):
+								expiuse.append(flag[len(expvar)+1:])
+								if flag in cur_use:
+									expcur.append(expiuse[-1])
+								if flag in old_use:
+									expold.append(expiuse[-1])
+								if flag in portage.settings.usemask:
+									expmask.append(expiuse[-1])
+						if expiuse:
+							verboseadd += expvar.upper()+'="'+create_use_string(expiuse,expcur,expold,expmask).strip()+'" '
 
 					# size verbose
 					mysize=0
diff -uNr 2.0-original/pym/portage.py 2.0/pym/portage.py
--- 2.0-original/pym/portage.py	2005-09-26 11:48:15.000000000 +0900
+++ 2.0/pym/portage.py	2005-09-28 12:06:36.000000000 +0900
@@ -1392,7 +1392,7 @@
 				if self.has_key(var):
 					for x in string.split(self[var]):
 						mystr = string.lower(var)+"_"+x
-						if mystr not in usesplit:
+						if mystr not in usesplit and mystr not in self.usemask:
 							usesplit.append(mystr)
 
 		# Pre-Pend ARCH variable to USE settings so '-*' in env doesn't kill arch.
@@ -5112,8 +5112,8 @@
 	'RESTRICT',  'HOMEPAGE',  'LICENSE',   'DESCRIPTION',
 	'KEYWORDS',  'INHERITED', 'IUSE',      'CDEPEND',
 	'PDEPEND',   'PROVIDE', 'EAPI',
-	'UNUSED_01', 'UNUSED_02', 'UNUSED_03', 'UNUSED_04',
-	'UNUSED_05', 'UNUSED_06', 'UNUSED_07',
+	'IUSE_EXPAND', 'UNUSED_01', 'UNUSED_02', 'UNUSED_03',
+	'UNUSED_04', 'UNUSED_05', 'UNUSED_06',
 	]
 auxdbkeylen=len(auxdbkeys)
 

Reply via email to