cmake_minimum_required(VERSION 3.18) include(VERSION.cmake) project(QSferaDesktop LANGUAGES CXX VERSION ${MIRALL_VERSION_MAJOR}.${MIRALL_VERSION_MINOR}.${MIRALL_VERSION_PATCH}) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FeatureSummary) find_package(ECM 6.0.0 REQUIRED NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) # disable pointless warning in KDECMakeSettings set(APPLE_SUPPRESS_X11_WARNING ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) include(KDEInstallDirs) include(KDECMakeSettings) include(ECMMarkNonGuiExecutable) include(ECMSetupVersion) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMEnableSanitizers) include(ECMQmlModule) find_package(Qt6 COMPONENTS Core Concurrent Network Widgets Xml Quick QuickWidgets QuickControls2 Linguist REQUIRED) qt6_standard_project_setup(REQUIRES 6.8) get_target_property (QT_QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION) message(STATUS "Using Qt ${Qt6_VERSION_MAJOR}.${Qt6_VERSION_MINOR}.${Qt6_VERSION_PATCH} (${QT_QMAKE_EXECUTABLE})") if (UNIX AND NOT APPLE) find_package(Qt6 REQUIRED COMPONENTS DBus) endif() if(UNIT_TESTING) message(DEPRECATION "Setting UNIT_TESTING is deprecated please use BUILD_TESTING") set(BUILD_TESTING TRUE) endif() include(CTest) include(OCBundleResources) include(OCApplyCommonSettings) include("${CMAKE_CURRENT_LIST_DIR}/THEME.cmake") if(NOT WITH_CRASHREPORTER) message(STATUS "Build of crashreporter disabled.") else() # obviously, a crash reported without the URL set is pretty pointless and won't work if(NOT DEFINED CRASHREPORTER_SUBMIT_URL) message(FATAL_ERROR "No crash reporter submit URL provided") endif() endif() include(GenerateExportHeader) include(GetGitRevisionDescription) # used in src/csync/CMakeLists.txt get_git_head_revision(GIT_REFSPEC GIT_SHA1) # if we cannot get it from git, directly try .tag (packages) # this will work if the tar balls have been properly created # via git-archive. if ("${GIT_SHA1}" STREQUAL "GITDIR-NOTFOUND") file(READ ${CMAKE_SOURCE_DIR}/.tag sha1_candidate) string(REPLACE "\n" "" sha1_candidate ${sha1_candidate}) if (NOT ${sha1_candidate} STREQUAL "$Format:%H$") message("${sha1_candidate}") set (GIT_SHA1 "${sha1_candidate}") endif() endif() message(STATUS "GIT_SHA1 ${GIT_SHA1}") option(NO_MSG_HANDLER "Don't redirect QDebug outputs to the log window/file" OFF) if (APPLE) # this option builds the shell integration, currently only available on MacOS option(BUILD_SHELL_INTEGRATION "BUILD_SHELL_INTEGRATION" ON) endif() # build the auto updater component option(WITH_AUTO_UPDATER "WITH_AUTO_UPDATER" OFF) option(WITH_UPDATE_NOTIFICATION "Whether to check for new releases" ON) # create a co-installable client, that uses a separate profile option(BETA_CHANNEL_BUILD "Use a standalone profile for a beta release" OFF) # build with -DQT_FORCE_ASSERTS option(FORCE_ASSERTS "FORCE_ASSERTS" OFF) option(WITH_APPIMAGEUPDATER OFF "Enable built-in libappimageupdate based updater on Linux") add_feature_info(AppImageUpdate WITH_APPIMAGEUPDATER "Built-in libappimageupdate based updater") option(WITH_EXTERNAL_BRANDING "A URL to an external branding repo" "") # specify additional vfs plugins set(VIRTUAL_FILE_SYSTEM_PLUGINS off cfapi openvfs CACHE STRING "Name of internal plugin in src/libsync/vfs or the locations of virtual file plugins") if(APPLE) set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" ) endif() if (WITH_AUTO_UPDATER) if(APPLE) find_package(Sparkle REQUIRED) endif(APPLE) if(WITH_APPIMAGEUPDATER) find_package(AppImageUpdate REQUIRED) endif() endif() if(UNIX AND NOT APPLE) find_package(Inotify REQUIRED) endif() find_package(ZLIB REQUIRED) find_package(SQLite3 3.9.0 REQUIRED) # in the ownBrander themes, the icon files are named after the shortname # the theme included in this repository defines a custom icon name, therefore we set the shortname as a fallback if the # theme does not define the variable if (NOT DEFINED APPLICATION_ICON_NAME) set(APPLICATION_ICON_NAME "${APPLICATION_SHORTNAME}") endif() file(GLOB_RECURSE QSFERA_ICONS "${OEM_THEME_DIR}/theme/colored/*-${APPLICATION_ICON_NAME}-icon.png") MESSAGE(STATUS "QSFERA_ICONS: ${APPLICATION_ICON_NAME}: ${QSFERA_ICONS}") add_subdirectory(src) if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin) add_subdirectory(admin) endif(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin) if(BUILD_SHELL_INTEGRATION) add_subdirectory(shell_integration) endif() if(BUILD_TESTING) add_subdirectory(test) endif() if(ECM_VERSION VERSION_GREATER_EQUAL 5.79) message(STATUS "Suitable ECM ${ECM_VERSION} found, installing clang-format git hook") include(KDEGitCommitHooks) kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT) else() message(WARNING "ECM ${ECM_VERSION} too old, cannot install clang-format git hook") endif() feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES INCLUDE_QUIET_PACKAGES)