X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=CMakeLists.txt;h=721e339cfbb9c15ac31e8bad4f264340afb29e48;hp=681cceb79e2aae5040f8d5d6e09281edd92af2e0;hb=35c39237136ab3ddc94d20d8280b7bf6680f07c2;hpb=8714e651551428b0fed15b7a98d1be514921af7d diff --git a/CMakeLists.txt b/CMakeLists.txt index 681cceb7..721e339c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,25 +6,49 @@ # General setup ##################################################################### -project(QuasselIRC) - # Versions set(QUASSEL_MAJOR 0) set(QUASSEL_MINOR 13) set(QUASSEL_PATCH 0) -set(QUASSEL_VERSION_STRING "0.13-pre") +set(QUASSEL_VERSION_STRING "0.13-rc1") + +# 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() -# We want to know CMake's version for debug reasons +# 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}") + +# Support ccache if found +# This should happen before calling project(), so compiler settings are validated. +option(USE_CCACHE "Enable support for ccache if available" ON) +if (USE_CCACHE) + message(STATUS "Checking for ccache") + find_program(CCACHE_PROGRAM ccache) + if (CCACHE_PROGRAM) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") + message(STATUS "Checking for ccache - enabled") + else() + message(STATUS "Checking for ccache - not found") + endif() +endif() -# Tell CMake about or own modules -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +# Set up project +project(Quassel C CXX) # General conveniences set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Include various CMake modules... +# Include various CMake modules include(CMakePushCheckState) include(CheckFunctionExists) include(CheckIncludeFile) @@ -32,7 +56,8 @@ include(CheckCXXSourceCompiles) include(CMakeDependentOption) include(FeatureSummary) -# ... and our own stuff +# Tell CMake about or own modules +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) include(QuasselCompileSettings) include(QuasselMacros) @@ -40,13 +65,13 @@ include(QuasselMacros) # Options and variables that can be set on the command line ##################################################################### -# First, choose a Qt version. We support USE_QT4 and USE_QT5; if neither is set, prefer Qt4 for now -option(USE_QT5 "Enable support for Qt5 (disables KDE integration)" OFF) -if (USE_QT4) # takes precedence - set(USE_QT5 OFF) +# Choose a Qt version. We support USE_QT5 and USE_QT4; if neither is set, Qt5 will be used +option(USE_QT5 "Enable support for Qt5" OFF) +if (USE_QT5) # takes precedence + set(USE_QT4 OFF) else() - if (NOT USE_QT5) - set(USE_QT4 ON) + if (NOT USE_QT4) + set(USE_QT5 ON) endif() endif() @@ -70,20 +95,36 @@ else() add_feature_info(WITH_KDE WITH_KDE "Integrate with the KDE Frameworks runtime environment") endif() -cmake_dependent_option(WITH_OXYGEN "Install Oxygen icon set (usually shipped with KDE)" ON "NOT WITH_KDE" OFF) -if (NOT WITH_KDE) - add_feature_info(WITH_OXYGEN WITH_OXYGEN "Install Oxygen icon set") +# Icon theme support. By default, install the Breeze icon theme (may be disabled if a system installation is present) +option(WITH_BUNDLED_ICONS "Install required icons from the Breeze icon theme" ON) +add_feature_info(WITH_BUNDLED_ICONS WITH_BUNDLED_ICONS "Install required icons from the Breeze icon theme") + +# For Qt4, always support Oxygen +cmake_dependent_option(WITH_OXYGEN_ICONS "Support the Oxygen icon theme (KDE4)" OFF "USE_QT5" ON) +add_feature_info(WITH_OXYGEN_ICONS WITH_OXYGEN_ICONS "Support the Oxygen icon theme (KDE4)" OFF) + +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)" ON) +option(WITH_WEBKIT "WebKit support (for link previews) (legacy)" OFF) + +# For this, the feature info is added after we know if QtWebEngine is installed +option(WITH_WEBENGINE "WebEngine support (for link previews)" ON) if (APPLE) # Notification Center is only available in > 10.8, which is Darwin v12 - if (CMAKE_SYSTEM_VERSION VERSION_GREATER "11.9.9") + if (NOT CMAKE_SYSTEM_VERSION VERSION_LESS 12) option(WITH_NOTIFICATION_CENTER "OS X Notification Center support" ON) add_feature_info(WITH_NOTIFICATION_CENTER WITH_NOTIFICATION_CENTER "Use the OS X Notification Center") endif() + find_library(CARBON_LIBRARY Carbon) + mark_as_advanced(CARBON_LIBRARY) + link_libraries(${CARBON_LIBRARY}) endif() # Always embed on Windows, OSX or for a static build; never embed when enabling KDE integration @@ -100,9 +141,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) -# Handle with care -set(QT_PATH "" CACHE PATH "Path to a Qt4 installation to use instead of the system Qt (e.g. for static builds)") - # 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) @@ -116,6 +154,11 @@ if (LINK_EXTRA) endif() +# List of authenticators and the cmake flags to build them +# (currently that's just LDAP, but more can be added here). +#################################################################### +option(WITH_LDAP "Enable LDAP authentication support if present on system" ON) + # Setup CMake ##################################################################### @@ -136,6 +179,11 @@ if (POLICY CMP0063) cmake_policy(SET CMP0063 NEW) endif() +# Don't automoc generated files +if (POLICY CMP0071) + cmake_policy(SET CMP0071 OLD) +endif() + # Simplify later checks ##################################################################### @@ -151,22 +199,6 @@ endif() # Set up Qt ##################################################################### -if (USE_QT5) - message(STATUS "Building for Qt5...") - set(QT_MIN_VERSION "5.2.0") - add_definitions(-DHAVE_QT5) -else() - message(STATUS "Building for Qt4...") - set(QT_MIN_VERSION "4.8.0") - - # Select a Qt installation here, if you don't want to use system Qt - if(QT_PATH) - # FindQt4 will look for the qmake binary in $PATH, so we just prepend QT_PATH - set(ENV{PATH} ${QT_PATH}/bin:$ENV{PATH}) - endif() -endif() - - # Find package dependencies # # Note that you can forcefully disable optional packages @@ -174,9 +206,13 @@ endif() ##################################################################### if (USE_QT5) + message(STATUS "Building for Qt5...") + set(QT_MIN_VERSION "5.2.0") + add_definitions(-DHAVE_QT5) + find_package(Qt5Core ${QT_MIN_VERSION} QUIET) set_package_properties(Qt5Core PROPERTIES TYPE REQUIRED - URL "http://qt.digia.com" + URL "https://www.qt.io/" DESCRIPTION "contains core functionality for Qt" ) # find_package without REQUIRED won't check for the version properly; also, older Qt5 versions @@ -200,24 +236,26 @@ if (USE_QT5) DESCRIPTION "the widgets module for Qt5" ) - find_package(Qt5DBus QUIET) - set_package_properties(Qt5DBus PROPERTIES TYPE RECOMMENDED - URL "http://qt.digia.com" - DESCRIPTION "D-Bus support for Qt5" - PURPOSE "Needed for supporting D-Bus-based notifications and tray icon, used by most modern desktop environments" - ) - if (Qt5DBus_FOUND) - find_package(dbusmenu-qt5 QUIET CONFIG) - set_package_properties(dbusmenu-qt5 PROPERTIES TYPE RECOMMENDED - URL "https://launchpad.net/libdbusmenu-qt" - DESCRIPTION "a library implementing the DBusMenu specification" - PURPOSE "Required for having a context menu for the D-Bus-based tray icon" + if (NOT WIN32) + find_package(Qt5DBus QUIET) + set_package_properties(Qt5DBus PROPERTIES TYPE RECOMMENDED + URL "https://www.qt.io/" + DESCRIPTION "D-Bus support for Qt5" + PURPOSE "Needed for supporting D-Bus-based notifications and tray icon, used by most modern desktop environments" ) + if (Qt5DBus_FOUND) + find_package(dbusmenu-qt5 QUIET CONFIG) + set_package_properties(dbusmenu-qt5 PROPERTIES TYPE RECOMMENDED + URL "https://launchpad.net/libdbusmenu-qt" + DESCRIPTION "a library implementing the DBusMenu specification" + PURPOSE "Required for having a context menu for the D-Bus-based tray icon" + ) + endif() endif() find_package(Qt5Multimedia QUIET) set_package_properties(Qt5Multimedia PROPERTIES TYPE RECOMMENDED - URL "http://qt.digia.com" + URL "https://www.qt.io/" DESCRIPTION "Multimedia support for Qt5" PURPOSE "Required for audio notifications" ) @@ -250,14 +288,14 @@ if (USE_QT5) if (WITH_WEBKIT) find_package(Qt5WebKit QUIET) set_package_properties(Qt5WebKit PROPERTIES TYPE RECOMMENDED - URL "http://qt.digia.com" + URL "https://www.qt.io/" DESCRIPTION "a WebKit implementation for Qt" PURPOSE "Needed for displaying previews for URLs in chat" ) if (Qt5WebKit_FOUND) find_package(Qt5WebKitWidgets QUIET) set_package_properties(Qt5WebKitWidgets PROPERTIES TYPE RECOMMENDED - URL "http://qt.digia.com" + URL "https://www.qt.io/" DESCRIPTION "widgets for Qt's WebKit implementation" PURPOSE "Needed for displaying previews for URLs in chat" ) @@ -267,7 +305,29 @@ if (USE_QT5) if (WITH_WEBKIT AND Qt5WebKitWidgets_FOUND) set(HAVE_WEBKIT true) endif() - add_feature_info("WITH_WEBKIT, QtWebKit and QtWebKitWidgets modules" HAVE_WEBKIT "Support showing previews for URLs in chat") + add_feature_info("WITH_WEBKIT, QtWebKit and QtWebKitWidgets modules" HAVE_WEBKIT "Support showing previews for URLs in chat (legacy)") + + if (WITH_WEBENGINE) + find_package(Qt5WebEngine QUIET) + set_package_properties(Qt5WebEngine PROPERTIES TYPE RECOMMENDED + URL "https://www.qt.io/" + DESCRIPTION "a WebEngine implementation for Qt" + PURPOSE "Needed for displaying previews for URLs in chat" + ) + if (Qt5WebEngine_FOUND) + find_package(Qt5WebEngineWidgets QUIET) + set_package_properties(Qt5WebEngineWidgets PROPERTIES TYPE RECOMMENDED + URL "https://www.qt.io/" + DESCRIPTION "widgets for Qt's WebEngine implementation" + PURPOSE "Needed for displaying previews for URLs in chat" + ) + endif() + endif() + + if (WITH_WEBENGINE AND Qt5WebEngineWidgets_FOUND) + set(HAVE_WEBENGINE true) + endif() + add_feature_info("WITH_WEBENGINE, QtWebEngine and QtWebEngineWidgets modules" HAVE_WEBENGINE "Support showing previews for URLs in chat") # KDE Frameworks ################ @@ -290,23 +350,23 @@ if (USE_QT5) if (ECM_FOUND) list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) if (WITH_KDE) - find_package(KF5 COMPONENTS ConfigWidgets CoreAddons Notifications NotifyConfig TextWidgets WidgetsAddons XmlGui QUIET) + find_package(KF5 COMPONENTS ConfigWidgets CoreAddons Notifications NotifyConfig Sonnet TextWidgets WidgetsAddons XmlGui QUIET REQUIRED) set_package_properties(KF5 PROPERTIES TYPE REQUIRED URL "http://www.kde.org" DESCRIPTION "KDE Frameworks" PURPOSE "Required for integration into the Plasma desktop" ) - else(WITH_KDE) + else() find_package(KF5Sonnet QUIET) set_package_properties(KF5Sonnet PROPERTIES TYPE RECOMMENDED URL "http://api.kde.org/frameworks-api/frameworks5-apidocs/sonnet/html" DESCRIPTION "framework for providing spell-checking capabilities" PURPOSE "Enables spell-checking support in input widgets" ) - endif(WITH_KDE) - endif(ECM_FOUND) + endif() + endif() - endif(BUILD_GUI) + endif() if (BUILD_CORE) find_package(Qt5Script QUIET) @@ -325,7 +385,7 @@ if (USE_QT5) PURPOSE "Required for encryption support" ) - endif(BUILD_CORE) + endif() find_package(Qt5LinguistTools QUIET) set_package_properties(Qt5LinguistTools PROPERTIES TYPE RECOMMENDED @@ -352,7 +412,10 @@ if (USE_QT5) endif() endif() -else(USE_QT5) +else() + message(STATUS "Building for Qt4...") + set(QT_MIN_VERSION "4.8.0") + find_package(Qt4 ${QT_MIN_VERSION} QUIET REQUIRED) if (BUILD_GUI) @@ -382,14 +445,14 @@ else(USE_QT5) ) set(CMAKE_C_FLAGS ${_cflags}) - else(WITH_KDE) + else() find_package(Phonon QUIET) set_package_properties(Phonon PROPERTIES TYPE RECOMMENDED URL "https://projects.kde.org/projects/kdesupport/phonon" DESCRIPTION "a multimedia abstraction library" PURPOSE "Required for audio notifications" ) - endif(WITH_KDE) + endif() find_package(IndicateQt QUIET) set_package_properties(IndicateQt PROPERTIES TYPE OPTIONAL @@ -398,7 +461,7 @@ else(USE_QT5) PURPOSE "Provides integration into the Ayatana notification system used by e.g. Ubuntu" ) - endif(BUILD_GUI) + endif() if (BUILD_CORE) @@ -482,6 +545,20 @@ 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() +else() + message(STATUS "Not enabling LDAP authentication support") +endif() # Setup KDE / KDE Frameworks ##################################################################### @@ -494,7 +571,7 @@ if (KDE4_FOUND) set(EMBED_DATA OFF) # Better have the compile flags global, even for the core, to avoid problems with linking the mono client - add_definitions(-DHAVE_KDE -DHAVE_KDE4 ${KDE4_DEFINITIONS}) + add_definitions(-DHAVE_KDE -DHAVE_KDE4 ${KDE4_DEFINITIONS} ${KDE4_ENABLE_EXCEPTIONS}) set(WITH_KDE4 TRUE) endif() @@ -506,6 +583,7 @@ if (USE_QT5 AND WITH_KDE) include(KDECompilerSettings) include(KDECMakeSettings) + kde_enable_exceptions() add_definitions(-DHAVE_KDE -DHAVE_KF5) set(WITH_KF5 TRUE) endif() @@ -550,7 +628,7 @@ if (NOT WIN32) check_function_exists(umask HAVE_UMASK) if(HAVE_UMASK) add_definitions(-DHAVE_UMASK) - endif(HAVE_UMASK) + endif() endif() @@ -599,7 +677,7 @@ git_describe(GIT_DESCRIBE --long) # If in a Git repo we can get the commit-date from a git command if (GIT_HEAD) execute_process( - COMMAND git show -s --format=%ct + COMMAND git -c log.showsignature=false show -s --format=%ct WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE @@ -611,7 +689,7 @@ endif() if (NOT GIT_HEAD OR NOT GIT_DESCRIBE) if (DEFINED ENV{GIT_HEAD}) set(GIT_HEAD $ENV{GIT_HEAD}) - endif () + endif() if (DEFINED ENV{GIT_DESCRIBE}) set(GIT_DESCRIBE $ENV{GIT_DESCRIBE}) endif()