CMakeLists.txt 7.07 KB
Newer Older
Kevin Funk's avatar
Kevin Funk committed
1
cmake_minimum_required(VERSION 3.0)
Sven Brauch's avatar
Sven Brauch committed
2
project(KDevelop VERSION 5.2.3)
3

4 5 6
# KDevelop SOVERSION
# E.g. for KDevelop 5.2.0 => SOVERSION 52 (we only promise ABI compatibility between patch version updates)
set(KDEVELOP_SOVERSION 52)
7

8
# plugin versions listed in the .desktop files
9
set(KDEV_PLUGIN_VERSION 30)
10

11
# we need some parts of the ECM CMake helpers
12
find_package (ECM 5.14.0 REQUIRED NO_MODULE)
13
set(CMAKE_MODULE_PATH ${KDevelop_SOURCE_DIR}/cmake/modules ${ECM_MODULE_PATH})
14 15

include(KDECompilerSettings NO_POLICY_SCOPE) # needs to be first, as set policies influence following macros
16 17
include(ECMOptionalAddSubdirectory)
include(ECMInstallIcons)
18
include(ECMAddAppIcon)
19
include(ECMSetupVersion)
20
include(ECMAddTests)
21 22
include(ECMMarkNonGuiExecutable)
include(ECMGenerateHeaders)
23
include(ECMQtDeclareLoggingCategory)
24

Kevin Funk's avatar
Kevin Funk committed
25
include(GenerateExportHeader)
26 27 28 29 30 31 32
include(CMakePackageConfigHelpers)
include(FeatureSummary)
include(WriteBasicConfigVersionFile)
include(CheckFunctionExists)

include(KDEInstallDirs)
include(KDECMakeSettings)
33

34
if(POLICY CMP0071)
35 36 37
  # CMake 3.10 generates warnings when projects combine AUTOMOC with qt5_wrap_ui() or qt5_add_resources()
  # Avoid that by setting this policy (cf. https://bugreports.qt.io/browse/QTBUG-63442)
  # Note: Once we depend on a Qt which has this fix (likely Qt 5.9.4+), remove this
38 39 40
  cmake_policy(SET CMP0071 OLD)
endif()

Kevin Funk's avatar
Kevin Funk committed
41
set(QT_MIN_VERSION "5.5.0")
42
find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Widgets Concurrent Quick QuickWidgets)
43 44 45
if(BUILD_TESTING)
  find_package(Qt5Test ${QT_MIN_VERSION} CONFIG REQUIRED)
endif()
Kevin Funk's avatar
Kevin Funk committed
46
set(KF5_DEP_VERSION "5.15.0") # we need KCrash::initialize
Kevin Funk's avatar
Kevin Funk committed
47
find_package(KF5 ${KF5_DEP_VERSION} REQUIRED COMPONENTS
48
  Config
Kevin Funk's avatar
Kevin Funk committed
49
  Declarative
Kevin Funk's avatar
Kevin Funk committed
50 51
  DocTools
  IconThemes
52 53
  I18n
  ItemModels
Kevin Funk's avatar
Kevin Funk committed
54
  ItemViews
55 56 57 58
  JobWidgets
  KCMUtils
  KIO
  NewStuff
Kevin Funk's avatar
Kevin Funk committed
59
  NotifyConfig
60
  Parts
Kevin Funk's avatar
Kevin Funk committed
61
  Service
62 63
  TextEditor
  ThreadWeaver
Kevin Funk's avatar
Kevin Funk committed
64
  XmlGui
65
  WindowSystem
66
  Crash
67 68 69
  GuiAddons
  Archive
  Notifications
70
)
Kevin Funk's avatar
Kevin Funk committed
71
find_package(KF5SysGuard CONFIG)
72 73
set_package_properties(KF5SysGuard PROPERTIES
    PURPOSE "Framework for process listing. Required for the 'Attach to Process' feature"
74
    TYPE RECOMMENDED
75
)
Kevin Funk's avatar
Kevin Funk committed
76
find_package(KDevelop-PG-Qt 1.90.90 CONFIG)
77 78
set_package_properties(KDevelop-PG-Qt PROPERTIES
    PURPOSE "KDevelop parser generator library. Required for the QMake Builder/Manager plugin."
79
    TYPE RECOMMENDED
80 81
)

82 83
find_package(SharedMimeInfo REQUIRED)

84 85 86 87 88 89 90
if(NOT CMAKE_VERSION VERSION_LESS "3.10.0" AND KF5_VERSION VERSION_LESS "5.42.0")
  # CMake 3.9+ warns about automoc on files without Q_OBJECT, and doesn't know about other macros.
  # 3.10+ lets us provide more macro names that require automoc.
  # KF5 >= 5.42 takes care itself of adding its macros in its cmake config files
  list(APPEND CMAKE_AUTOMOC_MACRO_NAMES
       "K_PLUGIN_FACTORY_WITH_JSON" "K_EXPORT_PLASMA_DATAENGINE_WITH_JSON" "K_EXPORT_PLASMA_RUNNER")
endif()
91
if(NOT CMAKE_VERSION VERSION_LESS "3.9.0" AND KF5_VERSION VERSION_LESS "5.44.0")
92 93 94 95 96 97 98 99 100 101 102 103
    # CMake's automoc needs help to find names of plugin metadata files in case Q_PLUGIN_METADATA
    # is indirectly used via other C++ preprocessor macros
    # 3.9+ lets us provide some filter rule pairs (keyword, regexp) to match the names of such files
    # in the plain text of the sources. See AUTOMOC_DEPEND_FILTERS docs for details.
    list(APPEND CMAKE_AUTOMOC_DEPEND_FILTERS
        "K_PLUGIN_FACTORY_WITH_JSON"
        "[\n^][ \t]*K_PLUGIN_FACTORY_WITH_JSON[ \t\n]*\\([^,]*,[ \t\n]*\"([^\"]+)\""
        "K_EXPORT_PLASMA_DATAENGINE_WITH_JSON"
        "[\n^][ \t]*K_EXPORT_PLASMA_DATAENGINE_WITH_JSON[ \t\n]*\\([^,]*,[^,]*,[ \t\n]*\"([^\"]+)\""
    )
