created elf virtual package and updated dependent packages (#3317)

* created elf virtual package and updated dependent packages
* added `hide_files` context manager to handle moving files.
This commit is contained in:
Gregory Lee 2017-03-09 10:36:32 -08:00 committed by Todd Gamblin
parent 2ac343e92e
commit 604b75c1f9
10 changed files with 91 additions and 44 deletions

View File

@ -50,6 +50,7 @@
'fix_darwin_install_name',
'force_remove',
'force_symlink',
'hide_files',
'install',
'install_tree',
'is_exe',
@ -257,6 +258,18 @@ def working_dir(dirname, **kwargs):
os.chdir(orig_dir)
@contextmanager
def hide_files(*file_list):
try:
baks = ['%s.bak' % f for f in file_list]
for f, bak in zip(file_list, baks):
shutil.move(f, bak)
yield
finally:
for f, bak in zip(file_list, baks):
shutil.move(bak, f)
def touch(path):
"""Creates an empty file at the specified path."""
with open(path, 'a'):

View File

@ -35,7 +35,7 @@ class Callpath(Package):
version('1.0.2', 'b1994d5ee7c7db9d27586fc2dcf8f373')
version('1.0.1', '0047983d2a52c5c335f8ba7f5bab2325')
depends_on("libelf")
depends_on("elf", type="link")
depends_on("libdwarf")
depends_on("dyninst")
depends_on("adept-utils")
@ -44,6 +44,9 @@ class Callpath(Package):
def install(self, spec, prefix):
# TODO: offer options for the walker used.
cmake('.', "-DCALLPATH_WALKER=dyninst", *std_cmake_args)
cmake_args = std_cmake_args
if spec.satisfies("^dyninst@9.3.0:"):
cmake_args.append("-DCMAKE_CXX_FLAGS='-std=c++11 -fpermissive'")
cmake('.', "-DCALLPATH_WALKER=dyninst", *cmake_args)
make()
make("install")

View File

@ -33,13 +33,7 @@ class Dyninst(Package):
url = "https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz"
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
# version 9.2.1b was the latest git commit when trying to port to a
# ppc64le system to get fixes in computeAddrWidth independent of
# endianness. This version can be removed if the next release includes
# this change. The actual commit was
# b8596ad4023ec40ac07e669ff8ea3ec06e262703
version('9.2.1b', git='https://github.com/dyninst/dyninst.git',
commit='859cb778e20b619443c943c96dd1851da763142b')
version('9.3.0', 'edde7847dc673ca69bd59412af572450')
version('9.2.0', 'ad023f85e8e57837ed9de073b59d6bab',
url="https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz")
version('9.1.0', '5c64b77521457199db44bec82e4988ac',
@ -54,7 +48,8 @@ class Dyninst(Package):
variant('stat_dysect', default=False,
description="patch for STAT's DySectAPI")
depends_on("libelf")
depends_on("elf@0", type='link', when='@:9.2.99')
depends_on("elf@1", type='link', when='@9.3.0:')
depends_on("libdwarf")
depends_on("boost@1.42:")
depends_on('cmake', type='build')
@ -70,7 +65,7 @@ def install(self, spec, prefix):
make("install")
return
libelf = spec['libelf'].prefix
libelf = spec['elf'].prefix
libdwarf = spec['libdwarf'].prefix
with working_dir('spack-build', create=True):

View File

@ -43,7 +43,7 @@ class Elfutils(AutotoolsPackage):
git='git://git.fedorahosted.org/git/elfutils.git',
tag='elfutils-0.163')
provides('elf')
provides('elf@1')
def configure_args(self):
return ['--enable-maintainer-mode']

View File

@ -62,8 +62,12 @@ class Extrae(Package):
depends_on("boost")
depends_on("libdwarf")
depends_on("papi")
depends_on("libelf")
depends_on("elf", type="link")
depends_on("libxml2")
# 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):
@ -74,6 +78,16 @@ def install(self, spec, prefix):
elif 'mvapich2' in spec:
mpi = spec['mvapich2']
extra_config_args = []
# This was added due to configure failure
# https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
extra_config_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')
configure("--prefix=%s" % prefix,
"--with-mpi=%s" % mpi.prefix,
"--with-unwind=%s" % spec['libunwind'].prefix,
@ -83,10 +97,11 @@ def install(self, spec, prefix):
"--with-papi=%s" % spec['papi'].prefix,
"--with-dyninst-headers=%s" % spec[
'dyninst'].prefix.include,
"--with-elf=%s" % spec['libelf'].prefix,
"--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)
"--with-dyninst-libs=%s" % spec['dyninst'].prefix.lib,
*extra_config_args)
make()
make("install", parallel=False)

View File

@ -38,6 +38,9 @@ class Launchmon(Package):
depends_on('libtool', type='build')
depends_on('libgcrypt')
depends_on('libgpg-error')
depends_on("elf", type='link')
depends_on("boost")
depends_on("spectrum-mpi", when='arch=ppc64le')
def install(self, spec, prefix):
configure(

View File

@ -48,37 +48,54 @@ class Libdwarf(Package):
version('20130729', '4cc5e48693f7b93b7aa0261e63c0e21d')
version('20130207', '64b42692e947d5180e162e46c689dfbf')
version('20130126', 'ded74a5e90edb5a12aac3c29d260c5db')
depends_on("libelf")
depends_on("elf", type='link')
parallel = False
def install(self, spec, prefix):
# dwarf build does not set arguments for ar properly
make.add_default_arg('ARFLAGS=rcs')
# Dwarf doesn't provide an install, so we have to do it.
mkdirp(prefix.bin, prefix.include, prefix.lib, prefix.man1)
# elfutils contains a dwarf.h that conflicts with libdwarf's
# TODO: we should remove this when we can modify the include order
hide_list = []
if spec.satisfies('^elfutils'):
dwarf_h = join_path(spec['elfutils'].prefix, 'include/dwarf.h')
hide_list.append(dwarf_h)
with hide_files(*hide_list):
# dwarf build does not set arguments for ar properly
make.add_default_arg('ARFLAGS=rcs')
with working_dir('libdwarf'):
configure("--prefix=" + prefix, "--enable-shared")
make()
# Dwarf doesn't provide an install, so we have to do it.
mkdirp(prefix.bin, prefix.include, prefix.lib, prefix.man1)
install('libdwarf.a', prefix.lib)
install('libdwarf.so', prefix.lib)
install('libdwarf.h', prefix.include)
install('dwarf.h', prefix.include)
with working_dir('libdwarf'):
extra_config_args = []
if spec.satisfies('@20130126:20130729'):
dwarfdump_dir = 'dwarfdump2'
else:
dwarfdump_dir = 'dwarfdump'
with working_dir(dwarfdump_dir):
configure("--prefix=" + prefix)
# this is to prevent picking up system /usr/include/libelf.h
if spec.satisfies('^libelf'):
libelf_inc_dir = join_path(spec['libelf'].prefix,
'include/libelf')
extra_config_args.append('CFLAGS=-I{0}'.format(
libelf_inc_dir))
configure("--prefix=" + prefix, "--enable-shared",
*extra_config_args)
make()
# This makefile has strings of copy commands that
# cause a race in parallel
make(parallel=False)
install('libdwarf.a', prefix.lib)
install('libdwarf.so', prefix.lib)
install('libdwarf.h', prefix.include)
install('dwarf.h', prefix.include)
install('dwarfdump', prefix.bin)
install('dwarfdump.conf', prefix.lib)
install('dwarfdump.1', prefix.man1)
if spec.satisfies('@20130126:20130729'):
dwarfdump_dir = 'dwarfdump2'
else:
dwarfdump_dir = 'dwarfdump'
with working_dir(dwarfdump_dir):
configure("--prefix=" + prefix)
# This makefile has strings of copy commands that
# cause a race in parallel
make(parallel=False)
install('dwarfdump', prefix.bin)
install('dwarfdump.conf', prefix.lib)
install('dwarfdump.1', prefix.man1)

View File

@ -37,7 +37,7 @@ class Libelf(AutotoolsPackage):
version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')
provides('elf')
provides('elf@0')
def configure_args(self):
args = ["--enable-shared",

View File

@ -60,7 +60,7 @@ class Openspeedshop(Package):
"""
homepage = "http://www.openspeedshop.org"
url = "https://github.com/OpenSpeedShop"
url = "https://github.com/OpenSpeedShop"
version('2.2', '16cb051179c2038de4e8a845edf1d573')
# Use when the git repository is available
version('2.3', branch='master',
@ -115,6 +115,8 @@ class Openspeedshop(Package):
depends_on("bison", type='build')
depends_on("flex", type='build')
depends_on("binutils@2.24+krellpatch", type='build')
# TODO: when using dyninst@9.3.0:, we will need to use elf
# depends_on("elf", type="link")
depends_on("libelf")
depends_on("libdwarf")
depends_on("sqlite")

View File

@ -31,11 +31,11 @@ class Stat(Package):
homepage = "http://paradyn.org/STAT/STAT.html"
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
version('3.0.0', 'a97cb235c266371c4a26329112de48a2',
url='https://github.com/LLNL/STAT/releases/download/v3.0.0/STAT-3.0.0.tar.gz')
version('2.2.0', '26bd69dd57a15afdd5d0ebdb0b7fb6fc')
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
version('3.0.0', 'a97cb235c266371c4a26329112de48a2',
url='https://github.com/LLNL/STAT/releases/download/v3.0.0/STAT-3.0.0.tar.gz')
# TODO: dysect requires Dyninst patch for version 3.0.0b
variant('dysect', default=False, description="enable DySectAPI")
@ -44,7 +44,6 @@ class Stat(Package):
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
depends_on('libelf')
depends_on('libdwarf')
depends_on('dyninst', when='~dysect')
depends_on('dyninst@8.2.1+stat_dysect', when='+dysect')