1
by Andrew Lee (李健秋)
Import upstream version 0.9.0+20150806 |
1 |
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) |
2 |
||
3 |
project(liblxqt) |
|
4 |
||
5 |
set(LXQT_MAJOR_VERSION 0) |
|
6 |
set(LXQT_MINOR_VERSION 9) |
|
7 |
set(LXQT_PATCH_VERSION 0) |
|
8 |
||
9 |
include(CMakePackageConfigHelpers) |
|
10 |
include(GNUInstallDirs) # Standard directories for installation |
|
11 |
||
12 |
#-----------------------------------------------------------------------------
|
|
13 |
# LXQT_DATA_DIR defaults to CMAKE_INSTALL_FULL_DATADIR. It's added to
|
|
14 |
# XDG_DATA_DIRS by the startlxqt script
|
|
15 |
# Warning: Setting LXQT_DATA_DIR must be done after including GNUInstallDirs
|
|
16 |
#-----------------------------------------------------------------------------
|
|
17 |
if (NOT DEFINED LXQT_DATA_DIR) |
|
18 |
set(LXQT_DATA_DIR "${CMAKE_INSTALL_FULL_DATADIR}" CACHE PATH |
|
19 |
"LXQt base directory relative to which data files should be searched"
|
|
20 |
)
|
|
21 |
endif() |
|
22 |
||
23 |
#-----------------------------------------------------------------------------
|
|
24 |
# Release is the default build type
|
|
25 |
#-----------------------------------------------------------------------------
|
|
26 |
if (NOT CMAKE_BUILD_TYPE) |
|
27 |
set(CMAKE_BUILD_TYPE Release) |
|
28 |
endif() |
|
29 |
||
30 |
set(LXQT_PKG_CONFIG_DESCRIPTION "Shared library for LXQt applications") |
|
31 |
||
32 |
set(PUB_HDRS |
|
33 |
lxqthtmldelegate.h
|
|
34 |
lxqtsettings.h
|
|
35 |
lxqtplugininfo.h
|
|
36 |
lxqtpowermanager.h
|
|
37 |
lxqtscreensaver.h
|
|
38 |
lxqtapplication.h
|
|
39 |
lxqtsingleapplication.h
|
|
40 |
lxqttranslator.h
|
|
41 |
lxqtprogramfinder.h
|
|
42 |
||
43 |
configdialog/lxqtconfigdialog.h
|
|
44 |
configdialog/lxqtpageselectwidget.h
|
|
45 |
||
46 |
lxqtpower/lxqtpower.h
|
|
47 |
lxqtnotification.h
|
|
48 |
lxqtautostartentry.h
|
|
49 |
lxqtgridlayout.h
|
|
50 |
lxqtrotatedwidget.h
|
|
51 |
lxqtglobals.h
|
|
52 |
)
|
|
53 |
||
54 |
set(PUBLIC_CLASSES |
|
55 |
HtmlDelegate
|
|
56 |
Settings
|
|
57 |
PluginInfo
|
|
58 |
PowerManager
|
|
59 |
ScreenSaver
|
|
60 |
Application
|
|
61 |
SingleApplication
|
|
62 |
Translator
|
|
63 |
ProgramFinder
|
|
64 |
||
65 |
ConfigDialog
|
|
66 |
PageSelectWidget
|
|
67 |
||
68 |
Power
|
|
69 |
Notification
|
|
70 |
AutostartEntry
|
|
71 |
GridLayout
|
|
72 |
RotatedWidget
|
|
73 |
)
|
|
74 |
||
75 |
set(SRCS |
|
76 |
lxqthtmldelegate.cpp
|
|
77 |
lxqtplugininfo.cpp
|
|
78 |
lxqtpowermanager.cpp
|
|
79 |
lxqtsettings.cpp
|
|
80 |
lxqtscreensaver.cpp
|
|
81 |
lxqtapplication.cpp
|
|
82 |
lxqtsingleapplication.cpp
|
|
83 |
lxqttranslator.cpp
|
|
84 |
lxqtprogramfinder.cpp
|
|
85 |
||
86 |
configdialog/lxqtconfigdialog.cpp
|
|
87 |
configdialog/lxqtpageselectwidget.cpp
|
|
88 |
||
89 |
lxqtpower/lxqtpower.cpp
|
|
90 |
lxqtpower/lxqtpowerproviders.cpp
|
|
91 |
lxqtautostartentry.cpp
|
|
92 |
lxqtnotification.cpp
|
|
93 |
lxqtgridlayout.cpp
|
|
94 |
lxqtrotatedwidget.cpp
|
|
95 |
)
|
|
96 |
||
97 |
set(MOCS |
|
98 |
lxqthtmldelegate.h
|
|
99 |
lxqtpowermanager.h
|
|
100 |
lxqtsettings.h
|
|
101 |
lxqtscreensaver.h
|
|
102 |
lxqtapplication.h
|
|
103 |
||
104 |
configdialog/lxqtconfigdialog.h
|
|
105 |
configdialog/lxqtpageselectwidget.h
|
|
106 |
||
107 |
lxqtnotification.h
|
|
108 |
lxqtnotification_p.h
|
|
109 |
lxqtpower/lxqtpower.h
|
|
110 |
lxqtpower/lxqtpowerproviders.h
|
|
111 |
lxqtgridlayout.h
|
|
112 |
lxqtrotatedwidget.h
|
|
113 |
)
|
|
114 |
||
115 |
set(FORMS |
|
116 |
configdialog/lxqtconfigdialog.ui
|
|
117 |
)
|
|
118 |
||
119 |
# additional cmake files
|
|
120 |
list(APPEND CMAKE_MODULE_PATH |
|
121 |
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
|
|
122 |
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
|
|
123 |
)
|
|
124 |
||
125 |
option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF) |
|
126 |
||
127 |
set(CMAKE_INCLUDE_CURRENT_DIR ON) |
|
128 |
set(CMAKE_POSITION_INDEPENDENT_CODE ON) |
|
129 |
||
130 |
set(CMAKE_AUTOMOC ON) |
|
131 |
set(CMAKE_AUTOUIC ON) |
|
132 |
||
133 |
find_package(Qt5Widgets REQUIRED QUIET) |
|
134 |
find_package(Qt5DBus REQUIRED QUIET) |
|
135 |
find_package(Qt5X11Extras REQUIRED QUIET) |
|
136 |
find_package(Qt5LinguistTools REQUIRED QUIET) |
|
137 |
find_package(Qt5Xdg REQUIRED QUIET) |
|
138 |
find_package(KF5WindowSystem REQUIRED QUIET) |
|
139 |
message(STATUS "Building with Qt ${Qt5Core_VERSION_STRING}") |
|
140 |
||
141 |
QT5_ADD_DBUS_INTERFACE(SRCS |
|
142 |
dbus/org.freedesktop.Notifications.xml
|
|
143 |
notifications_interface
|
|
144 |
)
|
|
145 |
||
146 |
QT5_ADD_DBUS_ADAPTOR(SRCS |
|
147 |
dbus/org.lxqt.SingleApplication.xml
|
|
148 |
lxqtsingleapplication.h LxQt::SingleApplication |
|
149 |
)
|
|
150 |
||
151 |
set(LXQT_QT_VERSION "5") |
|
152 |
||
153 |
# KF5WindowSystem is missing here. KF5WindowSystem doesn't provide an .pc file.
|
|
154 |
set(LXQT_PKG_CONFIG_REQUIRES "Qt5Xdg >= 1.2.0, Qt5Widgets, Qt5Xml, Qt5DBus, Qt5X11Extras") |
|
155 |
||
156 |
||
157 |
# Standard directories for installation
|
|
158 |
include(LXQtCompilerSettings NO_POLICY_SCOPE) |
|
159 |
include(LXQtCreatePkgConfigFile) |
|
160 |
include(cmake/FindInstallConfigPath.cmake) # sets LXQT_ETC_XDG_DIR, if unset |
|
161 |
include(create_portable_headers) |
|
162 |
||
163 |
set(LXQT_VERSION ${LXQT_MAJOR_VERSION}.${LXQT_MINOR_VERSION}.${LXQT_PATCH_VERSION}) |
|
164 |
set(LXQT_LIBRARY_NAME "lxqt" CACHE STRING "lxqt") |
|
165 |
set(LXQT_RELATIVE_SHARE_DIR "${LXQT_LIBRARY_NAME}") |
|
166 |
set(LXQT_SHARE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/${LXQT_RELATIVE_SHARE_DIR}") |
|
167 |
set(LXQT_RELATIVE_TRANSLATIONS_DIR "${LXQT_LIBRARY_NAME}/translations") |
|
168 |
set(LXQT_TRANSLATIONS_DIR "${LXQT_SHARE_DIR}/translations") |
|
169 |
||
170 |
set(LXQT_INTREE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include") |
|
171 |
set(LXQT_INTREE_TARGETS_FILE "${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}-targets.cmake") |
|
172 |
||
173 |
set(LXQT_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}/${LXQT_LIBRARY_NAME}") |
|
174 |
set(LXQT_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_PREFIX}/share/cmake") |
|
175 |
||
176 |
||
177 |
## Translations
|
|
178 |
include(LXQtTranslateTs) |
|
179 |
||
180 |
lxqt_translate_ts(QM_FILES |
|
181 |
UPDATE_TRANSLATIONS
|
|
182 |
${UPDATE_TRANSLATIONS} |
|
183 |
SOURCES
|
|
184 |
${SRCS} |
|
185 |
${FORMS} |
|
186 |
INSTALL_DIR
|
|
187 |
"${LXQT_TRANSLATIONS_DIR}/${PROJECT_NAME}"
|
|
188 |
)
|
|
189 |
||
190 |
message(STATUS "") |
|
191 |
message(STATUS "liblxqt version: ${LXQT_VERSION}") |
|
192 |
message(STATUS "") |
|
193 |
||
194 |
||
195 |
# Copy public headers
|
|
196 |
foreach(h ${PUB_HDRS}) |
|
197 |
get_filename_component(bh ${h} NAME) |
|
198 |
configure_file(${h} "${LXQT_INTREE_INCLUDE_DIR}/LXQt/${bh}" COPYONLY) |
|
199 |
endforeach() |
|
200 |
||
201 |
# Create the portable headers
|
|
202 |
create_portable_headers(INTREE_PORTABLE_HEADERS "${LXQT_INTREE_INCLUDE_DIR}/LXQt" ${PUBLIC_CLASSES}) |
|
203 |
check_portable_headers(H_FILES ${PUB_HDRS} LINKS "${INTREE_PORTABLE_HEADERS}") |
|
204 |
||
205 |
#************************************************
|
|
206 |
# Create in-tree build infrastructure
|
|
207 |
#************************************************
|
|
208 |
set(CFG_LXQT_TARGETS_FILE "${LXQT_INTREE_TARGETS_FILE}") |
|
209 |
set(CFG_LXQT_CMAKE_MODULES_DIR "${PROJECT_SOURCE_DIR}/cmake/modules") |
|
210 |
||
211 |
configure_package_config_file( |
|
212 |
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/lxqt-config.cmake.in"
|
|
213 |
"${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}-config.cmake"
|
|
214 |
INSTALL_DESTINATION "neverland" # required, altough we don't install it |
|
215 |
)
|
|
216 |
||
217 |
#************************************************
|
|
218 |
# Create installable build infrastructure
|
|
219 |
#************************************************
|
|
220 |
set(CFG_LXQT_TARGETS_FILE "${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}/${LXQT_LIBRARY_NAME}-targets.cmake") |
|
221 |
set(CFG_LXQT_CMAKE_MODULES_DIR "${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}/modules") |
|
222 |
||
223 |
configure_package_config_file( |
|
224 |
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/lxqt-config.cmake.in"
|
|
225 |
"${CMAKE_CURRENT_BINARY_DIR}/install/${LXQT_LIBRARY_NAME}-config.cmake"
|
|
226 |
INSTALL_DESTINATION "${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}" |
|
227 |
)
|
|
228 |
||
229 |
write_basic_package_version_file( |
|
230 |
"${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}-config-version.cmake"
|
|
231 |
VERSION ${LXQT_VERSION} |
|
232 |
COMPATIBILITY AnyNewerVersion |
|
233 |
)
|
|
234 |
||
235 |
install(FILES |
|
236 |
"${CMAKE_CURRENT_BINARY_DIR}/install/${LXQT_LIBRARY_NAME}-config.cmake"
|
|
237 |
"${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}-config-version.cmake"
|
|
238 |
DESTINATION "${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}" |
|
239 |
COMPONENT Devel |
|
240 |
)
|
|
241 |
||
242 |
install(EXPORT |
|
243 |
${LXQT_LIBRARY_NAME}-targets |
|
244 |
DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${LXQT_LIBRARY_NAME}" |
|
245 |
COMPONENT Devel |
|
246 |
)
|
|
247 |
||
248 |
file(GLOB toInstallModules |
|
249 |
"${PROJECT_SOURCE_DIR}/cmake/modules/*.cmake"
|
|
250 |
"${PROJECT_SOURCE_DIR}/cmake/modules/*.in"
|
|
251 |
)
|
|
252 |
||
253 |
install( |
|
254 |
FILES ${toInstallModules} |
|
255 |
DESTINATION "${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}/modules" |
|
256 |
COMPONENT Devel |
|
257 |
)
|
|
258 |
||
259 |
add_library(${LXQT_LIBRARY_NAME} |
|
260 |
SHARED ${PUB_HDRS} |
|
261 |
${SRCS} |
|
262 |
${dbus_generated} |
|
263 |
${UIS} ${MOCS} |
|
264 |
${QM_FILES} |
|
265 |
${QRC_CXX_SOURCES} |
|
266 |
||
267 |
)
|
|
268 |
||
269 |
target_link_libraries(${LXQT_LIBRARY_NAME} |
|
270 |
PUBLIC
|
|
271 |
KF5::WindowSystem
|
|
272 |
Qt5::Widgets
|
|
273 |
Qt5::DBus
|
|
274 |
Qt5::X11Extras
|
|
275 |
Qt5Xdg
|
|
276 |
)
|
|
277 |
||
278 |
set_target_properties(${LXQT_LIBRARY_NAME} PROPERTIES |
|
279 |
VERSION ${LXQT_VERSION} |
|
280 |
SOVERSION ${LXQT_MAJOR_VERSION} |
|
281 |
)
|
|
282 |
||
283 |
target_compile_definitions(${LXQT_LIBRARY_NAME} |
|
284 |
PRIVATE "LXQT_RELATIVE_SHARE_DIR=\"${LXQT_RELATIVE_SHARE_DIR}\"" |
|
285 |
PRIVATE "LXQT_SHARE_DIR=\"${LXQT_SHARE_DIR}\"" |
|
286 |
PRIVATE "LXQT_RELATIVE_SHARE_TRANSLATIONS_DIR=\"${LXQT_RELATIVE_TRANSLATIONS_DIR}\"" |
|
287 |
PRIVATE "LXQT_SHARE_TRANSLATIONS_DIR=\"${LXQT_TRANSLATIONS_DIR}\"" |
|
288 |
PRIVATE "LXQT_ETC_XDG_DIR=\"${LXQT_ETC_XDG_DIR}\"" |
|
289 |
PRIVATE "LXQT_DATA_DIR=\"${LXQT_DATA_DIR}\"" |
|
290 |
PRIVATE "LXQT_VERSION=\"${LXQT_VERSION}\"" |
|
291 |
PRIVATE "COMPILE_LIBLXQT" |
|
292 |
)
|
|
293 |
||
294 |
target_compile_definitions(${LXQT_LIBRARY_NAME} |
|
295 |
PRIVATE "$<$<CONFIG:Release>:QT_NO_DEBUG_OUTPUT>" |
|
296 |
PRIVATE "$<$<CONFIG:Release>:QT_NO_WARNING_OUTPUT>" |
|
297 |
)
|
|
298 |
||
299 |
target_include_directories(${LXQT_LIBRARY_NAME} |
|
300 |
INTERFACE "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${LXQT_LIBRARY_NAME}>" |
|
301 |
INTERFACE "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${LXQT_LIBRARY_NAME}/LXQt>" |
|
302 |
)
|
|
303 |
||
304 |
target_include_directories(${LXQT_LIBRARY_NAME} |
|
305 |
INTERFACE "$<BUILD_INTERFACE:${LXQT_INTREE_INCLUDE_DIR}>" |
|
306 |
INTERFACE "$<BUILD_INTERFACE:${LXQT_INTREE_INCLUDE_DIR}/LXQt>" |
|
307 |
)
|
|
308 |
||
309 |
install(TARGETS |
|
310 |
${LXQT_LIBRARY_NAME} |
|
311 |
DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
|
312 |
EXPORT ${LXQT_LIBRARY_NAME}-targets |
|
313 |
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
|
314 |
COMPONENT Runtime |
|
315 |
)
|
|
316 |
||
317 |
export(TARGETS ${LXQT_LIBRARY_NAME} |
|
318 |
APPEND FILE "${LXQT_INTREE_TARGETS_FILE}" |
|
319 |
EXPORT_LINK_INTERFACE_LIBRARIES
|
|
320 |
)
|
|
321 |
||
322 |
install(FILES |
|
323 |
${PUB_HDRS} |
|
324 |
DESTINATION "${LXQT_INSTALL_INCLUDE_DIR}/LXQt" |
|
325 |
COMPONENT Devel |
|
326 |
)
|
|
327 |
||
328 |
install(FILES |
|
329 |
${INTREE_PORTABLE_HEADERS} |
|
330 |
DESTINATION "${LXQT_INSTALL_INCLUDE_DIR}/LXQt" |
|
331 |
COMPONENT Devel |
|
332 |
)
|
|
333 |
||
334 |
#************************************************
|
|
335 |
# Create and install pkgconfig file
|
|
336 |
#************************************************
|
|
337 |
lxqt_create_pkgconfig_file( |
|
338 |
PACKAGE_NAME ${LXQT_LIBRARY_NAME} |
|
339 |
DESCRIPTIVE_NAME ${LXQT_LIBRARY_NAME} |
|
340 |
DESCRIPTION ${LXQT_PKG_CONFIG_DESCRIPTION} |
|
341 |
INCLUDEDIRS ${LXQT_LIBRARY_NAME} |
|
342 |
LIBS ${LXQT_LIBRARY_NAME} |
|
343 |
REQUIRES ${LXQT_PKG_CONFIG_REQUIRES} |
|
344 |
VERSION ${LXQT_VERSION} |
|
345 |
INSTALL
|
|
346 |
)
|
|
347 |
#************************************************
|
|
348 |
||
349 |
||
350 |
# building tarball with CPack -------------------------------------------------
|
|
351 |
include(InstallRequiredSystemLibraries) |
|
352 |
set(CPACK_PACKAGE_VERSION_MAJOR ${LXQT_MAJOR_VERSION}) |
|
353 |
set(CPACK_PACKAGE_VERSION_MINOR ${LXQT_MINOR_VERSION}) |
|
354 |
set(CPACK_PACKAGE_VERSION_PATCH ${LXQT_PATCH_VERSION}) |
|
355 |
set(CPACK_GENERATOR TBZ2) |
|
356 |
set(CPACK_SOURCE_GENERATOR TBZ2) |
|
357 |
set(CPACK_SOURCE_IGNORE_FILES /build/;.gitignore;.*~;.git;.kdev4;temp) |
|
358 |
include(CPack) |
|
359 |