diff options
author | Timothy Brown <t-brown@users.noreply.github.com> | 2021-08-23 10:55:36 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-23 10:55:36 -0600 |
commit | 6e68792ded1b678ee7941d292cc6c0d90e080162 (patch) | |
tree | 17c91a9a19096310669f04f3277918feec73075d | |
parent | 2971a630b815fa88b71152787eca4ce2deb2dc7c (diff) | |
download | spack-6e68792ded1b678ee7941d292cc6c0d90e080162.tar.gz spack-6e68792ded1b678ee7941d292cc6c0d90e080162.tar.bz2 spack-6e68792ded1b678ee7941d292cc6c0d90e080162.tar.xz spack-6e68792ded1b678ee7941d292cc6c0d90e080162.zip |
Adding a heap of NOAA packages for UFS. (#25542)
* Adding a heap of NOAA packages for UFS.
Adding the Unified Forecast System (UFS) and all of the packages
it depends on.
* Fixing style tests.
* Removing the package CMAKE_BUILD_TYPE override.
* Removing compiler specs from `cmake_args()`.
20 files changed, 853 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/bacio/package.py b/var/spack/repos/builtin/packages/bacio/package.py new file mode 100644 index 0000000000..ebee5d6017 --- /dev/null +++ b/var/spack/repos/builtin/packages/bacio/package.py @@ -0,0 +1,19 @@ +# 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) + +from spack import * + + +class Bacio(CMakePackage): + """The bacio ibrary performs binary I/O for the NCEP models, processing + unformatted byte-addressable data records, and transforming the little + endian files and big endian files.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-bacio" + url = "https://github.com/NOAA-EMC/NCEPLIBS-bacio/archive/refs/tags/v2.4.1.tar.gz" + + maintainers = ['t-brown'] + + version('2.4.1', sha256='7b9b6ba0a288f438bfba6a08b6e47f8133f7dba472a74ac56a5454e2260a7200') diff --git a/var/spack/repos/builtin/packages/bufr/package.py b/var/spack/repos/builtin/packages/bufr/package.py new file mode 100644 index 0000000000..abea086131 --- /dev/null +++ b/var/spack/repos/builtin/packages/bufr/package.py @@ -0,0 +1,19 @@ +# 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) + +from spack import * + + +class Bufr(CMakePackage): + """The NOAA bufr library contains subroutines, functions and other utilities + that can be used to read (decode) and write (encode) data in BUFR, which + is a WMO standard format for the exchange of meteorological data.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-bufr" + url = "https://github.com/NOAA-EMC/NCEPLIBS-bufr/archive/refs/tags/bufr_v11.5.0.tar.gz" + + maintainers = ['t-brown'] + + version('11.5.0', sha256='d154839e29ef1fe82e58cf20232e9f8a4f0610f0e8b6a394b7ca052e58f97f43') diff --git a/var/spack/repos/builtin/packages/crtm/package.py b/var/spack/repos/builtin/packages/crtm/package.py new file mode 100644 index 0000000000..1bcf15f721 --- /dev/null +++ b/var/spack/repos/builtin/packages/crtm/package.py @@ -0,0 +1,20 @@ +# 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) + +from spack import * + + +class Crtm(CMakePackage): + """The Community Radiative Transfer Model (CRTM) package. + The CRTM is composed of four important modules for gaseous transmittance, + surface emission and reflection, cloud and aerosol absorption and + scattering, and a solver for a radiative transfer.""" + + homepage = "https://www.jcsda.org/jcsda-project-community-radiative-transfer-model" + url = "https://github.com/NOAA-EMC/EMC_crtm/archive/refs/tags/v2.3.0.tar.gz" + + maintainers = ['t-brown'] + + version('2.3.0', sha256='3e2c87ae5498c33dd98f9ede5c39e33ee7f298c7317b12adeb552e3a572700ce') diff --git a/var/spack/repos/builtin/packages/g2/package.py b/var/spack/repos/builtin/packages/g2/package.py new file mode 100644 index 0000000000..686a7bb7cc --- /dev/null +++ b/var/spack/repos/builtin/packages/g2/package.py @@ -0,0 +1,22 @@ +# 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) + +from spack import * + + +class G2(CMakePackage): + """Utilities for coding/decoding GRIB2 messages. This library contains + Fortran 90 decoder/encoder routines for GRIB edition 2, as well as + indexing/searching utility routines.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-g2" + url = "https://github.com/NOAA-EMC/NCEPLIBS-g2/archive/refs/tags/v3.4.3.tar.gz" + + maintainers = ['t-brown'] + + version('3.4.3', sha256='679ea99b225f08b168cbf10f4b29f529b5b011232f298a5442ce037ea84de17c') + + depends_on('jasper') + depends_on('libpng') diff --git a/var/spack/repos/builtin/packages/g2tmpl/package.py b/var/spack/repos/builtin/packages/g2tmpl/package.py new file mode 100644 index 0000000000..084017564a --- /dev/null +++ b/var/spack/repos/builtin/packages/g2tmpl/package.py @@ -0,0 +1,17 @@ +# 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) + +from spack import * + + +class G2tmpl(CMakePackage): + """Utilities for GRIB2 templates.""" + + homepage = "https://github.com/NOAA-EMC/NCEPLIBS-g2tmpl" + url = "https://github.com/NOAA-EMC/NCEPLIBS-g2tmpl/archive/refs/tags/v1.10.0.tar.gz" + + maintainers = ['t-brown'] + + version('1.10.0', sha256='dcc0e40b8952f91d518c59df7af64e099131c17d85d910075bfa474c8822649d') diff --git a/var/spack/repos/builtin/packages/gfsio/package.py b/var/spack/repos/builtin/packages/gfsio/package.py new file mode 100644 index 0000000000..bb71543945 --- /dev/null +++ b/var/spack/repos/builtin/packages/gfsio/package.py @@ -0,0 +1,18 @@ +# 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) + +from spack import * + + +class Gfsio(CMakePackage): + """The GFSIO library provides an API to convert GFS Gaussian output into + grib output.""" + + homepage = "https://github.com/NOAA-EMC/NCEPLIBS-gfsio" + url = "https://github.com/NOAA-EMC/NCEPLIBS-gfsio/archive/refs/tags/v1.4.1.tar.gz" + + maintainers = ['t-brown'] + + version('1.4.1', sha256='eab106302f520600decc4f9665d7c6a55e7b4901fab6d9ef40f29702b89b69b1') diff --git a/var/spack/repos/builtin/packages/ip/package.py b/var/spack/repos/builtin/packages/ip/package.py new file mode 100644 index 0000000000..807bbf6c6e --- /dev/null +++ b/var/spack/repos/builtin/packages/ip/package.py @@ -0,0 +1,21 @@ +# 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) + +from spack import * + + +class Ip(CMakePackage): + """The NCEP general interpolation library (iplib) contains Fortran 90 + subprograms to be used for interpolating between nearly all grids used at + NCEP.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-ip" + url = "https://github.com/NOAA-EMC/NCEPLIBS-ip/archive/refs/tags/v3.3.3.tar.gz" + + maintainers = ['t-brown'] + + version('3.3.3', sha256='d5a569ca7c8225a3ade64ef5cd68f3319bcd11f6f86eb3dba901d93842eb3633') + + depends_on('sp') diff --git a/var/spack/repos/builtin/packages/ip2/package.py b/var/spack/repos/builtin/packages/ip2/package.py new file mode 100644 index 0000000000..778c1f01bf --- /dev/null +++ b/var/spack/repos/builtin/packages/ip2/package.py @@ -0,0 +1,21 @@ +# 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) + +from spack import * + + +class Ip2(CMakePackage): + """The NCEP general interpolation library 2 (ip2lib) contains Fortran 90 + subprograms to be used for interpolating between nearly all grids used at + NCEP.""" + + homepage = "https://github.com/NOAA-EMC/NCEPLIBS-ip2" + url = "https://github.com/NOAA-EMC/NCEPLIBS-ip2/archive/refs/tags/v1.1.2.tar.gz" + + maintainers = ['t-brown'] + + version('1.1.2', sha256='73c6beec8fd463ec7ccba3633d8c5d53d385c43d507367efde918c2db0af42ab') + + depends_on('sp') diff --git a/var/spack/repos/builtin/packages/ncep-post/cmake_findnetcdf.patch b/var/spack/repos/builtin/packages/ncep-post/cmake_findnetcdf.patch new file mode 100644 index 0000000000..880660f05c --- /dev/null +++ b/var/spack/repos/builtin/packages/ncep-post/cmake_findnetcdf.patch @@ -0,0 +1,350 @@ +--- a/CMakeModules/Modules/FindNetCDF.cmake 2021-07-26 07:16:22.760999830 -0600 ++++ b/CMakeModules/Modules/FindNetCDF.cmake 2021-05-21 09:22:26.000000000 -0600 +@@ -0,0 +1,347 @@ ++# (C) Copyright 2011- ECMWF. ++# ++# This software is licensed under the terms of the Apache Licence Version 2.0 ++# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. ++# In applying this licence, ECMWF does not waive the privileges and immunities ++# granted to it by virtue of its status as an intergovernmental organisation nor ++# does it submit to any jurisdiction. ++ ++# Try to find NetCDF includes and library. ++# Supports static and shared libaries and allows each component to be found in sepearte prefixes. ++# ++# This module defines ++# ++# - NetCDF_FOUND - System has NetCDF ++# - NetCDF_INCLUDE_DIRS - the NetCDF include directories ++# - NetCDF_VERSION - the version of NetCDF ++# - NetCDF_CONFIG_EXECUTABLE - the netcdf-config executable if found ++# - NetCDF_PARALLEL - Boolean True if NetCDF4 has parallel IO support via hdf5 and/or pnetcdf ++# - NetCDF_HAS_PNETCDF - Boolean True if NetCDF4 has pnetcdf support ++# ++# Deprecated Defines ++# - NetCDF_LIBRARIES - [Deprecated] Use NetCDF::NetCDF_<LANG> targets instead. ++# ++# ++# Following components are available: ++# ++# - C - C interface to NetCDF (netcdf) ++# - CXX - CXX4 interface to NetCDF (netcdf_c++4) ++# - Fortran - Fortran interface to NetCDF (netcdff) ++# ++# For each component the following are defined: ++# ++# - NetCDF_<comp>_FOUND - whether the component is found ++# - NetCDF_<comp>_LIBRARIES - the libraries for the component ++# - NetCDF_<comp>_LIBRARY_SHARED - Boolean is true if libraries for component are shared ++# - NetCDF_<comp>_INCLUDE_DIRS - the include directories for specified component ++# - NetCDF::NetCDF_<comp> - target of component to be used with target_link_libraries() ++# ++# The following paths will be searched in order if set in CMake (first priority) or environment (second priority) ++# ++# - NetCDF_ROOT - root of NetCDF installation ++# - NetCDF_PATH - root of NetCDF installation ++# ++# The search process begins with locating NetCDF Include headers. If these are in a non-standard location, ++# set one of the following CMake or environment variables to point to the location: ++# ++# - NetCDF_INCLUDE_DIR or NetCDF_${comp}_INCLUDE_DIR ++# - NetCDF_INCLUDE_DIRS or NetCDF_${comp}_INCLUDE_DIR ++# ++# Notes: ++# ++# - Use "NetCDF::NetCDF_<LANG>" targets only. NetCDF_LIBRARIES exists for backwards compatibility and should not be used. ++# - These targets have all the knowledge of include directories and library search directories, and a single ++# call to target_link_libraries will provide all these transitive properties to your target. Normally all that is ++# needed to build and link against NetCDF is, e.g.: ++# target_link_libraries(my_c_tgt PUBLIC NetCDF::NetCDF_C) ++# - "NetCDF" is always the preferred naming for this package, its targets, variables, and environment variables ++# - For compatibility, some variables are also set/checked using alternate names NetCDF4, NETCDF, or NETCDF4 ++# - Environments relying on these older environment variable names should move to using a "NetCDF_ROOT" environment variable ++# - Preferred component capitalization follows the CMake LANGUAGES variables: i.e., C, Fortran, CXX ++# - For compatibility, alternate capitalizations are supported but should not be used. ++# - If no components are defined, all components will be searched ++# ++ ++list( APPEND _possible_components C CXX Fortran ) ++ ++## Include names for each component ++set( NetCDF_C_INCLUDE_NAME netcdf.h ) ++set( NetCDF_CXX_INCLUDE_NAME netcdf ) ++set( NetCDF_Fortran_INCLUDE_NAME netcdf.mod ) ++ ++## Library names for each component ++set( NetCDF_C_LIBRARY_NAME netcdf ) ++set( NetCDF_CXX_LIBRARY_NAME netcdf_c++4 ) ++set( NetCDF_Fortran_LIBRARY_NAME netcdff ) ++ ++## Enumerate search components ++foreach( _comp ${_possible_components} ) ++ string( TOUPPER "${_comp}" _COMP ) ++ set( _arg_${_COMP} ${_comp} ) ++ set( _name_${_COMP} ${_comp} ) ++endforeach() ++ ++set( _search_components C) ++foreach( _comp ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS} ) ++ string( TOUPPER "${_comp}" _COMP ) ++ set( _arg_${_COMP} ${_comp} ) ++ list( APPEND _search_components ${_name_${_COMP}} ) ++ if( NOT _name_${_COMP} ) ++ message(SEND_ERROR "Find${CMAKE_FIND_PACKAGE_NAME}: COMPONENT ${_comp} is not a valid component. Valid components: ${_possible_components}" ) ++ endif() ++endforeach() ++list( REMOVE_DUPLICATES _search_components ) ++ ++## Search hints for finding include directories and libraries ++foreach( _comp IN ITEMS "_" "_C_" "_Fortran_" "_CXX_" ) ++ foreach( _name IN ITEMS NetCDF4 NetCDF NETCDF4 NETCDF ) ++ foreach( _var IN ITEMS ROOT PATH ) ++ list(APPEND _search_hints ${${_name}${_comp}${_var}} $ENV{${_name}${_comp}${_var}} ) ++ list(APPEND _include_search_hints ++ ${${_name}${_comp}INCLUDE_DIR} $ENV{${_name}${_comp}INCLUDE_DIR} ++ ${${_name}${_comp}INCLUDE_DIRS} $ENV{${_name}${_comp}INCLUDE_DIRS} ) ++ endforeach() ++ endforeach() ++endforeach() ++#Old-school HPC module env variable names ++foreach( _name IN ITEMS NetCDF4 NetCDF NETCDF4 NETCDF ) ++ foreach( _comp IN ITEMS "_C" "_Fortran" "_CXX" ) ++ list(APPEND _search_hints ${${_name}} $ENV{${_name}}) ++ list(APPEND _search_hints ${${_name}${_comp}} $ENV{${_name}${_comp}}) ++ endforeach() ++endforeach() ++ ++## Find headers for each component ++set(NetCDF_INCLUDE_DIRS) ++set(_new_search_components) ++foreach( _comp IN LISTS _search_components ) ++ if(NOT ${PROJECT_NAME}_NetCDF_${_comp}_FOUND) ++ list(APPEND _new_search_components ${_comp}) ++ endif() ++ find_file(NetCDF_${_comp}_INCLUDE_FILE ++ NAMES ${NetCDF_${_comp}_INCLUDE_NAME} ++ DOC "NetCDF ${_comp} include directory" ++ HINTS ${_include_search_hints} ${_search_hints} ++ PATH_SUFFIXES include include/netcdf ++ ) ++ mark_as_advanced(NetCDF_${_comp}_INCLUDE_FILE) ++ message(DEBUG "NetCDF_${_comp}_INCLUDE_FILE: ${NetCDF_${_comp}_INCLUDE_FILE}") ++ if( NetCDF_${_comp}_INCLUDE_FILE ) ++ get_filename_component(NetCDF_${_comp}_INCLUDE_FILE ${NetCDF_${_comp}_INCLUDE_FILE} ABSOLUTE) ++ get_filename_component(NetCDF_${_comp}_INCLUDE_DIR ${NetCDF_${_comp}_INCLUDE_FILE} DIRECTORY) ++ list(APPEND NetCDF_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIR}) ++ endif() ++endforeach() ++if(NetCDF_INCLUDE_DIRS) ++ list(REMOVE_DUPLICATES NetCDF_INCLUDE_DIRS) ++endif() ++set(NetCDF_INCLUDE_DIRS "${NetCDF_INCLUDE_DIRS}" CACHE STRING "NetCDF Include directory paths" FORCE) ++ ++## Find n*-config executables for search components ++foreach( _comp IN LISTS _search_components ) ++ if( _comp MATCHES "^(C)$" ) ++ set(_conf "c") ++ elseif( _comp MATCHES "^(Fortran)$" ) ++ set(_conf "f") ++ elseif( _comp MATCHES "^(CXX)$" ) ++ set(_conf "cxx4") ++ endif() ++ find_program( NetCDF_${_comp}_CONFIG_EXECUTABLE ++ NAMES n${_conf}-config ++ HINTS ${NetCDF_INCLUDE_DIRS} ${_include_search_hints} ${_search_hints} ++ PATH_SUFFIXES bin Bin ../bin ../../bin ++ DOC "NetCDF n${_conf}-config helper" ) ++ message(DEBUG "NetCDF_${_comp}_CONFIG_EXECUTABLE: ${NetCDF_${_comp}_CONFIG_EXECUTABLE}") ++endforeach() ++ ++set(_C_libs_flag --libs) ++set(_Fortran_libs_flag --flibs) ++set(_CXX_libs_flag --libs) ++set(_C_includes_flag --includedir) ++set(_Fortran_includes_flag --includedir) ++set(_CXX_includes_flag --includedir) ++function(netcdf_config exec flag output_var) ++ set(${output_var} False PARENT_SCOPE) ++ if( exec ) ++ execute_process( COMMAND ${exec} ${flag} RESULT_VARIABLE _ret OUTPUT_VARIABLE _val) ++ if( _ret EQUAL 0 ) ++ string( STRIP ${_val} _val ) ++ set( ${output_var} ${_val} PARENT_SCOPE ) ++ endif() ++ endif() ++endfunction() ++ ++## Detect additional package properties ++netcdf_config(${NetCDF_C_CONFIG_EXECUTABLE} --has-parallel4 _val) ++if( NOT _val MATCHES "^(yes|no)$" ) ++ netcdf_config(${NetCDF_C_CONFIG_EXECUTABLE} --has-parallel _val) ++endif() ++if( _val MATCHES "^(yes)$" ) ++ set(NetCDF_PARALLEL TRUE CACHE STRING "NetCDF has parallel IO capability via pnetcdf or hdf5." FORCE) ++else() ++ set(NetCDF_PARALLEL FALSE CACHE STRING "NetCDF has no parallel IO capability." FORCE) ++endif() ++ ++if(NetCDF_PARALLEL) ++ find_package(MPI REQUIRED) ++endif() ++ ++## Find libraries for each component ++set( NetCDF_LIBRARIES ) ++foreach( _comp IN LISTS _search_components ) ++ string( TOUPPER "${_comp}" _COMP ) ++ ++ find_library( NetCDF_${_comp}_LIBRARY ++ NAMES ${NetCDF_${_comp}_LIBRARY_NAME} ++ DOC "NetCDF ${_comp} library" ++ HINTS ${NetCDF_${_comp}_INCLUDE_DIRS} ${_search_hints} ++ PATH_SUFFIXES lib64 lib ../lib64 ../lib ../../lib64 ../../lib ) ++ mark_as_advanced( NetCDF_${_comp}_LIBRARY ) ++ get_filename_component(NetCDF_${_comp}_LIBRARY ${NetCDF_${_comp}_LIBRARY} ABSOLUTE) ++ set(NetCDF_${_comp}_LIBRARY ${NetCDF_${_comp}_LIBRARY} CACHE STRING "NetCDF ${_comp} library" FORCE) ++ message(DEBUG "NetCDF_${_comp}_LIBRARY: ${NetCDF_${_comp}_LIBRARY}") ++ ++ if( NetCDF_${_comp}_LIBRARY ) ++ if( NetCDF_${_comp}_LIBRARY MATCHES ".a$" ) ++ set( NetCDF_${_comp}_LIBRARY_SHARED FALSE ) ++ set( _library_type STATIC) ++ else() ++ list( APPEND NetCDF_LIBRARIES ${NetCDF_${_comp}_LIBRARY} ) ++ set( NetCDF_${_comp}_LIBRARY_SHARED TRUE ) ++ set( _library_type SHARED) ++ endif() ++ endif() ++ ++ #Use nc-config to set per-component LIBRARIES variable if possible ++ netcdf_config( ${NetCDF_${_comp}_CONFIG_EXECUTABLE} ${_${_comp}_libs_flag} _val ) ++ if( _val ) ++ set( NetCDF_${_comp}_LIBRARIES ${_val} ) ++ if(NOT NetCDF_${_comp}_LIBRARY_SHARED AND NOT NetCDF_${_comp}_FOUND) #Static targets should use nc_config to get a proper link line with all necessary static targets. ++ list( APPEND NetCDF_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) ++ endif() ++ else() ++ set( NetCDF_${_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARY} ) ++ if(NOT NetCDF_${_comp}_LIBRARY_SHARED) ++ message(SEND_ERROR "Unable to properly find NetCDF. Found static libraries at: ${NetCDF_${_comp}_LIBRARY} but could not run nc-config: ${NetCDF_CONFIG_EXECUTABLE}") ++ endif() ++ endif() ++ ++ #Use nc-config to set per-component INCLUDE_DIRS variable if possible ++ netcdf_config( ${NetCDF_${_comp}_CONFIG_EXECUTABLE} ${_${_comp}_includes_flag} _val ) ++ if( _val ) ++ string( REPLACE " " ";" _val ${_val} ) ++ set( NetCDF_${_comp}_INCLUDE_DIRS ${_val} ) ++ else() ++ set( NetCDF_${_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIR} ) ++ endif() ++ ++ if( NetCDF_${_comp}_LIBRARIES AND NetCDF_${_comp}_INCLUDE_DIRS ) ++ set( ${CMAKE_FIND_PACKAGE_NAME}_${_arg_${_COMP}}_FOUND TRUE ) ++ if (NOT TARGET NetCDF::NetCDF_${_comp}) ++ add_library(NetCDF::NetCDF_${_comp} ${_library_type} IMPORTED) ++ set_target_properties(NetCDF::NetCDF_${_comp} PROPERTIES ++ IMPORTED_LOCATION ${NetCDF_${_comp}_LIBRARY} ++ INTERFACE_INCLUDE_DIRECTORIES "${NetCDF_${_comp}_INCLUDE_DIRS}" ++ INTERFACE_LINK_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) ++ if( NOT _comp MATCHES "^(C)$" ) ++ target_link_libraries(NetCDF::NetCDF_${_comp} INTERFACE NetCDF::NetCDF_C) ++ endif() ++ if(MPI_${_comp}_FOUND) ++ target_link_libraries(NetCDF::NetCDF_${_comp} INTERFACE MPI::MPI_${_comp}) ++ endif() ++ endif() ++ endif() ++endforeach() ++if(NetCDF_LIBRARIES AND NetCDF_${_comp}_LIBRARY_SHARED) ++ list(REMOVE_DUPLICATES NetCDF_LIBRARIES) ++endif() ++set(NetCDF_LIBRARIES "${NetCDF_LIBRARIES}" CACHE STRING "NetCDF library targets" FORCE) ++ ++## Find version via netcdf-config if possible ++if (NetCDF_INCLUDE_DIRS) ++ if( NetCDF_C_CONFIG_EXECUTABLE ) ++ netcdf_config( ${NetCDF_C_CONFIG_EXECUTABLE} --version _vers ) ++ if( _vers ) ++ string(REGEX REPLACE ".* ((([0-9]+)\\.)+([0-9]+)).*" "\\1" NetCDF_VERSION "${_vers}" ) ++ endif() ++ else() ++ foreach( _dir IN LISTS NetCDF_INCLUDE_DIRS) ++ if( EXISTS "${_dir}/netcdf_meta.h" ) ++ file(STRINGS "${_dir}/netcdf_meta.h" _netcdf_version_lines ++ REGEX "#define[ \t]+NC_VERSION_(MAJOR|MINOR|PATCH|NOTE)") ++ string(REGEX REPLACE ".*NC_VERSION_MAJOR *\([0-9]*\).*" "\\1" _netcdf_version_major "${_netcdf_version_lines}") ++ string(REGEX REPLACE ".*NC_VERSION_MINOR *\([0-9]*\).*" "\\1" _netcdf_version_minor "${_netcdf_version_lines}") ++ string(REGEX REPLACE ".*NC_VERSION_PATCH *\([0-9]*\).*" "\\1" _netcdf_version_patch "${_netcdf_version_lines}") ++ string(REGEX REPLACE ".*NC_VERSION_NOTE *\"\([^\"]*\)\".*" "\\1" _netcdf_version_note "${_netcdf_version_lines}") ++ set(NetCDF_VERSION "${_netcdf_version_major}.${_netcdf_version_minor}.${_netcdf_version_patch}${_netcdf_version_note}") ++ unset(_netcdf_version_major) ++ unset(_netcdf_version_minor) ++ unset(_netcdf_version_patch) ++ unset(_netcdf_version_note) ++ unset(_netcdf_version_lines) ++ endif() ++ endforeach() ++ endif() ++endif () ++ ++## Finalize find_package ++include(FindPackageHandleStandardArgs) ++ ++if(NOT NetCDF_FOUND OR _new_search_components) ++ find_package_handle_standard_args( ${CMAKE_FIND_PACKAGE_NAME} ++ REQUIRED_VARS NetCDF_INCLUDE_DIRS NetCDF_LIBRARIES ++ VERSION_VAR NetCDF_VERSION ++ HANDLE_COMPONENTS ) ++endif() ++ ++foreach( _comp IN LISTS _search_components ) ++ if( NetCDF_${_comp}_FOUND ) ++ #Record found components to avoid duplication in NetCDF_LIBRARIES for static libraries ++ set(NetCDF_${_comp}_FOUND ${NetCDF_${_comp}_FOUND} CACHE BOOL "NetCDF ${_comp} Found" FORCE) ++ #Set a per-package, per-component found variable to communicate between multiple calls to find_package() ++ set(${PROJECT_NAME}_NetCDF_${_comp}_FOUND True) ++ endif() ++endforeach() ++ ++if( ${CMAKE_FIND_PACKAGE_NAME}_FOUND AND NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY AND _new_search_components) ++ message( STATUS "Find${CMAKE_FIND_PACKAGE_NAME} defines targets:" ) ++ message( STATUS " - NetCDF_VERSION [${NetCDF_VERSION}]") ++ message( STATUS " - NetCDF_PARALLEL [${NetCDF_PARALLEL}]") ++ foreach( _comp IN LISTS _new_search_components ) ++ string( TOUPPER "${_comp}" _COMP ) ++ message( STATUS " - NetCDF_${_comp}_CONFIG_EXECUTABLE [${NetCDF_${_comp}_CONFIG_EXECUTABLE}]") ++ if( ${CMAKE_FIND_PACKAGE_NAME}_${_arg_${_COMP}}_FOUND ) ++ get_filename_component(_root ${NetCDF_${_comp}_INCLUDE_DIR}/.. ABSOLUTE) ++ if( NetCDF_${_comp}_LIBRARY_SHARED ) ++ message( STATUS " - NetCDF::NetCDF_${_comp} [SHARED] [Root: ${_root}] Lib: ${NetCDF_${_comp}_LIBRARY} ") ++ else() ++ message( STATUS " - NetCDF::NetCDF_${_comp} [STATIC] [Root: ${_root}] Lib: ${NetCDF_${_comp}_LIBRARY} ") ++ endif() ++ endif() ++ endforeach() ++endif() ++ ++foreach( _prefix NetCDF NetCDF4 NETCDF NETCDF4 ${CMAKE_FIND_PACKAGE_NAME} ) ++ set( ${_prefix}_INCLUDE_DIRS ${NetCDF_INCLUDE_DIRS} ) ++ set( ${_prefix}_LIBRARIES ${NetCDF_LIBRARIES}) ++ set( ${_prefix}_VERSION ${NetCDF_VERSION} ) ++ set( ${_prefix}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_FOUND} ) ++ set( ${_prefix}_CONFIG_EXECUTABLE ${NetCDF_CONFIG_EXECUTABLE} ) ++ set( ${_prefix}_PARALLEL ${NetCDF_PARALLEL} ) ++ ++ foreach( _comp ${_search_components} ) ++ string( TOUPPER "${_comp}" _COMP ) ++ set( _arg_comp ${_arg_${_COMP}} ) ++ set( ${_prefix}_${_comp}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) ++ set( ${_prefix}_${_COMP}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) ++ set( ${_prefix}_${_arg_comp}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) ++ ++ set( ${_prefix}_${_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) ++ set( ${_prefix}_${_COMP}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) ++ set( ${_prefix}_${_arg_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) ++ ++ set( ${_prefix}_${_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) ++ set( ${_prefix}_${_COMP}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) ++ set( ${_prefix}_${_arg_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) ++ endforeach() ++endforeach() diff --git a/var/spack/repos/builtin/packages/ncep-post/package.py b/var/spack/repos/builtin/packages/ncep-post/package.py new file mode 100644 index 0000000000..fd82899fad --- /dev/null +++ b/var/spack/repos/builtin/packages/ncep-post/package.py @@ -0,0 +1,49 @@ +# 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) + +from spack import * + + +class NcepPost(CMakePackage): + """The NCEP Post Processor is a software package designed + to generate useful products from raw model output.""" + + homepage = "https://github.com/NOAA-EMC/EMC_post" + url = "https://github.com/NOAA-EMC/EMC_post/archive/refs/tags/upp_v10.0.8.tar.gz" + + maintainers = ['t-brown'] + + version('10.0.8', sha256='b3b27d03250450159a8261c499d57168bdd833790c1c80c854d081fe37aaab47') + + variant('wrf-io', default=True, description='Enable WRF I/O.') + + depends_on('bacio') + depends_on('crtm') + depends_on('g2') + depends_on('g2tmpl') + depends_on('gfsio') + depends_on('ip') + depends_on('jasper') + depends_on('libpng') + depends_on('mpi') + depends_on('netcdf-c') + depends_on('netcdf-fortran') + depends_on('nemsio') + depends_on('sfcio') + depends_on('sigio') + depends_on('sp') + depends_on('w3emc') + depends_on('w3nco') + depends_on('w3nco') + depends_on('wrf-io', when='+wrf-io') + depends_on('zlib') + + patch('cmake_findnetcdf.patch') + + def cmake_args(self): + args = [] + if '+wrf-io' in self.spec: + args.append('-DBUILD_WITH_WRFIO:BOOL=ON') + return args diff --git a/var/spack/repos/builtin/packages/nemsio/package.py b/var/spack/repos/builtin/packages/nemsio/package.py new file mode 100644 index 0000000000..76edd7d734 --- /dev/null +++ b/var/spack/repos/builtin/packages/nemsio/package.py @@ -0,0 +1,23 @@ +# 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) + +from spack import * + + +class Nemsio(CMakePackage): + """The NOAA Environmental Modeling System I/O (NEMSIO) library. The + basic functions it provides are to read and write data sets for all the + NEMS applications.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-nemsio" + url = "https://github.com/NOAA-EMC/NCEPLIBS-nemsio/archive/refs/tags/v2.5.2.tar.gz" + + maintainers = ['t-brown'] + + version('2.5.2', sha256='c59e9379969690de8d030cbf4bbbbe3726faf13c304f3b88b0f6aec1496d2c08') + + depends_on('bacio') + depends_on('mpi') + depends_on('w3nco') diff --git a/var/spack/repos/builtin/packages/sfcio/package.py b/var/spack/repos/builtin/packages/sfcio/package.py new file mode 100644 index 0000000000..c2a6c750ec --- /dev/null +++ b/var/spack/repos/builtin/packages/sfcio/package.py @@ -0,0 +1,18 @@ +# 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) + +from spack import * + + +class Sfcio(CMakePackage): + """The SFCIO library provides an API to read the NCEP Spectral model surface + files.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-sfcio" + url = "https://github.com/NOAA-EMC/NCEPLIBS-sfcio/archive/refs/tags/v1.4.1.tar.gz" + + maintainers = ['t-brown'] + + version('1.4.1', sha256='d9f900cf18ec1a839b4128c069b1336317ffc682086283443354896746b89c59') diff --git a/var/spack/repos/builtin/packages/sigio/package.py b/var/spack/repos/builtin/packages/sigio/package.py new file mode 100644 index 0000000000..c793de14c2 --- /dev/null +++ b/var/spack/repos/builtin/packages/sigio/package.py @@ -0,0 +1,18 @@ +# 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) + +from spack import * + + +class Sigio(CMakePackage): + """The SIGIO library provides an Application Program Interface for performing + I/O on the sigma restart file of the global spectral model.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-sigio" + url = "https://github.com/NOAA-EMC/NCEPLIBS-sigio/archive/refs/tags/v2.3.2.tar.gz" + + maintainers = ['t-brown'] + + version('2.3.2', sha256='333f3cf3a97f97103cbafcafc2ad89b24faa55b1332a98adc1637855e8a5b613') diff --git a/var/spack/repos/builtin/packages/sp/package.py b/var/spack/repos/builtin/packages/sp/package.py new file mode 100644 index 0000000000..5616c10cb8 --- /dev/null +++ b/var/spack/repos/builtin/packages/sp/package.py @@ -0,0 +1,18 @@ +# 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) + +from spack import * + + +class Sp(CMakePackage): + """The spectral transform library splib contains FORTRAN subprograms to be + used for a variety of spectral transform functions.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-sp" + url = "https://github.com/NOAA-EMC/NCEPLIBS-sp/archive/refs/tags/v2.3.3.tar.gz" + + maintainers = ['t-brown'] + + version('2.3.3', sha256='c0d465209e599de3c0193e65671e290e9f422f659f1da928505489a3edeab99f') diff --git a/var/spack/repos/builtin/packages/ufs-utils/package.py b/var/spack/repos/builtin/packages/ufs-utils/package.py new file mode 100644 index 0000000000..b1de6c9eb1 --- /dev/null +++ b/var/spack/repos/builtin/packages/ufs-utils/package.py @@ -0,0 +1,39 @@ +# 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) + +from spack import * + + +class UfsUtils(CMakePackage): + """The UFS Utilities package contains programs set up the model grid and + create coldstart initial conditions. + """ + + homepage = "https://noaa-emcufs-utils.readthedocs.io/en/latest/" + url = "https://github.com/NOAA-EMC/UFS_UTILS/archive/refs/tags/ufs_utils_1_6_0.tar.gz" + + maintainers = ['t-brown'] + + version('1_6_0', sha256='829ba4b50162e4202f96ec92a65b9fa824f71db65d2b63b70822db07d061cd92') + + depends_on('bacio') + depends_on('esmf') + depends_on('g2') + depends_on('hdf5') + depends_on('ip') + depends_on('jasper') + depends_on('libpng') + depends_on('nemsio') + depends_on('netcdf-c') + depends_on('netcdf-fortran') + depends_on('sfcio') + depends_on('sigio') + depends_on('sp') + depends_on('w3nco') + depends_on('wgrib2') + depends_on('zlib') + + def setup_build_environment(self, env): + env.set('ESMFMKFILE', join_path(self.spec['esmf'].prefix.lib, 'esmf.mk')) diff --git a/var/spack/repos/builtin/packages/ufs-weather-model/package.py b/var/spack/repos/builtin/packages/ufs-weather-model/package.py new file mode 100644 index 0000000000..e1148f7eea --- /dev/null +++ b/var/spack/repos/builtin/packages/ufs-weather-model/package.py @@ -0,0 +1,94 @@ +# 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) + +from spack import * + + +class UfsWeatherModel(CMakePackage): + """The Unified Forecast System (UFS) Weather Model (WM) is a prognostic + model that can be used for short- and medium-range research and + operational forecasts, as exemplified by its use in the operational Global + Forecast System (GFS) of the National Oceanic and Atmospheric + Administration (NOAA).""" + + homepage = "https://ufs-weather-model.readthedocs.io/en/latest/" + url = "https://github.com/ufs-community/ufs-weather-model/archive/refs/tags/ufs-v1.1.0.tar.gz" + git = "https://github.com/ufs-community/ufs-weather-model.git" + + maintainers = ['t-brown'] + + version('2.0.0', tag='ufs-v2.0.0', submodules=True) + version('1.1.0', tag='ufs-v1.1.0', submodules=True) + + variant('32bit', default=True, description='Enable 32-bit single precision arithmetic in dycore') + variant('avx2', default=False, description='Enable AVX2 instructions') + variant('ccpp', default=True, description='Enable the Common Community Physics Package (CCPP))') + variant('ccpp_suites', default='FV3_GFS_v15p2,FV3_RRFS_v1alpha', + description='CCPP suites to compile', + values=('FV3_GFS_v15p2', + 'FV3_RRFS_v1alpha', + 'FV3_GFS_v15p2,FV3_RRFS_v1alpha'), + multi=True) + variant('inline_post', default=False, description='Compile post processing inline') + variant('multi_gases', default=False, description='Enable multi gases in physics routines') + variant('openmp', default=True, description='Enable OpenMP') + variant('parallel_netcdf', default=True, description='Enable parallel I/O in netCDF') + variant('quad_precision', default=False, + description='Enable quad precision for certain grid metric terms in dycore') + variant('simdmultiarch', default=False, description='Enable multi-target SIMD instruction sets') + + depends_on('bacio') + depends_on('esmf@:8.0.0') + depends_on('mpi') + depends_on('nemsio') + depends_on('netcdf-c') + depends_on('netcdf-fortran') + depends_on('sp') + depends_on('w3emc') + depends_on('w3nco') + + def setup_build_environment(self, env): + spec = self.spec + env.set('CMAKE_C_COMPILER', spec['mpi'].mpicc) + env.set('CMAKE_CXX_COMPILER', spec['mpi'].mpicxx) + env.set('CMAKE_Fortran_COMPILER', spec['mpi'].mpifc) + env.set('ESMFMKFILE', join_path(spec['esmf'].prefix.lib, 'esmf.mk')) + + env.set('CCPP_SUITES', ','.join( + [x for x in spec.variants['ccpp_suites'].value if x])) + + if spec.platform == 'linux' and spec.satisfies('%intel'): + env.set('CMAKE_Platform', 'linux.intel') + elif spec.platform == 'linux' and spec.satisfies('%gcc'): + env.set('CMAKE_Platform', 'linux.gnu') + elif spec.platform == 'darwin' and spec.satisfies('%gcc'): + env.set('CMAKE_Platform', 'macosx.gnu') + else: + msg = "The host system {0} and compiler {0} " + msg += "are not supported by UFS." + raise InstallError(msg.format(spec.platform, self.compiler.name)) + + def cmake_args(self): + from_variant = self.define_from_variant + args = [from_variant('32BIT', '32bit'), + from_variant('AVX2', 'avx2'), + from_variant('CCPP', 'ccpp'), + from_variant('INLINE_POST', 'inline_post'), + from_variant('MULTI_GASES', 'multi_gases'), + from_variant('OPENMP', 'openmp'), + from_variant('PARALLEL_NETCDF', 'parallel_netcdf'), + from_variant('QUAD_PRECISION', 'quad_precision'), + from_variant('SIMDMULTIARCH', 'simdmultiarch'), + ] + + return args + + @run_after('install') + def install_additional_files(self): + mkdirp(prefix.bin) + ufs_src = join_path(self.build_directory, 'NEMS.exe') + ufs_dst = join_path(prefix.bin, "ufs_weather_model") + install(ufs_src, ufs_dst) + set_executable(ufs_dst) diff --git a/var/spack/repos/builtin/packages/w3emc/package.py b/var/spack/repos/builtin/packages/w3emc/package.py new file mode 100644 index 0000000000..03b393faab --- /dev/null +++ b/var/spack/repos/builtin/packages/w3emc/package.py @@ -0,0 +1,18 @@ +# 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) + +from spack import * + + +class W3emc(CMakePackage): + """This library contains Fortran 90 decoder/encoder routines for GRIB + edition 1 with EMC changes.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-w3emc/" + url = "https://github.com/NOAA-EMC/NCEPLIBS-w3emc/archive/refs/tags/v2.9.0.tar.gz" + + maintainers = ['t-brown'] + + version('2.9.0', sha256='994f59635ab91e34e96cab5fbaf8de54389d09461c7bac33b3104a1187e6c98a') diff --git a/var/spack/repos/builtin/packages/w3nco/package.py b/var/spack/repos/builtin/packages/w3nco/package.py new file mode 100644 index 0000000000..d8148a6519 --- /dev/null +++ b/var/spack/repos/builtin/packages/w3nco/package.py @@ -0,0 +1,18 @@ +# 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) + +from spack import * + + +class W3nco(CMakePackage): + """This library contains Fortran 90 decoder/encoder routines for GRIB + edition 1 with NCO changes.""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS/NCEPLIBS-w3nco/" + url = "https://github.com/NOAA-EMC/NCEPLIBS-w3nco/archive/refs/tags/v2.4.1.tar.gz" + + maintainers = ['t-brown'] + + version('2.4.1', sha256='48b06e0ea21d3d0fd5d5c4e7eb50b081402567c1bff6c4abf4fd4f3669070139') diff --git a/var/spack/repos/builtin/packages/wgrib2/package.py b/var/spack/repos/builtin/packages/wgrib2/package.py new file mode 100644 index 0000000000..ff5f90e74a --- /dev/null +++ b/var/spack/repos/builtin/packages/wgrib2/package.py @@ -0,0 +1,29 @@ +# 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) + +from spack import * + + +class Wgrib2(CMakePackage): + """The wgrib2 package functionality for interacting with, reading, + writing, and manipulating GRIB2 files.""" + + homepage = "https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2" + url = "https://github.com/NOAA-EMC/NCEPLIBS-wgrib2/archive/refs/tags/v2.0.8-cmake-v6.tar.gz" + + maintainers = ['t-brown'] + + version('2.0.8-cmake-v6', sha256='745cd008b4ce0245ea44247733e57e2b9ec6c5205d171d457e18d0ff8f87172d') + + depends_on('ip2') + depends_on('jasper') + depends_on('libpng') + depends_on('netcdf-c') + depends_on('netcdf-fortran') + depends_on('sp') + + def cmake_args(self): + args = ['-DUSE_IPOLATES=3', '-DUSE_SPECTRAL=BOOL:ON'] + return args diff --git a/var/spack/repos/builtin/packages/wrf-io/package.py b/var/spack/repos/builtin/packages/wrf-io/package.py new file mode 100644 index 0000000000..f67507587d --- /dev/null +++ b/var/spack/repos/builtin/packages/wrf-io/package.py @@ -0,0 +1,22 @@ +# 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) + +from spack import * + + +class WrfIo(CMakePackage): + """The WRFIO package is a lightweight WRF-IO API library for Unified + Post Processor (UPP). It reads wrf forecasts (WRF state plus + diagnostics).""" + + homepage = "https://noaa-emc.github.io/NCEPLIBS-wrf_io" + url = "https://github.com/NOAA-EMC/NCEPLIBS-wrf_io/archive/refs/tags/v1.2.0.tar.gz" + + maintainers = ['t-brown'] + + version('1.2.0', sha256='000cf5294a2c68460085258186e1f36c86d3d0d9c433aa969a0f92736b745617') + + depends_on('netcdf-c') + depends_on('netcdf-fortran') |