diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/geant4/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/geant4/package.py | 289 |
1 files changed, 144 insertions, 145 deletions
diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py index a14c962388..7eed444e05 100644 --- a/var/spack/repos/builtin/packages/geant4/package.py +++ b/var/spack/repos/builtin/packages/geant4/package.py @@ -15,157 +15,164 @@ class Geant4(CMakePackage): homepage = "http://geant4.cern.ch/" url = "https://gitlab.cern.ch/geant4/geant4/-/archive/v10.7.1/geant4-v10.7.1.tar.gz" - tags = ['hep'] - - executables = ['^geant4-config$'] - - maintainers = ['drbenmorgan'] - - version('11.0.2', sha256='661e1ab6f42e58910472d771e76ffd16a2b411398eed70f39808762db707799e') - version('11.0.1', sha256='fa76d0774346b7347b1fb1424e1c1e0502264a83e185995f3c462372994f84fa') - version('11.0.0', sha256='04d11d4d9041507e7f86f48eb45c36430f2b6544a74c0ccaff632ac51d9644f1') - version('10.7.3', sha256='8615d93bd4178d34f31e19d67bc81720af67cdab1c8425af8523858dcddcf65b', preferred=True) - version('10.7.2', sha256='593fc85883a361487b17548ba00553501f66a811b0a79039276bb75ad59528cf') - version('10.7.1', sha256='2aa7cb4b231081e0a35d84c707be8f35e4edc4e97aad2b233943515476955293') - version('10.7.0', sha256='c991a139210c7f194720c900b149405090058c00beb5a0d2fac5c40c42a262d4') - version('10.6.3', sha256='bf96d6d38e6a0deabb6fb6232eb00e46153134da645715d636b9b7b4490193d3') - version('10.6.2', sha256='e381e04c02aeade1ed8cdd9fdbe7dcf5d6f0f9b3837a417976b839318a005dbd') - version('10.6.1', sha256='4fd64149ae26952672a81ce5579d3806fda4bd251d486897093ac57633a42b7e') - version('10.6.0', sha256='eebe6a170546064ff81ab3b00f513ccd1d4122a026514982368d503ac55a4ee4') - version('10.5.1', sha256='2397eb859dc4de095ff66059d8bda9f060fdc42e10469dd7890946293eeb0e39') - version('10.4.3', sha256='67f3bb6405a2c77e573936c2b933f5a4a33915aa379626a2eb3012009b91e1da') - version('10.4.0', sha256='e919b9b0a88476e00c0b18ab65d40e6a714b55ee4778f66bac32a5396c22aa74') - version('10.3.3', sha256='bcd36a453da44de9368d1d61b0144031a58e4b43a6d2d875e19085f2700a89d8') - - _cxxstd_values = ('11', '14', '17') - variant('cxxstd', - default=_cxxstd_values[0], - values=_cxxstd_values, - multi=False, - description='Use the specified C++ standard when building.') - conflicts('cxxstd=11', when='@11:', msg='geant4@11: only supports cxxstd=17') - conflicts('cxxstd=14', when='@11:', msg='geant4@11: only supports cxxstd=17') - - variant('threads', default=True, description='Build with multithreading') - variant('vecgeom', default=False, description='Enable vecgeom support') - variant('opengl', default=False, description='Optional OpenGL support') - variant('x11', default=False, description='Optional X11 support') - variant('motif', default=False, description='Optional motif support') - variant('qt', default=False, description='Enable Qt support') - variant('python', default=False, description='Enable Python bindings') - variant('tbb', default=False, description='Use TBB as a tasking backend', when='@11:') - variant('vtk', default=False, description='Enable VTK support', when='@11:') - - depends_on('cmake@3.16:', type='build', when='@11.0.0:') - depends_on('cmake@3.8:', type='build', when='@10.6.0:') - depends_on('cmake@3.5:', type='build') - - for _vers in ["10.3.3", "10.4.0", "10.4.3", "10.5.1", "10.6.0", "10.6.1", - "10.6.2", "10.6.3", "10.7.0", "10.7.1", "10.7.2", "10.7.3", - "11.0:"]: - depends_on('geant4-data@' + _vers, type='run', when='@' + _vers) + tags = ["hep"] + + executables = ["^geant4-config$"] + + maintainers = ["drbenmorgan"] + + version("11.0.2", sha256="661e1ab6f42e58910472d771e76ffd16a2b411398eed70f39808762db707799e") + version("11.0.1", sha256="fa76d0774346b7347b1fb1424e1c1e0502264a83e185995f3c462372994f84fa") + version("11.0.0", sha256="04d11d4d9041507e7f86f48eb45c36430f2b6544a74c0ccaff632ac51d9644f1") + version( + "10.7.3", + sha256="8615d93bd4178d34f31e19d67bc81720af67cdab1c8425af8523858dcddcf65b", + preferred=True, + ) + version("10.7.2", sha256="593fc85883a361487b17548ba00553501f66a811b0a79039276bb75ad59528cf") + version("10.7.1", sha256="2aa7cb4b231081e0a35d84c707be8f35e4edc4e97aad2b233943515476955293") + version("10.7.0", sha256="c991a139210c7f194720c900b149405090058c00beb5a0d2fac5c40c42a262d4") + version("10.6.3", sha256="bf96d6d38e6a0deabb6fb6232eb00e46153134da645715d636b9b7b4490193d3") + version("10.6.2", sha256="e381e04c02aeade1ed8cdd9fdbe7dcf5d6f0f9b3837a417976b839318a005dbd") + version("10.6.1", sha256="4fd64149ae26952672a81ce5579d3806fda4bd251d486897093ac57633a42b7e") + version("10.6.0", sha256="eebe6a170546064ff81ab3b00f513ccd1d4122a026514982368d503ac55a4ee4") + version("10.5.1", sha256="2397eb859dc4de095ff66059d8bda9f060fdc42e10469dd7890946293eeb0e39") + version("10.4.3", sha256="67f3bb6405a2c77e573936c2b933f5a4a33915aa379626a2eb3012009b91e1da") + version("10.4.0", sha256="e919b9b0a88476e00c0b18ab65d40e6a714b55ee4778f66bac32a5396c22aa74") + version("10.3.3", sha256="bcd36a453da44de9368d1d61b0144031a58e4b43a6d2d875e19085f2700a89d8") + + _cxxstd_values = ("11", "14", "17") + variant( + "cxxstd", + default=_cxxstd_values[0], + values=_cxxstd_values, + multi=False, + description="Use the specified C++ standard when building.", + ) + conflicts("cxxstd=11", when="@11:", msg="geant4@11: only supports cxxstd=17") + conflicts("cxxstd=14", when="@11:", msg="geant4@11: only supports cxxstd=17") + + variant("threads", default=True, description="Build with multithreading") + variant("vecgeom", default=False, description="Enable vecgeom support") + variant("opengl", default=False, description="Optional OpenGL support") + variant("x11", default=False, description="Optional X11 support") + variant("motif", default=False, description="Optional motif support") + variant("qt", default=False, description="Enable Qt support") + variant("python", default=False, description="Enable Python bindings") + variant("tbb", default=False, description="Use TBB as a tasking backend", when="@11:") + variant("vtk", default=False, description="Enable VTK support", when="@11:") + + depends_on("cmake@3.16:", type="build", when="@11.0.0:") + depends_on("cmake@3.8:", type="build", when="@10.6.0:") + depends_on("cmake@3.5:", type="build") + + for _vers in [ + "10.3.3", + "10.4.0", + "10.4.3", + "10.5.1", + "10.6.0", + "10.6.1", + "10.6.2", + "10.6.3", + "10.7.0", + "10.7.1", + "10.7.2", + "10.7.3", + "11.0:", + ]: + depends_on("geant4-data@" + _vers, type="run", when="@" + _vers) depends_on("expat") depends_on("zlib") - depends_on('tbb', when='+tbb') - depends_on('vtk@8.2:', when='+vtk') + depends_on("tbb", when="+tbb") + depends_on("vtk@8.2:", when="+vtk") # Python, with boost requirement dealt with in cxxstd section - depends_on('python@3:', when='+python') - extends('python', when='+python') - conflicts('+python', when='@:10.6.1', - msg='Geant4 <= 10.6.1 cannot be built with Python bindings') + depends_on("python@3:", when="+python") + extends("python", when="+python") + conflicts( + "+python", when="@:10.6.1", msg="Geant4 <= 10.6.1 cannot be built with Python bindings" + ) for std in _cxxstd_values: # CLHEP version requirements to be reviewed - depends_on('clhep@2.4.5.1: cxxstd=' + std, - when='@11.0.0: cxxstd=' + std) + depends_on("clhep@2.4.5.1: cxxstd=" + std, when="@11.0.0: cxxstd=" + std) - depends_on('clhep@2.4.4.0: cxxstd=' + std, - when='@10.7.0: cxxstd=' + std) + depends_on("clhep@2.4.4.0: cxxstd=" + std, when="@10.7.0: cxxstd=" + std) - depends_on('clhep@2.3.3.0: cxxstd=' + std, - when='@10.3.3:10.6 cxxstd=' + std) + depends_on("clhep@2.3.3.0: cxxstd=" + std, when="@10.3.3:10.6 cxxstd=" + std) # Spack only supports Xerces-c 3 and above, so no version req - depends_on('xerces-c netaccessor=curl cxxstd=' + std, - when='cxxstd=' + std) + depends_on("xerces-c netaccessor=curl cxxstd=" + std, when="cxxstd=" + std) # Vecgeom specific versions for each Geant4 version - depends_on('vecgeom@1.1.18:1.1 cxxstd=' + std, - when='@11.0.0: +vecgeom cxxstd=' + std) - depends_on('vecgeom@1.1.8:1.1 cxxstd=' + std, - when='@10.7.0: +vecgeom cxxstd=' + std) - depends_on('vecgeom@1.1.5 cxxstd=' + std, - when='@10.6.0:10.6 +vecgeom cxxstd=' + std) - depends_on('vecgeom@1.1.0 cxxstd=' + std, - when='@10.5.0:10.5 +vecgeom cxxstd=' + std) - depends_on('vecgeom@0.5.2 cxxstd=' + std, - when='@10.4.0:10.4 +vecgeom cxxstd=' + std) - depends_on('vecgeom@0.3rc cxxstd=' + std, - when='@10.3.0:10.3 +vecgeom cxxstd=' + std) + depends_on("vecgeom@1.1.18:1.1 cxxstd=" + std, when="@11.0.0: +vecgeom cxxstd=" + std) + depends_on("vecgeom@1.1.8:1.1 cxxstd=" + std, when="@10.7.0: +vecgeom cxxstd=" + std) + depends_on("vecgeom@1.1.5 cxxstd=" + std, when="@10.6.0:10.6 +vecgeom cxxstd=" + std) + depends_on("vecgeom@1.1.0 cxxstd=" + std, when="@10.5.0:10.5 +vecgeom cxxstd=" + std) + depends_on("vecgeom@0.5.2 cxxstd=" + std, when="@10.4.0:10.4 +vecgeom cxxstd=" + std) + depends_on("vecgeom@0.3rc cxxstd=" + std, when="@10.3.0:10.3 +vecgeom cxxstd=" + std) # Boost.python, conflict handled earlier - depends_on('boost@1.70: +python cxxstd=' + std, - when='+python cxxstd=' + std) + depends_on("boost@1.70: +python cxxstd=" + std, when="+python cxxstd=" + std) # Visualization driver dependencies - depends_on("gl", when='+opengl') - depends_on("glu", when='+opengl') - depends_on("glx", when='+opengl+x11') - depends_on("libx11", when='+x11') - depends_on("libxmu", when='+x11') - depends_on("motif", when='+motif') + depends_on("gl", when="+opengl") + depends_on("glu", when="+opengl") + depends_on("glx", when="+opengl+x11") + depends_on("libx11", when="+x11") + depends_on("libxmu", when="+x11") + depends_on("motif", when="+motif") depends_on("qt@5: +opengl", when="+qt") # As released, 10.03.03 has issues with respect to using external # CLHEP. - patch('CLHEP-10.03.03.patch', level=1, when='@10.3.3') + patch("CLHEP-10.03.03.patch", level=1, when="@10.3.3") # These patches can be applied independent of the cxxstd value? - patch('cxx17.patch', when='@:10.3 cxxstd=17') - patch('cxx17_geant4_10_0.patch', level=1, when='@10.4.0 cxxstd=17') - patch('geant4-10.4.3-cxx17-removed-features.patch', - level=1, when='@10.4.3 cxxstd=17') + patch("cxx17.patch", when="@:10.3 cxxstd=17") + patch("cxx17_geant4_10_0.patch", level=1, when="@10.4.0 cxxstd=17") + patch("geant4-10.4.3-cxx17-removed-features.patch", level=1, when="@10.4.3 cxxstd=17") @classmethod def determine_version(cls, exe): - output = Executable(exe)('--version', output=str, error=str) + output = Executable(exe)("--version", output=str, error=str) # We already get the correct format return output.strip() @classmethod def determine_variants(cls, exes, version_str): variants = [] - cxxstd = Executable(exes[0])('--cxxstd', output=str, error=str) + cxxstd = Executable(exes[0])("--cxxstd", output=str, error=str) # output will be something like c++17, we only want the number - variants.append('cxxstd={}'.format(cxxstd[-3:])) + variants.append("cxxstd={}".format(cxxstd[-3:])) def _has_feature(feature): - res = Executable(exes[0])('--has-feature', feature, output=str, error=str) - return res.strip() == 'yes' + res = Executable(exes[0])("--has-feature", feature, output=str, error=str) + return res.strip() == "yes" def _add_variant(feature, variant): """Helper to determine whether a given feature is present and append the corresponding variant to the list""" if _has_feature(feature): - variants.append('+{}'.format(variant)) + variants.append("+{}".format(variant)) else: - variants.append('~{}'.format(variant)) + variants.append("~{}".format(variant)) - _add_variant('qt', 'qt') - _add_variant('motif', 'motif') - _add_variant('multithreading', 'threads') - _add_variant('usolids', 'vecgeom') + _add_variant("qt", "qt") + _add_variant("motif", "motif") + _add_variant("multithreading", "threads") + _add_variant("usolids", "vecgeom") - if _has_feature('opengl-x11'): - variants.append('+opengl') - variants.append('+x11') + if _has_feature("opengl-x11"): + variants.append("+opengl") + variants.append("+x11") else: - variants.append('~opengl') + variants.append("~opengl") # raytracer-x11 could still lead to the activation of the x11 # variant without +opengl - _add_variant('raytracer-x11', 'x11') + _add_variant("raytracer-x11", "x11") # TODO: The following variants cannot be determined from geant4-config. # - python @@ -173,84 +180,76 @@ class Geant4(CMakePackage): # - vtk # Should we have a (version dependent) warning message for these? - return ' '.join(variants) + return " ".join(variants) def cmake_args(self): spec = self.spec # Core options options = [ - '-DGEANT4_USE_SYSTEM_CLHEP=ON', - '-DGEANT4_USE_SYSTEM_EXPAT=ON', - '-DGEANT4_USE_SYSTEM_ZLIB=ON', - '-DGEANT4_USE_G3TOG4=ON', - '-DGEANT4_USE_GDML=ON', - '-DXERCESC_ROOT_DIR={0}'.format(spec['xerces-c'].prefix) + "-DGEANT4_USE_SYSTEM_CLHEP=ON", + "-DGEANT4_USE_SYSTEM_EXPAT=ON", + "-DGEANT4_USE_SYSTEM_ZLIB=ON", + "-DGEANT4_USE_G3TOG4=ON", + "-DGEANT4_USE_GDML=ON", + "-DXERCESC_ROOT_DIR={0}".format(spec["xerces-c"].prefix), ] # Use the correct C++ standard option for the requested version - if spec.version >= Version('11.0'): - options.append( - self.define_from_variant('CMAKE_CXX_STANDARD', 'cxxstd')) + if spec.version >= Version("11.0"): + options.append(self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd")) else: - options.append( - self.define_from_variant('GEANT4_BUILD_CXXSTD', 'cxxstd')) + options.append(self.define_from_variant("GEANT4_BUILD_CXXSTD", "cxxstd")) - if spec.version >= Version('10.6'): + if spec.version >= Version("10.6"): # When building a downstream library/app outside of Spack, make # sure that Geant4's dependencies are found - options.append(self.define('GEANT4_INSTALL_PACKAGE_CACHE', True)) + options.append(self.define("GEANT4_INSTALL_PACKAGE_CACHE", True)) # Multithreading - options.append(self.define_from_variant('GEANT4_BUILD_MULTITHREADED', - 'threads')) - options.append(self.define_from_variant('GEANT4_USE_TBB', 'tbb')) + options.append(self.define_from_variant("GEANT4_BUILD_MULTITHREADED", "threads")) + options.append(self.define_from_variant("GEANT4_USE_TBB", "tbb")) - if '+threads' in spec: + if "+threads" in spec: # Locked at global-dynamic to allow use cases that load the # geant4 libs at application runtime - options.append('-DGEANT4_BUILD_TLS_MODEL=global-dynamic') + options.append("-DGEANT4_BUILD_TLS_MODEL=global-dynamic") # Never install the data with geant4, but point to the dependent # geant4-data's install directory to correctly set up the # Geant4Config.cmake values for Geant4_DATASETS . - options.append(self.define('GEANT4_INSTALL_DATA', False)) - options.append(self.define('GEANT4_INSTALL_DATADIR', self.datadir)) + options.append(self.define("GEANT4_INSTALL_DATA", False)) + options.append(self.define("GEANT4_INSTALL_DATADIR", self.datadir)) # Vecgeom - if '+vecgeom' in spec: - options.append('-DGEANT4_USE_USOLIDS=ON') - options.append('-DUSolids_DIR=%s' % spec[ - 'vecgeom'].prefix.lib.CMake.USolids) + if "+vecgeom" in spec: + options.append("-DGEANT4_USE_USOLIDS=ON") + options.append("-DUSolids_DIR=%s" % spec["vecgeom"].prefix.lib.CMake.USolids) # Visualization options - if 'platform=darwin' not in spec: + if "platform=darwin" not in spec: if "+x11" in spec and "+opengl" in spec: - options.append('-DGEANT4_USE_OPENGL_X11=ON') + options.append("-DGEANT4_USE_OPENGL_X11=ON") if "+motif" in spec and "+opengl" in spec: - options.append('-DGEANT4_USE_XM=ON') + options.append("-DGEANT4_USE_XM=ON") if "+x11" in spec: - options.append('-DGEANT4_USE_RAYTRACER_X11=ON') + options.append("-DGEANT4_USE_RAYTRACER_X11=ON") - if '+qt' in spec: - options.append('-DGEANT4_USE_QT=ON') - options.append( - '-DQT_QMAKE_EXECUTABLE=%s' % - spec['qt'].prefix.bin.qmake) + if "+qt" in spec: + options.append("-DGEANT4_USE_QT=ON") + options.append("-DQT_QMAKE_EXECUTABLE=%s" % spec["qt"].prefix.bin.qmake) - options.append(self.define_from_variant('GEANT4_USE_VTK', 'vtk')) + options.append(self.define_from_variant("GEANT4_USE_VTK", "vtk")) # Python - if spec.version > Version('10.6.1'): - options.append(self.define_from_variant('GEANT4_USE_PYTHON', - 'python')) + if spec.version > Version("10.6.1"): + options.append(self.define_from_variant("GEANT4_USE_PYTHON", "python")) return options @property def datadir(self): - dataspec = self.spec['geant4-data'] + dataspec = self.spec["geant4-data"] return join_path( - dataspec.prefix.share, - '{0}-{1}'.format(dataspec.name, dataspec.version.dotted) + dataspec.prefix.share, "{0}-{1}".format(dataspec.name, dataspec.version.dotted) ) |