aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRolf Eike Beer <eike@sf-mail.de>2017-12-16 10:57:21 +0100
committerkensington <kensington@gentoo.org>2017-12-21 20:10:26 +1100
commit832e49d5f845d2c0acb0fc52a3b225d0ffb833e4 (patch)
tree062a274399df5152ccd41fa08536e6a6d4b307a4
parenttemplates: Match p.g.o syntax (diff)
downloadtatt-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.py8
-rw-r--r--tatt/usecombis.py19
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]