132 lines
4.8 KiB
CMake
132 lines
4.8 KiB
CMake
#[==[
|
|
Provides the following variables:
|
|
|
|
* `NetCDF_FOUND`: Whether NetCDF was found or not.
|
|
* `NetCDF_INCLUDE_DIRS`: Include directories necessary to use NetCDF.
|
|
* `NetCDF_LIBRARIES`: Libraries necessary to use NetCDF.
|
|
* `NetCDF_VERSION`: The version of NetCDF found.
|
|
* `NetCDF::NetCDF`: A target to use with `target_link_libraries`.
|
|
* `NetCDF_HAS_PARALLEL`: Whether or not NetCDF was found with parallel IO support.
|
|
#]==]
|
|
|
|
function(FindNetCDF_get_is_parallel_aware include_dir)
|
|
file(STRINGS "${include_dir}/netcdf_meta.h" _netcdf_lines
|
|
REGEX "#define[ \t]+NC_HAS_PARALLEL[ \t]")
|
|
string(REGEX REPLACE ".*NC_HAS_PARALLEL[ \t]*([0-1]+).*" "\\1" _netcdf_has_parallel "${_netcdf_lines}")
|
|
if (_netcdf_has_parallel)
|
|
set(NetCDF_HAS_PARALLEL TRUE PARENT_SCOPE)
|
|
else()
|
|
set(NetCDF_HAS_PARALLEL FALSE PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Try to find a CMake-built NetCDF.
|
|
find_package(netCDF CONFIG QUIET)
|
|
if (netCDF_FOUND)
|
|
# Forward the variables in a consistent way.
|
|
set(NetCDF_FOUND "${netCDF_FOUND}")
|
|
set(NetCDF_INCLUDE_DIRS "${netCDF_INCLUDE_DIR}")
|
|
set(NetCDF_LIBRARIES "${netCDF_LIBRARIES}")
|
|
set(NetCDF_VERSION "${NetCDFVersion}")
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(NetCDF
|
|
REQUIRED_VARS NetCDF_INCLUDE_DIRS NetCDF_LIBRARIES
|
|
VERSION_VAR NetCDF_VERSION)
|
|
|
|
if (NOT TARGET NetCDF::NetCDF)
|
|
add_library(NetCDF::NetCDF INTERFACE IMPORTED)
|
|
if (TARGET "netCDF::netcdf")
|
|
# 4.7.3
|
|
set_target_properties(NetCDF::NetCDF PROPERTIES
|
|
INTERFACE_LINK_LIBRARIES "netCDF::netcdf")
|
|
elseif (TARGET "netcdf")
|
|
set_target_properties(NetCDF::NetCDF PROPERTIES
|
|
INTERFACE_LINK_LIBRARIES "netcdf")
|
|
else ()
|
|
set_target_properties(NetCDF::NetCDF PROPERTIES
|
|
INTERFACE_LINK_LIBRARIES "${netCDF_LIBRARIES}")
|
|
endif ()
|
|
endif ()
|
|
|
|
FindNetCDF_get_is_parallel_aware("${NetCDF_INCLUDE_DIRS}")
|
|
# Skip the rest of the logic in this file.
|
|
return ()
|
|
endif ()
|
|
|
|
find_package(PkgConfig QUIET)
|
|
if (PkgConfig_FOUND)
|
|
pkg_check_modules(_NetCDF QUIET netcdf IMPORTED_TARGET)
|
|
if (_NetCDF_FOUND)
|
|
# Forward the variables in a consistent way.
|
|
set(NetCDF_FOUND "${_NetCDF_FOUND}")
|
|
set(NetCDF_INCLUDE_DIRS "${_NetCDF_INCLUDE_DIRS}")
|
|
set(NetCDF_LIBRARIES "${_NetCDF_LIBRARIES}")
|
|
set(NetCDF_VERSION "${_NetCDF_VERSION}")
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(NetCDF
|
|
REQUIRED_VARS NetCDF_LIBRARIES
|
|
# This is not required because system-default include paths are not
|
|
# reported by `FindPkgConfig`, so this might be empty. Assume that if we
|
|
# have a library, the include directories are fine (if any) since
|
|
# PkgConfig reported that the package was found.
|
|
# NetCDF_INCLUDE_DIRS
|
|
VERSION_VAR NetCDF_VERSION)
|
|
|
|
if (NOT TARGET NetCDF::NetCDF)
|
|
add_library(NetCDF::NetCDF INTERFACE IMPORTED)
|
|
set_target_properties(NetCDF::NetCDF PROPERTIES
|
|
INTERFACE_LINK_LIBRARIES "PkgConfig::_NetCDF")
|
|
endif ()
|
|
|
|
FindNetCDF_get_is_parallel_aware("${_NetCDF_INCLUDEDIR}")
|
|
# Skip the rest of the logic in this file.
|
|
return ()
|
|
endif ()
|
|
endif ()
|
|
|
|
find_path(NetCDF_INCLUDE_DIR
|
|
NAMES netcdf.h
|
|
DOC "netcdf include directories")
|
|
mark_as_advanced(NetCDF_INCLUDE_DIR)
|
|
|
|
find_library(NetCDF_LIBRARY
|
|
NAMES netcdf
|
|
DOC "netcdf library")
|
|
mark_as_advanced(NetCDF_LIBRARY)
|
|
|
|
if (NetCDF_INCLUDE_DIR)
|
|
file(STRINGS "${NetCDF_INCLUDE_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)
|
|
|
|
FindNetCDF_get_is_parallel_aware("${NetCDF_INCLUDE_DIR}")
|
|
endif ()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(NetCDF
|
|
REQUIRED_VARS NetCDF_LIBRARY NetCDF_INCLUDE_DIR
|
|
VERSION_VAR NetCDF_VERSION)
|
|
|
|
if (NetCDF_FOUND)
|
|
set(NetCDF_INCLUDE_DIRS "${NetCDF_INCLUDE_DIR}")
|
|
set(NetCDF_LIBRARIES "${NetCDF_LIBRARY}")
|
|
|
|
if (NOT TARGET NetCDF::NetCDF)
|
|
add_library(NetCDF::NetCDF UNKNOWN IMPORTED)
|
|
set_target_properties(NetCDF::NetCDF PROPERTIES
|
|
IMPORTED_LOCATION "${NetCDF_LIBRARY}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${NetCDF_INCLUDE_DIR}")
|
|
endif ()
|
|
endif ()
|