X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=CMakeLists.txt;h=bbf5e57f112292ca18a6a510ee8d645f182d813b;hp=c43ba1ae85dfa9ed6bba26c9853a3312acdcd62b;hb=60587d8c119e15b61ff7830ff9f6904b8511d174;hpb=8b07343ab53d37b5340a56bde2d71ff2a3afb14a diff --git a/CMakeLists.txt b/CMakeLists.txt index c43ba1ae..bbf5e57f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,26 +8,21 @@ cmake_minimum_required(VERSION 3.5) +# Tell CMake about or own modules +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + # Versions set(QUASSEL_MAJOR 0) set(QUASSEL_MINOR 13) set(QUASSEL_PATCH 50) set(QUASSEL_VERSION_STRING "0.14-pre") -# Build type -if (CMAKE_CONFIGURATION_TYPES) - set(CMAKE_CONFIGURATION_TYPES Release RelWithDebInfo Debug Debugfull Profile) - set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING "These are the configuration types we support" FORCE) -endif() - -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: Release RelWithDebInfo Debug Debugfull Profile None" FORCE) -endif() - # Output CMake and Quassel versions as well as build type for debug reasons message(STATUS "Building Quassel ${QUASSEL_VERSION_STRING}...") message(STATUS "Using CMake ${CMAKE_VERSION}") -message(STATUS "CMake build type: ${CMAKE_BUILD_TYPE}") + +# Set up build type rather early +include(BuildType) # Support ccache if found # This should happen before calling project(), so compiler settings are validated. @@ -46,11 +41,15 @@ endif() # Set up project project(Quassel CXX) -# General conveniences +# Let CMake handle file generation for Qt set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +# Needed, otherwise some .moc files won't be found with older CMake versions set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Include various CMake modules +# Include various CMake modules... include(CMakePushCheckState) include(CheckFunctionExists) include(CheckIncludeFileCXX) @@ -58,12 +57,10 @@ include(CheckCXXSourceCompiles) include(CMakeDependentOption) include(FeatureSummary) -# Tell CMake about or own modules -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +# ... and our own include(QuasselCompileSettings) include(QuasselMacros) - # Options and variables that can be set on the command line ##################################################################### @@ -87,13 +84,6 @@ add_feature_info(WITH_BUNDLED_ICONS WITH_BUNDLED_ICONS "Install required icons f option(WITH_OXYGEN_ICONS "Support the Oxygen icon theme (KDE4)" OFF) add_feature_info(WITH_OXYGEN_ICONS WITH_OXYGEN_ICONS "Support the Oxygen icon theme (KDE4)") -if (WITH_BUNDLED_ICONS) - add_definitions(-DWITH_BUNDLED_ICONS) -endif() -if (WITH_OXYGEN_ICONS) - add_definitions(-DWITH_OXYGEN_ICONS) -endif() - # For this, the feature info is added after we know if QtWebkit is installed option(WITH_WEBKIT "WebKit support (for link previews) (legacy)" OFF) @@ -111,13 +101,13 @@ if (APPLE) link_libraries(${CARBON_LIBRARY}) endif() -# Always embed on Windows, OSX or for a static build; never embed when enabling KDE integration +# Always embed on Windows or OSX; never embed when enabling KDE integration set(EMBED_DEFAULT OFF) -if (STATIC OR WIN32 OR APPLE) +if (WIN32 OR APPLE) set(EMBED_DEFAULT ON) endif() cmake_dependent_option(EMBED_DATA "Embed icons and translations into the binaries instead of installing them" ${EMBED_DEFAULT} - "NOT STATIC;NOT WIN32;NOT WITH_KDE" ${EMBED_DEFAULT}) + "NOT WIN32;NOT WITH_KDE" ${EMBED_DEFAULT}) if (NOT EMBED_DEFAULT) add_feature_info(EMBED_DATA EMBED_DATA "Embed icons and translations in the binaries instead of installing them") endif() @@ -125,18 +115,6 @@ endif() # The following options are not for end-user consumption, so don't list them in the feature summary cmake_dependent_option(DEPLOY "Add required libs to bundle resources and create a dmg. Note: requires Qt to be built with 10.4u SDK" OFF "APPLE" OFF) -# Static builds are not supported and require some manual setup! Don't enable unless you know what you're doing (we don't know either) -cmake_dependent_option(STATIC "Enable static building (not supported)" OFF "NOT WITH_KDE" OFF) - -# For static builds, arbitrary extra libs might need to be linked -# Define a comma-separated list here -# e.g. for pgsql, we need -DLINK_EXTRA=pq;crypt -set(LINK_EXTRA "" CACHE STRING "Semicolon-separated list of libraries to be linked") -if (LINK_EXTRA) - string(REPLACE "," ";" LINK_EXTRA ${LINK_EXTRA}) - link_libraries(${LINK_EXTRA}) -endif() - # List of authenticators and the cmake flags to build them # (currently that's just LDAP, but more can be added here). @@ -146,23 +124,11 @@ option(WITH_LDAP "Enable LDAP authentication support if present on system" ON) # Setup CMake ##################################################################### -# Setting COMPILE_DEFINITIONS_ is deprecated since CMake 3.0 in favor of generator expressions. -# These have existed since CMake 2.8.10; until we depend on that, we have to explicitly enable the old policy. -if (POLICY CMP0043) - cmake_policy(SET CMP0043 OLD) -endif() - -# Honor visibility settings for all target types -if (POLICY CMP0063) - cmake_policy(SET CMP0063 NEW) -endif() - -# Don't automoc generated files +# Let automoc/autouic process generated files if (POLICY CMP0071) - cmake_policy(SET CMP0071 OLD) + cmake_policy(SET CMP0071 NEW) endif() - # Simplify later checks ##################################################################### @@ -360,25 +326,6 @@ set_package_properties(Qt5LinguistTools PROPERTIES TYPE RECOMMENDED PURPOSE "Required for having translations" ) -# Some Qt5 versions do not define a target for lconvert, so we need to find it ourselves -if (Qt5LinguistTools_FOUND) - if (NOT TARGET Qt5::lconvert AND TARGET Qt5::lrelease) - get_target_property(_lrelease_location Qt5::lrelease LOCATION) - get_filename_component(_lrelease_path ${_lrelease_location} PATH) - find_program(QT_LCONVERT_EXECUTABLE NAMES lconvert-qt5 lconvert PATHS ${_lrelease_path} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - elseif(TARGET Qt5::lconvert AND NOT Qt5_LCONVERT_EXECUTABLE) - # Newer Qt5 versions define the target, but not the Qt5_LCONVERT_EXECUTABLE variable for some reason - get_target_property(QT_LCONVERT_EXECUTABLE Qt5::lconvert LOCATION) - endif() - - # Compatibility with the Qt4 variables - set(QT_LRELEASE_EXECUTABLE ${Qt5_LRELEASE_EXECUTABLE}) - set(QT_LUPDATE_EXECUTABLE ${Qt5_LUPDATE_EXECUTABLE}) - if (Qt5_LCONVERT_EXECUTABLE) - set(QT_LCONVERT_EXECUTABLE ${Qt5_LCONVERT_EXECUTABLE}) - endif() -endif() - # Non-Qt-based packages find_package(ZLIB REQUIRED) @@ -398,16 +345,8 @@ if (NOT WIN32) endif() # Check for SSL support in Qt -# As there's no easy way to get Qt's configuration in particular for Qt5, let's just compile -# a small test program checking the defines. This works for both Qt4 and Qt5. cmake_push_check_state(RESET) -set(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES} ${Qt5Core_INCLUDE_DIRS}) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}") - -if (Qt5_POSITION_INDEPENDENT_CODE) - set(CMAKE_REQUIRED_FLAGS "-fPIC -DQT_NO_VERSION_TAGGING") -endif() - +set(CMAKE_REQUIRED_LIBRARIES Qt5::Core) check_cxx_source_compiles(" #include \"qglobal.h\" #if defined QT_NO_SSL @@ -417,15 +356,14 @@ check_cxx_source_compiles(" HAVE_SSL) cmake_pop_check_state() +if (HAVE_SSL) + add_definitions(-DHAVE_SSL) +endif() +add_feature_info("SSL support in Qt" HAVE_SSL "Use secure network connections") + # Additional compile settings ##################################################################### -# This sets -fPIC and friends if required by the installed Qt5 library -if (Qt5_POSITION_INDEPENDENT_CODE) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - set(CMAKE_REQUIRED_FLAGS "-DQT_NO_VERSION_TAGGING") -endif() - # Needed to compile with mingw without kde if (MINGW AND NOT WITH_KDE) add_definitions(-D_WIN32_WINNT=0x0500) @@ -434,19 +372,12 @@ if (MINGW AND NOT WITH_KDE) add_definitions(-U__STRICT_ANSI__) endif() -# Sanitize compiler flags - old versions of KDE set -ansi, which breaks -std=c++11 -if (CMAKE_COMPILER_IS_GNUCXX) - string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) -endif() - # Setup LDAP Authentication support. ##################################################################### if (WITH_LDAP) find_package(Ldap) if (LDAP_FOUND) message(STATUS "Enabling LDAP authentication support") - set(HAVE_LDAP true) - add_definitions(-DHAVE_LDAP) else() message(STATUS "Disabling LDAP authentication support") endif() @@ -479,18 +410,15 @@ include(QuasselInstallDirs) # Various config-dependent checks and settings ##################################################################### -if (HAVE_SSL) - add_definitions(-DHAVE_SSL) -endif() -add_feature_info("SSL support in Qt" HAVE_SSL "Use secure network connections") - # Check for syslog support if (NOT WIN32) check_include_file_cxx(syslog.h HAVE_SYSLOG) add_feature_info("syslog.h" HAVE_SYSLOG "Provide support for logging to the syslog") endif() -add_feature_info("Qt Linguist Tools" QT_LCONVERT_EXECUTABLE "Translation support for Quassel") +if (NOT WIN32) + check_function_exists(umask HAVE_UMASK) +endif() if (EMBED_DATA) message(STATUS "Embedding data files into the binary") @@ -498,14 +426,6 @@ else() message(STATUS "Installing data files separately") endif() -if (NOT WIN32) - check_function_exists(umask HAVE_UMASK) - if(HAVE_UMASK) - add_definitions(-DHAVE_UMASK) - endif() -endif() - - # Windows-specific stuff ##################################################################### @@ -517,24 +437,6 @@ if (WIN32) set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:YES /NODEFAULTLIB:libcmt") set(CMAKE_EXE_LINKER_FLAGS_DEBUGFULL "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") link_libraries(Version dwmapi shlwapi) - set(QT_QTMAIN_LIBRARY Qt5::WinMain) - endif() - if(HAVE_SSL AND STATIC) - find_package(OpenSSL REQUIRED) - link_libraries(${OPENSSL_LIBRARIES} ${OPENSSL_EAY_LIBRARIES}) - endif() -endif() - - -# Static builds (very much non-portable, so don't use -DSTATIC -# unless you know what you do!) -##################################################################### - -if(STATIC AND CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "-static-libgcc ${CMAKE_CXX_FLAGS}") - link_directories(${CMAKE_BINARY_DIR}/staticlibs) # override dynamic libs - if (HAVE_SSL) - set(QUASSEL_SSL_LIBRARIES ssl crypto) # these miss in static builds endif() endif() @@ -579,11 +481,6 @@ configure_file(version.h.in ${CMAKE_BINARY_DIR}/version.h @ONLY) # Prepare the build ##################################################################### -# These variables will be added to the main targets (CORE, QTCLIENT, MONO) -set(COMMON_DEPS ${RC_WIN32}) -set(CORE_DEPS ) -set(CLIENT_DEPS ) - # Add needed subdirs - the order is important, since src needs some vars set by other dirs add_subdirectory(data) add_subdirectory(icons)