fb1ddac6760f0093b4447bf1772c585ba06d779f
[lxde/liblxqt.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8.9)
2
3 project(liblxqt)
4
5 set(LXQT_MAJOR_VERSION 0)
6 set(LXQT_MINOR_VERSION 7)
7 set(LXQT_PATCH_VERSION 0)
8
9 # Set default installation paths
10 set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries")
11 set(LXQT_PKG_CONFIG_DESCRIPTION "Shared library for LXQt applications")
12
13 set(PUB_HDRS
14     aboutdialog/lxqtaboutdialog.h
15     lxqtsettings.h
16     lxqtxfitman.h
17     lxqtplugininfo.h
18     lxqtpowermanager.h
19     addplugindialog/lxqtaddplugindialog.h
20     lxqtscreensaver.h
21     lxqtapplication.h
22     lxqttranslator.h
23     lxqtprogramfinder.h
24
25     configdialog/lxqtconfigdialog.h
26     configdialog/lxqtpageselectwidget.h
27
28     lxqtpower/lxqtpower.h
29     lxqtnotification.h
30     lxqtautostartentry.h
31     lxqtgridlayout.h
32     lxqtrotatedwidget.h
33     lxqtglobals.h
34 )
35
36 set(PUBLIC_CLASSES
37     AboutDialog
38     Settings
39     XfitMan
40     PluginInfo
41     PowerManager
42     AddPluginDialog
43     ScreenSaver
44     Application
45     Translator
46     ProgramFinder
47
48     ConfigDialog
49     PageSelectWidget
50
51     Power
52     Notification
53     AutostartEntry
54     GridLayout
55     RotatedWidget
56 )
57
58 set(PRIV_HDRS
59     aboutdialog/lxqtaboutdialog_p.h
60     aboutdialog/technicalinfo.h
61     translatorsinfo/translatorsinfo.h
62 )
63
64 set(SRCS
65     aboutdialog/lxqtaboutdialog.cpp
66     aboutdialog/technicalinfo.cpp
67     lxqtxfitman.cpp
68     lxqtplugininfo.cpp
69     lxqtpowermanager.cpp
70     addplugindialog/lxqtaddplugindialog.cpp
71     lxqtsettings.cpp
72     lxqtscreensaver.cpp
73     lxqtapplication.cpp
74     lxqttranslator.cpp
75     lxqtprogramfinder.cpp
76
77     configdialog/lxqtconfigdialog.cpp
78     configdialog/lxqtpageselectwidget.cpp
79
80     lxqtpower/lxqtpower.cpp
81     lxqtpower/lxqtpowerproviders.cpp
82     lxqtnotification.cpp
83     lxqtautostartentry.cpp
84     translatorsinfo/translatorsinfo.cpp
85     lxqtgridlayout.cpp
86     lxqtrotatedwidget.cpp
87 )
88
89 set(MOCS
90     aboutdialog/lxqtaboutdialog.h
91     aboutdialog/lxqtaboutdialog_p.h
92     lxqtpowermanager.h
93     addplugindialog/lxqtaddplugindialog.h
94     lxqtsettings.h
95     lxqtscreensaver.h
96     lxqtapplication.h
97
98     configdialog/lxqtconfigdialog.h
99     configdialog/lxqtpageselectwidget.h
100
101     lxqtnotification.h
102     lxqtnotification_p.h
103     lxqtpower/lxqtpower.h
104     lxqtpower/lxqtpowerproviders.h
105     lxqtgridlayout.h
106     lxqtrotatedwidget.h
107 )
108
109 set(FORMS
110     aboutdialog/lxqtaboutdialog.ui
111     configdialog/lxqtconfigdialog.ui
112     addplugindialog/lxqtaddplugindialog.ui
113 )
114
115 file(GLOB TS_FILES
116     ${CMAKE_CURRENT_SOURCE_DIR}/translations/liblxqt_*.ts
117 )
118
119 # additional cmake files
120 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
121
122
123 option(USE_QT5 "Force use the Qt5." $ENV{USE_QT5})
124 option(USE_QT4 "Force use the Qt4." $ENV{USE_QT4})
125
126 if((USE_QT4 AND USE_QT5) OR
127    (NOT USE_QT4 AND NOT USE_QT5))
128
129     # Autodetect Qt version
130     find_package(Qt4 QUIET)
131     if (QT4_FOUND)
132         set(USE_QT4 ON)
133         set(USE_QT5 OFF)
134     else()
135         set(USE_QT4 OFF)
136         set(USE_QT5 ON)
137     endif()
138 endif()
139
140 set(CMAKE_INCLUDE_CURRENT_DIR ON)
141 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
142
143 if(USE_QT5)
144     set(CMAKE_AUTOMOC ON)
145     find_package(Qt5Widgets REQUIRED QUIET)
146     find_package(Qt5DBus REQUIRED QUIET)
147     find_package(Qt5X11Extras REQUIRED QUIET)
148     find_package(Qt5LinguistTools REQUIRED QUIET)
149     find_package(Qt5Xdg REQUIRED)
150     message(STATUS "Building with Qt ${Qt5Core_VERSION_STRING}")
151
152     QT5_WRAP_UI(UIS ${FORMS})
153     QT5_ADD_TRANSLATION(QM_FILES ${TS_FILES})
154     QT5_ADD_DBUS_INTERFACE(SRCS
155         dbus/org.freedesktop.Notifications.xml
156         notifications_interface
157     )
158
159     set(LXQT_QT_VERSION "5")
160     set(LXQT_QT_VERSION_SUFFIX "-qt5")
161     set(LXQT_PKG_CONFIG_REQUIRES "Qt5Widgets Qt5Xml Qt5DBus Qt5X11Extras")
162 else()
163     find_package(Qt4 REQUIRED QtCore QtGui QUIET)
164     find_package(qtxdg REQUIRED)
165     message(STATUS "Building with Qt ${QTVERSION}")
166
167     include(${QT_USE_FILE})
168
169     QT4_WRAP_CPP(MOCS ${MOCS})
170     QT4_WRAP_UI(UIS ${FORMS})
171     QT4_ADD_TRANSLATION(QM_FILES ${TS_FILES})
172     QT4_ADD_DBUS_INTERFACE(SRCS
173         dbus/org.freedesktop.Notifications.xml
174         notifications_interface
175     )
176
177     set(LXQT_QT_VERSION "4")
178     set(LXQT_QT_VERSION_SUFFIX "")
179     set(LXQT_PKG_CONFIG_REQUIRES "QtCore, QtXml")
180 endif()
181
182 include(${QTXDG_USE_FILE})
183
184 find_package(X11 REQUIRED QUIET)
185
186 include_directories (
187     ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
188     ${X11_INCLUDE_DIR}
189     ${QTXDG_INCLUDE_DIRS}
190 )
191
192 if (NOT USE_QT5)
193     include_directories (
194         ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTDBUS_INCLUDE_DIR}
195     )
196 endif()
197
198 # Standard directories for installation
199 include(GNUInstallDirs)
200
201 set(LXQT_VERSION ${LXQT_MAJOR_VERSION}.${LXQT_MINOR_VERSION}.${LXQT_PATCH_VERSION})
202 set(LXQT_LIBRARY_NAME "lxqt${LXQT_QT_VERSION_SUFFIX}")
203 set(LXQT_SHARE_DIR ${CMAKE_INSTALL_PREFIX}/share/${LXQT_LIBRARY_NAME})
204 set(LXQT_TRANSLATIONS_DIR ${LXQT_SHARE_DIR}/translations)
205
206 set(LXQT_INTREE_INCLUDE_DIR     ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include)
207 set(LXQT_INTREE_TARGETS_FILE    ${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}-targets.cmake)
208
209 set(LXQT_INSTALL_INCLUDE_DIR   ${CMAKE_INSTALL_FULL_INCLUDEDIR}/${LXQT_LIBRARY_NAME})
210 set(LXQT_INSTALL_CMAKE_DIR     ${CMAKE_INSTALL_PREFIX}/share/cmake)
211
212 include(cmake/FindInstallConfigPath.cmake)
213 include(create_portable_headers)
214
215 message(STATUS "")
216 message(STATUS "liblxqt version: ${LXQT_VERSION}")
217 message(STATUS "")
218
219
220 # Copy public headers
221 foreach(h ${PUB_HDRS})
222     get_filename_component(bh ${h} NAME)
223     configure_file(${h} ${LXQT_INTREE_INCLUDE_DIR}/LXQt/${bh} COPYONLY)
224     configure_file(${h} ${LXQT_INTREE_INCLUDE_DIR}/lxqt/${bh} COPYONLY)
225 endforeach()
226
227 # Create the portable headers
228 create_portable_headers(INTREE_PORTABLE_HEADERS ${LXQT_INTREE_INCLUDE_DIR}/LXQt ${PUBLIC_CLASSES})
229 check_portable_headers(H_FILES ${PUB_HDRS} LINKS ${INTREE_PORTABLE_HEADERS})
230
231 #************************************************
232 # Create in-tree build infrastructure
233 #************************************************
234 set(CFG_LXQT_INCLUDE_DIR    ${LXQT_INTREE_INCLUDE_DIR})
235 set(CFG_LXQT_LIBRARY        ${LXQT_LIBRARY_NAME})
236 set(CFG_LXQT_USE_FILE       ${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}_use.cmake)
237 set(CFG_LXQT_TARGETS_FILE   ${LXQT_INTREE_TARGETS_FILE})
238
239 configure_file(
240     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/lxqtX-config.cmake.in 
241     ${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}-config.cmake
242     @ONLY
243 )
244
245 configure_file(
246     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/lxqt_use.cmake.in
247     ${CMAKE_BINARY_DIR}/${LXQT_LIBRARY_NAME}_use.cmake
248     @ONLY
249 )
250
251 include(${CFG_LXQT_USE_FILE})
252
253
254 #************************************************
255 # Create instalable build infrastructure
256 #************************************************
257 set(CFG_LXQT_INCLUDE_DIR    ${LXQT_INSTALL_INCLUDE_DIR})
258 set(CFG_LXQT_LIBRARY        ${LXQT_LIBRARY_NAME})
259 set(CFG_LXQT_USE_FILE       ${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}/${LXQT_LIBRARY_NAME}_use.cmake)
260 set(CFG_LXQT_TARGETS_FILE   ${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}/${LXQT_LIBRARY_NAME}-targets.cmake)
261
262 configure_file(
263     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/lxqtX-config.cmake.in 
264     ${CMAKE_CURRENT_BINARY_DIR}/install/${LXQT_LIBRARY_NAME}-config.cmake
265     @ONLY
266 )
267
268 # use gcc visibility feature to decrease unnecessary exported symbols
269 if (CMAKE_COMPILER_IS_GNUCXX)
270     # set visibility to hidden to hide symbols, unlesss they're exporeted
271     # manually in the code
272     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wl,-no-undefined -Wall")
273 endif()
274 add_definitions(-DCOMPILE_LIBLXQT)
275
276
277 configure_file(
278     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/lxqt_use.cmake.in
279     ${CMAKE_CURRENT_BINARY_DIR}/install/${LXQT_LIBRARY_NAME}_use.cmake
280     @ONLY
281 )
282
283 install(FILES 
284     ${CMAKE_CURRENT_BINARY_DIR}/install/${LXQT_LIBRARY_NAME}-config.cmake
285     ${CMAKE_CURRENT_BINARY_DIR}/install/${LXQT_LIBRARY_NAME}_use.cmake
286     DESTINATION ${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}
287     COMPONENT Devel
288 )
289
290 install(EXPORT 
291     ${LXQT_LIBRARY_NAME}-targets
292     DESTINATION ${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}
293     COMPONENT Devel
294 )
295
296
297 include(translatorsinfo/CMakeLists.txt)
298 get_translatorsinfo_qrc(translatorsinfo_qrc)
299 if(USE_QT5)
300     qt5_add_resources(QRC_CXX_SOURCES ${translatorsinfo_qrc})
301 else()
302     qt4_add_resources(QRC_CXX_SOURCES ${translatorsinfo_qrc})
303 endif()
304
305 add_library(${LXQT_LIBRARY_NAME}
306     SHARED ${PUB_HDRS}
307            ${PRIV_HDRS}
308            ${SRCS}
309            ${dbus_generated}
310            ${UIS} ${MOCS}
311            ${QM_FILES}
312            ${QRC_CXX_SOURCES}
313            
314 )
315
316 if (USE_QT5)
317         qt5_use_modules(${LXQT_LIBRARY_NAME} Widgets DBus X11Extras)
318     target_link_libraries(${LXQT_LIBRARY_NAME}
319         ${X11_X11_LIB}
320         ${QTXDG_LIBRARIES}
321     )
322 else()
323     target_link_libraries(${LXQT_LIBRARY_NAME}
324         ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}
325         ${QT_QTDBUS_LIBRARY}
326         ${X11_X11_LIB}
327         ${QTXDG_LIBRARIES}
328     )
329 endif()
330
331 set_target_properties(${LXQT_LIBRARY_NAME} PROPERTIES
332     VERSION   ${LXQT_VERSION}
333     SOVERSION ${LXQT_MAJOR_VERSION}
334 )
335
336 install(TARGETS 
337     ${LXQT_LIBRARY_NAME} 
338     DESTINATION ${CMAKE_INSTALL_LIBDIR} 
339     EXPORT ${LXQT_LIBRARY_NAME}-targets
340     LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}
341 )
342
343
344 export(TARGETS ${LXQT_LIBRARY_NAME} ${QTXDG_TARGET} FILE ${LXQT_INTREE_TARGETS_FILE})
345
346 install(FILES ${PUB_HDRS}                DESTINATION ${LXQT_INSTALL_INCLUDE_DIR}/LXQt)
347 install(FILES ${INTREE_PORTABLE_HEADERS} DESTINATION ${LXQT_INSTALL_INCLUDE_DIR}/LXQt)
348
349 install(FILES ${QM_FILES} DESTINATION ${LXQT_TRANSLATIONS_DIR})
350
351 #************************************************
352 # Create pkgconfig file
353 #************************************************
354 lxqt_create_pkgconfig_file(${LXQT_LIBRARY_NAME}
355     ${LXQT_PKG_CONFIG_DESCRIPTION}
356     ${LXQT_PKG_CONFIG_REQUIRES}
357     ${LXQT_LIBRARY_NAME}
358     ${LXQT_VERSION}
359 )
360 #************************************************
361
362 # building tarball with CPack -------------------------------------------------
363 include (InstallRequiredSystemLibraries)
364 set (CPACK_PACKAGE_VERSION_MAJOR ${LXQT_MAJOR_VERSION})
365 set (CPACK_PACKAGE_VERSION_MINOR ${LXQT_MINOR_VERSION})
366 set (CPACK_PACKAGE_VERSION_PATCH ${LXQT_PATCH_VERSION})
367 set (CPACK_GENERATOR TBZ2)
368 set (CPACK_SOURCE_GENERATOR TBZ2)
369 set (CPACK_SOURCE_IGNORE_FILES /build/;.gitignore;.*~;.git;.kdev4;temp)
370 include (CPack)