Skip to content

Commit 70195ae

Browse files
committed
More CMake modernization
1 parent 3fda582 commit 70195ae

7 files changed

Lines changed: 196 additions & 1192 deletions

File tree

.github/workflows/ci.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ jobs:
167167
- name: setup
168168
run: |
169169
brew update -q
170-
brew upgrade -f -q
171170
brew bundle install -q
172171
brew cleanup -q -s
173172
rm -rf $(brew --cache)
@@ -463,7 +462,6 @@ jobs:
463462
- name: setup
464463
run: |
465464
brew update -q
466-
brew upgrade -f -q
467465
brew bundle install -q
468466
brew cleanup -q -s
469467
rm -rf $(brew --cache)

.reuse/dep5

Lines changed: 0 additions & 1049 deletions
This file was deleted.

CMakeLists.txt

Lines changed: 97 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ endif()
6565
include(GNUInstallDirs)
6666

6767
set(AVO_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
68-
set(AVO_CPS_DIR ${CMAKE_INSTALL_LIBDIR}/cps/${PROJECT_NAME})
6968
set(AVO_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
7069
set(AVO_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR})
7170
set(AVO_LIBRARY AVO)
@@ -75,7 +74,7 @@ set(AVO_NAME "AVO2 Library")
7574
set(CMAKE_CXX_STANDARD 98)
7675
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
7776
set(CMAKE_CXX_EXTENSIONS OFF)
78-
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
77+
set(CMAKE_CXX_EXTENSIONS_REQUIRED OFF)
7978
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
8079

8180
option(BUILD_DOCUMENTATION "Build documentation" OFF)
@@ -112,15 +111,15 @@ include(CheckCXXCompilerFlag)
112111
include(CheckLinkerFlag)
113112

114113
option(ENABLE_HARDENING
115-
"Enable hardening compiler and linker flags if supported" OFF)
114+
"Enable hardening compiler and linker flags if supported" ON)
116115

117116
if(ENABLE_HARDENING)
118117
if(MSVC)
119118
check_cxx_compiler_flag(/GS AVO_COMPILER_SUPPORTS_GS)
120119
check_cxx_compiler_flag(/guard:cf AVO_COMPILER_SUPPORTS_GUARD_CF)
121120

122121
if(AVO_COMPILER_SUPPORTS_GS)
123-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS")
122+
add_compile_options(/GS)
124123
endif()
125124

126125
check_linker_flag(CXX /DYNAMICBASE AVO_LINKER_SUPPORTS_DYNAMICBASE)
@@ -130,16 +129,12 @@ if(ENABLE_HARDENING)
130129
if(AVO_COMPILER_SUPPORTS_GUARD_CF
131130
AND AVO_LINKER_SUPPORTS_DYNAMICBASE
132131
AND AVO_LINKER_SUPPORTS_GUARD_CF)
133-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /guard:cf")
134-
set(CMAKE_EXE_LINKER_FLAGS
135-
"${CMAKE_EXE_LINKER_FLAGS} /DYNAMICBASE /GUARD:CF")
136-
set(CMAKE_SHARED_LINKER_FLAGS
137-
"${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE /GUARD:CF")
132+
add_compile_options(/guard:cf)
133+
add_link_options(/DYNAMICBASE /GUARD:CF)
138134
endif()
139135

