X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=CMakeLists.txt;h=e66efb2e83ddcbae8ff359be5e245129b28aa7b1;hb=1d22b6e17671ac805b9f49e533f3345c8a5241c1;hp=9af23aef4870f7058e76fa7d58afd8fa7930170f;hpb=27aaa10ee9bd345717491e657d73a00e17d53faf;p=icinga2 diff --git a/CMakeLists.txt b/CMakeLists.txt index 9af23aef4..e66efb2e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # Icinga 2 -# Copyright (C) 2012-2017 Icinga Development Team (https://www.icinga.com/) +# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/) # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -15,7 +15,7 @@ # along with this program; if not, write to the Free Software Foundation # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8.8) set(BOOST_MIN_VERSION "1.48.0") project(icinga2) @@ -24,23 +24,25 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third-party/cmake") if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING - "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." - FORCE) + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) endif() option(ICINGA2_WITH_MYSQL "Build the MySQL IDO module" ON) option(ICINGA2_WITH_PGSQL "Build the PostgreSQL IDO module" ON) option(ICINGA2_WITH_CHECKER "Build the checker module" ON) option(ICINGA2_WITH_COMPAT "Build the compat module" ON) -option(ICINGA2_WITH_DEMO "Build the demo module" OFF) -option(ICINGA2_WITH_HELLO "Build the hello module" OFF) option(ICINGA2_WITH_LIVESTATUS "Build the Livestatus module" ON) option(ICINGA2_WITH_NOTIFICATION "Build the notification module" ON) option(ICINGA2_WITH_PERFDATA "Build the perfdata module" ON) -option(ICINGA2_WITH_STUDIO "Build the Icinga Studio application" OFF) option(ICINGA2_WITH_TESTS "Run unit tests" ON) -file(STRINGS icinga2.spec VERSION_LINE REGEX "^Version: ") +option (USE_SYSTEMD + "Configure icinga as native systemd service instead of a SysV initscript" OFF) + +set(HAVE_SYSTEMD ${USE_SYSTEMD}) + +file(STRINGS VERSION VERSION_LINE REGEX "^Version: ") string(REPLACE "Version: " "" ICINGA2_VERSION ${VERSION_LINE}) include(GNUInstallDirs) @@ -55,6 +57,11 @@ set(ICINGA2_GIT_VERSION_INFO ON CACHE BOOL "Whether to use git describe") set(ICINGA2_UNITY_BUILD ON CACHE BOOL "Whether to perform a unity build") set(ICINGA2_LTO_BUILD OFF CACHE BOOL "Whether to use LTO") +if(NOT WIN32) + set(ICINGA2_SYSCONFIGFILE "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sysconfig/icinga2" CACHE PATH "where to store configuation for the init system, defaults to /etc/sysconfig/icinga2") + +endif() + site_name(ICINGA2_BUILD_HOST_NAME) set(ICINGA2_BUILD_COMPILER_NAME "${CMAKE_CXX_COMPILER_ID}") @@ -66,11 +73,10 @@ endif() set(ICINGA2_BUILD_COMPILER_VERSION "${CMAKE_CXX_COMPILER_VERSION}") file(READ "${CMAKE_CURRENT_SOURCE_DIR}/COPYING" ICINGA2_LICENSE_GPL) -file(READ "${CMAKE_CURRENT_SOURCE_DIR}/COPYING.Exceptions" ICINGA2_LICENSE_ADDITIONS) set(ICINGA2_LICENSE "${ICINGA2_LICENSE_GPL}\n\n---\n\n${ICINGA2_LICENSE_ADDITIONS}") file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt" ${ICINGA2_LICENSE}) -file(STRINGS icinga2.spec SPEC_VERSION REGEX "^Version:") +file(STRINGS VERSION SPEC_VERSION REGEX "^Version:") string(LENGTH "${SPEC_VERSION}" SPEC_VERSION_LENGTH) math(EXPR SPEC_VERSION_LENGTH "${SPEC_VERSION_LENGTH} - 9") string(SUBSTRING ${SPEC_VERSION} 9 ${SPEC_VERSION_LENGTH} SPEC_VERSION) @@ -83,10 +89,10 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/icinga-version.h.force) configure_file(icinga-version.h.force ${CMAKE_CURRENT_BINARY_DIR}/icinga-version.h COPYONLY) else() if(NOT ICINGA2_GIT_VERSION_INFO OR GIT_VERSION MATCHES "-NOTFOUND$") - file(STRINGS icinga2.spec SPEC_REVISION REGEX "^%define revision ") + file(STRINGS VERSION SPEC_REVISION REGEX "^Revision: ") string(LENGTH "${SPEC_REVISION}" SPEC_REVISION_LENGTH) - math(EXPR SPEC_REVISION_LENGTH "${SPEC_REVISION_LENGTH} - 17") - string(SUBSTRING ${SPEC_REVISION} 17 ${SPEC_REVISION_LENGTH} SPEC_REVISION) + math(EXPR SPEC_REVISION_LENGTH "${SPEC_REVISION_LENGTH} - 10") + string(SUBSTRING ${SPEC_REVISION} 10 ${SPEC_REVISION_LENGTH} SPEC_REVISION) set(GIT_VERSION "r${SPEC_VERSION}-${SPEC_REVISION}") endif() @@ -96,7 +102,8 @@ endif() if(WIN32) set(Boost_USE_STATIC_LIBS ON) add_definitions(-DBOOST_ALL_NO_LIB) - add_definitions(/bigobj) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /bigobj") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") endif() if(NOT DEFINED LOGROTATE_HAS_SU) @@ -124,12 +131,17 @@ include_directories(${Boost_INCLUDE_DIRS}) find_package(OpenSSL REQUIRED) include_directories(${OPENSSL_INCLUDE_DIR}) +set(base_DEPS ${CMAKE_DL_LIBS} ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES}) +set(base_OBJS $ $ $) + find_package(YAJL) if(NOT YAJL_FOUND) include_directories(${icinga2_BINARY_DIR}/third-party/yajl/include) link_directories(${icinga2_BINARY_DIR}/third-party/yajl) - set(YAJL_LIBRARIES "yajl") + list(APPEND base_OBJS $) +else() + list(APPEND base_DEPS ${YAJL_LIBRARIES}) endif() find_package(Editline) @@ -143,11 +155,38 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/lib ) +if(HAVE_LIBEXECINFO) + list(APPEND base_DEPS execinfo) +endif() + +if(UNIX OR CYGWIN) + list(APPEND base_OBJS $) +endif() + +if(HAVE_SYSTEMD) + list(APPEND base_DEPS systemd) +endif() + + +if(EDITLINE_FOUND) + list(APPEND base_DEPS ${EDITLINE_LIBRARIES}) + include_directories(${EDITLINE_INCLUDE_DIR}) +endif() + +if(TERMCAP_FOUND) + list(APPEND base_DEPS ${TERMCAP_LIBRARIES}) + include_directories(${TERMCAP_INCLUDE_DIR}) +endif() + +if(WIN32) + list(APPEND base_DEPS ws2_32 dbghelp shlwapi msi) +endif() + set(CMAKE_MACOSX_RPATH 1) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments -g") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -g") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments -fcolor-diagnostics") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fcolor-diagnostics") # Clang on Fedora requires -pthread, Apple Clang does not # AppleClang is available since CMake 3.0.0 @@ -171,19 +210,64 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -pthread") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lpthread") + set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -lpthread") else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -pthread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -pthread") endif() - - if(NOT CMAKE_SYSTEM_NAME MATCHES AIX AND NOT CMAKE_SYSTEM_NAME MATCHES OpenBSD AND NOT CMAKE_SYSTEM_NAME MATCHES SunOS) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections -Wl,--no-export-dynamic -Bsymbolic-functions -Wl,--dynamic-list-cpp-typeinfo -Wl,--dynamic-list-data") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--no-export-dynamic -Bsymbolic-functions -Wl,--dynamic-list-cpp-typeinfo -Wl,--dynamic-list-data") - endif() endif() include(CheckCXXCompilerFlag) +function(check_cxx_linker_flag flag var) + set(CMAKE_REQUIRED_FLAGS ${flag}) + set(result 0) + check_cxx_compiler_flag(${flag} result) + set(${var} ${result} PARENT_SCOPE) +endfunction() + +check_cxx_linker_flag("-Wl,--gc-sections" LD_GC_SECTIONS) + +if(LD_GC_SECTIONS) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections") +endif() + +check_cxx_linker_flag("-Wl,--no-export-dynamic" LD_NO_EXPORT_DYNAMIC) + +if(LD_NO_EXPORT_DYNAMIC) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-export-dynamic") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-export-dynamic") +endif() + +check_cxx_linker_flag("-Bsymbolic-functions" LD_SYMBOLIC_FUNCTIONS) + +if(LD_SYMBOLIC_FUNCTIONS) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Bsymbolic-functions") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Bsymbolic-functions") +endif() + +check_cxx_linker_flag("-Wl,--dynamic-list-cpp-typeinfo" LD_DYNAMIC_LIST_CPP_TYPEINFO) + +if(LD_DYNAMIC_LIST_CPP_TYPEINFO) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--dynamic-list-cpp-typeinfo") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--dynamic-list-cpp-typeinfo") +endif() + +check_cxx_linker_flag("-Wl,--dynamic-list-data" LD_DYNAMIC_LIST_DATA) + +if(LD_DYNAMIC_LIST_DATA) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--dynamic-list-data") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--dynamic-list-data") +endif() + +check_cxx_compiler_flag("-Winvalid-pch" CXX_INVALID_PCH) + +if(CXX_INVALID_PCH) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Winvalid-pch") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Winvalid-pch") +endif() + if(ICINGA2_LTO_BUILD) check_cxx_compiler_flag("-flto" CXX_FLAG_LTO) @@ -193,24 +277,13 @@ if(ICINGA2_LTO_BUILD) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto") - endif() -endif() + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") -include(CheckCCompilerFlag) - -check_c_compiler_flag(-fvisibility-inlines-hidden HAVE_VISIBILITY_INLINES_HIDDEN) - -if(HAVE_VISIBILITY_INLINES_HIDDEN) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility-inlines-hidden") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") -endif() - -check_c_compiler_flag(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN) - -if(HAVE_VISIBILITY_HIDDEN) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9.0) AND NOT OPENBSD) + set(CMAKE_AR "gcc-ar") + set(CMAKE_RANLIB "gcc-ranlib") + endif() + endif() endif() if(MSVC) @@ -270,7 +343,7 @@ endif() configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h ESCAPE_QUOTES) install( - FILES README.md COPYING COPYING.Exceptions AUTHORS CHANGELOG.md NEWS + FILES README.md COPYING AUTHORS CHANGELOG.md NEWS DESTINATION ${CMAKE_INSTALL_DOCDIR} ) @@ -294,10 +367,6 @@ if(MSVC) add_subdirectory(icinga-installer) endif() -if(ICINGA2_WITH_STUDIO) - add_subdirectory(icinga-studio) -endif() - if(ICINGA2_WITH_TESTS) add_subdirectory(test) endif() @@ -309,7 +378,7 @@ set(CPACK_PACKAGE_INSTALL_DIRECTORY "ICINGA2") set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icinga-app\\\\icinga.ico") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt") -set(CPACK_PACKAGE_EXECUTABLES "Icinga2SetupAgent;Icinga 2 Agent Wizard;icinga-studio;Icinga Studio") +set(CPACK_PACKAGE_EXECUTABLES "Icinga2SetupAgent;Icinga 2 Agent Wizard") set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icinga-app\\\\icinga.ico") set(CPACK_WIX_UPGRADE_GUID "52F2BEAA-4DF0-4C3E-ABDC-C0F61DE4DF8A") set(CPACK_WIX_EXTENSIONS "WixUtilExtension") @@ -318,7 +387,8 @@ set(CPACK_WIX_UI_DIALOG "${CMAKE_CURRENT_SOURCE_DIR}/icinga-installer/dlgbmp.bmp set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_BINARY_DIR}/icinga-installer/icinga2.wixpatch.Debug") set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_BINARY_DIR}/icinga-installer/icinga2.wixpatch") -set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE) +set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "sbin") +set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) include(InstallRequiredSystemLibraries) if(WIN32) @@ -352,8 +422,7 @@ if(WIN32) endif() install( - PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} - ${ICINGA2_OPENSSL_DLLS} + PROGRAMS ${ICINGA2_OPENSSL_DLLS} DESTINATION ${CMAKE_INSTALL_SBINDIR} ) endif()