netcdf-c/cmake/modules/FindPNETCDF.cmake
Peter Hill ff80ee4f9f
CMake: Set feature variable rather than erroring in FindPNETCDF
Enables potential reuse of module outside of netCDF
2024-01-24 10:51:23 +00:00

81 lines
3.0 KiB
CMake

# FindPNETCDF
# -----------
#
# Find parallel IO library for classic netCDF files
#
# This module will define the following variables:
#
# ::
#
# PNETCDF_FOUND
# PNETCDF_INCLUDE_DIRS
# PNETCDF_LIBRARIES
# PNETCDF_VERSION
# PNETCDF_ERANGE_FILL - True if PnetCDF was built with ``NC_ERANGE`` support`
# PNETCDF_HAS_RELAXED_COORD_BOUND - True if PnetCDF was built with relaxed coordinate bounds
#
# The ``PNETCDF::pnetcdf`` target will also be exported
include(FindPackageHandleStandardArgs)
find_path(PNETCDF_INCLUDE_DIR NAMES pnetcdf.h)
find_library(PNETCDF_LIBRARY NAMES pnetcdf)
if (PNETCDF_INCLUDE_DIR)
set(pnetcdf_h "${PNETCDF_INCLUDE_DIR}/pnetcdf.h" )
message(DEBUG "PnetCDF include file ${pnetcdf_h} will be searched for version")
file(STRINGS "${pnetcdf_h}" pnetcdf_major_string REGEX "^#define PNETCDF_VERSION_MAJOR")
string(REGEX REPLACE "[^0-9]" "" pnetcdf_major "${pnetcdf_major_string}")
file(STRINGS "${pnetcdf_h}" pnetcdf_minor_string REGEX "^#define PNETCDF_VERSION_MINOR")
string(REGEX REPLACE "[^0-9]" "" pnetcdf_minor "${pnetcdf_minor_string}")
file(STRINGS "${pnetcdf_h}" pnetcdf_sub_string REGEX "^#define PNETCDF_VERSION_SUB")
string(REGEX REPLACE "[^0-9]" "" pnetcdf_sub "${pnetcdf_sub_string}")
set(pnetcdf_version "${pnetcdf_major}.${pnetcdf_minor}.${pnetcdf_sub}")
message(DEBUG "Found PnetCDF version ${pnetcdf_version}")
endif()
message(DEBUG "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ]"
" PNETCDF_ROOT = ${PNETCDF_ROOT}"
" PNETCDF_INCLUDE_DIR = ${PNETCDF_INCLUDE_DIR}"
" PNETCDF_LIBRARY = ${PNETCDF_LIBRARY}"
" PNETCDF_VERSION = ${PNETCDF_VERSION}"
)
file(STRINGS "${pnetcdf_h}" enable_erange_fill_pnetcdf REGEX "^#define PNETCDF_ERANGE_FILL")
string(REGEX REPLACE "[^0-9]" "" erange_fill_pnetcdf "${enable_erange_fill_pnetcdf}")
if("${erange_fill_pnetcdf}" STREQUAL "1")
set(PNETCDF_ERANGE_FILL ON CACHE BOOL "")
else()
set(PNETCDF_ERANGE_FILL OFF CACHE BOOL "")
endif()
mark_as_advanced(PNETCDF_INCLUDE_DIR PNETCDF_LIBRARY PNETCDF_ERANGE_FILL)
file(STRINGS "${pnetcdf_h}" relax_coord_bound_pnetcdf REGEX "^#define PNETCDF_RELAX_COORD_BOUND")
string(REGEX REPLACE "[^0-9]" "" relax_coord_bound "${relax_coord_bound_pnetcdf}")
if ("${relax_coord_bound}" STREQUAL "1")
set(PNETCDF_HAS_RELAXED_COORD_BOUND ON CACHE BOOL "")
else()
set(PNETCDF_HAS_RELAXED_COORD_BOUND OFF CACHE BOOL "")
endif()
find_package_handle_standard_args(PNETCDF
REQUIRED_VARS PNETCDF_LIBRARY PNETCDF_INCLUDE_DIR
VERSION_VAR PNETCDF_VERSION
)
if (PNETCDF_FOUND AND NOT TARGET PNETCDF::PNETCDF)
find_package(MPI REQUIRED)
add_library(PNETCDF::PNETCDF UNKNOWN IMPORTED)
set_target_properties(PNETCDF::PNETCDF PROPERTIES
IMPORTED_LINK_INTERFACE_LIBRARIES MPI::MPI_C
IMPORTED_LOCATION "${PNETCDF_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${PNETCDF_INCLUDE_DIR}"
)
find_library(MATH_LIBRARY m)
if (MATH_LIBRARY)
set_target_properties(PNETCDF::PNETCDF PROPERTIES
IMPORTED_LINK_INTERFACE_LIBRARIES ${MATH_LIBRARY})
endif()
endif()