140136
if(AVO_LINKER_SUPPORTS_NXCOMPAT)
141-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NXCOMPAT")
142-
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NXCOMPAT")
137+
add_link_options(/NXCOMPAT)
143138
endif()
144139
else()
145140
check_cxx_compiler_flag(-D_FORTIFY_SOURCE=2
@@ -162,21 +157,21 @@ if(ENABLE_HARDENING)
162157
endif()
163158

164159
if(AVO_COMPILER_SUPPORTS_D_FORTIFY_SOURCE_2)
165-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2")
160+
add_compile_options(-D_FORTIFY_SOURCE=2)
166161
endif()
167162
if(AVO_COMPILER_SUPPORTS_FCF_PROTECTION)
168-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcf-protection")
163+
add_compile_options(-fcf-protection)
169164
endif()
170165
if(AVO_COMPILER_SUPPORTS_FNO_COMMON)
171-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common")
166+
add_compile_options(-fno-common)
172167
endif()
173168
if(AVO_COMPILER_SUPPORTS_FSTACK_CLASH_PROTECTION)
174-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-clash-protection")
169+
add_compile_options(-fstack-clash-protection)
175170
endif()
176171
if(AVO_COMPILER_SUPPORTS_FSTACK_PROTECTOR_STRONG)
177-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")
172+
add_compile_options(-fstack-protector-strong)
178173
elseif(AVO_COMPILER_SUPPORTS_FSTACK_PROTECTOR)
179-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
174+
add_compile_options(-fstack-protector)
180175
endif()
181176

182177
check_linker_flag(CXX -Wl,-Bsymbolic-functions
@@ -189,42 +184,33 @@ if(ENABLE_HARDENING)
189184
AVO_LINKER_SUPPORTS_Z_NOEXECSTACK)
190185
check_linker_flag(CXX -Wl,-z,now AVO_LINKER_SUPPORTS_Z_NOW)
191186
check_linker_flag(CXX -Wl,-z,relro AVO_LINKER_SUPPORTS_Z_RELRO)
187+
check_linker_flag(CXX -Wl,-z,separate-code AVO_LINKER_SUPPORTS_Z_SEPARATE_CODE)
192188

193189
if(AVO_LINKER_SUPPORTS_BSYMBOLIC_FUNCTIONS)
194-
set(CMAKE_EXE_LINKER_FLAGS
195-
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bsymbolic-functions")
196-
set(CMAKE_SHARED_LINKER_FLAGS
197-
"${CMAKE_SHARED_LINKER_FLAGS} -Wl,-Bsymbolic-functions")
190+
add_link_options(-Wl,-Bsymbolic-functions)
198191
endif()
199192
if(AVO_COMPILER_SUPPORTS_FSANITIZE_SAFE_STACK
200193
AND AVO_LINKER_SUPPORTS_FSANITIZE_SAFE_STACK)
201-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=safe-stack")
202-
set(CMAKE_EXE_LINKER_FLAGS
203-
"${CMAKE_EXE_LINKER_FLAGS} -fsanitize=safe-stack")
204-
set(CMAKE_SHARED_LINKER_FLAGS
205-
"${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=safe-stack")
194+
add_compile_options(-fsanitize=safe-stack)
195+
add_link_options(-fsanitize=safe-stack)
206196
endif()
207197
if(AVO_LINKER_SUPPORTS_Z_DEFS)
208-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,defs")
209-
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
198+
add_link_options(-Wl,-z,defs)
210199
endif()
211200
if(AVO_LINKER_SUPPORTS_Z_NOEXECHEAP)
212-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,noexecheap")
213-
set(CMAKE_SHARED_LINKER_FLAGS
214-
"${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,noexecheap")
201+
add_link_options(-Wl,-z,noexecheap)
215202
endif()
216203
if(AVO_LINKER_SUPPORTS_Z_NOEXECSTACK)
217-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,noexecstack")
218-
set(CMAKE_SHARED_LINKER_FLAGS
219-
"${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,noexecstack")
204+
add_link_options(-Wl,-z,noexecstack)
220205
endif()
221206
if(AVO_LINKER_SUPPORTS_Z_NOW)
222-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,now")
223-
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,now")
207+
add_link_options(-Wl,-z,now)
224208
endif()
225209
if(AVO_LINKER_SUPPORTS_Z_RELRO)
226-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro")
227-
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro")
210+
add_link_options(-Wl,-z,relro)
211+
endif()
212+
if(AVO_LINKER_SUPPORTS_Z_SEPARATE_CODE)
213+
add_link_options(-Wl,-z,separate-code)
228214
endif()
229215
endif()
230216
endif()
@@ -233,7 +219,7 @@ if(MSVC)
233219
check_cxx_compiler_flag(/W4 AVO_COMPILER_SUPPORTS_W4)
234220

235221
if(AVO_COMPILER_SUPPORTS_W4)
236-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
222+
add_compile_options(/W4)
237223
endif()
238224
else()
239225
check_cxx_compiler_flag(-Wall AVO_COMPILER_SUPPORTS_WALL)
@@ -245,26 +231,24 @@ else()
245231
AVO_COMPILER_SUPPORTS_WNO_UNUSED)
246232

247233
if(AVO_COMPILER_SUPPORTS_WALL)
248-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
234+
add_compile_options(-Wall)
249235
endif()
250236
if(AVO_COMPILER_SUPPORTS_WFORMAT_SECURITY)
251-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-security")
237+
add_compile_options(-Wformat-security)
252238
endif()
253239
if(AVO_COMPILER_SUPPORTS_WERROR_FORMAT_SECURITY)
254-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=format-security")
240+
add_compile_options(-Werror=format-security)
255241
endif()
256242
if(AVO_COMPILER_SUPPORTS_WNO_UNUSED)
257-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused")
243+
add_compile_options(-Wno-unused)
258244
endif()
259245
endif()
260246

261247
if(NOT MSVC)
262248
check_linker_flag(CXX -Wl,--as-needed AVO_LINKER_SUPPORTS__AS_NEEDED)
263249

264250
if(AVO_LINKER_SUPPORTS__AS_NEEDED)
265-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
266-
set(CMAKE_SHARED_LINKER_FLAGS
267-
"${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
251+
add_link_options(-Wl,--as-needed)
268252
endif()
269253
endif()
270254

@@ -275,83 +259,91 @@ if(WARNINGS_AS_ERRORS)
275259
check_cxx_compiler_flag(/WX AVO_COMPILER_SUPPORTS_WX)
276260

277261
if(AVO_COMPILER_SUPPORTS_WX)
278-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
262+
add_compile_options(/WX)
279263
endif()
280264
else()
281265
check_cxx_compiler_flag(-Werror AVO_COMPILER_SUPPORTS_WERROR)
282266

283267
if(AVO_COMPILER_SUPPORTS_WERROR)
284-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
268+
add_compile_options(-Werror)
285269
endif()
286270
endif()
287271
endif()
288272

273+
option(ENABLE_INSTALLATION "Enable installation" ${PROJECT_IS_TOP_LEVEL})
274+
289275
add_subdirectory(src)
290276
add_subdirectory(examples)
291277
add_subdirectory(doc)
292278

293-
install(FILES LICENSE
294-
COMPONENT runtime
295-
DESTINATION ${CMAKE_INSTALL_DOCDIR})
279+
if(ENABLE_INSTALLATION)
280+
install(FILES LICENSE
281+
COMPONENT runtime
282+
TYPE DOC)
296283

297-
include(CMakePackageConfigHelpers)
284+
include(CMakePackageConfigHelpers)
298285

299-
configure_package_config_file(
300-
${PROJECT_NAME}Config.cmake.in ${PROJECT_NAME}Config.cmake
301-
INSTALL_DESTINATION ${AVO_DIR}
302-
PATH_VARS AVO_INCLUDE_DIR AVO_LIBRARY_DIR)
286+
configure_package_config_file(
287+
${PROJECT_NAME}Config.cmake.in ${PROJECT_NAME}Config.cmake
288+
INSTALL_DESTINATION ${AVO_DIR}
289+
PATH_VARS AVO_INCLUDE_DIR AVO_LIBRARY_DIR)
303290

304-
write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake
305-
COMPATIBILITY SameMajorVersion)
291+
write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake
292+
COMPATIBILITY SameMajorVersion)
306293

