~lubuntu-dev/lxde/liblxqt-ubuntu-tmp

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