@@ -65,7 +65,6 @@ endif()
6565include (GNUInstallDirs )
6666
6767set (AVO_DIR ${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} )
68- set (AVO_CPS_DIR ${CMAKE_INSTALL_LIBDIR} /cps/${PROJECT_NAME} )
6968set (AVO_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} /${PROJECT_NAME} )
7069set (AVO_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR} )
7170set (AVO_LIBRARY AVO)
@@ -75,7 +74,7 @@ set(AVO_NAME "AVO2 Library")
7574set (CMAKE_CXX_STANDARD 98)
7675set (CMAKE_CXX_STANDARD_REQUIRED OFF )
7776set (CMAKE_CXX_EXTENSIONS OFF )
78- set (CMAKE_CXX_STANDARD_REQUIRED OFF )
77+ set (CMAKE_CXX_EXTENSIONS_REQUIRED OFF )
7978set (CMAKE_POSITION_INDEPENDENT_CODE ON )
8079
8180option (BUILD_DOCUMENTATION "Build documentation" OFF )
@@ -112,15 +111,15 @@ include(CheckCXXCompilerFlag)
112111include (CheckLinkerFlag )
113112
114113option (ENABLE_HARDENING
115- "Enable hardening compiler and linker flags if supported" OFF )
114+ "Enable hardening compiler and linker flags if supported" ON )
116115
117116if (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 ()
230216endif ()
@@ -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 ()
238224else ()
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 ()
259245endif ()
260246
261247if (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 ()
269253endif ()
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 ()
287271endif ()
288272
273+ option (ENABLE_INSTALLATION "Enable installation" ${PROJECT_IS_TOP_LEVEL} )
274+
289275add_subdirectory (src )
290276add_subdirectory (examples )
291277add_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 ()
320308endif ()
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 ()
0 commit comments