1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Evtgen(CMakePackage):
""" EvtGen is a Monte Carlo event generator that simulates
the decays of heavy flavour particles, primarily B and D mesons. """
homepage = "https://evtgen.hepforge.org/"
url = "https://evtgen.hepforge.org/downloads?f=EvtGen-02.00.00.tar.gz"
tags = ['hep']
maintainers = ['vvolkl']
version('02.00.00', sha256='02372308e1261b8369d10538a3aa65fe60728ab343fcb64b224dac7313deb719')
# switched to cmake in 02.00.00
version('01.07.00', sha256='2648f1e2be5f11568d589d2079f22f589c283a2960390bbdb8d9d7f71bc9c014', deprecated=True)
variant('pythia8', default=True, description='Build with pythia8')
variant('tauola', default=False, description='Build with tauola')
variant('photos', default=False, description='Build with photos')
variant('hepmc3', default=False, description='Link with hepmc3 (instead of hepmc)')
patch("g2c.patch", when='@01.07.00')
patch("evtgen-2.0.0.patch", when='@02.00.00 ^pythia8@8.304:')
depends_on('hepmc', when='~hepmc3')
depends_on('hepmc3', when='+hepmc3')
depends_on("pythia8", when="+pythia8")
depends_on("tauola~hepmc3", when="+tauola~hepmc3")
depends_on("photos~hepmc3", when="+photos~hepmc3")
depends_on("tauola+hepmc3", when="+tauola+hepmc3")
depends_on("photos+hepmc3", when="+photos+hepmc3")
conflicts("^pythia8+evtgen", when="+pythia8",
msg="Building pythia with evtgen bindings and "
"evtgen with pythia bindings results in a circular dependency "
"that cannot be resolved at the moment! "
"Use evtgen+pythia8^pythia8~evtgen.")
conflicts('+hepmc3', when='@:01',
msg='hepmc3 support was added in 02.00.00')
def cmake_args(self):
args = []
args.append(self.define_from_variant('EVTGEN_PYTHIA', 'pythia8'))
args.append(self.define_from_variant('EVTGEN_TAUOLA', 'tauola'))
args.append(self.define_from_variant('EVTGEN_PHOTOS', 'photos'))
args.append(self.define_from_variant('EVTGEN_HEPMC3', 'hepmc3'))
return args
def patch(self):
# gcc on MacOS doesn't recognize `-shared`, should use `-dynamiclib`;
# the `-undefined dynamic_lookup` flag enables weak linking on Mac
# Patch taken from CMS recipe:
# https://github.com/cms-sw/cmsdist/blob/IB/CMSSW_12_1_X/master/evtgen.spec#L48
if not self.spec.satisfies("platform=darwin"):
return
filter_file('-shared', '-dynamiclib -undefined dynamic_lookup', 'make.inc')
# Taken from AutotoolsPackage
def configure(self, spec, prefix):
"""Runs configure with the arguments specified in
:py:meth:`~.AutotoolsPackage.configure_args`
and an appropriately set prefix.
"""
options = getattr(self, 'configure_flag_args', [])
options += ['--prefix={0}'.format(prefix)]
options += self.configure_args()
with working_dir(self.build_directory, create=True):
inspect.getmodule(self).configure(*options)
@when('@:01')
def configure_args(self):
args = []
args.append('--hepmcdir=%s' % self.spec["hepmc"].prefix)
if '+pythia8' in self.spec:
args.append('--pythiadir=%s' % self.spec['pythia8'].prefix)
if '+photos' in self.spec:
args.append('--photosdir=%s' % self.spec['photos'].prefix)
if '+tauola' in self.spec:
args.append('--tauoladir=%s' % self.spec['tauola'].prefix)
return args
@when('@:01')
def cmake(self, spec, prefix):
pass
@when('@:01')
def build(self, spec, prefix):
self.configure(spec, prefix)
# avoid parallel compilation errors
# due to libext_shared depending on lib_shared
with working_dir(self.build_directory):
make('lib_shared')
make('all')
@when('@:01')
def install(self, spec, prefix):
with working_dir(self.build_directory):
make('install')
def setup_run_environment(self, env):
env.set("EVTGEN", self.prefix.share)
|