diff options
author | Rolf Eike Beer <eike@sf-mail.de> | 2017-12-16 10:57:21 +0100 |
---|---|---|
committer | kensington <kensington@gentoo.org> | 2017-12-21 20:10:26 +1100 |
commit | 832e49d5f845d2c0acb0fc52a3b225d0ffb833e4 (patch) | |
tree | 062a274399df5152ccd41fa08536e6a6d4b307a4 | |
parent | templates: Match p.g.o syntax (diff) | |
download | tatt-832e49d5f845d2c0acb0fc52a3b225d0ffb833e4.tar.gz tatt-832e49d5f845d2c0acb0fc52a3b225d0ffb833e4.tar.bz2 tatt-832e49d5f845d2c0acb0fc52a3b225d0ffb833e4.zip |
use portage API to entirely avoid testing invalid use-flag combinations
-rw-r--r-- | tatt/scriptwriter.py | 8 | ||||
-rw-r--r-- | tatt/usecombis.py | 19 |
2 files changed, 19 insertions, 8 deletions
diff --git a/tatt/scriptwriter.py b/tatt/scriptwriter.py index fd2135e..80fc0b5 100644 --- a/tatt/scriptwriter.py +++ b/tatt/scriptwriter.py @@ -2,6 +2,7 @@ import random import os +import portage import sys from .usecombis import findUseFlagCombis @@ -27,13 +28,13 @@ def scriptTemplate(jobname, config, filename): snippet = snippet.replace("@@REPORTFILE@@", reportname) return snippet -def useCombiTestString(jobname, pack, config): +def useCombiTestString(jobname, pack, config, port): """ Build with diffent useflag combis """ usesnippet = scriptTemplate(jobname, config, "use-snippet") s = "" # This will contain the resulting string usesnippet = usesnippet.replace("@@CPV@@", pack.packageString() ) - usecombis = findUseFlagCombis (pack, config) + usecombis = findUseFlagCombis (pack, config, port) for uc in usecombis: localsnippet = usesnippet.replace("@@USE@@", uc) localsnippet = localsnippet.replace("@@FEATURES@@", "") @@ -55,9 +56,10 @@ def writeusecombiscript(job, config): print("WARNING: Will overwrite " + outfilename) outfile = open(outfilename, 'w') outfile.write(useheader) + port = portage.db[portage.root]["porttree"].dbapi for p in job.packageList: outfile.write("# Code for " + p.packageCatName() + "\n") - outfile.write(useCombiTestString(job.name, p, config)) + outfile.write(useCombiTestString(job.name, p, config, port)) outfile.write("echo >> " + reportname + "\n") # Note: fchmod needs the filedescriptor which is an internal # integer retrieved by fileno(). diff --git a/tatt/usecombis.py b/tatt/usecombis.py index 4ae8642..be2f022 100644 --- a/tatt/usecombis.py +++ b/tatt/usecombis.py @@ -3,12 +3,16 @@ import random import re import math +from portage.dep import check_required_use from subprocess import * from .tool import unique +def all_valid_flags(flag): + return True + ## Useflag Combis ## -def findUseFlagCombis (package, config): +def findUseFlagCombis (package, config, port): """ Generate combinations of use flags to test The output will be a list each containing a ready to use USE=... string @@ -40,16 +44,21 @@ def findUseFlagCombis (package, config): swlist = list(range(2**len(uselist))) usecombis=[] + ruse = " ".join(port.aux_get(package.packageString()[1:], ["REQUIRED_USE"])) for sw in swlist: mod = [] + act = [] # check_required_use doesn't like -flag entries for pos in range(len(uselist)): if ((2**pos) & sw): mod.append("") + act.append(uselist[pos]) else: mod.append("-") - usecombis.append(list(zip(mod, uselist))) - - usecombis = [["".join(uf) for uf in combi] for combi in usecombis] + if bool(check_required_use(ruse, " ".join(act), all_valid_flags)): + uc = " ".join(["".join(uf) for uf in list(zip(mod, uselist))]) + usecombis.append(uc) + else: + print(" " + package.packageString() + ": ignoring invalid USE flag combination", act) # Merge everything to a USE="" string - return ["USE=\'"+" ".join(uc)+ "\'" for uc in usecombis] + return ["USE=\'" + uc + "\'" for uc in usecombis] |