spack/var/spack/repos/builtin/packages/evtgen/package.py
Valentin Volkl d9b438ec76
evtgen: add v02.02.00 (#34187)
* evtgen: add v02.02.00
* format
2022-11-29 09:54:14 -07:00

132 lines
4.7 KiB
Python

# 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.02.00", sha256="0c626e51cb17e799ad0ffd0beea5cb94d7ac8a5f8777b746aa1944dd26071ecf")
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")
@property
def root_cmakelists_dir(self):
# deal with inconsistent intermediate folders of tarballs
# 02.00.00 only has 'R02-00-00'
# but 02.02.00 has 'EvtGen/R02-02-00'
if self.spec.satisfies("@02.02.00:"):
return "R" + str(self.version).replace(".", "-")
else:
return ""
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("%gcc 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)