root: external find can now determine variants (#25427)

This commit is contained in:
Valentin Volkl 2021-08-16 09:18:48 +02:00 committed by GitHub
parent 0b7aff2ad7
commit c02539bd29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -326,6 +326,79 @@ def determine_version(cls, exe):
# into the format used in this recipe (6.22.06)
return output.strip().replace('/', '.')
@classmethod
def determine_variants(cls, exes, version_str):
v = [] # list of determined variants
# there is a fairly direct mapping between build options ( which
# root-config helpfully outputs) and variants
output = Executable(exes[0])('--features', output=str, error=str)
f = set(output.strip().split()) # features as reported by root-config
# only multivalued variant: cxxstd
if "cxx11" in f:
v.append("cxxstd=11")
elif "cxx14" in f:
v.append("cxxstd=14")
elif "cxx17" in f:
v.append("cxxstd=17")
# helper function: check if featurename is in features, and if it is,
# append variantname to variants. featurename may be a list/tuple, in
# which case the variant is only added if all of them are present
def _add_variant(variants, features, featurename, variantname):
if isinstance(featurename, str):
if featurename in features:
variants.append('%s' % variantname)
else:
variants.append('~%s' % variantname[1:])
else:
if set(featurename).issubset(features):
variants.append('%s' % variantname)
else:
variants.append('~%s' % variantname[1:])
_add_variant(v, f, 'cocoa', '+aqua')
_add_variant(v, f, 'davix', '+davix')
_add_variant(v, f, 'dcache', '+dcache')
_add_variant(v, f, 'fftw3', '+fftw')
_add_variant(v, f, 'fitsio', '+fits')
_add_variant(v, f, ('ftgl', 'opengl'), '+opengl')
_add_variant(v, f, 'gdml', '+gdml')
_add_variant(v, f, 'mathmore', '+math')
_add_variant(v, f, 'gviz', '+graphviz')
_add_variant(v, f, 'http', '+http')
_add_variant(v, f, ('imt', 'tbb'), '+tbb')
_add_variant(v, f, 'jemalloc', '+jemalloc')
_add_variant(v, f, 'memstat', '+memstat')
_add_variant(v, f, ('minuit', 'minuit2'), '+minuit')
_add_variant(v, f, 'mlp', '+mlp')
_add_variant(v, f, 'mysql', '+mysql')
_add_variant(v, f, 'oracle', '+oracle')
_add_variant(v, f, 'pgsql', '+postgres')
_add_variant(v, f, 'pythia6', '+pythia6')
_add_variant(v, f, 'pythia8', '+pythia8')
_add_variant(v, f, 'pyroot', '+python')
_add_variant(v, f, ('qt', 'qtgsi'), '+qt4')
_add_variant(v, f, 'r', '+r')
_add_variant(v, f, 'roofit', '+roofit')
_add_variant(v, f, ('root7', 'webui'), '+root7')
_add_variant(v, f, 'rpath', '+rpath')
_add_variant(v, f, 'shadowpw', '+shadow')
_add_variant(v, f, 'spectrum', '+spectrum')
_add_variant(v, f, 'sqlite', '+sqlite')
_add_variant(v, f, 'ssl', '+ssl')
_add_variant(v, f, 'table', '+table')
_add_variant(v, f, 'thread', '+threads')
_add_variant(v, f, 'tmva', '+tmva')
_add_variant(v, f, 'unuran', '+unuran')
_add_variant(v, f, 'vc', '+vc')
_add_variant(v, f, 'vdt', '+vdt')
_add_variant(v, f, 'veccore', '+veccore')
_add_variant(v, f, 'vmc', '+vmc')
_add_variant(v, f, ('x11', 'xft'), '+x')
_add_variant(v, f, 'xml', '+xml')
_add_variant(v, f, 'xrootd', '+xrootd')
return " ".join(v)
def cmake_args(self):
spec = self.spec
define = self.define