spack/var/spack/repos/builtin/packages/whizard/package.py
Juan Miguel Carceller 1cf311f217
whizard: add v3.1.5 (#49785)
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
2025-04-08 21:37:21 -07:00

192 lines
8.0 KiB
Python

# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class Whizard(AutotoolsPackage):
"""WHIZARD is a program system designed for the efficient calculation
of multi-particle scattering cross sections
and simulated event samples."""
homepage = "https://whizard.hepforge.org"
urls = [
"https://launchpad.net/whizard/3.1.x/3.1.2/+download/whizard-3.1.2.tar.gz",
"https://whizard.hepforge.org/downloads/?f=whizard-2.8.3.tar.gz",
]
git = "https://gitlab.tp.nt.uni-siegen.de/whizard/public.git"
tags = ["hep"]
maintainers("vvolkl")
license("GPL-2.0-or-later")
version("master", branch="master")
version("3.1.5", sha256="731d147b342e3b63307ea541f6f0bb4073195a78a75da60db10f284f282c3d19")
version("3.1.4", sha256="9da9805251d786adaf4ad5a112f9c4ee61d515778af0d2623d6460c3f1f900cd")
version("3.1.2", sha256="4f706f8ef02a580ae4dba867828691dfe0b3f9f9b8982b617af72eb8cd4c6fa3")
version("3.1.1", sha256="dd48e4e39b8a4990be47775ec6171f89d8147cb2e9e293afc7051a7dbc5a23ef")
version("3.1.0", sha256="9dc5e6d1a25d2fc708625f85010cb81b63559ff02cceb9b35024cf9f426c0ad9")
version("3.0.3", sha256="20f2269d302fc162a6aed8e781b504ba5112ef0711c078cdb08b293059ed67cf")
version("3.0.2", sha256="f1db92cd95a0281f6afbf4ac32ab027670cb97a57ad8f5139c0d1f61593d66ec")
version("3.0.1", sha256="1463abd6c50ffe72029abc6f5a7d28ec63013852bfe5914cb464b58202c1437c")
version(
"3.0.0_alpha", sha256="4636e5a10350bb67ccc98cd105bc891ea04f3393c2420f81be3d21240be20009"
)
version("2.8.5", sha256="0f633e5620aa7dd50336b492e8a76bfae15b15943ea842010346ad7610818ecd")
version("2.8.4", sha256="49893f077484470934a9d6e1545bbda7d398076568bceda00880d58132f26432")
version("2.8.3", sha256="96a9046682d4b992b477eb96d561c3db789207e1049b60c9bd140db40eb1e5d7")
version("2.8.2", sha256="32c9be342d01b3fc6f947fddce74bf2d81ece37fb39bca1f37778fb0c07e2568")
version("2.8.1", sha256="0c759ce0598e25f38e04659f745c5963d238c4b5c12209f16449b6c0bc6dc64e")
version("2.8.0", sha256="3b5175eafa879d1baca20237d18fb2b18bee89631e73ada499de9c082d009696")
variant(
"hepmc",
default="3",
description="builds with hepmc 2/3",
values=("off", "2", "3"),
multi=False,
)
variant("pythia8", default=True, description="builds with pythia8")
variant("fastjet", default=False, description="builds with fastjet")
variant("gosam", default=False, description="builds with gosam")
variant("lcio", default=False, description="builds with lcio")
variant("lhapdf", default=False, description="builds with fastjet")
variant("openmp", default=False, description="builds with openmp")
variant("openloops", default=False, description="builds with openloops")
variant("latex", default=False, description="data visualization with latex")
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated
depends_on("libtirpc", type=("build", "link", "run"))
depends_on("ocaml@4.02.3:", type="build", when="@3:")
depends_on("ocaml@4.02.3:~force-safe-string", type="build", when="@:2")
depends_on("hepmc", when="hepmc=2")
depends_on("hepmc3", when="hepmc=3")
depends_on("lcio", when="+lcio")
depends_on("pythia8", when="+pythia8")
depends_on("pythia8@:8.309", when="@:3.1.3+pythia8")
depends_on("lhapdf", when="+lhapdf")
depends_on("fastjet", when="+fastjet")
depends_on("py-gosam", when="+gosam")
depends_on("gosam-contrib", when="+gosam")
depends_on("qgraf", when="+gosam")
depends_on(
"openloops@2.0.0: +compile_extra num_jobs=1 " "processes=eett,eevvjj,ppllj,tbw",
when="+openloops",
)
depends_on("texlive", when="+latex")
depends_on("ghostscript", when="+latex")
depends_on("zlib-api")
# Fix for https://github.com/key4hep/key4hep-spack/issues/71
# NOTE: This will become obsolete in a future release of whizard, so once
# that happens, this needs to be adapted with a when clause
patch("parallel_build_fix.patch", when="@3:3.1.3")
patch("parallel_build_fix_2.8.patch", when="@2.8")
# Subset of https://gitlab.tp.nt.uni-siegen.de/whizard/public/-/commit/f6048e4
patch("hepmc3.3.0.patch", when="@3:3.1.4^hepmc3@3.3.0:")
# Make sure that the patch actually has an effect by running autoreconf
force_autoreconf = True
# Which then requires the following build dependencies
depends_on("autoconf", type="build")
depends_on("automake", type="build")
depends_on("libtool", type="build")
depends_on("pkgconfig", type="build")
conflicts(
"%gcc@:5.0",
msg="gfortran needs to support Fortran 2008. For more detailed information see https://whizard.hepforge.org/compilers.html",
)
conflicts(
"%gcc@6.5.0",
msg="Due to severe regressions, gfortran 6.5.0 can not be used. See https://whizard.hepforge.org/compilers.html",
)
conflicts(
"%intel@:17",
msg="The fortran compiler needs to support Fortran 2008. For more detailed information see https://whizard.hepforge.org/compilers.html",
)
def setup_build_environment(self, env):
# whizard uses some environment variables to detect dependencies at
# configure time if they are not installed to standard system prefixes
if self.spec.satisfies("+lcio"):
env.set("LCIO", self.spec["lcio"].prefix)
if self.spec.satisfies("hepmc=2"):
env.set("HEPMC_DIR", self.spec["hepmc"].prefix)
if self.spec.satisfies("hepmc=3"):
env.set("HEPMC_DIR", self.spec["hepmc3"].prefix)
if self.spec.satisfies("+openloops"):
env.set("OPENLOOPS_DIR", self.spec["openloops"].prefix)
# whizard uses the compiler during runtime,
# and seems incompatible with
# filter_compiler_wrappers, thus the
# actual compilers need to be used to build
env.set("CC", self.compiler.cc)
env.set("CXX", self.compiler.cxx)
env.set("FC", self.compiler.fc)
env.set("F77", self.compiler.fc)
@run_before("autoreconf")
def prepare_whizard(self):
# As described in the manual (SVN Repository version)
# https://whizard.hepforge.org/manual/manual003.html#sec%3Aprerequisites
if not os.path.exists("configure.ac"):
shell = which("sh")
shell("build_master.sh")
def configure_args(self):
spec = self.spec
enable_hepmc = "no" if "hepmc=off" in spec else "yes"
args = [
f"TIRPC_CFLAGS=-I{spec['libtirpc'].prefix.include.tirpc}",
f"TIRPC_LIBS=-L{spec['libtirpc'].prefix.lib} -ltirpc",
f"--enable-hepmc={enable_hepmc}",
# todo: hoppet
# todo: recola
# todo: looptools
# todo: pythia6
]
args.extend(self.enable_or_disable("fastjet"))
args.extend(self.enable_or_disable("gosam"))
args.extend(self.enable_or_disable("pythia8"))
args.extend(self.enable_or_disable("lcio"))
args.extend(self.enable_or_disable("lhapdf"))
args.extend(self.enable_or_disable("openloops"))
if "+openloops" in spec:
args.append(f"--with-openloops={spec['openloops'].prefix}")
if "+openmp" in spec:
args.append("--enable-fc-openmp")
return args
def url_for_version(self, version):
major = str(version[0])
minor = str(version[1])
patch = str(version[2])
if len(version) == 4:
url = "https://whizard.hepforge.org/downloads/?f=whizard-%s.%s.%s_%s.tar.gz" % (
major,
minor,
patch,
version[3],
)
else:
url = "https://whizard.hepforge.org/downloads/?f=whizard-%s.%s.%s.tar.gz" % (
major,
minor,
patch,
)
return url