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()