@@ -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,18 +129,20 @@ 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 ()
140+ if (APPLE )
141+ set (AVO_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} " )
142+ set (CMAKE_REQUIRED_FLAGS
143+ "${CMAKE_REQUIRED_FLAGS} -Werror=unused-command-line-argument" )
144+ endif ()
145+
145146 check_cxx_compiler_flag (-D_FORTIFY_SOURCE=2
146147 AVO_COMPILER_SUPPORTS_D_FORTIFY_SOURCE_2 )
147148 check_cxx_compiler_flag (-fcf-protection
@@ -162,21 +163,21 @@ if(ENABLE_HARDENING)
162163 endif ()
163164
164165 if (AVO_COMPILER_SUPPORTS_D_FORTIFY_SOURCE_2)
165- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2" )
166+ add_compile_options ( -D_FORTIFY_SOURCE=2 )
166167 endif ()
167168 if (AVO_COMPILER_SUPPORTS_FCF_PROTECTION)
168- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fcf-protection" )
169+ add_compile_options ( -fcf-protection )
169170 endif ()
170171 if (AVO_COMPILER_SUPPORTS_FNO_COMMON)
171- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fno-common" )
172+ add_compile_options ( -fno-common )
172173 endif ()
173174 if (AVO_COMPILER_SUPPORTS_FSTACK_CLASH_PROTECTION)
174- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fstack-clash-protection" )
175+ add_compile_options ( -fstack-clash-protection )
175176 endif ()
176177 if (AVO_COMPILER_SUPPORTS_FSTACK_PROTECTOR_STRONG)
177- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fstack-protector-strong" )
178+ add_compile_options ( -fstack-protector-strong )
178179 elseif (AVO_COMPILER_SUPPORTS_FSTACK_PROTECTOR)
179- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fstack-protector" )
180+ add_compile_options ( -fstack-protector )
180181 endif ()
181182
182183 check_linker_flag (CXX -Wl,-Bsymbolic-functions
@@ -189,42 +190,38 @@ if(ENABLE_HARDENING)
189190 AVO_LINKER_SUPPORTS_Z_NOEXECSTACK )
190191 check_linker_flag (CXX -Wl,-z,now AVO_LINKER_SUPPORTS_Z_NOW )
191192 check_linker_flag (CXX -Wl,-z,relro AVO_LINKER_SUPPORTS_Z_RELRO )
193+ check_linker_flag (CXX -Wl,-z,separate-code AVO_LINKER_SUPPORTS_Z_SEPARATE_CODE )
192194
193195 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" )
196+ add_link_options (-Wl,-Bsymbolic-functions )
198197 endif ()
199198 if (AVO_COMPILER_SUPPORTS_FSANITIZE_SAFE_STACK
200199 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" )
200+ add_compile_options (-fsanitize=safe-stack )
201+ add_link_options (-fsanitize=safe-stack )
206202 endif ()
207203 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" )
204+ add_link_options (-Wl,-z,defs )
210205 endif ()
211206 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" )
207+ add_link_options (-Wl,-z,noexecheap )
215208 endif ()
216209 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" )
210+ add_link_options (-Wl,-z,noexecstack )
220211 endif ()
221212 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" )
213+ add_link_options (-Wl,-z,now )
224214 endif ()
225215 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" )
216+ add_link_options (-Wl,-z,relro )
217+ endif ()
218+ if (AVO_LINKER_SUPPORTS_Z_SEPARATE_CODE)
219+ add_link_options (-Wl,-z,separate-code )
220+ endif ()
221+
222+ if (APPLE )
223+ set (CMAKE_REQUIRED_FLAGS "${AVO_REQUIRED_FLAGS} " )
224+ unset (AVO_REQUIRED_FLAGS)
228225 endif ()
229226 endif ()
230227endif ()
@@ -233,7 +230,7 @@ if(MSVC)
233230 check_cxx_compiler_flag (/W4 AVO_COMPILER_SUPPORTS_W4 )
234231
235232 if (AVO_COMPILER_SUPPORTS_W4)
236- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} /W4" )
233+ add_compile_options ( /W4 )
237234 endif ()
238235else ()
239236 check_cxx_compiler_flag (-Wall AVO_COMPILER_SUPPORTS_WALL )
@@ -245,26 +242,24 @@ else()
245242 AVO_COMPILER_SUPPORTS_WNO_UNUSED )
246243
247244 if (AVO_COMPILER_SUPPORTS_WALL)
248- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -Wall" )
245+ add_compile_options ( -Wall )
249246 endif ()
250247 if (AVO_COMPILER_SUPPORTS_WFORMAT_SECURITY)
251- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -Wformat-security" )
248+ add_compile_options ( -Wformat-security )
252249 endif ()
253250 if (AVO_COMPILER_SUPPORTS_WERROR_FORMAT_SECURITY)
254- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -Werror=format-security" )
251+ add_compile_options ( -Werror=format-security )
255252 endif ()
256253 if (AVO_COMPILER_SUPPORTS_WNO_UNUSED)
257- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -Wno-unused" )
254+ add_compile_options ( -Wno-unused )
258255 endif ()
259256endif ()
260257
261258if (NOT MSVC )
262259 check_linker_flag (CXX -Wl,--as-needed AVO_LINKER_SUPPORTS__AS_NEEDED )
263260
264261 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" )
262+ add_link_options (-Wl,--as-needed )
268263 endif ()
269264endif ()
270265
@@ -275,83 +270,91 @@ if(WARNINGS_AS_ERRORS)
275270 check_cxx_compiler_flag (/WX AVO_COMPILER_SUPPORTS_WX )
276271
277272 if (AVO_COMPILER_SUPPORTS_WX)
278- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} /WX" )
273+ add_compile_options ( /WX )
279274 endif ()
280275 else ()
281276 check_cxx_compiler_flag (-Werror AVO_COMPILER_SUPPORTS_WERROR )
282277
283278 if (AVO_COMPILER_SUPPORTS_WERROR)
284- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -Werror" )
279+ add_compile_options ( -Werror )
285280 endif ()
286281 endif ()
287282endif ()
288283
284+ option (ENABLE_INSTALLATION "Enable installation" ${PROJECT_IS_TOP_LEVEL} )
285+
289286add_subdirectory (src )
290287add_subdirectory (examples )
291288add_subdirectory (doc )
292289
293- install (FILES LICENSE
294- COMPONENT runtime
295- DESTINATION ${CMAKE_INSTALL_DOCDIR} )
290+ if (ENABLE_INSTALLATION)
291+ install (FILES LICENSE
292+ COMPONENT runtime
293+ TYPE DOC)
296294
297- include (CMakePackageConfigHelpers )
295+ include (CMakePackageConfigHelpers )
298296
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 )
297+ configure_package_config_file (
298+ ${PROJECT_NAME} Config.cmake.in ${PROJECT_NAME} Config.cmake
299+ INSTALL_DESTINATION ${AVO_DIR}
300+ PATH_VARS AVO_INCLUDE_DIR AVO_LIBRARY_DIR )
303301
304- write_basic_package_version_file (${PROJECT_NAME} ConfigVersion.cmake
305- COMPATIBILITY SameMajorVersion )
302+ write_basic_package_version_file (${PROJECT_NAME} ConfigVersion.cmake
303+ COMPATIBILITY SameMajorVersion )
306304
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} )
305+ install (FILES
306+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
307+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake"
308+ COMPONENT development
309+ DESTINATION ${AVO_DIR} )
312310
313- find_package (PkgConfig MODULE )
311+ find_package (PkgConfig MODULE )
314312
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)
313+ if (PkgConfig_FOUND)
314+ configure_file (${PROJECT_NAME} .pc.in ${PROJECT_NAME} .pc @ONLY )
315+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc"
316+ COMPONENT development
317+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
318+ endif ()
320319endif ()
321320
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 )
321+ option (ENABLE_PACKAGING "Enable packaging" ${PROJECT_IS_TOP_LEVEL} )
322+
323+ if (ENABLE_PACKAGING)
324+ include (InstallRequiredSystemLibraries )
325+
326+ set (CPACK_PACKAGE_NAME ${PROJECT_NAME} )
327+ set (CPACK_PACKAGE_CONTACT "Jamie Snape" )
328+ set (CPACK_PACKAGE_VENDOR "University of North Carolina at Chapel Hill" )
329+ set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR} )
330+ set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR} )
331+ set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH} )
332+ set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION} " )
333+ set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR} /LICENSE" )
334+ set (CPACK_STRIP_FILES ON )
335+
336+ set (CPACK_SOURCE_IGNORE_FILES
337+ _build/ \\\\.git/ \\\\.gitattributes \\\\.github/ \\\\.gitignore bazel-
338+ Brewfile)
339+ set (CPACK_SOURCE_STRIP_FILES ON )
340+
341+ set (CPACK_DEBIAN_COMPRESSION_TYPE zstd)
342+ set (CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
343+ set (CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR} /triggers" )
344+ set (CPACK_DEBIAN_PACKAGE_DEPENDS)
345+ set (CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PROJECT_HOMEPAGE_URL} )
346+ set (CPACK_DEBIAN_PACKAGE_SECTION contrib/libdevel)
347+ set (CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON )
348+
349+ set (CPACK_FREEBSD_PACKAGE_DEPS)
350+ set (CPACK_FREEBSD_PACKAGE_LICENSE APACHE20)
351+ set (CPACK_FREEBSD_PACKAGE_WWW ${PROJECT_HOMEPAGE_URL} )
352+
353+ set (CPACK_RPM_FILE_NAME RPM-DEFAULT)
354+ set (CPACK_RPM_PACKAGE_AUTOREQPROV ON )
355+ set (CPACK_RPM_PACKAGE_LICENSE "ASL 2.0" )
356+ set (CPACK_RPM_PACKAGE_REQUIRES)
357+ set (CPACK_RPM_PACKAGE_URL ${PROJECT_HOMEPAGE_URL} )
358+
359+ include (CPack )
360+ endif ()
0 commit comments