@@ -24,6 +24,8 @@ project(
24
24
HOMEPAGE_URL "https://github.com/cppalliance/mrdox"
25
25
LANGUAGES CXX C
26
26
)
27
+ include (CMakePackageConfigHelpers )
28
+ include (GNUInstallDirs )
27
29
28
30
#set(BUILD_SHARED_LIBS OFF CACHE STRING "")
29
31
#set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "")
@@ -35,6 +37,8 @@ project(
35
37
36
38
option (MRDOX_BUILD_TESTS "Build tests" ON )
37
39
option (MRDOX_BUILD_SHARED "Link shared" OFF )
40
+ option (MRDOX_INSTALL "Configure install target" ON )
41
+ option (MRDOX_PACKAGE "Build install package" ON )
38
42
39
43
if (MRDOX_BUILD_SHARED )
40
44
set (MRDOX_LINK_MODE SHARED )
@@ -100,6 +104,7 @@ target_compile_features(mrdox-api PUBLIC cxx_std_20)
100
104
target_include_directories (mrdox-api
101
105
PUBLIC
102
106
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /include/>"
107
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >"
103
108
PRIVATE
104
109
"${PROJECT_SOURCE_DIR} /source/api/"
105
110
)
@@ -186,6 +191,90 @@ target_include_directories(mrdox PRIVATE source/tool)
186
191
source_group (TREE ${PROJECT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt )
187
192
source_group (TREE ${PROJECT_SOURCE_DIR} /source/mrdox PREFIX "source" FILES ${TOOL_SOURCES} )
188
193
194
+ #-------------------------------------------------
195
+ #
196
+ # Install
197
+ #
198
+ #-------------------------------------------------
199
+ if (MRDOX_INSTALL )
200
+ # Create and install mrdox-targets.cmake
201
+ install (TARGETS mrdox-api mrdox
202
+ EXPORT mrdox-targets
203
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
204
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
205
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
206
+ )
207
+
208
+ install (EXPORT mrdox-targets
209
+ FILE mrdox-targets.cmake
210
+ NAMESPACE mrdox::
211
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/mrdox )
212
+
213
+ # Headers
214
+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /include/mrdox
215
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
216
+ FILES_MATCHING PATTERN "*.[hic]pp" )
217
+
218
+ # Set variable where the cmake config is
219
+ # https://cliutils.gitlab.io/modern-cmake/chapters/install/installing.html
220
+ set (CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} /cmake/mrdox )
221
+
222
+ # Create and install mrdox-config-version.cmake
223
+ if (CMAKE_PROJECT_VERSION VERSION_LESS 1.0.0 )
224
+ set (compatibility_mode SameMajorVersion )
225
+ else ()
226
+ set (compatibility_mode SameMinorVersion )
227
+ endif ()
228
+ write_basic_package_version_file (
229
+ mrdox-config-version.cmake
230
+ VERSION ${PACKAGE_VERSION}
231
+ COMPATIBILITY ${compatibility_mode} )
232
+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /mrdox-config-version.cmake
233
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/mrdox )
234
+
235
+ # Create and install mrdox-config.cmake
236
+ set (INCLUDE_INSTALL_DIR include / )
237
+ set (LIB_INSTALL_DIR lib/ )
238
+ configure_package_config_file (
239
+ ${CMAKE_CURRENT_SOURCE_DIR} /mrdox-config.cmake.in # input file
240
+ ${CMAKE_CURRENT_BINARY_DIR} /mrdox-config.cmake # output file
241
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/mrdox
242
+ PATH_VARS CMAKE_INSTALL_LIBDIR INCLUDE_INSTALL_DIR LIB_INSTALL_DIR )
243
+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /mrdox-config.cmake
244
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/mrdox )
245
+
246
+ endif ()
247
+
248
+
249
+ #-------------------------------------------------
250
+ #
251
+ # Packages
252
+ #
253
+ #-------------------------------------------------
254
+ if (MRDOX_INSTALL AND MRDOX_PACKAGE )
255
+ # Set the cpack variables
256
+ # https://cliutils.gitlab.io/modern-cmake/chapters/install/packaging.html
257
+
258
+ # The most common cpack variables
259
+ set (CPACK_PACKAGE_VENDOR "mrdox" )
260
+ set (CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION} )
261
+ set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR} )
262
+ set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR} )
263
+ set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH} )
264
+ set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR} /LICENSE.txt" )
265
+ set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR} /README.adoc" )
266
+
267
+ # Set CPACK_SOURCE_IGNORE_FILES with files source packages shouldn't install
268
+ # We get these from .gitignore to avoid redundancy
269
+ FILE (READ .gitignore GITIGNORE_CONTENTS )
270
+ STRING (REGEX REPLACE ";" "\\\\ ;" GITIGNORE_CONTENTS "${GITIGNORE_CONTENTS} " )
271
+ STRING (REGEX REPLACE "\n " ";" GITIGNORE_CONTENTS "${GITIGNORE_CONTENTS} " )
272
+ set (CPACK_SOURCE_IGNORE_FILES ${GITIGNORE_CONTENTS} )
273
+
274
+ # Always include CPack at last
275
+ include (CPack )
276
+ endif ()
277
+
189
278
#-------------------------------------------------
190
279
#
191
280
# Tests
0 commit comments