CMake netCDF Compatibility with WPS (#2121)
[WRF.git] / cmake / modules / FindpnetCDF.cmake
blob3606b94ba29678f564e1be1a017bca57df0847cd
1 # Find pnetcdf
2 # Eventually replace with pnetCDF's actual config if using that
3 # Once found this file will define:
4 #  pnetCDF_FOUND - System has pnetcdf
5 #  pnetCDF_INCLUDE_DIRS - The pnetcdf include directories
6 #  pnetCDF_LIBRARIES - The libraries needed to use pnetcdf
7 #  pnetCDF_DEFINITIONS - Compiler switches required for using pnetcdf
9 # list( REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR} )
10 # find_package( pnetCDF )
11 # list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR} )
13 # Use pnetcdf-config
14 find_program( 
15                 PNETCDF_PROGRAM
16                 pnetcdf-config
17                 QUIET
18                 )
20 if ( ${PNETCDF_PROGRAM} MATCHES "-NOTFOUND$" )
21   message( STATUS "No pnetcdf-config found : ${PNETCDF_PROGRAM}" )
22 else()
23   message( STATUS "Found PNETCDF_PROGRAM : ${PNETCDF_PROGRAM}" )
25   execute_process( COMMAND ${PNETCDF_PROGRAM} --includedir   OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE pnetCDF_INCLUDE_DIR  )
26   execute_process( COMMAND ${PNETCDF_PROGRAM} --libdir       OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE pnetCDF_LIBRARY_DIR )
27   execute_process( COMMAND ${PNETCDF_PROGRAM} --prefix       OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE pnetCDF_PREFIX )
28   execute_process( COMMAND ${PNETCDF_PROGRAM} --version      OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE pnetCDF_VERSION_RAW  )
29   execute_process( COMMAND ${PNETCDF_PROGRAM} --netcdf4      OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE pnetCDF_NC4_ENABLED  )
31   execute_process( COMMAND ${PNETCDF_PROGRAM} --has-c++      OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE pnetCDF_CXX_YES      )
32   execute_process( COMMAND ${PNETCDF_PROGRAM} --has-fortran  OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE pnetCDF_FORTRAN_YES  )
34   # check for large file support
35   find_file( pnetCDF_INCLUDE_FILE pnetcdf.inc ${pnetCDF_INCLUDE_DIR} )
36   file( READ ${pnetCDF_INCLUDE_FILE} pnetCDF_INCLUDE_FILE_STR )
37   string( FIND "${pnetCDF_INCLUDE_FILE_STR}" "nf_format_64bit" pnetCDF_LARGE_FILE_SUPPORT_FOUND )
38   if ( ${pnetCDF_LARGE_FILE_SUPPORT_FOUND} EQUAL -1 )
39     set( pnetCDF_LARGE_FILE_SUPPORT "NO" )
40   else()
41     set( pnetCDF_LARGE_FILE_SUPPORT "YES" )
42   endif()
44   # Sanitize version
45   string( REPLACE " " ";" pnetCDF_VERSION_LIST ${pnetCDF_VERSION_RAW} )
46   list( GET pnetCDF_VERSION_LIST -1 pnetCDF_VERSION )
48   # Note that pnetCDF has decided to change things up and use "disabled" instead of "yes/no"
49   string( TOLOWER ${pnetCDF_NC4_ENABLED} pnetCDF_NC4_ENABLED )
50   if ( ${pnetCDF_NC4_ENABLED} STREQUAL "enabled" )
51     set( pnetCDF_NC4 "YES" )
52   else()
53     set( pnetCDF_NC4 "NO" )
54   endif()
56   string( TOUPPER ${pnetCDF_CXX_YES}      pnetCDF_CXX      )
57   string( TOUPPER ${pnetCDF_FORTRAN_YES}  pnetCDF_FORTRAN  )
60   set( pnetCDF_DEFINITIONS  )
62   # Find libraries
63   find_library(
64                 pnetCDF_LIBRARY
65                 NAMES pnetcdf
66                 # Hints before PATHS
67                 HINTS ${pnetCDF_LIBRARY_DIR}
68                 NO_DEFAULT_PATH
69               )
72   set( pnetCDF_LIBRARIES
73       $<$<LINK_LANGUAGE:C>:${pnetCDF_LIBRARY}>
74       $<$<BOOL:${pnetCDF_CXX}>:$<$<LINK_LANGUAGE:CXX>:${pnetCDF_LIBRARY}>>
75       $<$<BOOL:${pnetCDF_FORTRAN}>:$<$<LINK_LANGUAGE:Fortran>:${pnetCDF_LIBRARY}>>
76       )
77   set( pnetCDF_INCLUDE_DIRS ${pnetCDF_INCLUDE_DIR} )
78 endif()
79 find_package( PkgConfig )
80 include(FindPackageHandleStandardArgs)
82 # handle the QUIETLY and REQUIRED arguments and set pnetCDF_FOUND to TRUE
83 # if all listed variables are TRUE
84 find_package_handle_standard_args( pnetCDF  DEFAULT_MSG
85                                   pnetCDF_INCLUDE_DIRS
86                                   pnetCDF_LIBRARIES
87                                   pnetCDF_VERSION
88                                   )
90 # mark_as_advanced( pnetCDF_CLIBS pnetCDF_CXXLIBS pnetCDF_FLIBS )