endif()

104

Kevin Funk's avatar
Kevin Funk committed
105 106
add_definitions(
    -DQT_DEPRECATED_WARNINGS
107
    -DQT_DISABLE_DEPRECATED_BEFORE=0x050500
108
    -DQT_NO_SIGNALS_SLOTS_KEYWORDS
Kevin Funk's avatar
Kevin Funk committed
109 110
    -DQT_NO_URL_CAST_FROM_STRING
    -DQT_STRICT_ITERATORS
111
    -DQT_USE_QSTRINGBUILDER
Kevin Funk's avatar
Kevin Funk committed
112
)
113

114 115 116 117 118 119 120 121 122 123 124 125
function(add_compile_flag_if_supported _flag)
    unset(_have_flag CACHE)
    string(REGEX REPLACE "[-=]" "_" _varname ${_flag})
    string(TOUPPER ${_varname} _varname)
    set(_varname "HAVE${_varname}")
    check_cxx_compiler_flag("${_flag}" "${_varname}")
    if (${${_varname}})
        add_compile_options(${_flag})
    endif()
endfunction()

# Turn off missing-field-initializers warning for GCC to avoid noise from false positives with empty {}
126
# See discussion: http://mail.kde.org/pipermail/kdevelop-devel/2014-February/046910.html
127 128 129
add_compile_flag_if_supported(-Wno-missing-field-initializers)
add_compile_flag_if_supported(-Werror=undefined-bool-conversion)
add_compile_flag_if_supported(-Werror=tautological-undefined-compare)
130
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
131 132 133 134 135 136
    add_compile_flag_if_supported(-Wdocumentation)
    # This warning is triggered by every call to qCDebug()
    add_compile_flag_if_supported(-Wno-gnu-zero-variadic-macro-arguments)
endif()
if (CMAKE_COMPILER_CXX_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    add_compile_flag_if_supported(-pedantic)
137
endif()
138

139
include_directories(${KDevelop_SOURCE_DIR} ${KDevelop_BINARY_DIR})
Alexander Dymo's avatar
Alexander Dymo committed
140

141 142 143 144 145 146 147 148
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER)
if(CMAKE_BUILD_TYPE_TOLOWER MATCHES "debug"
  OR CMAKE_BUILD_TYPE_TOLOWER STREQUAL "")
  set(COMPILER_OPTIMIZATIONS_DISABLED TRUE)
else()
  set(COMPILER_OPTIMIZATIONS_DISABLED FALSE)
endif()

149 150
# create config-kdevelop.h
configure_file(config-kdevelop.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kdevelop.h)
Alexander Dymo's avatar
Alexander Dymo committed
151

152
add_subdirectory(kdevplatform)
Kevin Funk's avatar
Kevin Funk committed
153 154
add_subdirectory(plugins)

155
add_subdirectory(pics)
156
add_subdirectory(app)
157
add_subdirectory(app_templates)
158
add_subdirectory(file_templates)
159
add_subdirectory(shortcuts)
160
add_subdirectory(doc)
161

Kevin Funk's avatar
Kevin Funk committed
162
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KDevelop")
Kevin Funk's avatar
Kevin Funk committed
163
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KDevelopConfig.cmake.in"
Kevin Funk's avatar
Kevin Funk committed
164 165 166
                                  "${CMAKE_CURRENT_BINARY_DIR}/KDevelopConfig.cmake"
                                  INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
)
Sven Brauch's avatar
Sven Brauch committed
167
ecm_setup_version(${KDevelop_VERSION_MAJOR}.${KDevelop_VERSION_MINOR}.${KDevelop_VERSION_PATCH}
Kevin Funk's avatar
Kevin Funk committed
168 169 170 171 172 173 174 175 176 177 178 179
                  VARIABLE_PREFIX KDEVELOP
                  VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kdevelop_version.h"
                  PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KDevelopConfigVersion.cmake"
)
install(FILES
        "${CMAKE_CURRENT_BINARY_DIR}/kdevelop_version.h"
        DESTINATION "${KDE_INSTALL_INCLUDEDIR}/kdevelop")
install(FILES
        "${CMAKE_CURRENT_BINARY_DIR}/KDevelopConfig.cmake"
        "${CMAKE_CURRENT_BINARY_DIR}/KDevelopConfigVersion.cmake"
        DESTINATION "${CMAKECONFIG_INSTALL_DIR}" )
install(EXPORT KDevelopTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" NAMESPACE KDev:: FILE KDevelopTargets.cmake)
Milian Wolff's avatar
Milian Wolff committed
180

181 182 183
# kdebugsettings file
install(FILES kdevelop.categories DESTINATION ${KDE_INSTALL_CONFDIR})

Milian Wolff's avatar
Milian Wolff committed
184 185 186
# CTestCustom.cmake has to be in the CTEST_BINARY_DIR.
# in the KDE build system, this is the same as CMAKE_BINARY_DIR.
configure_file(${CMAKE_SOURCE_DIR}/CTestCustom.cmake ${CMAKE_BINARY_DIR}/CTestCustom.cmake)
187

188
install(FILES org.kde.kdevelop.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
189

190
# Make it possible to use the po files fetched by the fetch-translations step
191
ki18n_install(po)
192

193
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)