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
This commit is contained in:
Seth R. Johnson 2022-02-21 07:05:59 -05:00 committed by GitHub
parent 94d75d0327
commit e7894b4863
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 122 additions and 105 deletions

View File

@ -38,98 +38,115 @@ class Geant4Data(BundlePackage):
# For clarity, declare deps on a Major-Minor version basis as # For clarity, declare deps on a Major-Minor version basis as
# they generally don't change on the patch level # they generally don't change on the patch level
# Can move to declaring on a dataset basis if needed # Can move to declaring on a dataset basis if needed
# geant4@11.0.X _datasets = {
depends_on("g4ndl@4.6", when='@11.0.0:11.0') '11.0:11': [
depends_on("g4emlow@8.0", when='@11.0.0:11.0') "g4ndl@4.6",
depends_on("g4photonevaporation@5.7", when='@11.0.0:11.0') "g4emlow@8.0",
depends_on("g4radioactivedecay@5.6", when='@11.0.0:11.0') "g4photonevaporation@5.7",
depends_on("g4particlexs@4.0", when='@11.0.0:11.0') "g4radioactivedecay@5.6",
depends_on("g4pii@1.3", when='@11.0.0:11.0') "g4particlexs@4.0",
depends_on("g4realsurface@2.2", when='@11.0.0:11.0') "g4pii@1.3",
depends_on("g4saiddata@2.0", when='@11.0.0:11.0') "g4realsurface@2.2",
depends_on("g4abla@3.1", when='@11.0.0:11.0') "g4saiddata@2.0",
depends_on("g4incl@1.0", when='@11.0.0:11.0') "g4abla@3.1",
depends_on("g4ensdfstate@2.3", when='@11.0.0:11.0') "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",
],
}
# geant4@10.7.X for _vers, _dsets in _datasets.items():
depends_on("g4ndl@4.6", when='@10.7.0:10.7') _vers = '@' + _vers
depends_on("g4emlow@7.13", when='@10.7.0:10.7') for _d in _dsets:
depends_on("g4photonevaporation@5.7", when='@10.7.0:10.7') depends_on(_d, type=('build', 'run'), when=_vers)
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 @property
depends_on("g4ndl@4.6", when='@10.6.0:10.6') def datadir(self):
depends_on("g4emlow@7.9", when='@10.6.0') spec = self.spec
depends_on("g4emlow@7.9.1", when='@10.6.1:10.6') return join_path(spec.prefix.share,
depends_on("g4photonevaporation@5.5", when='@10.6.0:10.6') '{0}-{1}'.format(self.name, self.version.dotted))
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): def install(self, spec, prefix):
spec = self.spec with working_dir(self.datadir, create=True):
data = '{0}-{1}'.format(self.name, self.version.dotted)
datadir = join_path(spec.prefix.share, data)
with working_dir(datadir, create=True):
for s in spec.dependencies(): for s in spec.dependencies():
for d in glob.glob('{0}/data/*'.format(s.prefix.share)): for d in glob.glob('{0}/data/*'.format(s.prefix.share)):
os.symlink(d, os.path.basename(d)) os.symlink(d, os.path.basename(d))

View File

@ -3,8 +3,6 @@
# #
# SPDX-License-Identifier: (Apache-2.0 OR MIT) # SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class Geant4(CMakePackage): class Geant4(CMakePackage):
"""Geant4 is a toolkit for the simulation of the passage of particles """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.8:', type='build', when='@10.6.0:')
depends_on('cmake@3.5:', type='build') depends_on('cmake@3.5:', type='build')
depends_on('geant4-data@11.0.0', type='run', when='@11.0.0') for _vers in ["11.0.0", "10.7.3", "10.7.2", "10.7.1", "10.7.0", "10.6.3",
depends_on('geant4-data@10.7.3', type='run', when='@10.7.3') "10.6.2", "10.6.1", "10.6.0", "10.5.1", "10.4.3", "10.4.0",
depends_on('geant4-data@10.7.2', type='run', when='@10.7.2') "10.3.3"]:
depends_on('geant4-data@10.7.1', type='run', when='@10.7.1') depends_on('geant4-data@' + _vers, type='run', when='@' + _vers)
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')
depends_on("expat") depends_on("expat")
depends_on("zlib") depends_on("zlib")
@ -169,8 +158,11 @@ def cmake_args(self):
# geant4 libs at application runtime # 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 # Never install the data with geant4, but point to the dependent
options.append('-DGEANT4_INSTALL_DATA=OFF') # 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 # Vecgeom
if '+vecgeom' in spec: if '+vecgeom' in spec:
@ -201,3 +193,11 @@ def cmake_args(self):
'python')) 'python'))
return options 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)
)