307-
install(FILES
308-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
309-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
310-
COMPONENT development
311-
DESTINATION ${AVO_DIR})
294+
install(FILES
295+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
296+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
297+
COMPONENT development
298+
DESTINATION ${AVO_DIR})
312299

313-
find_package(PkgConfig MODULE)
300+
find_package(PkgConfig MODULE)
314301

315-
if(PkgConfig_FOUND)
316-
configure_file(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
317-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
318-
COMPONENT development
319-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
302+
if(PkgConfig_FOUND)
303+
configure_file(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
304+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
305+
COMPONENT development
306+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
307+
endif()
320308
endif()
321309

322-
include(InstallRequiredSystemLibraries)
323-
324-
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
325-
set(CPACK_PACKAGE_CONTACT "Jamie Snape")
326-
set(CPACK_PACKAGE_VENDOR "University of North Carolina at Chapel Hill")
327-
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
328-
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
329-
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
330-
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
331-
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
332-
set(CPACK_STRIP_FILES ON)
333-
334-
set(CPACK_SOURCE_IGNORE_FILES
335-
_build/ \\\\.git/ \\\\.gitattributes \\\\.github/ \\\\.gitignore bazel-
336-
Brewfile)
337-
set(CPACK_SOURCE_STRIP_FILES ON)
338-
339-
set(CPACK_DEBIAN_COMPRESSION_TYPE zstd)
340-
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
341-
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/triggers")
342-
set(CPACK_DEBIAN_PACKAGE_DEPENDS)
343-
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PROJECT_HOMEPAGE_URL})
344-
set(CPACK_DEBIAN_PACKAGE_SECTION contrib/libdevel)
345-
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
346-
347-
set(CPACK_FREEBSD_PACKAGE_DEPS)
348-
set(CPACK_FREEBSD_PACKAGE_LICENSE APACHE20)
349-
set(CPACK_FREEBSD_PACKAGE_WWW ${PROJECT_HOMEPAGE_URL})
350-
351-
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
352-
set(CPACK_RPM_PACKAGE_AUTOREQPROV ON)
353-
set(CPACK_RPM_PACKAGE_LICENSE "ASL 2.0")
354-
set(CPACK_RPM_PACKAGE_REQUIRES)
355-
set(CPACK_RPM_PACKAGE_URL ${PROJECT_HOMEPAGE_URL})
356-
357-
include(CPack)
310+
option(ENABLE_PACKAGING "Enable packaging" ${PROJECT_IS_TOP_LEVEL})
311+
312+
if(ENABLE_PACKAGING)
313+
include(InstallRequiredSystemLibraries)
314+
315+
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
316+
set(CPACK_PACKAGE_CONTACT "Jamie Snape")
317+
set(CPACK_PACKAGE_VENDOR "University of North Carolina at Chapel Hill")
318+
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
319+
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
320+
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
321+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
322+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
323+
set(CPACK_STRIP_FILES ON)
324+
325+
set(CPACK_SOURCE_IGNORE_FILES
326+
_build/ \\\\.git/ \\\\.gitattributes \\\\.github/ \\\\.gitignore bazel-
327+
Brewfile)
328+
set(CPACK_SOURCE_STRIP_FILES ON)
329+
330+
set(CPACK_DEBIAN_COMPRESSION_TYPE zstd)
331+
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
332+
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/triggers")
333+
set(CPACK_DEBIAN_PACKAGE_DEPENDS)
334+
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PROJECT_HOMEPAGE_URL})
335+
set(CPACK_DEBIAN_PACKAGE_SECTION contrib/libdevel)
336+
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
337+
338+
set(CPACK_FREEBSD_PACKAGE_DEPS)
339+
set(CPACK_FREEBSD_PACKAGE_LICENSE APACHE20)
340+
set(CPACK_FREEBSD_PACKAGE_WWW ${PROJECT_HOMEPAGE_URL})
341+
342+
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
343+
set(CPACK_RPM_PACKAGE_AUTOREQPROV ON)
344+
set(CPACK_RPM_PACKAGE_LICENSE "ASL 2.0")
345+
set(CPACK_RPM_PACKAGE_REQUIRES)
346+
set(CPACK_RPM_PACKAGE_URL ${PROJECT_HOMEPAGE_URL})
347+
348+
include(CPack)
349+
endif()

