|
| 1 | +include(ExternalProject) |
| 2 | + |
| 3 | +if(NOT nc4fortran_external) |
| 4 | + find_package(nc4fortran CONFIG) |
| 5 | + |
| 6 | + if(nc4fortran_FOUND) |
| 7 | + message(STATUS: "nc4fortran found: ${nc4fortran_DIR}") |
| 8 | + return() |
| 9 | + endif() |
| 10 | +endif() |
| 11 | + |
| 12 | +set(nc4fortran_external true CACHE BOOL "Build nc4fortran") |
| 13 | + |
| 14 | +find_package(NetCDF REQUIRED COMPONENTS Fortran) |
| 15 | + |
| 16 | +if(NOT nc4fortran_ROOT) |
| 17 | + set(nc4fortran_ROOT ${CMAKE_INSTALL_PREFIX}) |
| 18 | +endif() |
| 19 | + |
| 20 | +set(nc4fortran_INCLUDE_DIRS ${nc4fortran_ROOT}/include) |
| 21 | + |
| 22 | +if(BUILD_SHARED_LIBS) |
| 23 | + set(nc4fortran_LIBRARIES ${nc4fortran_ROOT}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}nc4fortran${CMAKE_SHARED_LIBRARY_SUFFIX}) |
| 24 | +else() |
| 25 | + set(nc4fortran_LIBRARIES ${nc4fortran_ROOT}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}nc4fortran${CMAKE_STATIC_LIBRARY_SUFFIX}) |
| 26 | +endif() |
| 27 | + |
| 28 | +set(nc4fortran_cmake_args |
| 29 | +-DCMAKE_INSTALL_PREFIX=${nc4fortran_ROOT} |
| 30 | +-DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS} |
| 31 | +-DCMAKE_BUILD_TYPE=Release |
| 32 | +-DBUILD_TESTING:BOOL=false |
| 33 | +-Dautobuild:BOOL=false |
| 34 | +-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} |
| 35 | +-DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} |
| 36 | +) |
| 37 | + |
| 38 | +ExternalProject_Add(NC4FORTRAN |
| 39 | +SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/.. |
| 40 | +CMAKE_ARGS ${nc4fortran_cmake_args} |
| 41 | +CMAKE_GENERATOR ${EXTPROJ_GENERATOR} |
| 42 | +BUILD_BYPRODUCTS ${nc4fortran_LIBRARIES} |
| 43 | +INACTIVITY_TIMEOUT 15 |
| 44 | +CONFIGURE_HANDLED_BY_BUILD ON |
| 45 | +) |
| 46 | + |
| 47 | +file(MAKE_DIRECTORY ${nc4fortran_INCLUDE_DIRS}) |
| 48 | + |
| 49 | +if(BUILD_SHARED_LIBS) |
| 50 | + add_library(nc4fortran::nc4fortran SHARED IMPORTED) |
| 51 | +else() |
| 52 | + add_library(nc4fortran::nc4fortran STATIC IMPORTED) |
| 53 | +endif() |
| 54 | + |
| 55 | +set_target_properties(nc4fortran::nc4fortran PROPERTIES IMPORTED_LOCATION ${nc4fortran_LIBRARIES}) |
| 56 | +target_include_directories(nc4fortran::nc4fortran INTERFACE ${nc4fortran_INCLUDE_DIRS}) |
| 57 | +target_link_libraries(nc4fortran::nc4fortran INTERFACE NetCDF::NetCDF_Fortran) |
| 58 | + |
| 59 | +# race condition for linking without this |
| 60 | +add_dependencies(nc4fortran::nc4fortran NC4FORTRAN) |
0 commit comments