@@ -103,18 +103,21 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/flibcpp_version.cpp.in"
103
103
include (GNUInstallDirs )
104
104
105
105
set (CMAKE_Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /module" )
106
- set (FLIBCPP_GENERATE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /src/generated" )
106
+ set (FLIBCPP_INTERFACE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /include" )
107
+ set (FLIBCPP_GENERATE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /src" )
107
108
set (FLIBCPP_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR} /cmake/Flibcpp" )
108
109
set (FLIBCPP_INSTALL_MODULEDIR "${CMAKE_INSTALL_INCLUDEDIR} " )
109
110
set (FLIBCPP_NAMESPACE Flibcpp:: )
110
111
112
+ # List of libraries exported by cmake/FlibcppConfig.cmake.in
111
113
set (FLIBCPP_LIBRARIES )
112
114
113
115
function (swig_fortran_add_module name )
116
+ set (src_file "${FLIBCPP_INTERFACE_DIR} /${name} .i" )
114
117
# We're using C++
115
- set_property (SOURCE src/${name}.i PROPERTY CPLUSPLUS ON )
118
+ set_property (SOURCE " ${src_file} " PROPERTY CPLUSPLUS ON )
116
119
# We need to include the source directory
117
- set_property (SOURCE src/${name}.i PROPERTY USE_TARGET_INCLUDE_DIRECTORIES ON )
120
+ set_property (SOURCE " ${src_file} " PROPERTY USE_TARGET_INCLUDE_DIRECTORIES ON )
118
121
119
122
if (FLIBCPP_USE_SWIG )
120
123
# SWIG is available; actually generate the library dynamically.
@@ -123,8 +126,22 @@ function(swig_fortran_add_module name)
123
126
LANGUAGE Fortran
124
127
TYPE USE_BUILD_SHARED_LIBS
125
128
OUTPUT_DIR "${FLIBCPP_GENERATE_DIR} "
126
- SOURCES src/${name}.i ${ARGN}
129
+ SOURCES " ${src_file} " ${ARGN}
127
130
)
131
+
132
+ # Add SWIG headers
133
+ target_include_directories (${name}
134
+ PUBLIC
135
+ $< BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include>
136
+ $< INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
137
+ )
138
+
139
+ # Install the interface file for downstream libraries to use
140
+ install (FILES
141
+ "${src_file} "
142
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} "
143
+ )
144
+
128
145
else ()
129
146
# SWIG is *not* being used: compile the code committed in the repository,
130
147
# generated by the developer with SWIG.
@@ -142,30 +159,36 @@ function(swig_fortran_add_module name)
142
159
)
143
160
144
161
target_include_directories (${name}
145
- PRIVATE
146
- # Internal C++ headers
147
- $< BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /src>
148
162
PUBLIC
149
163
# Fortran modules
150
164
$< BUILD_INTERFACE:${CMAKE_Fortran_MODULE_DIRECTORY} >
151
165
$< INSTALL_INTERFACE:${FLIBCPP_INSTALL_MODULEDIR} >
152
166
)
153
167
154
168
# Set up installation
155
- install (TARGETS ${name}
169
+ install (TARGETS
170
+ ${name}
156
171
EXPORT Flibcpp-targets
157
172
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
158
173
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
159
174
)
160
175
# Add to list of targets to export
161
176
set (FLIBCPP_LIBRARIES ${FLIBCPP_LIBRARIES} ${FLIBCPP_NAMESPACE}${name}
162
- PARENT_SCOPE
177
+ PARENT_SCOPE
163
178
)
164
179
endfunction ()
165
180
166
- # Four SWIG libraries
181
+ # Install primary flc module, compiling version info as well
167
182
swig_fortran_add_module (flc "${FLIBCPP_VERSION_CPP} " )
168
183
184
+ # Also install 'import_flc' if using SWIG
185
+ if (FLIBCPP_USE_SWIG )
186
+ install (FILES
187
+ "${CMAKE_CURRENT_SOURCE_DIR} /include/import_flc.i"
188
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} "
189
+ )
190
+ endif ()
191
+
169
192
swig_fortran_add_module (flc_algorithm )
170
193
target_link_libraries (flc_algorithm flc_random flc )
171
194
@@ -183,7 +206,8 @@ target_link_libraries(flc_vector flc flc_string)
183
206
#---------------------------------------------------------------------------#
184
207
185
208
# Install module files
186
- install (DIRECTORY "${CMAKE_Fortran_MODULE_DIRECTORY} /"
209
+ install (DIRECTORY
210
+ "${CMAKE_Fortran_MODULE_DIRECTORY} /"
187
211
DESTINATION "${FLIBCPP_INSTALL_MODULEDIR} "
188
212
)
189
213
@@ -197,20 +221,20 @@ install(EXPORT Flibcpp-targets
197
221
include (CMakePackageConfigHelpers )
198
222
199
223
configure_package_config_file (
200
- ${CMAKE_CURRENT_LIST_DIR }/cmake/FlibcppConfig.cmake.in
201
- ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfig.cmake
224
+ " ${CMAKE_CURRENT_SOURCE_DIR } /cmake/FlibcppConfig.cmake.in"
225
+ " ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfig.cmake"
202
226
INSTALL_DESTINATION ${FLIBCPP_INSTALL_CONFIGDIR}
203
227
)
204
228
205
229
write_basic_package_version_file (
206
- ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfigVersion.cmake
230
+ " ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfigVersion.cmake"
207
231
VERSION ${PROJECT_VERSION}
208
232
COMPATIBILITY SameMajorVersion
209
233
)
210
234
211
- install (
212
- FILES ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfig.cmake
213
- ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfigVersion.cmake
235
+ install (FILES
236
+ " ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfig.cmake"
237
+ " ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfigVersion.cmake"
214
238
DESTINATION ${FLIBCPP_INSTALL_CONFIGDIR}
215
239
)
216
240
0 commit comments