@@ -103,18 +103,21 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/flibcpp_version.cpp.in"
103103include (GNUInstallDirs)
104104
105105set (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" )
107108set (FLIBCPP_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR} /cmake/Flibcpp" )
108109set (FLIBCPP_INSTALL_MODULEDIR "${CMAKE_INSTALL_INCLUDEDIR} " )
109110set (FLIBCPP_NAMESPACE Flibcpp::)
110111
112+ # List of libraries exported by cmake/FlibcppConfig.cmake.in
111113set (FLIBCPP_LIBRARIES)
112114
113115function (swig_fortran_add_module name )
116+ set (src_file "${FLIBCPP_INTERFACE_DIR} /${name} .i" )
114117 # We're using C++
115- set_property (SOURCE src/ ${name} .i PROPERTY CPLUSPLUS ON )
118+ set_property (SOURCE " ${src_file} " PROPERTY CPLUSPLUS ON )
116119 # 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 )
118121
119122 if (FLIBCPP_USE_SWIG)
120123 # SWIG is available; actually generate the library dynamically.
@@ -123,8 +126,22 @@ function(swig_fortran_add_module name)
123126 LANGUAGE Fortran
124127 TYPE USE_BUILD_SHARED_LIBS
125128 OUTPUT_DIR "${FLIBCPP_GENERATE_DIR} "
126- SOURCES src/ ${name} .i ${ARGN}
129+ SOURCES " ${src_file} " ${ARGN}
127130 )
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+
128145 else ()
129146 # SWIG is *not* being used: compile the code committed in the repository,
130147 # generated by the developer with SWIG.
@@ -142,30 +159,36 @@ function(swig_fortran_add_module name)
142159 )
143160
144161 target_include_directories (${name}
145- PRIVATE
146- # Internal C++ headers
147- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /src>
148162 PUBLIC
149163 # Fortran modules
150164 $<BUILD_INTERFACE:${CMAKE_Fortran_MODULE_DIRECTORY} >
151165 $<INSTALL_INTERFACE:${FLIBCPP_INSTALL_MODULEDIR} >
152166 )
153167
154168 # Set up installation
155- install (TARGETS ${name}
169+ install (TARGETS
170+ ${name}
156171 EXPORT Flibcpp-targets
157172 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
158173 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
159174 )
160175 # Add to list of targets to export
161176 set (FLIBCPP_LIBRARIES ${FLIBCPP_LIBRARIES} ${FLIBCPP_NAMESPACE}${name}
162- PARENT_SCOPE
177+ PARENT_SCOPE
163178 )
164179endfunction ()
165180
166- # Four SWIG libraries
181+ # Install primary flc module, compiling version info as well
167182swig_fortran_add_module(flc "${FLIBCPP_VERSION_CPP} " )
168183
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+
169192swig_fortran_add_module(flc_algorithm)
170193target_link_libraries (flc_algorithm flc_random flc)
171194
@@ -183,7 +206,8 @@ target_link_libraries(flc_vector flc flc_string)
183206#---------------------------------------------------------------------------#
184207
185208# Install module files
186- install (DIRECTORY "${CMAKE_Fortran_MODULE_DIRECTORY} /"
209+ install (DIRECTORY
210+ "${CMAKE_Fortran_MODULE_DIRECTORY} /"
187211 DESTINATION "${FLIBCPP_INSTALL_MODULEDIR} "
188212)
189213
@@ -197,20 +221,20 @@ install(EXPORT Flibcpp-targets
197221include (CMakePackageConfigHelpers)
198222
199223configure_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"
202226 INSTALL_DESTINATION ${FLIBCPP_INSTALL_CONFIGDIR}
203227)
204228
205229write_basic_package_version_file(
206- ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfigVersion.cmake
230+ " ${CMAKE_CURRENT_BINARY_DIR} /FlibcppConfigVersion.cmake"
207231 VERSION ${PROJECT_VERSION}
208232 COMPATIBILITY SameMajorVersion
209233)
210234
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"
214238 DESTINATION ${FLIBCPP_INSTALL_CONFIGDIR}
215239)
216240
0 commit comments