diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 103 |
1 files changed, 76 insertions, 27 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cce6a10..1ffa5bf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.12.2) +cmake_minimum_required(VERSION 2.8.12.2...4.0.3.0) cmake_policy(VERSION ${CMAKE_VERSION}) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") @@ -8,8 +8,8 @@ project(ouroboros C) include(GNUInstallDirs) set(PACKAGE_VERSION_MAJOR 0) -set(PACKAGE_VERSION_MINOR 17) -set(PACKAGE_VERSION_PATCH 1) +set(PACKAGE_VERSION_MINOR 21) +set(PACKAGE_VERSION_PATCH 4) set(PACKAGE_NAME "${CMAKE_PROJECT_NAME}") set(PACKAGE_DESCRIPTION "The Ouroboros prototype") @@ -20,15 +20,22 @@ set(PACKAGE_VERSION if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING - "Build type (Release, Debug, DebugASan, DebugTSan, DebugLSan)" FORCE) + "Build type (Release, Debug, DebugASan, DebugTSan, DebugLSan, DebugUSan, DebugAnalyzer)" FORCE) endif() if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "/usr" CACHE STRING "Installation Prefix" FORCE) + if (APPLE) + set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE STRING + "Installation Prefix" FORCE) + else() + set(CMAKE_INSTALL_PREFIX "/usr" CACHE STRING + "Installation Prefix" FORCE) + endif() endif () if (APPLE) set(CMAKE_MACOSX_RPATH 1) + include_directories("/usr/local/include/") endif() if (CMAKE_INSTALL_PREFIX STREQUAL "/usr") @@ -60,11 +67,12 @@ include(CompilerUtils) test_and_set_c_compiler_flag_global(-std=c89) test_and_set_c_compiler_flag_global(-Wall) # -Wextra may fail on clobbered warning due to pthread_cleanup -# test_and_set_c_compiler_flag_global(-Wextra) +test_and_set_c_compiler_flag_global(-Wno-clobbered) +test_and_set_c_compiler_flag_global(-Wextra) # explicitly add other flags in -Wextra test_and_set_c_compiler_flag_global(-Wempty-body) test_and_set_c_compiler_flag_global(-Wignored-qualifiers) -test_and_set_c_compiler_flag_global(-Wimplicit-fallthrough) +test_and_set_c_compiler_flag_global(-Wimplicit-fallthrough=4) test_and_set_c_compiler_flag_global(-Wmissing-field-initializers) test_and_set_c_compiler_flag_global(-Wmissing-parameter-type) test_and_set_c_compiler_flag_global(-Wold-style-declaration) @@ -75,29 +83,39 @@ test_and_set_c_compiler_flag_global(-Wuninitialized) test_and_set_c_compiler_flag_global(-Wshift-negative-value) test_and_set_c_compiler_flag_global(-Wunused-parameter) test_and_set_c_compiler_flag_global(-Wunused-but-set-parameter) -# -Wextra parameters test_and_set_c_compiler_flag_global(-Werror) test_and_set_c_compiler_flag_global(-Wundef) test_and_set_c_compiler_flag_global(-Wpointer-arith) test_and_set_c_compiler_flag_global(-Wstrict-prototypes) test_and_set_c_compiler_flag_global(-Wvla) -#Wswitch-default check fails on the swig-generated code -#test_and_set_c_compiler_flag_global(-Wswitch-default) +test_and_set_c_compiler_flag_global(-Wswitch-default) +test_and_set_c_compiler_flag_global(-Wreturn-type) test_and_set_c_compiler_flag_global(-Wunreachable-code) test_and_set_c_compiler_flag_global(-Wdeclaration-after-statement) test_and_set_c_compiler_flag_global(-Winfinite-recursion) test_and_set_c_compiler_flag_global(-fmax-errors=5) + if (CMAKE_BUILD_TYPE STREQUAL "Release") test_and_set_c_compiler_flag_global(-O3) -else () +elseif (CMAKE_BUILD_TYPE STREQUAL "Debug") + test_and_set_c_compiler_flag_global(-g) +elseif (CMAKE_BUILD_TYPE STREQUAL "DebugASan") test_and_set_c_compiler_flag_global(-g) -endif () -if (CMAKE_BUILD_TYPE STREQUAL "DebugASan") test_and_set_c_compiler_flag_global(-fsanitize=address) elseif (CMAKE_BUILD_TYPE STREQUAL "DebugTSan") + test_and_set_c_compiler_flag_global(-g) test_and_set_c_compiler_flag_global(-fsanitize=thread) elseif (CMAKE_BUILD_TYPE STREQUAL "DebugLSan") + test_and_set_c_compiler_flag_global(-g) test_and_set_c_compiler_flag_global(-fsanitize=leak) +elseif (CMAKE_BUILD_TYPE STREQUAL "DebugUSan") + test_and_set_c_compiler_flag_global(-g) + test_and_set_c_compiler_flag_global(-fsanitize=undefined) +elseif (CMAKE_BUILD_TYPE STREQUAL "DebugAnalyzer") + test_and_set_c_compiler_flag_global(-g) + test_and_set_c_compiler_flag_global(-fanalyzer) +else () + message(FATAL_ERROR "Unkown build type ${CMAKE_BUILD_TYPE}") endif () configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ouroboros-dev.pc.in" @@ -113,24 +131,53 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros-irm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") # modified from https://github.com/ximion/limba -pkg_check_modules(SYSTEMD "systemd") -if (SYSTEMD_FOUND) - if ("${SYSTEMD_UNITDIR}" STREQUAL "") - execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} - --variable=systemdsystemunitdir systemd - OUTPUT_VARIABLE SYSTEMD_UNITDIR) - string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_UNITDIR - "${SYSTEMD_UNITDIR}" - ) - endif () - if (NOT ${SYSTEMD_UNITDIR} STREQUAL "") - message(STATUS "Installing systemd service in: ${SYSTEMD_UNITDIR}") +set(SYSTEMD_INSTALL_FILES "DETECT" CACHE STRING + "Install systemd .service files (NO (never), DETECT (use pkg-config - default),\ + FORCE (always - see SYSTEMD_UNITDIR_OVERRIDE))") +set(SYSTEMD_UNITDIR_OVERRIDE "" CACHE PATH + "Path to install systemd files. When SYSTEMD_INSTALL_FILES == DETECT, this\ + can be empty to automatically determine the path. Cannot be empty when FORCE.") + +if (SYSTEMD_INSTALL_FILES STREQUAL "DETECT" OR SYSTEMD_INSTALL_FILES STREQUAL "FORCE") + if (SYSTEMD_INSTALL_FILES STREQUAL "DETECT") + pkg_check_modules(SYSTEMD "systemd") + if (SYSTEMD_FOUND) + if ("${SYSTEMD_UNITDIR_OVERRIDE}" STREQUAL "") + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=systemdsystemunitdir systemd + OUTPUT_VARIABLE SYSTEMD_UNITDIR_INTERNAL) + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_UNITDIR_INTERNAL + "${SYSTEMD_UNITDIR_INTERNAL}" + ) + else () + set(SYSTEMD_UNITDIR_INTERNAL "${SYSTEMD_UNITDIR_OVERRIDE}") + endif () + else () + set(SYSTEMD_UNITDIR_INTERNAL "") + endif () + elseif (SYSTEMD_INSTALL_FILES STREQUAL "FORCE") + if ("${SYSTEMD_UNITDIR_OVERRIDE}" STREQUAL "") + message(FATAL_ERROR "Systemd installation required by user, but no path\ + provided with SYSTEMD_UNITDIR_OVERRIDE.") + else () + set(SYSTEMD_UNITDIR_INTERNAL "${SYSTEMD_UNITDIR_OVERRIDE}") + endif () + endif() + if (NOT ${SYSTEMD_UNITDIR_INTERNAL} STREQUAL "") + message(STATUS "Systemd service installation enabled to: ${SYSTEMD_UNITDIR_INTERNAL}") + if (LIBTOML_LIBRARIES AND NOT DISABLE_CONFIGFILE) + set (CONFIGURE_STRING "--config ${OUROBOROS_CONFIG_DIR}${OUROBOROS_CONFIG_FILE}") + else () + set (CONFIGURE_STRING "") + endif () configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ouroboros.service.in" "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.service" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.service" - DESTINATION "${SYSTEMD_UNITDIR}") + DESTINATION "${SYSTEMD_UNITDIR_INTERNAL}") endif () -endif () +else () + message(STATUS "Systemd service installation disabled by user") +endif() enable_testing() add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) @@ -140,6 +187,8 @@ if (NOT (PROTOBUF_C_INCLUDE_DIRS AND PROTOBUF_C_LIBRARY AND PROTOBUF_PROTOC_C_EXECUTABLE)) message(FATAL_ERROR "Protobuf C compiler required but not found. " "Please install Google Protocol Buffers.") +else () + message(STATUS "Found protobuf C compiler in ${PROTOBUF_PROTOC_C_EXECUTABLE}") endif () include_directories(${PROTOBUF_C_INCLUDE_DIRS}) |