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..7e235ef 100644 --- a/pym/portage/package/ebuild/_config/UseManager.py +++ b/pym/portage/package/ebuild/_config/UseManager.py @@ -145,7 +145,7 @@ class UseManager(object): useflag = prefixed_useflag[1:] else: useflag = prefixed_useflag - if useflag_re.match(useflag) is None: + if useflag_re.match(prefixed_useflag) is None: writemsg(_("--- Invalid USE flag in '%s': '%s'\n") % (file_name, prefixed_useflag), noiselevel=-1) else: @@ -202,12 +202,19 @@ 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:] + prefixed_useflag = "-" + use_expand_prefix + useflag else: + prefixed_useflag = use_expand_prefix + prefixed_useflag useflag = prefixed_useflag - if useflag_re.match(useflag) is None: + if useflag_re.match(prefixed_useflag) is None: writemsg(_("--- Invalid USE flag for '%s' in '%s': '%s'\n") % (k, file_name, prefixed_useflag), noiselevel=-1) else: @@ -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 -- 2.2.2
