@@ -305,55 +305,44 @@ if(PIO_ENABLE_FORTRAN)
305305 set (NetCDF_Fortran_LIBRARIES "${NetCDF_Fortran_LIBRARIES} " CACHE STRING "NetCDF Fortran libraries" FORCE)
306306 endif ()
307307endif ()
308+ if (WITH_PNETCDF)
309+ find_program (PNETCDF_CONFIG pnetcdf-config REQUIRED)
308310
309- # Always detect NetCDF C and PnetCDF for C library
310- find_package (NetCDF QUIET COMPONENTS C)
311- if (NOT NetCDF_C_FOUND)
312- find_package (PkgConfig REQUIRED)
313- pkg_check_modules(NetCDF_C REQUIRED IMPORTED_TARGET "netcdf" )
314- if (NetCDF_C_FOUND OR NetCDF_C_INCLUDE_DIRS)
315- set (NetCDF_C_FOUND TRUE CACHE BOOL "NetCDF C found via pkg-config" FORCE)
316- endif ()
317- endif ()
311+ execute_process (
312+ COMMAND "${PNETCDF_CONFIG} " --includedir
313+ OUTPUT_VARIABLE PNETCDF_INCLUDEDIR
314+ OUTPUT_STRIP_TRAILING_WHITESPACE
315+ )
318316
319- find_program (PNETCDF_CONFIG pnetcdf-config REQUIRED)
317+ execute_process (
318+ COMMAND "${PNETCDF_CONFIG} " --libdir
319+ OUTPUT_VARIABLE PNETCDF_LIBDIR
320+ OUTPUT_STRIP_TRAILING_WHITESPACE
321+ )
320322
321- execute_process (
322- COMMAND "${PNETCDF_CONFIG} " --includedir
323- OUTPUT_VARIABLE PNETCDF_INCLUDEDIR
324- OUTPUT_STRIP_TRAILING_WHITESPACE
325- )
326323
327- execute_process (
328- COMMAND "${PNETCDF_CONFIG} " --libdir
329- OUTPUT_VARIABLE PNETCDF_LIBDIR
330- OUTPUT_STRIP_TRAILING_WHITESPACE
331- )
324+ execute_process (
325+ COMMAND "${PNETCDF_CONFIG} " --libs
326+ OUTPUT_VARIABLE PNETCDF_LIBS
327+ OUTPUT_STRIP_TRAILING_WHITESPACE
328+ )
329+ # If PNETCDF_LIBS is empty but PNETCDF_LIBDIR is set, set a default
330+ if (NOT PNETCDF_LIBS AND PNETCDF_LIBDIR)
331+ set (PNETCDF_LIBS "-L${PNETCDF_LIBDIR} -lpnetcdf" )
332+ endif ()
332333
334+ # Propagate PnetCDF variables to subdirectories
335+ set (PNETCDF_INCLUDEDIR "${PNETCDF_INCLUDEDIR} " CACHE PATH "PnetCDF include directory" FORCE)
336+ set (PNETCDF_LIBDIR "${PNETCDF_LIBDIR} " CACHE PATH "PnetCDF library directory" FORCE)
337+ set (PNETCDF_LIBS "${PNETCDF_LIBS} " CACHE STRING "PnetCDF libraries" FORCE)
333338
334- execute_process (
335- COMMAND "${PNETCDF_CONFIG} " --libs
336- OUTPUT_VARIABLE PNETCDF_LIBS
337- OUTPUT_STRIP_TRAILING_WHITESPACE
338- )
339- # If PNETCDF_LIBS is empty but PNETCDF_LIBDIR is set, set a default
340- if (NOT PNETCDF_LIBS AND PNETCDF_LIBDIR)
341- set (PNETCDF_LIBS "-L${PNETCDF_LIBDIR} -lpnetcdf" )
339+ # Modern CMake: create imported interface target for PnetCDF
340+ add_library (PnetCDF::PnetCDF INTERFACE IMPORTED )
341+ target_include_directories (PnetCDF::PnetCDF INTERFACE "${PNETCDF_INCLUDEDIR} " )
342+ target_link_directories (PnetCDF::PnetCDF INTERFACE "${PNETCDF_LIBDIR} " )
343+ target_link_libraries (PnetCDF::PnetCDF INTERFACE ${PNETCDF_LIBS} )
342344endif ()
343345
344-
345- # Propagate PnetCDF variables to subdirectories
346- set (PNETCDF_INCLUDEDIR "${PNETCDF_INCLUDEDIR} " CACHE PATH "PnetCDF include directory" FORCE)
347- set (PNETCDF_LIBDIR "${PNETCDF_LIBDIR} " CACHE PATH "PnetCDF library directory" FORCE)
348- set (PNETCDF_LIBS "${PNETCDF_LIBS} " CACHE STRING "PnetCDF libraries" FORCE)
349-
350- # Modern CMake: create imported interface target for PnetCDF
351- add_library (PnetCDF::PnetCDF INTERFACE IMPORTED )
352- target_include_directories (PnetCDF::PnetCDF INTERFACE "${PNETCDF_INCLUDEDIR} " )
353- target_link_directories (PnetCDF::PnetCDF INTERFACE "${PNETCDF_LIBDIR} " )
354- target_link_libraries (PnetCDF::PnetCDF INTERFACE ${PNETCDF_LIBS} )
355-
356-
357346# Set PnetCDF_C_FOUND to TRUE if we have the include dir and libs, and propagate to subdirectories
358347if (PNETCDF_INCLUDEDIR AND PNETCDF_LIBDIR AND PNETCDF_LIBS)
359348 set (PnetCDF_C_FOUND TRUE CACHE BOOL "PnetCDF C found via pnetcdf-config" FORCE)
@@ -619,4 +608,4 @@ configure_file(
619608 "${PROJECT_SOURCE_DIR} /cmake_config.h.in"
620609 "${PROJECT_BINARY_DIR} /config.h"
621610 @ONLY
622- )
611+ )
0 commit comments