]> cloud.milkyroute.net Git - dolphin.git/blob - CMakeLists.txt
Switch to C++20
[dolphin.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.16)
2
3 # KDE Application Version, managed by release script
4 set (RELEASE_SERVICE_VERSION_MAJOR "25")
5 set (RELEASE_SERVICE_VERSION_MINOR "03")
6 set (RELEASE_SERVICE_VERSION_MICRO "70")
7 set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
8 project(Dolphin VERSION ${RELEASE_SERVICE_VERSION})
9
10 set(QT_MIN_VERSION "6.4.0")
11 set(KF6_MIN_VERSION "6.2.0")
12
13 # use C++20 like KF6 itself
14 set(CMAKE_CXX_STANDARD 20)
15 set(CMAKE_CXX_EXTENSIONS OFF)
16 set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
17
18 # ECM setup
19 find_package(ECM ${KF6_MIN_VERSION} CONFIG REQUIRED)
20 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
21
22 include(KDEInstallDirs)
23 include(KDECMakeSettings)
24 include(KDECompilerSettings NO_POLICY_SCOPE)
25
26 include(ECMSetupVersion)
27 include(ECMGenerateHeaders)
28 include(ECMGenerateDBusServiceFile)
29 include(ECMConfiguredInstall)
30 include(CMakePackageConfigHelpers)
31 include(GenerateExportHeader)
32 include(FeatureSummary)
33 include(ECMQtDeclareLoggingCategory)
34 include(ECMDeprecationSettings)
35 include(CheckIncludeFiles)
36 include(CheckLibraryExists)
37 include(CheckFunctionExists)
38
39 ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX DOLPHIN
40 VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/src/dolphin_version.h"
41 )
42
43 ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX DOLPHINVCS
44 VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/dolphinvcs_version.h"
45 PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfigVersion.cmake"
46 SOVERSION 6
47 )
48
49 ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX DOLPHINPRIVATE
50 SOVERSION 6
51 )
52
53 find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
54 Core
55 Concurrent
56 Widgets
57 Gui
58 DBus
59 )
60
61 if (UNIX AND NOT APPLE AND NOT HAIKU)
62 set(HAVE_X11 TRUE)
63 endif()
64
65 find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
66 KCMUtils
67 NewStuff
68 CoreAddons
69 I18n
70 DBusAddons
71 Bookmarks
72 Config
73 KIO
74 Parts
75 Solid
76 IconThemes
77 Completion
78 TextWidgets
79 Notifications
80 Crash
81 WindowSystem
82 WidgetsAddons
83 Codecs
84 GuiAddons
85 )
86
87 find_package(KF6UserFeedback ${KF6_MIN_VERSION})
88 set_package_properties(KF6UserFeedback
89 PROPERTIES TYPE OPTIONAL
90 PURPOSE "Used for submission of telemetry data"
91 )
92
93 if(KF6UserFeedback_FOUND)
94 set(HAVE_KUSERFEEDBACK TRUE)
95 endif()
96
97 find_package(KF6 ${KF6_MIN_VERSION} OPTIONAL_COMPONENTS
98 DocTools
99 )
100
101 find_package(Phonon4Qt6 CONFIG REQUIRED)
102
103 find_package(PackageKitQt6)
104 set_package_properties(PackageKitQt6
105 PROPERTIES DESCRIPTION "Software Manager integration"
106 TYPE RECOMMENDED
107 PURPOSE "Used in the service menu installer"
108 )
109 if(PackageKitQt6_FOUND)
110 set(HAVE_PACKAGEKIT TRUE)
111 endif()
112
113 find_package(KF6FileMetaData ${KF6_MIN_VERSION})
114 set_package_properties(KF6FileMetaData PROPERTIES
115 URL "https://projects.kde.org/kfilemetadata"
116 TYPE REQUIRED
117 PURPOSE "For accessing file metadata labels and filesystem metadata"
118 )
119
120 find_package(KF6Baloo ${KF6_MIN_VERSION})
121 set_package_properties(KF6Baloo PROPERTIES DESCRIPTION "Baloo Core libraries"
122 URL "https://www.kde.org"
123 TYPE OPTIONAL
124 PURPOSE "For adding desktop-wide search and tagging support to dolphin"
125 )
126
127 find_package(KF6BalooWidgets ${RELEASE_SERVICE_VERSION})
128 set_package_properties(KF6BalooWidgets PROPERTIES DESCRIPTION "Baloos Widgets"
129 URL "https://www.kde.org"
130 TYPE OPTIONAL
131 )
132
133 if (KF6Baloo_FOUND AND KF6BalooWidgets_FOUND)
134 message(STATUS "Baloo packages are found")
135 set(HAVE_BALOO TRUE)
136 else()
137 message(WARNING "Baloo packages not found. They are needed for the metadata features of Dolphin (including the information panel).")
138 endif()
139
140 # TODO: drop HAVE_TERMINAL once we are sure the terminal panel works on Windows too.
141 if(WIN32)
142 set(HAVE_TERMINAL FALSE)
143 else()
144 set(HAVE_TERMINAL TRUE)
145 endif()
146
147 # Compatibility with platforms without native fts (e.g. musl)
148 check_include_files("sys/types.h;sys/stat.h;fts.h" HAVE_FTS_H)
149 if(HAVE_FTS_H AND NOT HAIKU)
150 check_function_exists(fts_open HAVE_FTS_OPEN)
151 if(NOT HAVE_FTS_OPEN)
152 check_library_exists(fts fts_open "" HAVE_LIB_FTS)
153 endif()
154 endif()
155
156 if(HAVE_LIB_FTS)
157 set(FTS_LIB fts)
158 else()
159 set(FTS_LIB "")
160 endif()
161
162 add_subdirectory(src)
163 add_subdirectory(doc)
164 add_subdirectory(appiumtests)
165
166 # CMake files
167 set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/DolphinVcs")
168
169 configure_package_config_file(
170 "${CMAKE_CURRENT_SOURCE_DIR}/DolphinVcsConfig.cmake.in"
171 "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfig.cmake"
172 INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
173 )
174
175 install(FILES
176 "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfig.cmake"
177 "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfigVersion.cmake"
178 DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
179 COMPONENT Devel
180 )
181
182 install(EXPORT DolphinVcsTargets
183 DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
184 FILE DolphinVcsTargets.cmake
185 )
186
187 install(FILES
188 "${CMAKE_CURRENT_BINARY_DIR}/dolphinvcs_version.h"
189 DESTINATION "${KDE_INSTALL_INCLUDEDIR}/Dolphin"
190 COMPONENT Devel
191 )
192
193 if(FLATPAK)
194 ecm_generate_dbus_service_file(
195 NAME org.freedesktop.FileManager1
196 EXECUTABLE "${KDE_INSTALL_FULL_BINDIR}/dolphin --daemon"
197 SYSTEMD_SERVICE plasma-dolphin.service
198 DESTINATION ${KDE_INSTALL_DBUSSERVICEDIR}
199 )
200 else()
201 ecm_generate_dbus_service_file(
202 NAME org.freedesktop.FileManager1
203 EXECUTABLE "${KDE_INSTALL_FULL_BINDIR}/dolphin --daemon"
204 SYSTEMD_SERVICE plasma-dolphin.service
205 DESTINATION ${KDE_INSTALL_DBUSSERVICEDIR}
206 RENAME org.kde.dolphin.FileManager1.service
207 )
208 endif()
209
210 ecm_install_configured_files(INPUT plasma-dolphin.service.in DESTINATION ${KDE_INSTALL_SYSTEMDUSERUNITDIR})
211
212 ecm_qt_install_logging_categories(
213 EXPORT DOLPHIN
214 FILE dolphin.categories
215 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
216 )
217
218 ki18n_install(po)
219 if(KF6DocTools_FOUND)
220 kdoctools_install(po)
221 endif()
222
223 install(FILES completions/dolphin.zsh RENAME _dolphin DESTINATION ${KDE_INSTALL_ZSHAUTOCOMPLETEDIR})
224
225 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
226
227 include(KDEClangFormat)
228 # add clang-format target
229 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c)
230 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
231
232 include(KDEGitCommitHooks)
233 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)