summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorRĂ©mi Lacroix <remi.lacroix@idris.fr>2020-07-31 05:23:49 +0200
committerGitHub <noreply@github.com>2020-07-30 22:23:49 -0500
commitccb316964d7d2bed9fc7622df2bd77f41d0aef43 (patch)
treed24d1bab5cba1800f53de89e2d0c717f9c5d2b4c /var
parent58911d824862b3ebf17b74f3af3c3c5efcc3aa36 (diff)
downloadspack-ccb316964d7d2bed9fc7622df2bd77f41d0aef43.tar.gz
spack-ccb316964d7d2bed9fc7622df2bd77f41d0aef43.tar.bz2
spack-ccb316964d7d2bed9fc7622df2bd77f41d0aef43.tar.xz
spack-ccb316964d7d2bed9fc7622df2bd77f41d0aef43.zip
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.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/ferret/package.py206
1 files changed, 159 insertions, 47 deletions
diff --git a/var/spack/repos/builtin/packages/ferret/package.py b/var/spack/repos/builtin/packages/ferret/package.py
index 1ad1978240..5878403e26 100644
--- a/var/spack/repos/builtin/packages/ferret/package.py
+++ b/var/spack/repos/builtin/packages/ferret/package.py
@@ -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
-
- 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')
+ spec = self.spec
+ hdf5_prefix = spec['hdf5'].prefix
+ netcdff_prefix = spec['netcdf-fortran'].prefix
+ readline_prefix = spec['readline'].prefix
+ libz_prefix = spec['zlib'].prefix
+
+ 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 @@ class Ferret(Package):
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))