Improve Ferret package (#17620)
* Ferret: Add missing dependency with curl. * Ferret: Don't force using the static version of libgfortran. * Ferret: Ensure Spack's compiler wrappers are used. This allows properly setting the rpaths. * Ferret: Add support for versions 7.3 to 7.6. * Ferret: Add a variant to install Ferret standard datasets. * Ferret: Define some useful runtime environnement variables. * Ferret: Fix flake8. Also add myself as a maintainer as suggested by @alalazo.
This commit is contained in:
parent
58911d8248
commit
ccb316964d
@ -13,10 +13,18 @@ class Ferret(Package):
|
||||
designed to meet the needs of oceanographers and meteorologists
|
||||
analyzing large and complex gridded data sets."""
|
||||
homepage = "http://ferret.pmel.noaa.gov/Ferret/home"
|
||||
url = "ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.v696.tar.gz"
|
||||
url = "https://github.com/NOAA-PMEL/Ferret/archive/v7.6.0.tar.gz"
|
||||
|
||||
version('7.2', sha256='21c339b1bafa6939fc869428d906451f130f7e77e828c532ab9488d51cf43095')
|
||||
version('6.96', sha256='7eb87156aa586cfe838ab83f08b2102598f9ab62062d540a5da8c9123816331a')
|
||||
maintainers = ['RemiLacroix-IDRIS']
|
||||
|
||||
version('7.6.0', sha256='69832d740bd44c9eadd198a5de4d96c4c01ae90ae28c2c3414c1bb9f43e475d1')
|
||||
version('7.5.0', sha256='2a038c547e6e80e6bd0645a374c3247360cf8c94ea56f6f3444b533257eb16db')
|
||||
version('7.4', sha256='5167bb9e6ef441ae9cf90da555203d2155e3fcf929e7b8dddb237de0d58c5e5f')
|
||||
version('7.3', sha256='ae80a732c34156b5287a23696cf4ae4faf4de1dd705ff43cbb4168b05c6faaf4')
|
||||
version('7.2', sha256='21c339b1bafa6939fc869428d906451f130f7e77e828c532ab9488d51cf43095')
|
||||
version('6.96', sha256='7eb87156aa586cfe838ab83f08b2102598f9ab62062d540a5da8c9123816331a')
|
||||
|
||||
variant('datasets', default=False, description="Install Ferret standard datasets")
|
||||
|
||||
depends_on("hdf5+hl")
|
||||
depends_on("netcdf-c")
|
||||
@ -24,53 +32,128 @@ class Ferret(Package):
|
||||
depends_on("readline")
|
||||
depends_on("zlib")
|
||||
depends_on("libx11")
|
||||
depends_on("curl")
|
||||
|
||||
# Make Java dependency optional with older versions of Ferret
|
||||
patch('https://github.com/NOAA-PMEL/Ferret/commit/c7eb70a0b17045c8ca7207d586bfea77a5340668.patch',
|
||||
sha256='5bd581db4578c013faed375844b206fbe71f93fe9ce60f8f9f41d64abc6a5972',
|
||||
level=1, working_dir='FERRET', when='@:6.99')
|
||||
|
||||
resource(name='datasets',
|
||||
url='https://github.com/NOAA-PMEL/FerretDatasets/archive/v7.6.tar.gz',
|
||||
sha256='b2fef758ec1817c1c19e6225857ca3a82c727d209ed7fd4697d45c5533bb2c72',
|
||||
placement='fer_dsets', when='+datasets')
|
||||
|
||||
def url_for_version(self, version):
|
||||
return "ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.v{0}.tar.gz".format(
|
||||
version.joined)
|
||||
if version <= Version('7.2'):
|
||||
return 'ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.v{0}.tar.gz'.format(
|
||||
version.joined)
|
||||
else:
|
||||
return 'https://github.com/NOAA-PMEL/Ferret/archive/v{0}.tar.gz'.format(version)
|
||||
|
||||
def patch(self):
|
||||
hdf5_prefix = self.spec['hdf5'].prefix
|
||||
netcdff_prefix = self.spec['netcdf-fortran'].prefix
|
||||
readline_prefix = self.spec['readline'].prefix
|
||||
libz_prefix = self.spec['zlib'].prefix
|
||||
spec = self.spec
|
||||
hdf5_prefix = spec['hdf5'].prefix
|
||||
netcdff_prefix = spec['netcdf-fortran'].prefix
|
||||
readline_prefix = spec['readline'].prefix
|
||||
libz_prefix = spec['zlib'].prefix
|
||||
|
||||
filter_file(r'^BUILDTYPE.+',
|
||||
'BUILDTYPE = x86_64-linux',
|
||||
'FERRET/site_specific.mk')
|
||||
filter_file(r'^INSTALL_FER_DIR.+',
|
||||
'INSTALL_FER_DIR = %s' % self.spec.prefix,
|
||||
'FERRET/site_specific.mk')
|
||||
filter_file(r'^HDF5_DIR.+',
|
||||
'HDF5_DIR = %s' % hdf5_prefix,
|
||||
'FERRET/site_specific.mk')
|
||||
filter_file(r'^NETCDF4_DIR.+',
|
||||
'NETCDF4_DIR = %s' % netcdff_prefix,
|
||||
'FERRET/site_specific.mk')
|
||||
filter_file(r'^READLINE_DIR.+',
|
||||
'READLINE_DIR = %s' % readline_prefix,
|
||||
'FERRET/site_specific.mk')
|
||||
filter_file(r'^LIBZ_DIR.+',
|
||||
'LIBZ_DIR = %s' % libz_prefix,
|
||||
'FERRET/site_specific.mk')
|
||||
filter_file(r'^JAVA_HOME.+',
|
||||
' ',
|
||||
'FERRET/site_specific.mk')
|
||||
filter_file(r'-lm',
|
||||
'-lgfortran -lm',
|
||||
'FERRET/platform_specific.mk.x86_64-linux')
|
||||
filter_file(r'\$\(NETCDF4_DIR\)/lib64/libnetcdff.a',
|
||||
"-L%s -lnetcdff" % self.spec['netcdf-fortran'].prefix.lib,
|
||||
'FERRET/platform_specific.mk.x86_64-linux')
|
||||
filter_file(r'\$\(NETCDF4_DIR\)/lib64/libnetcdf.a',
|
||||
"-L%s -lnetcdf" % self.spec['netcdf-c'].prefix.lib,
|
||||
'FERRET/platform_specific.mk.x86_64-linux')
|
||||
filter_file(r'\$\(HDF5_DIR\)/lib64/libhdf5_hl.a',
|
||||
"-L%s -lhdf5_hl" % self.spec['hdf5'].prefix.lib,
|
||||
'FERRET/platform_specific.mk.x86_64-linux')
|
||||
filter_file(r'\$\(HDF5_DIR\)/lib64/libhdf5.a',
|
||||
"-L%s -lhdf5" % self.spec['hdf5'].prefix.lib,
|
||||
'FERRET/platform_specific.mk.x86_64-linux')
|
||||
work_dir = 'FERRET' if '@:7.2' in spec else '.'
|
||||
with working_dir(work_dir, create=False):
|
||||
if '@7.3:' in spec:
|
||||
copy('site_specific.mk.in', 'site_specific.mk')
|
||||
copy('external_functions/ef_utility/site_specific.mk.in',
|
||||
'external_functions/ef_utility/site_specific.mk')
|
||||
|
||||
filter_file(r'^DIR_PREFIX.+',
|
||||
'DIR_PREFIX = %s' % self.stage.source_path,
|
||||
'site_specific.mk')
|
||||
# Setting this to blank not to force
|
||||
# using the static version of readline
|
||||
filter_file(r'^(READLINE_(LIB)?DIR).+',
|
||||
'\\1 = ',
|
||||
'site_specific.mk')
|
||||
else:
|
||||
filter_file(r'^LIBZ_DIR.+',
|
||||
'LIBZ_DIR = %s' % libz_prefix,
|
||||
'site_specific.mk')
|
||||
filter_file(r'^JAVA_HOME.+',
|
||||
' ',
|
||||
'site_specific.mk')
|
||||
filter_file(r'^READLINE_DIR.+',
|
||||
'READLINE_DIR = %s' % readline_prefix,
|
||||
'site_specific.mk')
|
||||
|
||||
filter_file(r'^BUILDTYPE.+',
|
||||
'BUILDTYPE = x86_64-linux',
|
||||
'site_specific.mk')
|
||||
filter_file(r'^INSTALL_FER_DIR.+',
|
||||
'INSTALL_FER_DIR = %s' % spec.prefix,
|
||||
'site_specific.mk')
|
||||
filter_file(r'^(HDF5_(LIB)?DIR).+',
|
||||
'\\1 = %s' % hdf5_prefix,
|
||||
'site_specific.mk')
|
||||
filter_file(r'^(NETCDF4?_(LIB)?DIR).+',
|
||||
'\\1 = %s' % netcdff_prefix,
|
||||
'site_specific.mk')
|
||||
|
||||
if '@:7.3' in spec:
|
||||
# Don't force using the static version of libz
|
||||
filter_file(r'\$\(LIBZ_DIR\)/lib64/libz.a',
|
||||
'-lz',
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
|
||||
# Don't force using the static version of libgfortran
|
||||
filter_file(r'-Wl,-Bstatic -lgfortran -Wl,-Bdynamic',
|
||||
'-lgfortran',
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
|
||||
# This prevents the rpaths to be properly set
|
||||
# by Spack's compiler wrappers
|
||||
filter_file(r'-v --verbose',
|
||||
'',
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
|
||||
filter_file(r'^[ \t]*LD[ \t]*=.+',
|
||||
'LD = %s' % spack_cc,
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
else:
|
||||
# Don't force using the static version of libgfortran
|
||||
filter_file(r'-static-libgfortran',
|
||||
'',
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
|
||||
if '@:7.4' in spec:
|
||||
compilers_spec_file = 'platform_specific.mk.x86_64-linux'
|
||||
else:
|
||||
compilers_spec_file = 'site_specific.mk'
|
||||
|
||||
# Make sure Ferret uses Spack's compiler wrappers
|
||||
filter_file(r'^[ \t]*CC[ \t]*=.+',
|
||||
'CC = %s' % spack_cc,
|
||||
compilers_spec_file)
|
||||
filter_file(r'^[ \t]*CXX[ \t]*=.+',
|
||||
'CXX = %s' % spack_cxx,
|
||||
compilers_spec_file)
|
||||
filter_file(r'^[ \t]*FC[ \t]*=.+',
|
||||
'FC = %s' % spack_fc,
|
||||
compilers_spec_file)
|
||||
filter_file(r'^[ \t]*F77[ \t]*=.+',
|
||||
'F77 = %s' % spack_f77,
|
||||
compilers_spec_file)
|
||||
|
||||
filter_file(r'\$\(NETCDF4?_(LIB)?DIR\).*/libnetcdff.a',
|
||||
"-L%s -lnetcdff" % spec['netcdf-fortran'].prefix.lib,
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
filter_file(r'\$\(NETCDF4?_(LIB)?DIR\).*/libnetcdf.a',
|
||||
"-L%s -lnetcdf" % spec['netcdf-c'].prefix.lib,
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
filter_file(r'\$\(HDF5_(LIB)?DIR\).*/libhdf5_hl.a',
|
||||
"-L%s -lhdf5_hl" % spec['hdf5'].prefix.lib,
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
filter_file(r'\$\(HDF5_(LIB)?DIR\).*/libhdf5.a',
|
||||
"-L%s -lhdf5" % spec['hdf5'].prefix.lib,
|
||||
'platform_specific.mk.x86_64-linux')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
if 'LDFLAGS' in env and env['LDFLAGS']:
|
||||
@ -78,8 +161,37 @@ def install(self, spec, prefix):
|
||||
else:
|
||||
env['LDFLAGS'] = '-lquadmath'
|
||||
|
||||
with working_dir('FERRET', create=False):
|
||||
work_dir = 'FERRET' if '@:7.2' in self.spec else '.'
|
||||
with working_dir(work_dir, create=False):
|
||||
os.environ['LD_X11'] = '-L%s -lX11' % spec['libx11'].prefix.lib
|
||||
os.environ['HOSTTYPE'] = 'x86_64-linux'
|
||||
make(parallel=False)
|
||||
make("install")
|
||||
|
||||
if '+datasets' in self.spec:
|
||||
mkdir(self.prefix.fer_dsets)
|
||||
install_tree('fer_dsets', self.prefix.fer_dsets)
|
||||
|
||||
def setup_run_environment(self, env):
|
||||
env.set('FER_DIR', self.prefix)
|
||||
env.set('FER_GO', ' '.join(['.', self.prefix.go, self.prefix.examples,
|
||||
self.prefix.contrib]))
|
||||
env.set('FER_EXTERNAL_FUNCTIONS', self.prefix.ext_func.libs)
|
||||
env.set('FER_PALETTE', ' '.join(['.', self.prefix.ppl]))
|
||||
env.set('FER_FONTS', self.prefix.ppl.fonts)
|
||||
|
||||
fer_data = ['.']
|
||||
fer_descr = ['.']
|
||||
fer_grids = ['.']
|
||||
|
||||
if '+datasets' in self.spec:
|
||||
env.set('FER_DSETS', self.prefix.fer_dsets)
|
||||
|
||||
fer_data.append(self.prefix.fer_dsets.data)
|
||||
fer_descr.append(self.prefix.fer_dsets.descr)
|
||||
fer_grids.append(self.prefix.fer_dsets.grids)
|
||||
|
||||
fer_data.extend([self.prefix.go, self.prefix.examples])
|
||||
env.set('FER_DATA', ' '.join(fer_data))
|
||||
env.set('FER_DESCR', ' '.join(fer_descr))
|
||||
env.set('FER_GRIDS', ' '.join(fer_grids))
|
||||
|
Loading…
Reference in New Issue
Block a user