diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f10b2658..eca9a7c54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,7 @@ endif() # Find packages. find_package(NetCDF REQUIRED C Fortran) find_package(MPI REQUIRED C Fortran) -find_package(ESMF MODULE REQUIRED) +find_package(ESMF 8.1.0.27 REQUIRED) if(OPENMP) find_package(OpenMP REQUIRED COMPONENTS Fortran) diff --git a/cmake/FindESMF.cmake b/cmake/FindESMF.cmake index 72d66ea9d..18f3400b5 100644 --- a/cmake/FindESMF.cmake +++ b/cmake/FindESMF.cmake @@ -72,6 +72,20 @@ if (ESMF_FOUND) endif() endforeach() + # Construct ESMF_VERSION from ESMF_VERSION_STRING_GIT + if(ESMF_FOUND) + # ESMF_VERSION_MAJOR and ESMF_VERSION_MINOR are defined in ESMFMKFILE + set(ESMF_VERSION 0) + set(ESMF_VERSION_PATCH ${ESMF_VERSION_REVISION}) + set(ESMF_VERSION_TWEAK 0) + set(ESMF_BETA_RELEASE FALSE) + if(ESMF_VERSION_BETASNAPSHOT MATCHES "^('T')$") + set(ESMF_BETA_RELEASE TRUE) + string(REGEX REPLACE ".*beta_snapshot_*\([0-9]*\).*" "\\1" ESMF_VERSION_TWEAK "${ESMF_VERSION_STRING_GIT}") + endif() + set(ESMF_VERSION "${ESMF_VERSION_MAJOR}.${ESMF_VERSION_MINOR}.${ESMF_VERSION_PATCH}.${ESMF_VERSION_TWEAK}") + endif() + separate_arguments(ESMF_F90COMPILEPATHS NATIVE_COMMAND ${ESMF_F90COMPILEPATHS}) foreach (ITEM ${ESMF_F90COMPILEPATHS}) string(REGEX REPLACE "^-I" "" ITEM "${ITEM}") @@ -103,3 +117,13 @@ if (ESMF_FOUND) INTERFACE_LINK_LIBRARIES "${ESMF_INTERFACE_LINK_LIBRARIES}") endif() + +## Finalize find_package +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args( ${CMAKE_FIND_PACKAGE_NAME} + REQUIRED_VARS ESMF_LIBSDIR + ESMF_INTERFACE_LINK_LIBRARIES + ESMF_F90COMPILEPATHS + VERSION_VAR ESMF_VERSION + HANDLE_COMPONENTS )