From 6e895c4cccb67304d3391478cc3fd0c5641bca51 Mon Sep 17 00:00:00 2001 From: Jason Sarich Date: Tue, 24 Jan 2017 13:48:01 -0600 Subject: add static options for some libraries (#2876) * add static options for some libraries * make requested changes: add comments and use configure_args --- var/spack/repos/builtin/packages/bzip2/package.py | 34 ++++++++++++---------- var/spack/repos/builtin/packages/matio/package.py | 4 +++ var/spack/repos/builtin/packages/metis/package.py | 9 ++++++ .../repos/builtin/packages/parmetis/package.py | 10 +++++++ var/spack/repos/builtin/packages/zlib/package.py | 8 +++++ 5 files changed, 50 insertions(+), 15 deletions(-) diff --git a/var/spack/repos/builtin/packages/bzip2/package.py b/var/spack/repos/builtin/packages/bzip2/package.py index 9e5894a6a8..d12b88e734 100644 --- a/var/spack/repos/builtin/packages/bzip2/package.py +++ b/var/spack/repos/builtin/packages/bzip2/package.py @@ -36,6 +36,7 @@ class Bzip2(Package): url = "http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz" version('1.0.6', '00b516f4704d4a7cb50a1d97e6e8e15b') + variant('shared', default=True, description='Enables the build of shared libraries.') def patch(self): # bzip2 comes with two separate Makefiles for static and dynamic builds @@ -71,27 +72,30 @@ class Bzip2(Package): def install(self, spec, prefix): # Build the dynamic library first - make('-f', 'Makefile-libbz2_so') + if '+shared' in spec: + make('-f', 'Makefile-libbz2_so') + # Build the static library and everything else make() make('install', 'PREFIX={0}'.format(prefix)) - install('bzip2-shared', join_path(prefix.bin, 'bzip2')) + if '+shared' in spec: + install('bzip2-shared', join_path(prefix.bin, 'bzip2')) - v1, v2, v3 = (self.spec.version.up_to(i) for i in (1, 2, 3)) - if 'darwin' in self.spec.architecture: - lib = 'libbz2.dylib' - lib1, lib2, lib3 = ('libbz2.{0}.dylib'.format(v) - for v in (v1, v2, v3)) - else: - lib = 'libbz2.so' - lib1, lib2, lib3 = ('libbz2.so.{0}'.format(v) - for v in (v1, v2, v3)) + v1, v2, v3 = (self.spec.version.up_to(i) for i in (1, 2, 3)) + if 'darwin' in self.spec.architecture: + lib = 'libbz2.dylib' + lib1, lib2, lib3 = ('libbz2.{0}.dylib'.format(v) + for v in (v1, v2, v3)) + else: + lib = 'libbz2.so' + lib1, lib2, lib3 = ('libbz2.so.{0}'.format(v) + for v in (v1, v2, v3)) - install(lib3, join_path(prefix.lib, lib3)) - with working_dir(prefix.lib): - for l in (lib, lib1, lib2): - symlink(lib3, l) + install(lib3, join_path(prefix.lib, lib3)) + with working_dir(prefix.lib): + for l in (lib, lib1, lib2): + symlink(lib3, l) with working_dir(prefix.bin): force_remove('bunzip2', 'bzcat') diff --git a/var/spack/repos/builtin/packages/matio/package.py b/var/spack/repos/builtin/packages/matio/package.py index a33b23a4e9..3c48b8f3fc 100644 --- a/var/spack/repos/builtin/packages/matio/package.py +++ b/var/spack/repos/builtin/packages/matio/package.py @@ -37,6 +37,8 @@ class Matio(AutotoolsPackage): description='support for compressed mat files') variant("hdf5", default=True, description='support for version 7.3 mat files via hdf5') + variant("shared", default=True, description='Enables the build of shared libraries.') + depends_on("zlib", when="+zlib") depends_on("hdf5", when="+hdf5") @@ -47,4 +49,6 @@ class Matio(AutotoolsPackage): args.append("--with-zlib=%s" % self.spec['zlib'].prefix) if '+hdf5' in self.spec: args.append("--with-hdf5=%s" % self.spec['hdf5'].prefix) + if '+shared' not in self.spec: + args.append("--disable-shared") return args diff --git a/var/spack/repos/builtin/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py index b66677288c..f15d544b7b 100644 --- a/var/spack/repos/builtin/packages/metis/package.py +++ b/var/spack/repos/builtin/packages/metis/package.py @@ -186,6 +186,15 @@ class Metis(Package): if '+shared' in spec: options.append('-DSHARED:BOOL=ON') + else: + # Remove all RPATH options + # (RPATHxxx options somehow trigger cmake to link dynamically) + rpath_options = [] + for o in options: + if o.find('RPATH') >= 0: + rpath_options.append(o) + for o in rpath_options: + options.remove(o) if '+debug' in spec: options.extend(['-DDEBUG:BOOL=ON', '-DCMAKE_BUILD_TYPE:STRING=Debug']) diff --git a/var/spack/repos/builtin/packages/parmetis/package.py b/var/spack/repos/builtin/packages/parmetis/package.py index 74e00cc9e0..0e6cd5390a 100644 --- a/var/spack/repos/builtin/packages/parmetis/package.py +++ b/var/spack/repos/builtin/packages/parmetis/package.py @@ -71,6 +71,16 @@ class Parmetis(Package): if '+shared' in spec: options.append('-DSHARED:BOOL=ON') + else: + # Remove all RPATH options + # (RPATHxxx options somehow trigger cmake to link dynamically) + rpath_options = [] + for o in options: + if o.find('RPATH') >= 0: + rpath_options.append(o) + for o in rpath_options: + options.remove(o) + if '+debug' in spec: options.extend(['-DDEBUG:BOOL=ON', '-DCMAKE_BUILD_TYPE:STRING=Debug']) diff --git a/var/spack/repos/builtin/packages/zlib/package.py b/var/spack/repos/builtin/packages/zlib/package.py index ea758e0188..05b9bb8ded 100644 --- a/var/spack/repos/builtin/packages/zlib/package.py +++ b/var/spack/repos/builtin/packages/zlib/package.py @@ -40,7 +40,15 @@ class Zlib(AutotoolsPackage): variant('pic', default=True, description='Produce position-independent code (for shared libs)') + variant('shared', default=True, + description='Enables the build of shared libraries.') def setup_environment(self, spack_env, run_env): if '+pic' in self.spec: spack_env.set('CFLAGS', self.compiler.pic_flag) + + def configure_args(self): + config_args = [] + if '+shared' not in self.spec: + config_args.append('--static') + return config_args -- cgit v1.2.3-70-g09d2