]> cloud.milkyroute.net Git - dolphin.git/blob - CMakeLists.txt
GIT_SILENT Sync po/docbooks with svn
[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 "07")
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.9.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 (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0")
62 find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
63 endif()
64
65 if (UNIX AND NOT APPLE AND NOT HAIKU)
66 set(HAVE_X11 TRUE)
67 endif()
68
69 find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
70 KCMUtils
71 NewStuff
72 CoreAddons
73 I18n
74 DBusAddons
75 Bookmarks
76 Config
77 KIO
78 Parts
79 Solid
80 IconThemes
81 Completion
82 TextWidgets
83 Notifications
84 Crash
85 WindowSystem
86 WidgetsAddons
87 Codecs
88 GuiAddons
89 )
90
91 find_package(KF6UserFeedback ${KF6_MIN_VERSION})
92 set_package_properties(KF6UserFeedback
93 PROPERTIES TYPE OPTIONAL
94 PURPOSE "Used for submission of telemetry data"
95 )
96
97 if(KF6UserFeedback_FOUND)
98 set(HAVE_KUSERFEEDBACK TRUE)
99 endif()
100
101 find_package(KF6 ${KF6_MIN_VERSION} OPTIONAL_COMPONENTS
102 DocTools
103 )
104
105 find_package(Phonon4Qt6 CONFIG REQUIRED)
106
107 find_package(PackageKitQt6)
108 set_package_properties(PackageKitQt6
109 PROPERTIES DESCRIPTION "Software Manager integration"
110 TYPE RECOMMENDED
111 PURPOSE "Used in the service menu installer"
112 )
113 if(PackageKitQt6_FOUND)
114 set(HAVE_PACKAGEKIT TRUE)
115 endif()
116
117 find_package(KF6FileMetaData ${KF6_MIN_VERSION})
118 set_package_properties(KF6FileMetaData PROPERTIES
119 URL "https://projects.kde.org/kfilemetadata"
120 TYPE REQUIRED
121 PURPOSE "For accessing file metadata labels and filesystem metadata"
122 )
123
124 find_package(KF6Baloo ${KF6_MIN_VERSION})
125 set_package_properties(KF6Baloo PROPERTIES DESCRIPTION "Baloo Core libraries"
126 URL "https://www.kde.org"
127 TYPE OPTIONAL
128 PURPOSE "For adding desktop-wide search and tagging support to dolphin"
129 )
130
131 find_package(KF6BalooWidgets ${RELEASE_SERVICE_VERSION})
132 set_package_properties(KF6BalooWidgets PROPERTIES DESCRIPTION "Baloos Widgets"
133 URL "https://www.kde.org"
134 TYPE OPTIONAL
135 )
136
137 if (KF6Baloo_FOUND AND KF6BalooWidgets_FOUND)
138 message(STATUS "Baloo packages are found")
139 set(HAVE_BALOO TRUE)
140 else()
141 message(WARNING "Baloo packages not found. They are needed for the metadata features of Dolphin (including the information panel).")
142 endif()
143
144 # TODO: drop HAVE_TERMINAL once we are sure the terminal panel works on Windows too.
145 if(WIN32)
146 set(HAVE_TERMINAL FALSE)
147 else()
148 set(HAVE_TERMINAL TRUE)
149 endif()
150
151 # Compatibility with platforms without native fts (e.g. musl)
152 check_include_files("sys/types.h;sys/stat.h;fts.h" HAVE_FTS_H)
153 if(HAVE_FTS_H AND NOT HAIKU)
154 check_function_exists(fts_open HAVE_FTS_OPEN)
155 if(NOT HAVE_FTS_OPEN)
156 check_library_exists(fts fts_open "" HAVE_LIB_FTS)
157 endif()
158 endif()
159
160 if(HAVE_LIB_FTS)
161 set(FTS_LIB fts)
162 else()
163 set(FTS_LIB "")
164 endif()
165
166 add_subdirectory(src)
167 add_subdirectory(doc)
168 add_subdirectory(appiumtests)
169
170 # CMake files
171 set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/DolphinVcs")
172
173 configure_package_config_file(
174 "${CMAKE_CURRENT_SOURCE_DIR}/DolphinVcsConfig.cmake.in"
175 "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfig.cmake"
176 INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
177 )
178
179 install(FILES
180 "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfig.cmake"
181 "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfigVersion.cmake"
182 DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
183 COMPONENT Devel
184 )
185
186 install(EXPORT DolphinVcsTargets
187 DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
188 FILE DolphinVcsTargets.cmake
189 )
190
191 install(FILES
192 "${CMAKE_CURRENT_BINARY_DIR}/dolphinvcs_version.h"
193 DESTINATION "${KDE_INSTALL_INCLUDEDIR}/Dolphin"
194 COMPONENT Devel
195 )
196
197 if(FLATPAK)
198 ecm_generate_dbus_service_file(
199 NAME org.freedesktop.FileManager1
200 EXECUTABLE "${KDE_INSTALL_FULL_BINDIR}/dolphin --daemon"
201 SYSTEMD_SERVICE plasma-dolphin.service
202 DESTINATION ${KDE_INSTALL_DBUSSERVICEDIR}
203 )
204 else()
205 ecm_generate_dbus_service_file(
206 NAME org.freedesktop.FileManager1
207 EXECUTABLE "${KDE_INSTALL_FULL_BINDIR}/dolphin --daemon"
208 SYSTEMD_SERVICE plasma-dolphin.service
209 DESTINATION ${KDE_INSTALL_DBUSSERVICEDIR}
210 RENAME org.kde.dolphin.FileManager1.service
211 )
212 endif()
213
214 ecm_install_configured_files(INPUT plasma-dolphin.service.in DESTINATION ${KDE_INSTALL_SYSTEMDUSERUNITDIR})
215
216 ecm_qt_install_logging_categories(
217 EXPORT DOLPHIN
218 FILE dolphin.categories
219 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
220 )
221
222 ki18n_install(po)
223 if(KF6DocTools_FOUND)
224 kdoctools_install(po)
225 endif()
226
227 install(FILES completions/dolphin.zsh RENAME _dolphin DESTINATION ${KDE_INSTALL_ZSHAUTOCOMPLETEDIR})
228
229 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
230
231 include(KDEClangFormat)
232 # add clang-format target
233 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c)
234 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
235
236 include(KDEGitCommitHooks)
237 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)