From c02539bd290e9d723de772981b0366b30c113d1f Mon Sep 17 00:00:00 2001 From: Valentin Volkl Date: Mon, 16 Aug 2021 09:18:48 +0200 Subject: root: external find can now determine variants (#25427) --- var/spack/repos/builtin/packages/root/package.py | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) 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 -- cgit v1.2.3-70-g09d2