
Besides adding autoconf and automake as needed for tests of 2.4.6, skip Fortran test cases when Fortran compilers are not provided.
116 lines
4.5 KiB
Python
116 lines
4.5 KiB
Python
# Copyright 2013-2021 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)
|
|
|
|
import re
|
|
|
|
|
|
class Libtool(AutotoolsPackage, GNUMirrorPackage):
|
|
"""libtool -- library building part of autotools."""
|
|
|
|
homepage = 'https://www.gnu.org/software/libtool/'
|
|
gnu_mirror_path = "libtool/libtool-2.4.6.tar.gz"
|
|
|
|
version('develop', git='https://git.savannah.gnu.org/git/libtool.git',
|
|
branch='master', submodules=True)
|
|
version('2.4.6', sha256='e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3')
|
|
# Version released in 2011
|
|
version('2.4.2', sha256='b38de44862a987293cd3d8dfae1c409d514b6c4e794ebc93648febf9afc38918', deprecated=True)
|
|
|
|
depends_on('m4@1.4.6:', type='build')
|
|
|
|
with when('@2.4.2'):
|
|
depends_on('autoconf', type='build')
|
|
depends_on('automake', type='build')
|
|
depends_on('help2man', type='build')
|
|
|
|
with when('@2.4.6'):
|
|
depends_on('autoconf@2.62:', type='test')
|
|
depends_on('automake', type='test')
|
|
|
|
with when('@develop'):
|
|
depends_on('autoconf', type='build')
|
|
depends_on('automake', type='build')
|
|
depends_on('help2man', type='build')
|
|
depends_on('xz', type='build')
|
|
depends_on('texinfo', type='build')
|
|
# Fix parsing of compiler output when collecting predeps and postdeps
|
|
# https://lists.gnu.org/archive/html/bug-libtool/2016-03/msg00003.html
|
|
patch('flag_space.patch')
|
|
|
|
build_directory = 'spack-build'
|
|
|
|
tags = ['build-tools']
|
|
|
|
executables = ['^g?libtool(ize)?$']
|
|
|
|
@classmethod
|
|
def determine_version(cls, exe):
|
|
output = Executable(exe)('--version', output=str, error=str)
|
|
match = re.search(r'\(GNU libtool\)\s+(\S+)', output)
|
|
return match.group(1) if match else None
|
|
|
|
@when('@2.4.2,develop')
|
|
def autoreconf(self, spec, prefix):
|
|
Executable('./bootstrap')()
|
|
|
|
@property
|
|
def libs(self):
|
|
return find_libraries(
|
|
['libltdl'], root=self.prefix, recursive=True, shared=True
|
|
)
|
|
|
|
def _make_executable(self, name):
|
|
return Executable(join_path(self.prefix.bin, name))
|
|
|
|
def patch(self):
|
|
# Remove flags not recognized by the NVIDIA compiler
|
|
if self.spec.satisfies('%nvhpc@:20.11'):
|
|
filter_file('-fno-builtin', '-Mnobuiltin', 'configure')
|
|
filter_file('-fno-builtin', '-Mnobuiltin', 'libltdl/configure')
|
|
|
|
def setup_dependent_build_environment(self, env, dependent_spec):
|
|
env.append_path('ACLOCAL_PATH', self.prefix.share.aclocal)
|
|
|
|
def setup_dependent_package(self, module, dependent_spec):
|
|
# Automake is very likely to be a build dependency, so we add
|
|
# the tools it provides to the dependent module. Some build
|
|
# systems differentiate between BSD libtool (e.g., Darwin) and
|
|
# GNU libtool, so also add 'glibtool' and 'glibtoolize' to the
|
|
# list of executables. See Homebrew:
|
|
# https://github.com/Homebrew/homebrew-core/blob/master/Formula/libtool.rb
|
|
executables = ['libtoolize', 'libtool', 'glibtoolize', 'glibtool']
|
|
for name in executables:
|
|
setattr(module, name, self._make_executable(name))
|
|
|
|
@run_after('install')
|
|
def post_install(self):
|
|
# Some platforms name GNU libtool and GNU libtoolize
|
|
# 'glibtool' and 'glibtoolize', respectively, to differentiate
|
|
# them from BSD libtool and BSD libtoolize. On these BSD
|
|
# platforms, build systems sometimes expect to use the assumed
|
|
# GNU commands glibtool and glibtoolize instead of the BSD
|
|
# variant; this happens frequently, for instance, on Darwin
|
|
symlink(join_path(self.prefix.bin, 'libtool'),
|
|
join_path(self.prefix.bin, 'glibtool'))
|
|
symlink(join_path(self.prefix.bin, 'libtoolize'),
|
|
join_path(self.prefix.bin, 'glibtoolize'))
|
|
|
|
def setup_build_environment(self, env):
|
|
"""Wrapper until spack has a real implementation of setup_test_environment()"""
|
|
if self.run_tests:
|
|
self.setup_test_environment(env)
|
|
|
|
def setup_test_environment(self, env):
|
|
"""When Fortran is not provided, a few tests need to be skipped"""
|
|
if (self.compiler.f77 is None):
|
|
env.set('F77', 'no')
|
|
if (self.compiler.fc is None):
|
|
env.set('FC', 'no')
|
|
|
|
@when('@2.4.6')
|
|
def check(self):
|
|
"""installcheck of libtool-2.4.6 runs the full testsuite, skip 'make check'"""
|
|
pass
|