commit:     b65e1fc5fe723bd07bf034f6e08878fa3eb033cb
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 20 11:18:43 2015 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Jan 31 21:28:06 2015 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b65e1fc5

Support USE_EXPAND prefixes in package.use and relevant files

Support prefixing groups of USE_EXPAND flags with 'USE_EXPAND:' in user
configuration package.use and similar files. This provides a convenient
way of declaring specifying multiple USE_EXPAND flags and matches the
syntax supported by Paludis. Example:

  dev-util/netbeans NETBEANS_MODULES: php webcommon extide
  media-libs/mesa osmesa VIDEO_CARDS: intel nouveau

X-Gentoo-Bug: 471776
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=471776

---
 man/portage.5                                    |  6 ++++++
 pym/portage/package/ebuild/_config/UseManager.py | 24 +++++++++++++++++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/man/portage.5 b/man/portage.5
index 189561c..5ac3100 100644
--- a/man/portage.5
+++ b/man/portage.5
@@ -792,6 +792,10 @@ documentation for QT.  Easy as pie my friend!
 .nf
 \- comments begin with # (no inline comments)
 \- one DEPEND atom per line with space-delimited USE flags
+\- USE flags can be prefixed with USE_EXPAND name followed by a colon (:)
+and a space. In this case, all the names following it are treated
+as values for the USE_EXPAND. Note that if you need to remove earlier
+assignments or defaults, you need to explicitly specify '\-*'.
 .fi
 
 .I Example:
@@ -800,6 +804,8 @@ documentation for QT.  Easy as pie my friend!
 =x11\-libs/gtk+\-2* doc
 # disable mysql support for QT
 x11\-libs/qt \-mysql
+# set preferred video card for all packages
+*/* VIDEO_CARDS: \-* radeon
 .fi
 .TP
 .BR repos.conf

diff --git a/pym/portage/package/ebuild/_config/UseManager.py 
b/pym/portage/package/ebuild/_config/UseManager.py
index 3a4ec22..60d5f92 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/pym/portage/package/ebuild/_config/UseManager.py
@@ -202,11 +202,18 @@ class UseManager(object):
                useflag_re = _get_useflag_re(eapi)
                for k, v in file_dict.items():
                        useflags = []
+                       use_expand_prefix = ''
                        for prefixed_useflag in v:
+                               if extended_syntax and prefixed_useflag[-1] == 
":":
+                                       use_expand_prefix = 
prefixed_useflag[:-1].lower() + "_"
+                                       continue
+
                                if prefixed_useflag[:1] == "-":
-                                       useflag = prefixed_useflag[1:]
+                                       useflag = use_expand_prefix + 
prefixed_useflag[1:]
+                                       prefixed_useflag = "-" + useflag
                                else:
-                                       useflag = prefixed_useflag
+                                       useflag = use_expand_prefix + 
prefixed_useflag
+                                       prefixed_useflag = useflag
                                if useflag_re.match(useflag) is None:
                                        writemsg(_("--- Invalid USE flag for 
'%s' in '%s': '%s'\n") %
                                                (k, file_name, 
prefixed_useflag), noiselevel=-1)
@@ -227,7 +234,18 @@ class UseManager(object):
                        pusedict = grabdict_package(
                                os.path.join(location, file_name), recursive=1, 
allow_wildcard=True, allow_repo=True, verify_eapi=False)
                        for k, v in pusedict.items():
-                               ret.setdefault(k.cp, {})[k] = tuple(v)
+                               l = []
+                               use_expand_prefix = ''
+                               for flag in v:
+                                       if flag[-1] == ":":
+                                               use_expand_prefix = 
flag[:-1].lower() + "_"
+                                               continue
+                                       if flag[0] == "-":
+                                               nv = "-" + use_expand_prefix + 
flag[1:]
+                                       else:
+                                               nv = use_expand_prefix + flag
+                                       l.append(nv)
+                               ret.setdefault(k.cp, {})[k] = tuple(l)
 
                return ret
 

Reply via email to