1
+ if (GIT_FOUND )
2
+ # Retrieve, build, and install fortran-csv-module (aka FCSV)
3
+ # distribution from GitHub
4
+ set (FCSV_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR} /FCSV-source" )
5
+
6
+ set (FCSV_LOCAL_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR} /FCSV-artifacts" )
7
+
8
+ # Note: "<INSTALL_DIR>" is interpolated within ExternalProject_Add to
9
+ # FCSV_LOCAL_INSTALL_DIR
10
+ # list(APPEND FCSV_CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>")
11
+ list (APPEND FCSV_CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${FCSV_LOCAL_INSTALL_DIR} " )
12
+
13
+ ExternalProject_Add (
14
+ FCSV_external
15
+ # Note: Use URL and URL_HASH [SHA512|SHA256|MD5]=4A54C0DE... to
16
+ # download and checksum an archive. Note that URL may refer to a
17
+ # local file, allowing this to work without net access.
18
+ # GIT_REPOSITORY https://github.com/jacobwilliams/fortran-csv-module.git
19
+ # GIT_TAG 1.2.0
20
+ GIT_REPOSITORY https://github.com/apthorpe/fortran-csv-module.git
21
+ GIT_TAG 2d7c286225f53c77ed113e4776953d1cf0a780ae
22
+ SOURCE_DIR "${FCSV_DIST_DIR} "
23
+ INSTALL_DIR "${FCSV_LOCAL_INSTALL_DIR} "
24
+ CMAKE_ARGS ${FCSV_CMAKE_ARGS}
25
+ BUILD_BYPRODUCTS ${FCSV_LOCAL_INSTALL_DIR} /${CMAKE_STATIC_LIBRARY_PREFIX}fcsv${CMAKE_STATIC_LIBRARY_SUFFIX}
26
+ LOG_BUILD YES
27
+ USES_TERMINAL_DOWNLOAD YES
28
+ USES_TERMINAL_UPDATE YES
29
+ )
30
+
31
+ # From fortran-csv-module/CMakeLists.txt:
32
+ # ...
33
+ # # Set default installation paths; should be invoked after setting project language(s)
34
+ # include(GNUInstallDirs)
35
+ # ...
36
+ # # Fortran module files
37
+ # install(FILES "${LIBFCSV_FORTRAN_MODULE_DIR}/csv_module.mod"
38
+ # DESTINATION finclude)
39
+ # ...
40
+
41
+ # Create ${FCSV_LOCAL_INSTALL_DIR}/finclude based on the module install location
42
+ # set in fortran-csv-module/CMakeLists.txt. Creating this directory avoids a race
43
+ # condition - see https://www.scivision.dev/cmake-fetchcontent-vs-external-project/
44
+ file (MAKE_DIRECTORY ${FCSV_LOCAL_INSTALL_DIR} /finclude )
45
+
46
+ # Make the fcsv library available to the current project as an import
47
+ add_library (fcsv STATIC IMPORTED GLOBAL )
48
+
49
+ # Set properties on fcsv target to point at the installed library location and
50
+ # the module directory created above. FCSV uses `include(GNUInstallDirs)` which
51
+ # typically installs libraries to ./lib which is why the IMPORTED_LOCATION below
52
+ # uses the path ${FCSV_LOCAL_INSTALL_DIR}/lib
53
+ set_target_properties (fcsv
54
+ PROPERTIES
55
+ IMPORTED_LOCATION ${FCSV_LOCAL_INSTALL_DIR} /lib/${CMAKE_STATIC_LIBRARY_PREFIX}fcsv${CMAKE_STATIC_LIBRARY_SUFFIX}
56
+ INTERFACE_INCLUDE_DIRECTORIES ${FCSV_LOCAL_INSTALL_DIR} /finclude
57
+ )
58
+
59
+ # To use this recipe, add one of the following fragments
60
+ # to CMakeLists.txt after project():
61
+ # find_package(Git)
62
+ # include(BuildFCSV)
63
+ # or
64
+ # find_package(Git)
65
+ # include(/path/to/BuildFCSV.cmake)
66
+
67
+ # To include the csv_module.mod link the fcsv library to the target
68
+ # MyExecutable, add the following directives after
69
+ # add_executable(MyExecutable ...):
70
+ # -----
71
+ # target_link_libraries(MyExecutable fcsv)
72
+ # target_include_directories(MyExecutable PUBLIC $<TARGET_PROPERTY:fcsv,Fortran_MODULE_DIRECTORY>)
73
+ # add_dependencies(MyExecutable FCSV_external)
74
+ # -----
75
+
76
+ else ()
77
+ message (STATUS "git not available; using fallback CSV source files" )
78
+
79
+ set (FCSV_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /contrib/fortran-csv-module/src" )
80
+
81
+ # Full path to csv_kinds.f90
82
+ set (FCSV_KINDS_SRC "${FCSV_SOURCE_DIR} /csv_kinds.f90" )
83
+
84
+ # Full path to csv_parameters.f90
85
+ set (FCSV_PARAMETERS_SRC "${FCSV_SOURCE_DIR} /csv_parameters.f90" )
86
+
87
+ # Full path to csv_utilities.f90
88
+ set (FCSV_UTILITIES_SRC "${FCSV_SOURCE_DIR} /csv_utilities.f90" )
89
+
90
+ # Full path to csv_module.F90
91
+ set (FCSV_MODULE_SRC "${FCSV_SOURCE_DIR} /csv_module.F90" )
92
+
93
+ list (APPEND FCSV_SRC_FILES "${FCSV_KINDS_SRC} " "${FCSV_PARAMETERS_SRC} " "${FCSV_UTILITIES_SRC} " "${FCSV_MODULE_SRC} " )
94
+ message (STATUS "Developer Note: Append contents of FCSV_SRC_FILES to list of sources to compile" )
95
+
96
+ message (STATUS "CSV source files are in ${FCSV_SOURCE_DIR} " )
97
+
98
+ endif ()
99
+
100
+ set (CSV_FOUND ON )
101
+ # __END__
0 commit comments