doc/CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ if(BUILD_DOCUMENTATION AND Doxygen_FOUND)
6767
ALL
6868
USE_STAMP_FILE)
6969

70-
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html"
71-
COMPONENT documentation
72-
DESTINATION ${CMAKE_INSTALL_DOCDIR})
70+
if(ENABLE_INSTALLATION)
71+
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html"
72+
COMPONENT documentation
73+
TYPE DOC)
74+
endif()
7375
endif()

examples/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
# <https://gamma.cs.unc.edu/AVO/>
3535
#
3636

37-
if(BUILD_TESTING)
37+
option(BUILD_EXAMPLES "Build examples" ${PROJECT_IS_TOP_LEVEL})
38+
39+
if(BUILD_EXAMPLES)
3840
option(OUTPUT_TIME_AND_POSITIONS "Output time and positions" ON)
3941

4042
if(OUTPUT_TIME_AND_POSITIONS)
@@ -58,6 +60,10 @@ if(BUILD_TESTING)
5860
endif()
5961
set_target_properties(Circle PROPERTIES
6062
INTERPROCEDURAL_OPTIMIZATION ${AVO_EXAMPLES_INTERPROCEDURAL_OPTIMIZATION})
63+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.1)
64+
set_target_properties(Circle PROPERTIES
65+
SPDX_LICENSE Apache-2.0)
66+
endif()
6167
add_test(NAME Circle COMMAND Circle)
6268
set_tests_properties(Circle PROPERTIES
6369
LABELS medium

0 commit comments

Comments
 (0)