Skip to content

Commit 4393bb3

Browse files
committed
Update cmake-format config file
Format all cmake files. Update CPM.cmake version. Use FILE_SET HEADER to verify and install the header files.
1 parent dee63cb commit 4393bb3

File tree

5 files changed

+123
-9
lines changed

5 files changed

+123
-9
lines changed

.cmake-format

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,13 @@ parse:
5151
NAMESPACE: 1
5252
INCLUDE_DIR: 1
5353
INCLUDE_DESTINATION: 1
54+
INCLUDE_HEADER_PATTERN: 1
5455
BINARY_DIR: 1
5556
COMPATIBILITY: 1
5657
VERSION_HEADER: 1
58+
EXPORT_HEADER: 1
59+
DISABLE_VERSION_SUFFIX: 1
60+
CPACK: 1
61+
RUNTIME_DESTINATION: 1
5762
DEPENDENCIES: +
63+
HEADER_SETS: +

CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ target_link_libraries(${PROJECT_NAME} PRIVATE fmt::fmt)
7979
set(GREETER_VERSION \"${PROJECT_VERSION}\")
8080
string(TOUPPER ${PROJECT_NAME} UPPERCASE_PROJECT_NAME)
8181
configure_file(${PACKAGE_PROJECT_ROOT_PATH}/version.h.in ${VERSION_HEADER_LOCATION} @ONLY)
82-
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
8382
8483
if(CMAKE_SKIP_INSTALL_RULES)
84+
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
8585
return()
8686
endif()
8787
@@ -93,9 +93,9 @@ packageProject(
9393
VERSION ${PROJECT_VERSION}
9494
NAMESPACE ${PROJECT_NAME}
9595
BINARY_DIR ${PROJECT_BINARY_DIR}
96-
INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include
97-
# XXX INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} XXX VERSION_HEADER
98-
# "${VERSION_HEADER_LOCATION}"
96+
# Not used! INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include
9997
COMPATIBILITY SameMajorVersion
98+
RUNTIME_DESTINATION /
10099
DEPENDENCIES "fmt 11.1.4"
100+
HEADER_SETS public_headers
101101
)

cmake/AddUninstallTarget.cmake

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# SPDX-FileCopyrightText: 2012-2021 Istituto Italiano di Tecnologia (IIT) SPDX-FileCopyrightText:
2+
# 2008-2013 Kitware Inc. SPDX-License-Identifier: BSD-3-Clause
3+
4+
#[=======================================================================[.rst:
5+
AddUninstallTarget
6+
------------------
7+
8+
Add the "uninstall" target for your project::
9+
10+
include(AddUninstallTarget)
11+
12+
13+
will create a file ``cmake_uninstall.cmake`` in the build directory and add a
14+
custom target ``uninstall`` (or ``UNINSTALL`` on Visual Studio and Xcode) that
15+
will remove the files installed by your package (using
16+
``install_manifest.txt``).
17+
See also
18+
https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake
19+
20+
The :module:`AddUninstallTarget` module must be included in your main
21+
``CMakeLists.txt``. If included in a subdirectory it does nothing.
22+
This allows you to use it safely in your main ``CMakeLists.txt`` and include
23+
your project using ``add_subdirectory`` (for example when using it with
24+
:cmake:module:`FetchContent`).
25+
26+
If the ``uninstall`` target already exists, the module does nothing.
27+
#]=======================================================================]
28+
29+
# AddUninstallTarget works only when included in the main CMakeLists.txt
30+
if(NOT "${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
31+
return()
32+
endif()
33+
34+
# The name of the target is uppercase in MSVC and Xcode (for coherence with the other standard
35+
# targets)
36+
if("${CMAKE_GENERATOR}" MATCHES "^(Visual Studio|Xcode)")
37+
set(_uninstall "UNINSTALL")
38+
else()
39+
set(_uninstall "uninstall")
40+
endif()
41+
42+
# If target is already defined don't do anything
43+
if(TARGET ${_uninstall})
44+
return()
45+
endif()
46+
47+
set(_filename cmake_uninstall.cmake)
48+
49+
file(
50+
WRITE "${CMAKE_CURRENT_BINARY_DIR}/${_filename}"
51+
"if(NOT EXISTS \"${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt\")
52+
message(WARNING \"Cannot find install manifest: \\\"${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt\\\"\")
53+
return()
54+
endif()
55+
56+
file(READ \"${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt\" files)
57+
string(STRIP \"\${files}\" files)
58+
string(REGEX REPLACE \"\\n\" \";\" files \"\${files}\")
59+
list(REVERSE files)
60+
foreach(file \${files})
61+
if(IS_SYMLINK \"\$ENV{DESTDIR}\${file}\" OR EXISTS \"\$ENV{DESTDIR}\${file}\")
62+
message(STATUS \"Uninstalling: \$ENV{DESTDIR}\${file}\")
63+
execute_process(
64+
COMMAND \${CMAKE_COMMAND} -E remove \"\$ENV{DESTDIR}\${file}\"
65+
OUTPUT_VARIABLE rm_out
66+
RESULT_VARIABLE rm_retval)
67+
if(NOT \"\${rm_retval}\" EQUAL 0)
68+
message(FATAL_ERROR \"Problem when removing \\\"\$ENV{DESTDIR}\${file}\\\"\")
69+
endif()
70+
else()
71+
message(STATUS \"Not-found: \$ENV{DESTDIR}\${file}\")
72+
endif()
73+
endforeach(file)
74+
"
75+
)
76+
77+
set(_desc "Uninstall the project...")
78+
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
79+
set(_comment
80+
COMMAND
81+
\$\(CMAKE_COMMAND\)
82+
-E
83+
cmake_echo_color
84+
--switch=$\(COLOR\)
85+
--cyan
86+
"${_desc}"
87+
)
88+
else()
89+
set(_comment COMMENT "${_desc}")
90+
endif()
91+
add_custom_target(
92+
${_uninstall}
93+
${_comment}
94+
COMMAND ${CMAKE_COMMAND} -P ${_filename}
95+
USES_TERMINAL
96+
BYPRODUCTS uninstall_byproduct
97+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
98+
)
99+
set_property(SOURCE uninstall_byproduct PROPERTY SYMBOLIC 1)
100+
101+
set_property(TARGET ${_uninstall} PROPERTY FOLDER "CMakePredefinedTargets")

cmake/CPM.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#
33
# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors
44

5-
set(CPM_DOWNLOAD_VERSION 0.40.5)
6-
set(CPM_HASH_SUM "c46b876ae3b9f994b4f05a4c15553e0485636862064f1fcc9d8b4f832086bc5d")
5+
set(CPM_DOWNLOAD_VERSION 0.40.6)
6+
set(CPM_HASH_SUM "3440292907e35353bf0761049d3680e9ed0031443c8ebeb9cbb6a421c4550ec1")
77

88
if(CPM_SOURCE_CACHE)
99
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")

cmake/PackageProject.cmake

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
cmake_minimum_required(VERSION 3.14)
1+
cmake_minimum_required(VERSION 3.14...3.31)
22

33
set(PACKAGE_PROJECT_ROOT_PATH
44
"${CMAKE_CURRENT_LIST_DIR}"
55
CACHE INTERNAL "The path to the PackageProject directory"
66
)
77

8+
# if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.31.0") cmake_policy(SET CMP0177 NEW) endif()
9+
810
function(packageProject)
911
include(CMakePackageConfigHelpers)
1012
include(GNUInstallDirs)
@@ -13,7 +15,7 @@ function(packageProject)
1315
PROJECT
1416
""
1517
"NAME;VERSION;INCLUDE_DIR;INCLUDE_DESTINATION;BINARY_DIR;COMPATIBILITY;EXPORT_HEADER;VERSION_HEADER;NAMESPACE;DISABLE_VERSION_SUFFIX;ARCH_INDEPENDENT;INCLUDE_HEADER_PATTERN;CPACK;RUNTIME_DESTINATION"
16-
"DEPENDENCIES"
18+
"DEPENDENCIES;HEADER_SETS"
1719
${ARGN}
1820
)
1921

@@ -133,6 +135,11 @@ function(packageProject)
133135
set(PROJECT_RUNTIME_DESTINATION ${PROJECT_NAME}${PROJECT_VERSION_SUFFIX})
134136
endif()
135137

138+
if(PROJECT_HEADER_SETS)
139+
# required to install if use in project target since CMake 3.23
140+
set(FILE_SET_ARGS "FILE_SET" "${PROJECT_HEADER_SETS}")
141+
endif()
142+
136143
install(
137144
TARGETS ${PROJECT_NAME}
138145
EXPORT ${PROJECT_NAME}Targets
@@ -148,7 +155,7 @@ function(packageProject)
148155
PUBLIC_HEADER
149156
DESTINATION ${PROJECT_INCLUDE_DESTINATION}
150157
COMPONENT "${PROJECT_NAME}_Development"
151-
FILE_SET public_headers
158+
${FILE_SET_ARGS}
152159
INCLUDES
153160
DESTINATION "${PROJECT_INCLUDE_DESTINATION}"
154161
)

0 commit comments

Comments
 (0)