summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Volkl <valentin.volkl@cern.ch>2021-08-16 09:18:48 +0200
committerGitHub <noreply@github.com>2021-08-16 09:18:48 +0200
commitc02539bd290e9d723de772981b0366b30c113d1f (patch)
tree8fe14d4d2c8ab1da9d71e44b0ca32d0881a00cc1
parent0b7aff2ad724437a63590955ad7e6b15d4cbe2c2 (diff)
downloadspack-c02539bd290e9d723de772981b0366b30c113d1f.tar.gz
spack-c02539bd290e9d723de772981b0366b30c113d1f.tar.bz2
spack-c02539bd290e9d723de772981b0366b30c113d1f.tar.xz
spack-c02539bd290e9d723de772981b0366b30c113d1f.zip
root: external find can now determine variants (#25427)
-rw-r--r--var/spack/repos/builtin/packages/root/package.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/root/package.py b/var/spack/repos/builtin/packages/root/package.py
index 9111ab2e59..620bdc998a 100644
--- a/var/spack/repos/builtin/packages/root/package.py
+++ b/var/spack/repos/builtin/packages/root/package.py
@@ -326,6 +326,79 @@ class Root(CMakePackage):
# 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