Warning, /office/kmymoney/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2022 Alexander Lohnau <alexander.lohnau@gmx.de> 0002 0003 # For all the configurable CMake switches, please see https://invent.kde.org/office/kmymoney/-/wikis/home#cmake-switches 0004 0005 # The CMake version we require 0006 cmake_minimum_required(VERSION 3.12) 0007 set(ECM_MINIMUM_VERSION 5.42) 0008 set(KF5_MIN_VERSION 5.2) 0009 set(QT_MIN_VERSION 5.6) 0010 set(AKONADI_MIN_VERSION 5.2) 0011 0012 set(RELEASE_SERVICE_VERSION_MAJOR "5") 0013 set(RELEASE_SERVICE_VERSION_MINOR "1") 0014 set(RELEASE_SERVICE_VERSION_MICRO "3") 0015 set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") 0016 0017 # Setting the name of the main project 0018 project(KMyMoney VERSION "${RELEASE_SERVICE_VERSION}" LANGUAGES CXX) 0019 0020 # Minimum versions required for extern packages 0021 set(KMM_ALKIMIA_MIN_VERSION 8.0) 0022 set(KMM_KCHART_MIN_VERSION 2.6.0) 0023 set(KMM_AQBANKING_MIN_VERSION 6.0.1) 0024 set(KMM_GWENHYWFAR_MIN_VERSION 5.1.2) 0025 0026 # Determine the GIT reference (if we're based on GIT) 0027 if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") 0028 execute_process(COMMAND git rev-parse --short HEAD 0029 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 0030 OUTPUT_VARIABLE VERSION_SUFFIX 0031 OUTPUT_STRIP_TRAILING_WHITESPACE) 0032 set(VERSION_SUFFIX "-${VERSION_SUFFIX}") 0033 # Add variables which are similar to the build in names of cmake 0034 set(PROJECT_VERSION_SUFFIX "${VERSION_SUFFIX}") 0035 set(${PROJECT_NAME}_VERSION_SUFFIX "${VERSION_SUFFIX}") 0036 elseif(DEFINED VERSION_SUFFIX) 0037 string(REGEX REPLACE "-*(.+)" "\\1" DASHFREE_SUFFIX "${VERSION_SUFFIX}") 0038 set(PROJECT_VERSION_SUFFIX "-${DASHFREE_SUFFIX}") 0039 set(${PROJECT_NAME}_VERSION_SUFFIX "-${DASHFREE_SUFFIX}") 0040 endif() 0041 0042 # Automoc all sources 0043 set(CMAKE_AUTOMOC TRUE) 0044 list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "K_PLUGIN_FACTORY" "K_PLUGIN_FACTORY_WITH_JSON") 0045 0046 if (POLICY CMP0063) 0047 cmake_policy(SET CMP0063 NEW) # Policy introduced in CMake version 3.3 0048 endif() 0049 if (POLICY CMP0071) 0050 # We do not require the old behaviour. It is only set to old, to prevent accidential use of 0051 # the new behavour. If the new behaviour becomes important, cmake_minimum_required has to be 0052 # set to "3.10". 0053 cmake_policy(SET CMP0071 OLD) # Policy introduced in CMake version 3.10 0054 endif() 0055 0056 0057 ######################### General Requirements ########################## 0058 0059 if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.0.0) 0060 message(FATAL_ERROR "This version of KMyMoney requires at least gcc 6.0.0 to be built successfully") 0061 endif() 0062 0063 set(APPLE_SUPPRESS_X11_WARNING TRUE) 0064 find_package(ECM ${ECM_MINIMUM_VERSION} REQUIRED NO_MODULE) 0065 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) 0066 0067 include(KDEInstallDirs) 0068 include(KDECMakeSettings) 0069 # reimplementation because kmymoney app image is bound to ECM 5.36 0070 if("${ECM_MINIMUM_VERSION}" VERSION_LESS "5.38.0") 0071 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 0072 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 0073 if(WIN32) 0074 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 0075 else() 0076 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 0077 endif() 0078 elseif(NOT WIN32) 0079 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 0080 endif() 0081 0082 include(FeatureSummary) 0083 include(CMakeDependentOption) 0084 0085 include(GenerateExportHeader) 0086 include(KMyMoneyMacros) 0087 0088 find_package(PkgConfig) 0089 0090 find_package(Gpgmepp) 0091 if (Gpgmepp_FOUND) 0092 set(GPG_FOUND TRUE) 0093 else() 0094 set(GPG_FOUND FALSE) 0095 find_package(KF5 ${KF5_MIN_VERSION} OPTIONAL_COMPONENTS Gpgmepp) 0096 endif() 0097 0098 if (PkgConfig_FOUND) 0099 pkg_check_modules(SQLCIPHER sqlcipher IMPORTED_TARGET) 0100 pkg_check_modules(LIBOFX libofx IMPORTED_TARGET) 0101 endif() 0102 0103 find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core DBus Widgets Svg Xml Test PrintSupport) 0104 find_package(Qt5 ${QT_MIN_VERSION} OPTIONAL_COMPONENTS Sql Concurrent QuickWidgets) 0105 0106 find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Archive CoreAddons Config ConfigWidgets I18n Completion KCMUtils ItemModels ItemViews Service Wallet IconThemes XmlGui TextWidgets Notifications KIO) 0107 find_package(KF5 ${KF5_MIN_VERSION} OPTIONAL_COMPONENTS DocTools Holidays Contacts Activities) 0108 0109 # Akonadi 23.04 moved to KPim5 prefix, deprecating KF5 0110 set(PIMPREFIX KPim5) 0111 find_package(${PIMPREFIX}Akonadi ${AKONADI_MIN_VERSION} QUIET) 0112 if(NOT ${PIMPREFIX}Akonadi_FOUND) 0113 set(PIMPREFIX KF5) 0114 find_package(${PIMPREFIX}Akonadi ${AKONADI_MIN_VERSION} QUIET) 0115 endif() 0116 find_package(${PIMPREFIX}IdentityManagement ${AKONADI_MIN_VERSION} QUIET) 0117 0118 if(LibAlkimia5_DIR) 0119 set(_LibAlkimia5_DIR ${LibAlkimia5_DIR}) 0120 endif() 0121 find_package(LibAlkimia5 ${KMM_ALKIMIA_MIN_VERSION}) 0122 if (NOT LibAlkimia5_FOUND) 0123 # restore LibAlkimia5_DIR set to NOTFOUND by first find_package call 0124 if(_LibAlkimia5_DIR) 0125 set(LibAlkimia5_DIR ${_LibAlkimia5_DIR}) 0126 endif() 0127 find_package(LibAlkimia5 7.0 REQUIRED) 0128 endif() 0129 0130 find_package(KChart ${KMM_KCHART_MIN_VERSION} QUIET) 0131 0132 if(KF5Gpgmepp_FOUND) 0133 set(GPG_FOUND TRUE) 0134 endif() 0135 0136 cmake_dependent_option(ENABLE_GPG "Enable GPG support." ON 0137 "GPG_FOUND" OFF) 0138 0139 add_feature_info("Encryption" ENABLE_GPG "Allows to store your financial data using strong GPG encryption.") 0140 0141 add_definitions(-DQT_USE_QSTRINGBUILDER -DQT_NO_CAST_TO_ASCII -DQT_NO_URL_CAST_FROM_STRING) 0142 set(CMAKE_CXX_STANDARD 14) 0143 set(CMAKE_CXX_STANDARD_REQUIRED ON) 0144 set(CMAKE_CXX_EXTENSIONS OFF) 0145 0146 # use DBus only on Linux 0147 if(CMAKE_SYSTEM_NAME MATCHES "Linux") 0148 set(KMM_DBUS 1) 0149 endif() 0150 0151 set(CMAKE_INCLUDE_CURRENT_DIR ON) 0152 include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}) 0153 0154 # check for Doxygen 0155 find_package(Doxygen) 0156 if(DOXYGEN_FOUND) 0157 set(APIDOC_DIR ${CMAKE_CURRENT_BINARY_DIR}/apidocs) 0158 0159 make_directory("${APIDOC_DIR}") 0160 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/kmymoney.doxygen.in ${CMAKE_CURRENT_BINARY_DIR}/kmymoney.doxygen IMMEDIATE) 0161 0162 add_custom_target(apidoc "${DOXYGEN}" "${CMAKE_CURRENT_BINARY_DIR}/kmymoney.doxygen") 0163 endif(DOXYGEN_FOUND) 0164 add_feature_info("Doxygen" DOXYGEN_FOUND "Generate API documentation with Doxygen (for devs only).") 0165 0166 # check some include files exists 0167 set(CMAKE_REQUIRED_DEFINITIONS -D_XOPEN_SOURCE=500 -D_BSD_SOURCE) 0168 include (CheckIncludeFileCXX) 0169 check_include_file_cxx("unistd.h" HAVE_UNISTD_H) 0170 check_include_file_cxx("pwd.h" HAVE_PWD_H) 0171 check_include_file_cxx("windows.h" HAVE_WINDOWS_H) 0172 check_include_file_cxx("lmcons.h" HAVE_LMCONS_H) 0173 check_include_file_cxx("process.h" HAVE_PROCESS_H) 0174 0175 # include check for members in structs 0176 include (CheckStructHasMember) 0177 0178 ######################### Special Requirements ########################## 0179 0180 # This is needed for QtSqlite and QtDesigner 0181 # (they'll install files to ${QT_INSTALL_DIR}/plugins/) 0182 get_filename_component(QT_BIN_DIR "${QT_MOC_EXECUTABLE}" PATH) 0183 get_filename_component(QT_DIR ${QT_BIN_DIR} PATH) 0184 set(QT_INSTALL_DIR ${QT_DIR} CACHE PATH 0185 "Qt install prefix defaults to the Qt prefix: ${QT_DIR}") 0186 0187 cmake_dependent_option(ENABLE_ADDRESSBOOK "Enable addressbook support." ON 0188 "${PIMPREFIX}IdentityManagement_FOUND;${PIMPREFIX}Akonadi_FOUND;KF5Contacts_FOUND" OFF) 0189 0190 add_feature_info("Address book" ENABLE_ADDRESSBOOK "Allows fetching payee information from KDE PIM system.") 0191 0192 cmake_dependent_option(ENABLE_HOLIDAYS "Enable addressbook support." ON 0193 "KF5Holidays_FOUND" OFF) 0194 0195 add_feature_info("Holidays" ENABLE_HOLIDAYS "Allows fetching holidays from KDE PIM system.") 0196 0197 cmake_dependent_option(ENABLE_ACTIVITIES "Enable activities support." ON 0198 "KF5Activities_FOUND" OFF) 0199 0200 option(ENABLE_FORECASTVIEW "Enable forecast view" ON) 0201 add_feature_info("Forecast view" ENABLE_FORECASTVIEW "Adds possibility to calculate forecasts.") 0202 cmake_dependent_option(ENABLE_REPORTSVIEW "Enable reports view." ON 0203 "KChart_FOUND" OFF) 0204 add_feature_info("Reports view" ENABLE_REPORTSVIEW "Adds possibility to display chart and table reports.") 0205 option(ENABLE_BUDGETVIEW "Enable budget view" ON) 0206 add_feature_info("Budget view" ENABLE_BUDGETVIEW "Adds possibility to plan a budget.") 0207 option(ENABLE_ONLINEJOBOUTBOXVIEW "Enable online job outbox view" ON) 0208 add_feature_info("Online job outbox view" ENABLE_ONLINEJOBOUTBOXVIEW "Adds outbox for sending online jobs.") 0209 0210 cmake_dependent_option(ENABLE_SQLSTORAGE "Enable SQL storage support." ON 0211 "Qt5Sql_FOUND" OFF) 0212 0213 add_feature_info("SQL Storage" ENABLE_SQLSTORAGE "Allows storing your financial data in SQL database.") 0214 0215 cmake_dependent_option(ENABLE_SQLCIPHER "Enable SQLCipher support." ON 0216 "SQLCIPHER_FOUND" OFF) 0217 0218 # Otherwise compilers halt on something like that: 0219 # ld: library not found for -lsqlcipher 0220 # on MS Windows, FreeBSD, macOS, and Ubuntu 14.04 (Ubuntu has CMake 3.5.1 but I'm not sure if it's the one to blame). 0221 if(ENABLE_SQLCIPHER AND (NOT CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_VERSION VERSION_LESS 3.5.2)) 0222 link_directories(${SQLCIPHER_LIBRARY_DIRS}) 0223 endif() 0224 0225 add_feature_info("SQLCipher" ENABLE_SQLCIPHER "Allows encrypting your SQLite3 database.") 0226 0227 cmake_dependent_option(ENABLE_IBANBICDATA "Enable IBAN/BIC data support." OFF 0228 "Qt5Sql_FOUND" OFF) 0229 0230 add_feature_info("IBAN/BIC data" ENABLE_IBANBICDATA "Adds predefined IBAN/BIC numbers to KMyMoney (note: doesn't work yet).") 0231 0232 # check for optional QWebEngine 0233 option(ENABLE_WEBENGINE "Enable QWebEngine" ON) 0234 if(ENABLE_WEBENGINE) 0235 find_package(Qt5WebEngineWidgets 5.8 REQUIRED) 0236 if(Qt5WebEngineWidgets_VERSION VERSION_GREATER 5.8.99 AND Qt5WebEngineWidgets_VERSION VERSION_LESS 5.9.3) 0237 message(WARNING "QWebEngine version ${Qt5WebEngineWidgets_VERSION} is known to be unstable with KMyMoney") 0238 endif() 0239 else(ENABLE_WEBENGINE) 0240 find_package(KF5WebKit REQUIRED) 0241 endif(ENABLE_WEBENGINE) 0242 0243 # check for optional LibOFX support 0244 cmake_dependent_option(ENABLE_OFXIMPORTER "Enable OFX Importer" ON 0245 "LIBOFX_FOUND" OFF) 0246 0247 if(ENABLE_OFXIMPORTER) 0248 if(NOT LIBOFX_HAVE_CLIENTUID) 0249 get_target_property(PATH_TO_LIBOFX_HEADER PkgConfig::LIBOFX INTERFACE_INCLUDE_DIRECTORIES ) 0250 if ("${PATH_TO_LIBOFX_HEADER}" STREQUAL "PATH_TO_LIBOFX_HEADER-NOTFOUND") 0251 set(PATH_TO_LIBOFX_HEADER ${LIBOFX_INCLUDEDIR}) 0252 endif() 0253 set(PATH_TO_LIBOFX_HEADER "${PATH_TO_LIBOFX_HEADER}/libofx/libofx.h") 0254 unset(LIBOFX_HAVE_CLIENTUID) 0255 unset(LIBOFX_HAVE_CLIENTUID CACHE) #not doing this will prevent updating below check 0256 check_struct_has_member("struct OfxFiLogin" clientuid ${PATH_TO_LIBOFX_HEADER} LIBOFX_HAVE_CLIENTUID LANGUAGE CXX) 0257 endif() 0258 0259 if (LIBOFX_HAVE_CLIENTUID) 0260 set (nice_LIBOFX_HAVE_CLIENTUID "yes") 0261 else() 0262 set (nice_LIBOFX_HAVE_CLIENTUID "no") 0263 endif() 0264 0265 else() 0266 set (nice_LIBOFX_HAVE_CLIENTUID "unknown") 0267 unset(LIBOFX_HAVE_CLIENTUID) 0268 unset(LIBOFX_HAVE_CLIENTUID CACHE) 0269 endif(ENABLE_OFXIMPORTER) 0270 0271 add_feature_info("OFX Importer" ENABLE_OFXIMPORTER "Allows importing OFX files (have client uid version: ${nice_LIBOFX_HAVE_CLIENTUID})" ) 0272 0273 # check for optional KBanking support 0274 find_package(aqbanking ${KMM_AQBANKING_MIN_VERSION} QUIET) 0275 find_package(gwenhywfar ${KMM_GWENHYWFAR_MIN_VERSION} QUIET) 0276 find_package(gwengui-cpp QUIET) 0277 find_package(gwengui-qt5 QUIET) 0278 0279 cmake_dependent_option(ENABLE_KBANKING "Enable KBanking plugin" ON 0280 "AQBANKING_FOUND;gwengui-cpp_FOUND;gwengui-qt5_FOUND;Qt5QuickWidgets_FOUND" OFF) 0281 0282 add_feature_info(KBanking ENABLE_KBANKING "Interface for the following online banking protocols: HBCI, EBICS, OFX Direct Connect, Paypal") 0283 0284 # check for optional Woob support 0285 find_package(Python3 COMPONENTS Interpreter Development) 0286 set_package_properties(Python3 PROPERTIES 0287 TYPE OPTIONAL 0288 PURPOSE "Required by Woob plugin.") 0289 0290 cmake_dependent_option(ENABLE_WOOB "Enable Woob plugin" ON 0291 "Python3_FOUND;Qt5Concurrent_FOUND;NOT IS_APPIMAGE" OFF) 0292 add_feature_info(Woob ENABLE_WOOB "Online banking interface using Woob.") 0293 0294 0295 # check for optional ical support 0296 find_package(LibIcal) 0297 cmake_dependent_option(ENABLE_LIBICAL "Enable Calendar plugin" ON 0298 "LibIcal_FOUND" OFF) 0299 add_feature_info(iCalendar ENABLE_LIBICAL "iCalendar integration.") 0300 0301 0302 option(ENABLE_QIFIMPORTER "Enable QIF Importer" ON) 0303 option(ENABLE_QIFEXPORTER "Enable QIF Exporter" ON) 0304 add_feature_info("QIF Importer" ENABLE_QIFIMPORTER "Allows importing QIF files.") 0305 add_feature_info("QIF Exporter" ENABLE_QIFEXPORTER "Allows exporting QIF files.") 0306 0307 option(ENABLE_GNCIMPORTER "Enable GNC Importer" ON) 0308 add_feature_info("GNC Importer" ENABLE_GNCIMPORTER "Allows importing GNUCash files.") 0309 0310 option(ENABLE_CSVIMPORTER "Enable CSV Importer" ON) 0311 option(ENABLE_CSVEXPORTER "Enable CSV Exporter" ON) 0312 add_feature_info("CSV Importer" ENABLE_CSVIMPORTER "Allows importing CSV files.") 0313 add_feature_info("CSV Exporter" ENABLE_CSVEXPORTER "Allows exporting CSV files.") 0314 0315 option(ENABLE_UNFINISHEDFEATURES "For devs only" OFF) 0316 add_feature_info("New features" ENABLE_CSVEXPORTER "Compiles unfinished features for testing.") 0317 0318 add_feature_info("prefix.sh" KDE_INSTALL_PREFIX_SCRIPT "create prefix.sh script to support local execution") 0319 0320 # TODO: this should be removed 0321 enable_testing() 0322 0323 # Setup translations 0324 ki18n_install(po) 0325 0326 ######################### Settings ########################## 0327 0328 # If no build type is set, use "Release with Debug Info" 0329 if(NOT CMAKE_BUILD_TYPE) 0330 set(CMAKE_BUILD_TYPE RelWithDebInfo) 0331 endif(NOT CMAKE_BUILD_TYPE) 0332 0333 set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING 0334 "Choose the type of build. 0335 Possible values are: 'Release' 'RelWithDebInfo' 'Debug' 'DebugKMM' 'Debugfull' 'Profile' 0336 The default value is: 'RelWithDebInfo'" FORCE) 0337 0338 # tells gcc to enable exception handling 0339 include(KDECompilerSettings) 0340 kde_enable_exceptions() 0341 0342 # Set linker flags 0343 0344 # There is no way to detect linker in cmake (see https://gitlab.kitware.com/cmake/cmake/issues/17596) 0345 # and linkers aren't compatible with each other, so we need to assume something 0346 if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") 0347 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-dead_strip -Wl,-undefined,error") 0348 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip -Wl,-undefined,error -Wl,-mark_dead_strippable_dylib") 0349 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-dead_strip -Wl,-undefined,error") 0350 0351 elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") 0352 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--as-needed") 0353 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed") 0354 # TODO: remove multiple definitions of payeeIdentifierLoader::createPayeeIdentifierFromSqlDatabase 0355 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -Wl,--allow-multiple-definition") 0356 # CI builds are crashing on FreeBSD with --no-undefined. Probably because -DECM_ENABLE_SANITIZERS='address' 0357 # more can be read on the following site https://bugs.freedesktop.org/show_bug.cgi?id=100120 0358 if(NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD") 0359 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined") 0360 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") 0361 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined") 0362 endif() 0363 0364 # TODO: remove multiple definitions of payeeIdentifierLoader::hasItemEditDelegate 0365 if(CMAKE_SYSTEM_NAME MATCHES "Windows") 0366 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--allow-multiple-definition") 0367 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-multiple-definition") 0368 endif() 0369 0370 elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") 0371 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /FORCE:Multiple") 0372 endif() 0373 0374 # Set compiler flags 0375 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") 0376 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wlogical-op -Wno-null-dereference -Wshadow -Wunused -Wno-misleading-indentation -Wsuggest-override -Wcast-qual -Wformat=2 -fno-common") 0377 0378 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") 0379 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-qual -Wformat=2 -Wunreachable-code -fno-common") 0380 0381 elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") 0382 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /experimental:external /external:anglebrackets /external:W0 /W3") 0383 endif() 0384 0385 0386 # IDEA: Set on a per target base 0387 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 0388 0389 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") 0390 # DebugKMM, Debugfull, Profile 0391 set(CMAKE_CXX_FLAGS_DEBUGKMM 0392 "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline") 0393 set(CMAKE_CXX_FLAGS_DEBUGFULL 0394 "-g3 -fno-inline") 0395 set(CMAKE_CXX_FLAGS_PROFILE 0396 "-g3 -fno-inline -ftest-coverage -fprofile-arcs") 0397 0398 # preprocessor definitions in case this is a debug build 0399 set(CMAKE_CXX_FLAGS_DEBUGFULL "${CMAKE_CXX_FLAGS_DEBUGFULL} -DQT_STRICT_ITERATORS -DKMM_DEBUG -DQT_FORCE_ASSERTS") 0400 set(CMAKE_CXX_FLAGS_DEBUGKMM "${CMAKE_CXX_FLAGS_DEBUGFULL} -DKMM_DEBUG -DQT_FORCE_ASSERTS") 0401 endif() 0402 0403 option(USE_MODELTEST 0404 "Compile with ModelTest code (default=OFF)" OFF) 0405 0406 add_feature_info("Model test" USE_MODELTEST "Generate modeltest code (for devs only).") 0407 0408 option(USE_QT_DESIGNER 0409 "Install KMyMoney specific widget library for Qt-Designer (default=OFF)" OFF) 0410 0411 add_feature_info("QtDesigner" USE_QT_DESIGNER "Qt-Designer library support (for devs only).") 0412 0413 ######################### The Actual Targets ########################## 0414 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 0415 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 0416 if(WIN32) 0417 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 0418 else() 0419 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 0420 endif() 0421 0422 add_subdirectory( tools ) 0423 add_subdirectory( kmymoney ) 0424 if(KF5DocTools_FOUND) 0425 add_subdirectory( doc ) 0426 kdoctools_install( po ) 0427 endif() 0428 0429 ######################### Output Results ############################# 0430 0431 # create the config.h file out of the config.h.cmake 0432 configure_file("config-kmymoney.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config-kmymoney.h") 0433 configure_file("config-kmymoney-version.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config-kmymoney-version.h") 0434 0435 message(" 0436 Build type: ${CMAKE_BUILD_TYPE}") 0437 0438 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 0439 DESCRIPTION "The following REQUIRED packages have not been found:") 0440 0441 feature_summary(WHAT OPTIONAL_PACKAGES_NOT_FOUND 0442 DESCRIPTION "The following OPTIONAL packages have not been found:") 0443 0444 feature_summary(WHAT ENABLED_FEATURES 0445 DESCRIPTION "The following features have been enabled:") 0446 0447 feature_summary(WHAT DISABLED_FEATURES 0448 DESCRIPTION "The following features have been disabled:") 0449 0450 # TODO Remove the clang-format file + cmake code once we depend on ECM 5.80 0451 set(GIT_DIR "${CMAKE_SOURCE_DIR}/.git") 0452 find_program(KDE_CLANG_FORMAT_EXECUTABLE clang-format) 0453 # In case of tarballs there is no .git directory 0454 if (EXISTS ${GIT_DIR}) 0455 # The pre-commit hook is a bash script, consequently it won't work on non-unix platforms 0456 if (UNIX) 0457 if(KDE_CLANG_FORMAT_EXECUTABLE) 0458 configure_file("${CMAKE_SOURCE_DIR}/clang-format-pre-commit-hook.sh" "${GIT_DIR}/hooks/pre-commit" @ONLY) 0459 else() 0460 message(WARNING "No clang-format executable was found, skipping the formatting pre-commit hook") 0461 endif() 0462 endif() 0463 endif()