From 4702b490949aaee2f56326747c3673e7a2bc9ab5 Mon Sep 17 00:00:00 2001 From: iarspider Date: Fri, 25 Mar 2022 02:30:33 +0100 Subject: Sherpa: add several new variants used by CMS (#29338) --- .../repos/builtin/packages/blackhat/package.py | 31 +++++++++ var/spack/repos/builtin/packages/sherpa/package.py | 76 +++++++++++++++------- 2 files changed, 85 insertions(+), 22 deletions(-) create mode 100644 var/spack/repos/builtin/packages/blackhat/package.py (limited to 'var') diff --git a/var/spack/repos/builtin/packages/blackhat/package.py b/var/spack/repos/builtin/packages/blackhat/package.py new file mode 100644 index 0000000000..3ad851e12e --- /dev/null +++ b/var/spack/repos/builtin/packages/blackhat/package.py @@ -0,0 +1,31 @@ +# 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 import * + + +class Blackhat(AutotoolsPackage): + """Blackhat MC generator""" + + homepage = "https://blackhat.hepforge.org" + git = "https://github.com/cms-externals/blackhat.git" + + version('0.9.9', branch='cms/v0.9.9') + + depends_on('qd') + depends_on('python') + extends('python') + + def patch(self): + filter_file('else return Cached_OLHA_user_normal', + 'else return new Cached_OLHA_user_normal', + 'src/cached_OLHA.cpp') + + def configure_args(self): + return ['--with-QDpath=' + self.spec['qd'].prefix, + '--enable-pythoninterface=no'] + + def setup_build_environment(self, env): + env.append_flags('CXXFLAGS', '-Wno-deprecated') diff --git a/var/spack/repos/builtin/packages/sherpa/package.py b/var/spack/repos/builtin/packages/sherpa/package.py index aa815a43a2..5e12fb9e82 100644 --- a/var/spack/repos/builtin/packages/sherpa/package.py +++ b/var/spack/repos/builtin/packages/sherpa/package.py @@ -59,6 +59,13 @@ class Sherpa(AutotoolsPackage): variant('lhapdf', default=True, description='Enable LHAPDF support') variant('gzip', default=False, description='Enable gzip support') variant('pythia', default=True, description='Enable fragmentation/decay interface to Pythia') + variant('blackhat', default=False, description='Enable BLACKHAT support') + variant('ufo', default=False, description='Enable UFO support') + # cernlib not yet in spack + variant('hztool', default=False, description='Enable HZTOOL support') + # variant('cernlib', default=False, description='Enable CERNLIB support') + + variant('cms', default=False, description="Append CXXFLAGS used by CMS experiment") # Note that the delphes integration seems utterly broken: https://sherpa.hepforge.org/trac/ticket/305 @@ -83,6 +90,9 @@ class Sherpa(AutotoolsPackage): depends_on('lhapdf', when='+lhapdf') depends_on('gzip', when='+gzip') depends_on('pythia6', when='+pythia') + depends_on('blackhat', when='+blackhat') + depends_on('hztool', when='+hztool') + # depends_on('cernlib', when='+cernlib') for std in _cxxstd_values: depends_on('root cxxstd=' + std, when='+root cxxstd=' + std) @@ -100,30 +110,52 @@ class Sherpa(AutotoolsPackage): args.append('--enable-hepevtsize=200000') args.append('--with-sqlite3=' + self.spec['sqlite'].prefix) args.extend(self.enable_or_disable('mpi')) - if self.spec.satisfies('+python'): - args.append('--enable-pyext') + args.extend(self.enable_or_disable('pyext', variant='python')) args.extend(self.enable_or_disable('analysis')) args.extend(self.enable_or_disable('lhole')) args.extend(self.enable_or_disable('gzip')) args.extend(self.enable_or_disable('pythia')) - if self.spec.satisfies('+hepmc2'): - args.append('--enable-hepmc2=' + self.spec['hepmc'].prefix) - if self.spec.satisfies('+hepmc3'): - args.append('--enable-hepmc3=' + self.spec['hepmc3'].prefix) - if self.spec.satisfies('+rivet'): - args.append('--enable-rivet=' + self.spec['rivet'].prefix) - if self.spec.satisfies('+fastjet'): - args.append('--enable-fastjet=' + self.spec['fastjet'].prefix) - if self.spec.satisfies('+openloops'): - args.append('--enable-openloops=' + self.spec['openloops'].prefix) - if self.spec.satisfies('+recola'): - args.append('--enable-recola=' + self.spec['recola'].prefix) - if self.spec.satisfies('+root'): - args.append('--enable-root=' + self.spec['root'].prefix) - if self.spec.satisfies('+lhapdf'): - args.append('--enable-lhapdf=' + self.spec['lhapdf'].prefix) - if self.spec.satisfies('+hztool'): - args.append('--enable-hztool=' + self.spec['hztool'].prefix) - if self.spec.satisfies('+cernlib'): - args.append('--enable-cernlib=' + self.spec['cernlib'].prefix) + hepmc_root = lambda x: self.spec['hepmc'].prefix + args.extend(self.enable_or_disable('hepmc2', activation_value=hepmc_root)) + if self.spec.satisfies('@2.2.13:'): + args.extend(self.enable_or_disable('hepmc3', activation_value='prefix')) + args.extend(self.enable_or_disable('rivet', activation_value='prefix')) + args.extend(self.enable_or_disable('lhapdf', activation_value='prefix')) + else: + # See https://gitlab.com/sherpa-team/sherpa/-/issues/348 + if self.spec.satisfies('+hepmc3'): + args.append('--enable-hepmc3=' + self.spec['hepmc3'].prefix) + if self.spec.satisfies('+rivet'): + args.append('--enable-rivet=' + self.spec['rivet'].prefix) + if self.spec.satisfies('+lhapdf'): + args.append('--enable-lhapdf=' + self.spec['lhapdf'].prefix) + + args.extend(self.enable_or_disable('fastjet', activation_value='prefix')) + args.extend(self.enable_or_disable('openloops', activation_value='prefix')) + args.extend(self.enable_or_disable('recola', activation_value='prefix')) + args.extend(self.enable_or_disable('root', activation_value='prefix')) + + args.extend(self.enable_or_disable('hztool', activation_value='prefix')) + # args.extend(self.enable_or_disable('cernlib', activation_value='prefix')) + args.extend(self.enable_or_disable('blackhat', activation_value='prefix')) + args.extend(self.enable_or_disable('ufo')) + + if self.spec.satisfies('+mpi'): + args.append('CC=' + self.spec['mpi'].mpicc) + args.append('MPICXX=' + self.spec['mpi'].mpicxx) + args.append('CXX=' + self.spec['mpi'].mpicxx) + args.append('FC=' + self.spec['mpi'].mpifc) + return args + + def flag_handler(self, name, flags): + flags = list(flags) + if name == 'cxxflags': + flags.append('-std=c++' + self.spec.variants['cxxstd'].value) + + if '+cms' in self.spec: + flags.extend(['-fuse-cxa-atexit', '-O2']) + if self.spec.target.family == 'x86_64': + flags.append('-m64') + + return (None, None, flags) -- cgit v1.2.3-70-g09d2