From 8da7ea2cc3ac2080b3027af8a59cc626aaa5717d Mon Sep 17 00:00:00 2001 From: Luca Bertagna Date: Wed, 5 Mar 2025 09:41:36 -0700 Subject: [PATCH 1/2] Allow fallback to find_library/find_path for netcdf --- CMakeLists.txt | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 49d36ec..2522e6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,17 +88,32 @@ if (NetCDF_FOUND) set(CPRNC_NETCDF_FORTRAN_LIB netcdf_cprnc) endif() else () - message(STATUS "NetCDF was not found, falling back on pkg-config") - find_package(PkgConfig REQUIRED) + # If netcdf is not installed as a CMake pkg, the find_package above will fail, + # but netcdf may still be installed in the _ROOT folders + find_library(NetCDF_C_LIBRARIES netcdf QUIET HINTS ${NetCDF_C_ROOT} PATH_SUFFIXES lib lib64) + find_library(NetCDF_Fortran_LIBRARIES netcdff QUIET HINTS ${NetCDF_Fortran_ROOT} PATH_SUFFIXES lib lib64) + find_path(NetCDF_C_INCLUDE_DIRS netcdf.h QUIET HINTS ${NetCDF_C_ROOT} PATH_SUFFIXES include) + find_path(NetCDF_Fortran_INCLUDE_DIRS netcdf.mod QUIET HINTS ${NetCDF_Fortran_ROOT} PATH_SUFFIXES include) + + if (NetCDF_C_LIBRARIES AND NetCDF_Fortran_LIBRARIES AND + NetCDF_C_INCLUDE_DIRS AND NetCDF_Fortran_INCLUDE_DIRS) + add_library(netcdf_cprnc INTERFACE) + target_link_libraries(netcdf_cprnc INTERFACE ${NetCDF_Fortran_LIBRARIES};${NetCDF_C_LIBRARIES}) + target_include_directories(netcdf_cprnc INTERFACE ${NetCDF_Fortran_INCLUDE_DIRS};${NetCDF_C_INCLUDE_DIRS}) + set(CPRNC_NETCDF_FORTRAN_LIB netcdf_cprnc) + else() + message(STATUS "NetCDF was not found, falling back on pkg-config") + find_package(PkgConfig REQUIRED) - #===== NetCDF ===== - pkg_check_modules(NetCDF REQUIRED IMPORTED_TARGET netcdf) + #===== NetCDF ===== + pkg_check_modules(NetCDF REQUIRED IMPORTED_TARGET netcdf) - #===== NetCDF-Fortran ===== - pkg_check_modules(NetCDF_Fortran REQUIRED IMPORTED_TARGET netcdf-fortran) + #===== NetCDF-Fortran ===== + pkg_check_modules(NetCDF_Fortran REQUIRED IMPORTED_TARGET netcdf-fortran) - set(CPRNC_NETCDF_FORTRAN_LIB PkgConfig::NetCDF_Fortran) - set(CPRNC_NETCDF_C_LIB PkgConfig::NetCDF) + set(CPRNC_NETCDF_FORTRAN_LIB PkgConfig::NetCDF_Fortran) + set(CPRNC_NETCDF_C_LIB PkgConfig::NetCDF) + endif() endif() add_executable (cprnc ${CPRNC_Fortran_SRCS} ${CPRNC_GenF90_SRCS}) From cac468a03d1daf8787b8618367be25c39c5bc0fb Mon Sep 17 00:00:00 2001 From: Luca Bertagna Date: Thu, 31 Jul 2025 14:51:49 -0600 Subject: [PATCH 2/2] QUIET is not a valid option for find_library/find_path --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2522e6b..7b2f112 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,10 +90,10 @@ if (NetCDF_FOUND) else () # If netcdf is not installed as a CMake pkg, the find_package above will fail, # but netcdf may still be installed in the _ROOT folders - find_library(NetCDF_C_LIBRARIES netcdf QUIET HINTS ${NetCDF_C_ROOT} PATH_SUFFIXES lib lib64) - find_library(NetCDF_Fortran_LIBRARIES netcdff QUIET HINTS ${NetCDF_Fortran_ROOT} PATH_SUFFIXES lib lib64) - find_path(NetCDF_C_INCLUDE_DIRS netcdf.h QUIET HINTS ${NetCDF_C_ROOT} PATH_SUFFIXES include) - find_path(NetCDF_Fortran_INCLUDE_DIRS netcdf.mod QUIET HINTS ${NetCDF_Fortran_ROOT} PATH_SUFFIXES include) + find_library(NetCDF_C_LIBRARIES netcdf HINTS ${NetCDF_C_ROOT} PATH_SUFFIXES lib lib64) + find_library(NetCDF_Fortran_LIBRARIES netcdff HINTS ${NetCDF_Fortran_ROOT} PATH_SUFFIXES lib lib64) + find_path(NetCDF_C_INCLUDE_DIRS netcdf.h HINTS ${NetCDF_C_ROOT} PATH_SUFFIXES include) + find_path(NetCDF_Fortran_INCLUDE_DIRS netcdf.mod HINTS ${NetCDF_Fortran_ROOT} PATH_SUFFIXES include) if (NetCDF_C_LIBRARIES AND NetCDF_Fortran_LIBRARIES AND NetCDF_C_INCLUDE_DIRS AND NetCDF_Fortran_INCLUDE_DIRS)