blob: 6d309c0e5306f05f23e8b4fefb60d57386e8dc86 [file] [log] [blame]
Adrien Beraud25d8c1a2017-04-14 15:35:24 +02001CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -05002
3# First, check is the compiler is new enough, most version of Clang are fine
4# until problems arise, checking for GCC is enough
5IF (CMAKE_COMPILER_IS_GNUCC)
6 EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
7 IF (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
8 MESSAGE(STATUS "Found GCC version >= 4.8: " ${GCC_VERSION})
9 ELSE()
10 MESSAGE(FATAL_ERROR "Your version of GCC is too old, please install GCC 4.8 or later")
11 ENDIF()
12ENDIF()
13
Adrien Beraud25d8c1a2017-04-14 15:35:24 +020014set (CMAKE_CXX_STANDARD 14)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050015
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040016# set project name and version
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050017PROJECT(ring-client-gnome)
Guillaume Roguez45bee9c2016-03-16 22:43:11 -040018SET(PROJECT_VERSION_MAJOR 1)
19SET(PROJECT_VERSION_MINOR 0)
Guillaume Roguez90ee8642015-04-15 15:21:19 -040020SET(PROJECT_VERSION_PATCH 0)
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040021
Guillaume Roguez1af28852016-11-02 19:26:20 -040022# set build date
23IF( NOT ("$ENV{SOURCE_DATE_EPOCH}" STREQUAL ""))
24 EXECUTE_PROCESS(
25 COMMAND date -u -d "1970-01-01 UTC $ENV{SOURCE_DATE_EPOCH} seconds" "+%Y-%m-%d %H:%M:%S UTC"
26 OUTPUT_VARIABLE RING_CLIENT_BUILD_DATE
27 OUTPUT_STRIP_TRAILING_WHITESPACE
28 )
29ELSEIF( "${RING_CLIENT_BUILD_DATE}" STREQUAL "")
30 EXECUTE_PROCESS(
31 COMMAND date -u "+%Y-%m-%d %H:%M:%S UTC"
32 OUTPUT_VARIABLE RING_CLIENT_BUILD_DATE
33 OUTPUT_STRIP_TRAILING_WHITESPACE
34 )
35ENDIF()
36
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040037# add the binary tree to the search path for include files
38# so that we will find config.h
39INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}")
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050040
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -050041LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
42
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -040043# include custom cmake modules
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -050044INCLUDE(${CMAKE_SOURCE_DIR}/cmake/GResources.cmake)
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -040045INCLUDE(${CMAKE_SOURCE_DIR}/cmake/GSettings.cmake)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050046
47# make sure we're using Qt5
48SET(ENABLE_QT5 true)
49
50# for now, set debug as default
51SET(CMAKE_BUILD_TYPE Debug)
52
Stepan Salenikovichdd82f9b2015-09-16 14:04:05 -040053# during packaging the CMAKE_INSTALL_PREFIX is used to specify where to install the files, but it
54# may not be the same as where the package will put them, use RING_INSTALL_PREFIX to let the client
55# know at runtime where to expect installed files to be located
56SET(RING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}
57 CACHE PATH "prefix where the package will be installed on the user's system (eg: /usr/local); defaults to the CMAKE_INSTALL_PREFIX"
58)
59
aviaua06a97e2016-03-18 15:19:02 -040060# Check if LRC's location is manually specified with -DLibRingClient_PROJECT_DIR
61IF(LibRingClient_PROJECT_DIR)
62 SET(LIB_RING_CLIENT_INCLUDE_DIR ${LibRingClient_PROJECT_DIR}/src)
63 # TODO: maybe allow a way to specify a different build dir
64 SET(LIB_RING_LIBRARY_INCLUDE_DIR ${LibRingClient_PROJECT_DIR}/build)
65
66 # check for the existence of the directories;
67 # if the dirs have missing or outdated files then we will just get build/link errors
68 IF(EXISTS "${LIB_RING_CLIENT_INCLUDE_DIR}/")
69 MESSAGE("will expect lrc headers in ${LIB_RING_CLIENT_INCLUDE_DIR}")
70 IF(EXISTS "${LIB_RING_LIBRARY_INCLUDE_DIR}/")
71 MESSAGE("will expect lrc libraries in " ${LIB_RING_LIBRARY_INCLUDE_DIR})
72 SET(LibRingClient_FOUND true)
73 SET(LIB_RING_CLIENT_LIBRARY ringclient)
74 ELSE()
75 MESSAGE( FATAL_ERROR "${LIB_RING_LIBRARY_INCLUDE_DIR} does not exist")
76 ENDIF(EXISTS "${LIB_RING_LIBRARY_INCLUDE_DIR}/")
77 ELSE()
78 MESSAGE( FATAL_ERROR "${LIB_RING_CLIENT_INCLUDE_DIR} does not exist")
79 ENDIF(EXISTS "${LIB_RING_CLIENT_INCLUDE_DIR}/")
80ELSE(LibRingClient_PROJECT_DIR)
81 FIND_PACKAGE(LibRingClient REQUIRED)
82ENDIF(LibRingClient_PROJECT_DIR)
83
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050084# find packages
85FIND_PACKAGE(PkgConfig REQUIRED)
86PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0>=3.10)
Stepan Salenikovich03c42af2016-09-02 17:49:41 -040087PKG_CHECK_MODULES(GLIB REQUIRED glib-2.0>=2.40)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050088FIND_PACKAGE(Qt5Core REQUIRED)
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050089PKG_CHECK_MODULES(CLUTTER REQUIRED clutter-1.0)
90PKG_CHECK_MODULES(CLUTTERGTK REQUIRED clutter-gtk-1.0)
Stepan Salenikovich6f687072015-03-26 10:43:37 -040091PKG_CHECK_MODULES(EBOOK REQUIRED libebook-1.2>=3.10)
Stepan Salenikovich76c33e62015-05-22 12:24:07 -040092PKG_CHECK_MODULES(LIBNOTIFY libnotify>=0.7.6) #optional
Nicolas Jagerec53f022018-01-11 16:28:25 -050093IF( LIBNOTIFY_FOUND )
94 pkg_check_modules(CANBERRA REQUIRED libcanberra-gtk3>=0.25)
95ENDIF()
Stepan Salenikoviche88f6692015-09-10 18:09:38 -040096FIND_PACKAGE(Gettext) #optional for translations
aviaudd355ba2016-04-08 14:23:09 -040097PKG_CHECK_MODULES(LIBQRENCODE libqrencode>=3.4)
Lubomir Rintelabc26c32017-12-19 16:26:45 +010098PKG_CHECK_MODULES(LIBNM libnm>=1.0) #optional to detect changes in the network
aviau59514ed2018-04-19 11:00:37 -040099
100# Both appindicators are optional. ayatana-appindicator is better
101# maintained and it works best across all desktop environments.
102PKG_CHECK_MODULES(APPINDICATOR ayatana-appindicator3-0.1)
103IF( APPINDICATOR_FOUND )
104 SET(HAVE_AYATANAAPPINDICATOR 1)
105 SET(HAVE_APPINDICATOR 1)
106ELSE()
107 PKG_CHECK_MODULES(APPINDICATOR appindicator3-0.1)
108 IF( APPINDICATOR_FOUND )
109 SET(HAVE_AYATANAAPPINDICATOR 0)
110 SET(HAVE_APPINDICATOR 1)
111 ELSE()
112 SET(HAVE_AYATANAAPPINDICATOR 0)
113 SET(HAVE_APPINDICATOR 0)
114 ENDIF()
115ENDIF()
aviaudd355ba2016-04-08 14:23:09 -0400116
aviau039001d2016-09-29 16:39:05 -0400117PKG_CHECK_MODULES(WEBKIT webkit2gtk-4.0)
Stepan Salenikovichb52dbc52016-12-27 14:05:39 -0500118IF(NOT WEBKIT_FOUND)
aviau039001d2016-09-29 16:39:05 -0400119 PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-3.0)
aviau039001d2016-09-29 16:39:05 -0400120ENDIF()
121
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500122# include libs
123INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS})
124INCLUDE_DIRECTORIES(${LIB_RING_CLIENT_INCLUDE_DIR})
Stepan Salenikovichd2dbcee2015-02-27 16:52:28 -0500125INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS} )
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500126INCLUDE_DIRECTORIES(${CLUTTER_INCLUDE_DIRS})
127INCLUDE_DIRECTORIES(${CLUTTERGTK_INCLUDE_DIRS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400128INCLUDE_DIRECTORIES(${EBOOK_INCLUDE_DIRS})
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400129INCLUDE_DIRECTORIES(${LIBNOTIFY_INCLUDE_DIRS})
Stepan Salenikovich982b2882016-06-15 13:13:37 -0400130INCLUDE_DIRECTORIES(${APPINDICATOR_INCLUDE_DIRS})
Stepan Salenikovich472c9052016-07-20 19:16:02 -0400131INCLUDE_DIRECTORIES(${LIBNM_INCLUDE_DIRS})
aviau039001d2016-09-29 16:39:05 -0400132INCLUDE_DIRECTORIES(${WEBKIT_INCLUDE_DIRS})
Nicolas Jager655b8db2017-12-15 14:04:32 -0500133INCLUDE_DIRECTORIES(${CANBERRA_INCLUDE_DIRS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500134
135# link libs
136LINK_DIRECTORIES(${GTK3_LIBRARY_DIRS})
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500137LINK_DIRECTORIES(${LIB_RING_LIBRARY_INCLUDE_DIR})
138LINK_DIRECTORIES(${Qt5Core_LIBRARY_DIRS} )
139LINK_DIRECTORIES(${CLUTTER_LIBRARY_DIRS})
140LINK_DIRECTORIES(${CLUTTERGTK_LIBRARY_DIRS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400141LINK_DIRECTORIES(${EBOOK_LIBRARY_DIRS})
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400142LINK_DIRECTORIES(${LIBNOTIFY_LIBRARY_DIRS})
Stepan Salenikovich982b2882016-06-15 13:13:37 -0400143LINK_DIRECTORIES(${APPINDICATOR_LIBRARY_DIRS})
Stepan Salenikovich472c9052016-07-20 19:16:02 -0400144LINK_DIRECTORIES(${LIBNM_LIBRARY_DIRS})
aviau039001d2016-09-29 16:39:05 -0400145LINK_DIRECTORIES(${WEBKIT_LIBRARY_DIRS})
Nicolas Jager655b8db2017-12-15 14:04:32 -0500146LINK_DIRECTORIES(${CANBERRA_LIBRARY_DIRS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500147
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500148# lib compiler flags
149ADD_DEFINITIONS(${GTK3_CFLAGS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500150ADD_DEFINITIONS(${GTK3_CFLAGS_OTHER})
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500151ADD_DEFINITIONS(${LIB_RING_LIBRARY_CFLAGS})
152ADD_DEFINITIONS(${Qt5Core_CFLAGS})
153ADD_DEFINITIONS(${CLUTTER_CFLAGS})
154ADD_DEFINITIONS(${CLUTTERGTK_CFLAGS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400155ADD_DEFINITIONS(${EBOOK_CFLAGS})
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400156ADD_DEFINITIONS(${LIBNOTIFY_CFLAGS})
Stepan Salenikovich982b2882016-06-15 13:13:37 -0400157ADD_DEFINITIONS(${APPINDICATOR_CFLAGS})
Stepan Salenikovich472c9052016-07-20 19:16:02 -0400158ADD_DEFINITIONS(${LIBNM_CFLAGS})
aviau039001d2016-09-29 16:39:05 -0400159ADD_DEFINITIONS(${WEBKIT_CFLAGS})
Nicolas Jager655b8db2017-12-15 14:04:32 -0500160ADD_DEFINITIONS(${CANBERRA_CFLAGS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500161
Guillaume Roguez644caf42015-03-20 16:28:36 -0400162IF(NOT ${ENABLE_STATIC} MATCHES false)
163 SET(QT5_MODULE_PATH ${QT5_PATH}/lib/cmake)
164 FIND_PACKAGE(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core DBus)
165 FIND_PACKAGE(Qt5DBus REQUIRED)
166 INCLUDE_DIRECTORIES(SYSTEM ${Qt5DBus_INCLUDE_DIRS} )
167 LINK_DIRECTORIES(${Qt5DBus_LIBRARY_DIRS} )
168 ADD_DEFINITIONS(${Qt5DBus_CFLAGS})
169ENDIF()
170
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500171# warnings
172ADD_DEFINITIONS(
173 -Wall
174 -Wextra
175 -Wno-cpp
176 -Wmissing-noreturn
177 -Wpointer-arith
178 -Wcast-align
179 -Wwrite-strings
180 -Wformat-nonliteral
181 -Wformat-security
182 -Wswitch-enum
183 -Winit-self
184 -Wmissing-include-dirs
185 -Wundef
186 -Wmissing-format-attribute
187 -Wno-reorder
188 -Wunused
189 -Wuninitialized
190 -Woverloaded-virtual
191 -Wsuggest-attribute=const
192 -Wunused-value
193 -Wdouble-promotion
194 -Wnonnull
195 -Wsequence-point
196 -Wunused-but-set-parameter
197 -Wsizeof-pointer-memaccess
198 -Wvarargs
199)
200
201# more warnings
202IF (CMAKE_COMPILER_IS_GNUCC)
203 IF (GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
204 ADD_DEFINITIONS(
205 -Wconditionally-supported
206 -Wdate-time
207 -Wdelete-incomplete
208 -Wfloat-conversion
209 )
210 ENDIF()
211
212 IF (GCC_VERSION VERSION_GREATER 5.0 OR GCC_VERSION VERSION_EQUAL 5.0)
213 ADD_DEFINITIONS(
214 -Wsuggest-override
215 -Wsuggest-final-types
216 -Wsuggest-final-methods
217 -Wbool-compare
218 -Wformat-signedness
219 -Wlogical-not-parentheses
220 -Wnormalized
221 -Wshift-count-negative
222 -Wshift-count-overflow
223 -Wsized-deallocation
224 -Wsizeof-array-argument
225 )
226 ENDIF()
227
228ENDIF()
229
Stepan Salenikovich4f9bb982015-06-23 14:26:30 -0400230# get git version on every build
231SET(GIT_REVISION_INPUT_FILE ${PROJECT_SOURCE_DIR}/src/revision.h.in)
232SET(GIT_REVISION_OUTPUT_FILE ${PROJECT_BINARY_DIR}/revision.h)
233
234ADD_CUSTOM_TARGET(
235 git_revision ALL
236 COMMAND ${CMAKE_COMMAND}
237 -DGIT_REVISION_INPUT_FILE=${GIT_REVISION_INPUT_FILE}
238 -DGIT_REVISION_OUTPUT_FILE=${GIT_REVISION_OUTPUT_FILE}
Guillaume Roguez1af28852016-11-02 19:26:20 -0400239 -DRING_CLIENT_BUILD_DATE=${RING_CLIENT_BUILD_DATE}
Stepan Salenikovich4f9bb982015-06-23 14:26:30 -0400240 -P ${CMAKE_SOURCE_DIR}/cmake/GitRevision.cmake
241 COMMENT "generating ${GIT_REVISION_OUTPUT_FILE}"
242)
243
244ADD_CUSTOM_COMMAND(
245 OUTPUT ${GIT_REVISION_OUTPUT_FILE}
246 DEPENDS git_revision
247)
248
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500249# source files to compile
250SET( SRC_FILES
251 src/main.cpp
Stepan Salenikovichd81ef292015-02-17 18:47:37 -0500252 src/ring_client.h
253 src/ring_client.cpp
254 src/ring_client_options.h
255 src/ring_client_options.c
Stepan Salenikovich434b88f2015-02-19 17:49:08 -0500256 src/ringmainwindow.h
257 src/ringmainwindow.cpp
Stepan Salenikovich69771842015-02-24 18:11:45 -0500258 src/incomingcallview.h
259 src/incomingcallview.cpp
Stepan Salenikovichc64523b2015-02-27 16:31:00 -0500260 src/currentcallview.h
261 src/currentcallview.cpp
Stepan Salenikovicha3557452015-02-20 14:14:12 -0500262 src/models/gtkaccessproxymodel.h
263 src/models/gtkaccessproxymodel.cpp
264 src/models/gtkqtreemodel.h
265 src/models/gtkqtreemodel.cpp
Stepan Salenikovich297b5d12015-02-26 17:51:13 -0500266 src/utils/drawing.h
Stepan Salenikovichd8765072016-01-14 10:58:51 -0500267 src/utils/drawing.cpp
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500268 src/video/video_widget.h
269 src/video/video_widget.cpp
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400270 src/accountview.h
271 src/accountview.cpp
aviau6aeb4852016-08-18 16:01:09 -0400272 src/accountcreationwizard.h
273 src/accountcreationwizard.cpp
274 src/accountmigrationview.h
275 src/accountmigrationview.cpp
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400276 src/accountgeneraltab.h
277 src/accountgeneraltab.cpp
aviau2da3d9c2016-09-06 11:28:36 -0400278 src/usernameregistrationbox.h
279 src/usernameregistrationbox.cpp
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400280 src/accountaudiotab.h
281 src/accountaudiotab.cpp
aviau6aeb4852016-08-18 16:01:09 -0400282 src/accountdevicestab.h
283 src/accountdevicestab.cpp
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400284 src/accountvideotab.h
285 src/accountvideotab.cpp
Stepan Salenikovichb7e6a732015-05-04 17:13:22 -0400286 src/accountadvancedtab.h
287 src/accountadvancedtab.cpp
Stepan Salenikovich7a1e71c2015-05-07 11:14:48 -0400288 src/accountsecuritytab.h
289 src/accountsecuritytab.cpp
Stepan Salenikovichc3fede22015-03-20 17:01:47 -0400290 src/models/activeitemproxymodel.h
291 src/models/activeitemproxymodel.cpp
Stepan Salenikovich50c989b2015-03-21 18:32:46 -0400292 src/defines.h
Stepan Salenikovich8bc51e52015-03-21 20:17:29 -0400293 src/video/xrectsel.h
294 src/video/xrectsel.c
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400295 src/dialogs.h
296 src/dialogs.c
Stepan Salenikovich0bd53492015-05-11 14:28:52 -0400297 src/mediasettingsview.h
298 src/mediasettingsview.cpp
Stepan Salenikovichde896112015-05-11 16:46:33 -0400299 src/generalsettingsview.h
300 src/generalsettingsview.cpp
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400301 src/backends/edscontactbackend.h
302 src/backends/edscontactbackend.cpp
Stepan Salenikovichbbd6c132015-08-20 15:21:48 -0400303 src/native/pixbufmanipulator.h
304 src/native/pixbufmanipulator.cpp
Stepan Salenikovich9816a942015-04-22 17:49:16 -0400305 src/utils/models.h
306 src/utils/models.cpp
307 src/utils/calling.h
308 src/utils/calling.cpp
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400309 src/ringnotify.h
310 src/ringnotify.cpp
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400311 src/utils/files.h
312 src/utils/files.cpp
Stepan Salenikovich4f9bb982015-06-23 14:26:30 -0400313 ${GIT_REVISION_OUTPUT_FILE}
Stepan Salenikovich75a39172015-07-10 13:21:08 -0400314 src/utils/accounts.h
315 src/utils/accounts.cpp
Stepan Salenikovich0cf247d2015-07-24 17:36:32 -0400316 src/choosecontactview.h
317 src/choosecontactview.cpp
318 src/editcontactview.h
319 src/editcontactview.cpp
Stepan Salenikovichbe6550c2015-08-21 16:16:03 -0400320 src/native/dbuserrorhandler.h
321 src/native/dbuserrorhandler.cpp
Stepan Salenikovich2cde7612015-09-25 10:44:01 -0400322 src/ringwelcomeview.h
323 src/ringwelcomeview.cpp
aviau039001d2016-09-29 16:39:05 -0400324 src/webkitchatcontainer.h
325 src/webkitchatcontainer.cpp
Stepan Salenikovichd2cad062016-01-08 13:43:49 -0500326 src/chatview.h
327 src/chatview.cpp
Nicolas Jagerb413b302016-05-06 11:41:32 -0400328 src/avatarmanipulation.h
329 src/avatarmanipulation.cpp
Stepan Salenikovich5c54b352016-09-14 14:28:19 -0400330 src/cc-crop-area.h
331 src/cc-crop-area.c
Stepan Salenikovichdcfb5032016-10-26 18:57:56 -0400332 src/models/namenumberfilterproxymodel.h
333 src/models/namenumberfilterproxymodel.cpp
Nicolas Jager005fc552017-04-26 07:50:26 -0400334 src/accountbanstab.h
335 src/accountbanstab.cpp
336 src/bannedcontactsview.h
337 src/bannedcontactsview.cpp
Sébastien Bline72d43c2017-10-03 11:37:33 -0400338 src/conversationsview.h
339 src/conversationsview.cpp
Sébastien Blin4e556d02017-10-03 15:26:30 -0400340 src/conversationpopupmenu.h
341 src/conversationpopupmenu.cpp
Hugo Lefeuvre6f2ceb12018-04-18 15:08:01 -0400342 src/accountinfopointer.h
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500343)
344
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -0500345# compile glib resource files to c code
346GLIB_COMPILE_RESOURCES( GLIB_RESOURCES_RING
347 SOURCE
348 pixmaps/pixmaps.gresource.xml
Stepan Salenikovich434b88f2015-02-19 17:49:08 -0500349 ui/ui.gresource.xml
aviau039001d2016-09-29 16:39:05 -0400350 web/web.gresource.xml
Nicolas Jager655b8db2017-12-15 14:04:32 -0500351 sounds/sounds.gresource.xml
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -0500352)
353
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500354# IF(${ENABLE_TEST} MATCHES true)
355# ADD_SUBDIRECTORY( src/test)
356# ENDIF()
357
358# for translations
Stepan Salenikoviche88f6692015-09-10 18:09:38 -0400359IF (GETTEXT_FOUND)
360
361 # get all translation files; they're expected to be named using the following convention:
362 # '<lang code>[_<country code].po'
363 # eg: fr_CA.po (the country code is optional)
364 FILE(GLOB PO_FILES ${CMAKE_SOURCE_DIR}/po/*.po)
365
366 # Install each of the translation files
367 FOREACH(PO_FILE IN LISTS PO_FILES)
368 # extract the language (and optional country code) from the filename
369 GET_FILENAME_COMPONENT(LANG ${PO_FILE} NAME_WE)
370 GETTEXT_PROCESS_PO_FILES(${LANG} ALL PO_FILES ${PO_FILE})
371
372 SET(TRANSLATIONS_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/locale/${LANG}/LC_MESSAGES)
373
374 # install to share/locale and rename each to ring-client-gnome.mo
375 INSTALL(
376 FILES ${PROJECT_BINARY_DIR}/${LANG}.gmo
377 DESTINATION ${TRANSLATIONS_INSTALL_DIR}
378 RENAME ${PROJECT_NAME}.mo
379 )
380 ENDFOREACH(PO_FILE)
381
382ENDIF(GETTEXT_FOUND)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500383
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400384# install and compile glib gsettings schema
385add_schema("cx.ring.RingGnome.gschema.xml" GSCHEMA_RING)
386
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400387ADD_EXECUTABLE(gnome-ring ${GLIB_RESOURCES_RING} ${GSCHEMA_RING} ${SRC_FILES})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500388
Guillaume Roguez644caf42015-03-20 16:28:36 -0400389IF(NOT ${ENABLE_STATIC} MATCHES false)
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400390TARGET_LINK_LIBRARIES(gnome-ring
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500391 ${LIB_RING_CLIENT_LIBRARY}
392 ${GTK3_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400393 ${Qt5Core_LIBRARIES}
394 ${Qt5DBus_LIBRARIES}
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500395 ${CLUTTER_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400396 ${CLUTTERGTK_LIBRARIES}
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400397 ${EBOOK_LIBRARIES}
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400398 ${LIBNOTIFY_LIBRARIES}
Stepan Salenikovich982b2882016-06-15 13:13:37 -0400399 ${APPINDICATOR_LIBRARIES}
Stepan Salenikovich472c9052016-07-20 19:16:02 -0400400 ${LIBNM_LIBRARIES}
aviau039001d2016-09-29 16:39:05 -0400401 ${WEBKIT_LIBRARIES}
Stepan Salenikovich45ea8c12016-09-02 18:13:52 -0400402 ${LIBQRENCODE_LIBRARIES}
Nicolas Jager655b8db2017-12-15 14:04:32 -0500403 ${CANBERRA_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400404 -lpthread
405 -lrt
406 )
407ELSE()
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400408TARGET_LINK_LIBRARIES(gnome-ring
Guillaume Roguez644caf42015-03-20 16:28:36 -0400409 ${LIB_RING_CLIENT_LIBRARY}
410 ${GTK3_LIBRARIES}
411 ${Qt5Core_LIBRARIES}
412 ${CLUTTER_LIBRARIES}
413 ${CLUTTERGTK_LIBRARIES}
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400414 ${EBOOK_LIBRARIES}
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400415 ${LIBNOTIFY_LIBRARIES}
Stepan Salenikovich982b2882016-06-15 13:13:37 -0400416 ${APPINDICATOR_LIBRARIES}
Stepan Salenikovich472c9052016-07-20 19:16:02 -0400417 ${LIBNM_LIBRARIES}
aviau039001d2016-09-29 16:39:05 -0400418 ${WEBKIT_LIBRARIES}
Stepan Salenikovich45ea8c12016-09-02 18:13:52 -0400419 ${LIBQRENCODE_LIBRARIES}
Nicolas Jager655b8db2017-12-15 14:04:32 -0500420 ${CANBERRA_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400421 )
422ENDIF()
Stepan Salenikovich1c34fc52015-03-13 12:43:54 -0400423
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400424# configure libnotify variable for config.h file
425IF( LIBNOTIFY_FOUND )
426 SET(USE_LIBNOTIFY 1)
Nicolas Jager655b8db2017-12-15 14:04:32 -0500427 SET(USE_CANBERRA 1)
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400428ELSE()
429 SET(USE_LIBNOTIFY 0)
430ENDIF()
431
Stepan Salenikovich472c9052016-07-20 19:16:02 -0400432# configure libnm variable for config.h file
433IF( LIBNM_FOUND )
434 SET(USE_LIBNM 1)
435ELSE()
436 SET(USE_LIBNM 0)
437ENDIF()
438
Nicolas Jager655b8db2017-12-15 14:04:32 -0500439# configure libcanberra variable for config.h file
440IF( CANBERRA_FOUND )
441 SET(USE_CANBERRA 1)
442ELSE()
443 SET(USE_CANBERRA 0)
444ENDIF()
445
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400446# create config header file to pass cmake settings to source code
447CONFIGURE_FILE (
448 "${PROJECT_SOURCE_DIR}/src/config.h.in"
449 "${PROJECT_BINARY_DIR}/config.h"
450)
451
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400452INSTALL(TARGETS gnome-ring
Stepan Salenikovich1c34fc52015-03-13 12:43:54 -0400453 RUNTIME DESTINATION bin
454)
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400455
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400456# install .desktop in XDG desktop dir so that it is recognized by the system
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400457INSTALL(FILES ${PROJECT_SOURCE_DIR}/gnome-ring.desktop
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400458 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications
459)
460
Nicolas Jager655b8db2017-12-15 14:04:32 -0500461# install audio files
462INSTALL(FILES ${PROJECT_SOURCE_DIR}/sounds/ringtone_notify.wav
463 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/sounds/gnome-ring
464)
465
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400466# install .desktop in the gnome-ring data dir, so that it can be copied to the
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400467# autostart dir by the client
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400468INSTALL(FILES ${PROJECT_SOURCE_DIR}/gnome-ring.desktop.autostart
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400469 DESTINATION
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400470 ${CMAKE_INSTALL_PREFIX}/share/gnome-ring/
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400471 PERMISSIONS
472 WORLD_READ
473 OWNER_WRITE
474 OWNER_READ
475 GROUP_READ
Stepan Salenikovich2bc23272015-09-17 18:05:01 -0400476 RENAME
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400477 gnome-ring.desktop
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400478)
479
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400480INSTALL(FILES pixmaps/ring.svg
481 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps
482)
483
Stepan Salenikovich526c41e2016-06-08 16:48:20 -0400484INSTALL(FILES gnome-ring.appdata.xml
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400485 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/appdata/
486)
Stepan Salenikovich841deaf2015-04-15 16:08:39 -0400487
Stepan Salenikovich0d707a62015-05-29 10:48:04 -0400488# install shell script which will launch "ring"
Stepan Salenikovichab120ea2015-06-01 18:14:12 -0400489INSTALL(
490 FILES
aviau4afc17d2016-04-25 10:45:08 -0400491 "${PROJECT_SOURCE_DIR}/src/ring.cx"
Stepan Salenikovichab120ea2015-06-01 18:14:12 -0400492 DESTINATION
493 ${CMAKE_INSTALL_PREFIX}/bin
494 PERMISSIONS
495 WORLD_READ
496 OWNER_WRITE
497 OWNER_READ
498 GROUP_READ
499 OWNER_EXECUTE
500 GROUP_EXECUTE
501 WORLD_EXECUTE
Stepan Salenikovich0d707a62015-05-29 10:48:04 -0400502)
503
Stepan Salenikovich841deaf2015-04-15 16:08:39 -0400504# add a target to generate API documentation with Doxygen
505FIND_PACKAGE(Doxygen)
506IF(DOXYGEN_FOUND)
507 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile @ONLY)
508 ADD_CUSTOM_TARGET(doc
509 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile
510 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
511 COMMENT "Generating API documentation with Doxygen" VERBATIM
512 )
513
514 # create doc/README.md symlink to README since Doxygen doesn't understand file with no extension
515 ADD_CUSTOM_COMMAND(
516 TARGET doc
517 PRE_BUILD
518 COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_SOURCE_DIR}/doc/README.md
519 )
520ENDIF(DOXYGEN_FOUND)
Stepan Salenikovich1f47b552016-05-03 17:24:33 -0400521
522# uninstall target
523CONFIGURE_FILE(
524 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
525 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
526 IMMEDIATE @ONLY)
527
528ADD_CUSTOM_TARGET(uninstall
529 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)