diff --git a/var/spack/repos/builtin/packages/extrae/package.py b/var/spack/repos/builtin/packages/extrae/package.py index b749196349..d8428fb125 100644 --- a/var/spack/repos/builtin/packages/extrae/package.py +++ b/var/spack/repos/builtin/packages/extrae/package.py @@ -24,7 +24,7 @@ # LDFLAGS=-pthread -class Extrae(Package): +class Extrae(AutotoolsPackage): """Extrae is the package devoted to generate tracefiles which can be analyzed later by Paraver. Extrae is a tool that uses different interposition mechanisms to inject probes into the @@ -35,54 +35,76 @@ class Extrae(Package): OpenMP, CUDA, OpenCL, pthread, OmpSs""" homepage = "https://tools.bsc.es/extrae" url = "https://ftp.tools.bsc.es/extrae/extrae-3.4.1-src.tar.bz2" + version('3.7.1', sha256='95810b057f95e91bfc89813eb8bd320dfe40614fc8e98c63d95c5101c56dd213') version('3.4.1', '69001f5cfac46e445d61eeb567bc8844') + depends_on("autoconf", type='build') + depends_on("automake", type='build') + depends_on("libtool", type='build') + depends_on("m4", type='build') + depends_on("mpi") - depends_on("dyninst") depends_on("libunwind") depends_on("boost") depends_on("libdwarf") depends_on("papi") depends_on("elf", type="link") depends_on("libxml2") - + depends_on("numactl") + depends_on("binutils+libiberty") + depends_on("gettext") # gettext dependency added to find -lintl # https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined - depends_on("gettext") - depends_on("binutils+libiberty") - def install(self, spec, prefix): - if 'openmpi' in spec: - mpi = spec['openmpi'] - elif 'mpich' in spec: - mpi = spec['mpich'] - elif 'mvapich2' in spec: - mpi = spec['mvapich2'] + build_directory = 'spack-build' - extra_config_args = [] + variant('dyninst', default=False, description="Use dyninst for dynamic code installation") + depends_on('dyninst@:9', when='+dyninst') + + variant('papi', default=True, description="Use PAPI to collect performance counters") + depends_on('papi', when='+papi') + + def configure_args(self): + spec = self.spec + args = ["--with-mpi=%s" % spec['mpi'].prefix, + "--with-unwind=%s" % spec['libunwind'].prefix, + "--with-boost=%s" % spec['boost'].prefix, + "--with-dwarf=%s" % spec['libdwarf'].prefix, + "--with-elf=%s" % spec['elf'].prefix, + "--with-xml-prefix=%s" % spec['libxml2'].prefix, + "--with-binutils=%s" % spec['binutils'].prefix] + + args += (["--with-papi=%s" % spec['papi'].prefix] + if '+papi' in self.spec else + ["--without-papi"]) + + args += (["--with-dyninst=%s" % spec['dyninst'].prefix] + if '+dyninst' in self.spec else + ["--without-dyninst"]) + + if spec.satisfies("^dyninst@9.3.0:"): + make.add_default_arg("CXXFLAGS=%s" % self.compiler.cxx11_flag) + args.append("CXXFLAGS=%s" % self.compiler.cxx11_flag) # This was added due to configure failure # https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined - extra_config_args.append('LDFLAGS=-lintl') + args.append('LDFLAGS=-lintl') - if spec.satisfies("^dyninst@9.3.0:"): - make.add_default_arg('CXXFLAGS=-std=c++11') - extra_config_args.append('CXXFLAGS=-std=c++11') + return(args) - configure("--prefix=%s" % prefix, - "--with-mpi=%s" % mpi.prefix, - "--with-unwind=%s" % spec['libunwind'].prefix, - "--with-dyninst=%s" % spec['dyninst'].prefix, - "--with-boost=%s" % spec['boost'].prefix, - "--with-dwarf=%s" % spec['libdwarf'].prefix, - "--with-papi=%s" % spec['papi'].prefix, - "--with-dyninst-headers=%s" % spec[ - 'dyninst'].prefix.include, - "--with-elf=%s" % spec['elf'].prefix, - "--with-xml-prefix=%s" % spec['libxml2'].prefix, - "--with-binutils=%s" % spec['binutils'].prefix, - "--with-dyninst-libs=%s" % spec['dyninst'].prefix.lib, - *extra_config_args) + def install(self, spec, prefix): + with working_dir(self.build_directory): + # parallel installs are buggy prior to 3.7 + # see https://github.com/bsc-performance-tools/extrae/issues/18 + if(spec.satisfies('@3.7:')): + make('install', parallel=True) + else: + make('install', parallel=False) - make() - make("install", parallel=False) + def setup_environment(self, spack_env, run_env): + # set EXTRAE_HOME in the module file + run_env.set('EXTRAE_HOME', self.prefix) + + def setup_dependent_environment(self, spack_env, run_env, dependent_spec): + # set EXTRAE_HOME for everyone using the Extrae package + spack_env.set('EXTRAE_HOME', self.prefix)