From e7894b4863b02cbb0bc2f905cad04908b045368f Mon Sep 17 00:00:00 2001 From: "Seth R. Johnson" Date: Mon, 21 Feb 2022 07:05:59 -0500 Subject: geant4: fix CMake-derived data path (#29091) * geant4-data: use build+run-only depends * geant4: point to dependent datadir This is "used" in the configure step to set up the Geant4Config.cmake file's persistent pointers to the data directory, but the dependency is still listed as "run" -- though I'm not sure this is the right behavior since the geant4 installation really does change as a function of the data directory, and the installation is incomplete/erroneous without using one. * Style --- .../repos/builtin/packages/geant4-data/package.py | 197 +++++++++++---------- var/spack/repos/builtin/packages/geant4/package.py | 34 ++-- 2 files changed, 124 insertions(+), 107 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/geant4-data/package.py b/var/spack/repos/builtin/packages/geant4-data/package.py index bad071b7d7..e9c3ac269e 100644 --- a/var/spack/repos/builtin/packages/geant4-data/package.py +++ b/var/spack/repos/builtin/packages/geant4-data/package.py @@ -38,98 +38,115 @@ class Geant4Data(BundlePackage): # For clarity, declare deps on a Major-Minor version basis as # they generally don't change on the patch level # Can move to declaring on a dataset basis if needed - # geant4@11.0.X - depends_on("g4ndl@4.6", when='@11.0.0:11.0') - depends_on("g4emlow@8.0", when='@11.0.0:11.0') - depends_on("g4photonevaporation@5.7", when='@11.0.0:11.0') - depends_on("g4radioactivedecay@5.6", when='@11.0.0:11.0') - depends_on("g4particlexs@4.0", when='@11.0.0:11.0') - depends_on("g4pii@1.3", when='@11.0.0:11.0') - depends_on("g4realsurface@2.2", when='@11.0.0:11.0') - depends_on("g4saiddata@2.0", when='@11.0.0:11.0') - depends_on("g4abla@3.1", when='@11.0.0:11.0') - depends_on("g4incl@1.0", when='@11.0.0:11.0') - depends_on("g4ensdfstate@2.3", when='@11.0.0:11.0') - - # geant4@10.7.X - depends_on("g4ndl@4.6", when='@10.7.0:10.7') - depends_on("g4emlow@7.13", when='@10.7.0:10.7') - depends_on("g4photonevaporation@5.7", when='@10.7.0:10.7') - depends_on("g4radioactivedecay@5.6", when='@10.7.0:10.7') - depends_on("g4particlexs@3.1.1", when='@10.7.1:10.7') - depends_on("g4particlexs@3.1", when='@10.7.0') - depends_on("g4pii@1.3", when='@10.7.0:10.7') - depends_on("g4realsurface@2.2", when='@10.7.0:10.7') - depends_on("g4saiddata@2.0", when='@10.7.0:10.7') - depends_on("g4abla@3.1", when='@10.7.0:10.7') - depends_on("g4incl@1.0", when='@10.7.0:10.7') - depends_on("g4ensdfstate@2.3", when='@10.7.0:10.7') - - # geant4@10.6.X - depends_on("g4ndl@4.6", when='@10.6.0:10.6') - depends_on("g4emlow@7.9", when='@10.6.0') - depends_on("g4emlow@7.9.1", when='@10.6.1:10.6') - depends_on("g4photonevaporation@5.5", when='@10.6.0:10.6') - depends_on("g4radioactivedecay@5.4", when='@10.6.0:10.6') - depends_on("g4particlexs@2.1", when='@10.6.0:10.6') - depends_on("g4pii@1.3", when='@10.6.0:10.6') - depends_on("g4realsurface@2.1.1", when='@10.6.0:10.6') - depends_on("g4saiddata@2.0", when='@10.6.0:10.6') - depends_on("g4abla@3.1", when='@10.6.0:10.6') - depends_on("g4incl@1.0", when='@10.6.0:10.6') - depends_on("g4ensdfstate@2.2", when='@10.6.0:10.6') - - # geant4@10.5.X - depends_on("g4ndl@4.5", when='@10.5.0:10.5') - depends_on("g4emlow@7.7", when='@10.5.0:10.5') - depends_on("g4photonevaporation@5.3", when='@10.5.0:10.5') - depends_on("g4radioactivedecay@5.3", when='@10.5.0:10.5') - depends_on("g4particlexs@1.1", when='@10.5.0:10.5') - depends_on("g4pii@1.3", when='@10.5.0:10.5') - depends_on("g4realsurface@2.1.1", when='@10.5.0:10.5') - depends_on("g4saiddata@2.0", when='@10.5.0:10.5') - depends_on("g4abla@3.1", when='@10.5.0:10.5') - depends_on("g4incl@1.0", when='@10.5.0:10.5') - depends_on("g4ensdfstate@2.2", when='@10.5.0:10.5') - - # geant4@10.4.X - depends_on("g4ndl@4.5", when='@10.4.0:10.4') - depends_on("g4emlow@7.3", when='@10.4.0:10.4') - depends_on("g4photonevaporation@5.2", when='@10.4.0:10.4') - depends_on("g4radioactivedecay@5.2", when='@10.4.0:10.4') - depends_on("g4neutronxs@1.4", when='@10.4.0:10.4') - depends_on("g4pii@1.3", when='@10.4.0:10.4') - - depends_on("g4realsurface@2.1.1", when='@10.4.2:10.4') - depends_on("g4realsurface@2.1", when='@10.4.0:10.4.1') - - depends_on("g4saiddata@1.1", when='@10.4.0:10.4') - depends_on("g4abla@3.1", when='@10.4.0:10.4') - depends_on("g4ensdfstate@2.2", when='@10.4.0:10.4') - - # geant4@10.3.X - depends_on("g4ndl@4.5", when='@10.3.0:10.3') - depends_on("g4emlow@6.50", when='@10.3.0:10.3') - - depends_on("g4photonevaporation@4.3.2", when='@10.3.1:10.3') - depends_on("g4photonevaporation@4.3", when='@10.3.0') - - depends_on("g4radioactivedecay@5.1.1", when='@10.3.1:10.3') - depends_on("g4radioactivedecay@5.1", when='@10.3.0') - - depends_on("g4neutronxs@1.4", when='@10.3.0:10.3') - depends_on("g4pii@1.3", when='@10.3.0:10.3') - depends_on("g4realsurface@1.0", when='@10.3.0:10.3') - depends_on("g4saiddata@1.1", when='@10.3.0:10.3') - depends_on("g4abla@3.0", when='@10.3.0:10.3') - depends_on("g4ensdfstate@2.1", when='@10.3.0:10.3') - - def install(self, spec, prefix): + _datasets = { + '11.0:11': [ + "g4ndl@4.6", + "g4emlow@8.0", + "g4photonevaporation@5.7", + "g4radioactivedecay@5.6", + "g4particlexs@4.0", + "g4pii@1.3", + "g4realsurface@2.2", + "g4saiddata@2.0", + "g4abla@3.1", + "g4incl@1.0", + "g4ensdfstate@2.3", + ], + '10.7.0:10.7': [ + "g4ndl@4.6", + "g4emlow@7.13", + "g4photonevaporation@5.7", + "g4radioactivedecay@5.6", + "g4pii@1.3", + "g4realsurface@2.2", + "g4saiddata@2.0", + "g4abla@3.1", + "g4incl@1.0", + "g4ensdfstate@2.3", + ], + '10.7.1:10.7': [ + "g4particlexs@3.1.1", + ], + '10.7.0': [ + "g4particlexs@3.1", + ], + '10.6.0:10.6': [ + "g4ndl@4.6", + "g4emlow@7.9", + "g4emlow@7.9.1", + "g4photonevaporation@5.5", + "g4radioactivedecay@5.4", + "g4particlexs@2.1", + "g4pii@1.3", + "g4realsurface@2.1.1", + "g4saiddata@2.0", + "g4abla@3.1", + "g4incl@1.0", + "g4ensdfstate@2.2", + ], + '10.5.0:10.5': [ + "g4ndl@4.5", + "g4emlow@7.7", + "g4photonevaporation@5.3", + "g4radioactivedecay@5.3", + "g4particlexs@1.1", + "g4pii@1.3", + "g4realsurface@2.1.1", + "g4saiddata@2.0", + "g4abla@3.1", + "g4incl@1.0", + "g4ensdfstate@2.2", + ], + '10.4.0:10.4': [ + "g4ndl@4.5", + "g4emlow@7.3", + "g4photonevaporation@5.2", + "g4radioactivedecay@5.2", + "g4neutronxs@1.4", + "g4pii@1.3", + "g4saiddata@1.1", + "g4abla@3.1", + "g4ensdfstate@2.2", + ], + '10.4.2:10.4': [ + "g4realsurface@2.1.1", + ], + '10.4.0:10.4.1': [ + "g4realsurface@2.1", + ], + '10.3.0:10.3': [ + "g4ndl@4.5", + "g4emlow@6.50", + "g4neutronxs@1.4", + "g4pii@1.3", + "g4realsurface@1.0", + "g4saiddata@1.1", + "g4abla@3.0", + "g4ensdfstate@2.1", + ], + '10.3.1:10.3': [ + "g4photonevaporation@4.3.2", + "g4radioactivedecay@5.1.1", + ], + '10.3.0': [ + "g4photonevaporation@4.3", + "g4radioactivedecay@5.1", + ], + } + + for _vers, _dsets in _datasets.items(): + _vers = '@' + _vers + for _d in _dsets: + depends_on(_d, type=('build', 'run'), when=_vers) + + @property + def datadir(self): spec = self.spec - data = '{0}-{1}'.format(self.name, self.version.dotted) - datadir = join_path(spec.prefix.share, data) + return join_path(spec.prefix.share, + '{0}-{1}'.format(self.name, self.version.dotted)) - with working_dir(datadir, create=True): + def install(self, spec, prefix): + with working_dir(self.datadir, create=True): for s in spec.dependencies(): for d in glob.glob('{0}/data/*'.format(s.prefix.share)): os.symlink(d, os.path.basename(d)) diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py index acae419ed6..0a5f6cc388 100644 --- a/var/spack/repos/builtin/packages/geant4/package.py +++ b/var/spack/repos/builtin/packages/geant4/package.py @@ -3,8 +3,6 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack import * - class Geant4(CMakePackage): """Geant4 is a toolkit for the simulation of the passage of particles @@ -56,19 +54,10 @@ class Geant4(CMakePackage): depends_on('cmake@3.8:', type='build', when='@10.6.0:') depends_on('cmake@3.5:', type='build') - depends_on('geant4-data@11.0.0', type='run', when='@11.0.0') - depends_on('geant4-data@10.7.3', type='run', when='@10.7.3') - depends_on('geant4-data@10.7.2', type='run', when='@10.7.2') - depends_on('geant4-data@10.7.1', type='run', when='@10.7.1') - depends_on('geant4-data@10.7.0', type='run', when='@10.7.0') - depends_on('geant4-data@10.6.3', type='run', when='@10.6.3') - depends_on('geant4-data@10.6.2', type='run', when='@10.6.2') - depends_on('geant4-data@10.6.1', type='run', when='@10.6.1') - depends_on('geant4-data@10.6.0', type='run', when='@10.6.0') - depends_on('geant4-data@10.5.1', type='run', when='@10.5.1') - depends_on('geant4-data@10.4.3', type='run', when='@10.4.3') - depends_on('geant4-data@10.4.0', type='run', when='@10.4.0') - depends_on('geant4-data@10.3.3', type='run', when='@10.3.3') + for _vers in ["11.0.0", "10.7.3", "10.7.2", "10.7.1", "10.7.0", "10.6.3", + "10.6.2", "10.6.1", "10.6.0", "10.5.1", "10.4.3", "10.4.0", + "10.3.3"]: + depends_on('geant4-data@' + _vers, type='run', when='@' + _vers) depends_on("expat") depends_on("zlib") @@ -169,8 +158,11 @@ class Geant4(CMakePackage): # geant4 libs at application runtime options.append('-DGEANT4_BUILD_TLS_MODEL=global-dynamic') - # never install the data with geant4 - options.append('-DGEANT4_INSTALL_DATA=OFF') + # 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)) # Vecgeom if '+vecgeom' in spec: @@ -201,3 +193,11 @@ class Geant4(CMakePackage): 'python')) return options + + @property + def datadir(self): + dataspec = self.spec['geant4-data'] + return join_path( + dataspec.prefix.share, + '{0}-{1}'.format(dataspec.name, dataspec.version.dotted) + ) -- cgit v1.2.3-60-g2f50