Skip to content

Commit fd39c38

Browse files
committed
examples use externalproject
1 parent f98c831 commit fd39c38

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

Examples/CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
cmake_minimum_required(VERSION 3.19...3.22)
22

33
project(nc4fortranExample
4-
LANGUAGES Fortran
4+
LANGUAGES C Fortran
55
)
66

77
include(CTest)
88

9+
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
10+
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} CACHE PATH "Install top-level directory" FORCE)
11+
endif()
912

10-
find_package(nc4fortran CONFIG REQUIRED)
13+
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake/Modules)
14+
15+
include(${PROJECT_SOURCE_DIR}/../cmake/nc4fortran.cmake)
1116

1217
# --- Fortran interface for examples
1318
add_library(fortran_interface fortran_interface.f90)

cmake/nc4fortran.cmake

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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

Comments
 (0)