blob: a876fa6dc96b54c3b966cff6187e9b60ed929c5b [file] [log] [blame]
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -05001CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
2
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
14ADD_DEFINITIONS("-std=c++1y")
15
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040016# set project name and version
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050017PROJECT(ring-client-gnome)
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040018SET(PROJECT_VERSION_MAJOR 0)
Guillaume Roguez16cc8bd2015-05-01 15:08:17 -040019SET(PROJECT_VERSION_MINOR 4)
Guillaume Roguez90ee8642015-04-15 15:21:19 -040020SET(PROJECT_VERSION_PATCH 0)
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040021
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040022# add the binary tree to the search path for include files
23# so that we will find config.h
24INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}")
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050025
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -050026LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
27
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -040028# include custom cmake modules
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -050029INCLUDE(${CMAKE_SOURCE_DIR}/cmake/GResources.cmake)
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -040030INCLUDE(${CMAKE_SOURCE_DIR}/cmake/GSettings.cmake)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050031
32# make sure we're using Qt5
33SET(ENABLE_QT5 true)
34
35# for now, set debug as default
36SET(CMAKE_BUILD_TYPE Debug)
37
38# find packages
39FIND_PACKAGE(PkgConfig REQUIRED)
40PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0>=3.10)
41FIND_PACKAGE(LibRingClient REQUIRED)
42FIND_PACKAGE(Qt5Core REQUIRED)
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050043PKG_CHECK_MODULES(CLUTTER REQUIRED clutter-1.0)
44PKG_CHECK_MODULES(CLUTTERGTK REQUIRED clutter-gtk-1.0)
Stepan Salenikovich2d63d5e2015-03-22 23:23:54 -040045PKG_CHECK_MODULES(ICONSYMBLIC REQUIRED gnome-icon-theme-symbolic)
Stepan Salenikovich6f687072015-03-26 10:43:37 -040046PKG_CHECK_MODULES(EBOOK REQUIRED libebook-1.2>=3.10)
Stepan Salenikovich76c33e62015-05-22 12:24:07 -040047PKG_CHECK_MODULES(LIBNOTIFY libnotify>=0.7.6) #optional
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050048
49# include libs
50INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS})
51INCLUDE_DIRECTORIES(${LIB_RING_CLIENT_INCLUDE_DIR})
Stepan Salenikovichd2dbcee2015-02-27 16:52:28 -050052INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS} )
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050053INCLUDE_DIRECTORIES(${CLUTTER_INCLUDE_DIRS})
54INCLUDE_DIRECTORIES(${CLUTTERGTK_INCLUDE_DIRS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -040055INCLUDE_DIRECTORIES(${EBOOK_INCLUDE_DIRS})
Stepan Salenikovich76c33e62015-05-22 12:24:07 -040056INCLUDE_DIRECTORIES(${LIBNOTIFY_INCLUDE_DIRS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050057
58# link libs
59LINK_DIRECTORIES(${GTK3_LIBRARY_DIRS})
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050060LINK_DIRECTORIES(${LIB_RING_LIBRARY_INCLUDE_DIR})
61LINK_DIRECTORIES(${Qt5Core_LIBRARY_DIRS} )
62LINK_DIRECTORIES(${CLUTTER_LIBRARY_DIRS})
63LINK_DIRECTORIES(${CLUTTERGTK_LIBRARY_DIRS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -040064LINK_DIRECTORIES(${EBOOK_LIBRARY_DIRS})
Stepan Salenikovich76c33e62015-05-22 12:24:07 -040065LINK_DIRECTORIES(${LIBNOTIFY_LIBRARY_DIRS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050066
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050067# lib compiler flags
68ADD_DEFINITIONS(${GTK3_CFLAGS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050069ADD_DEFINITIONS(${GTK3_CFLAGS_OTHER})
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050070ADD_DEFINITIONS(${LIB_RING_LIBRARY_CFLAGS})
71ADD_DEFINITIONS(${Qt5Core_CFLAGS})
72ADD_DEFINITIONS(${CLUTTER_CFLAGS})
73ADD_DEFINITIONS(${CLUTTERGTK_CFLAGS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -040074ADD_DEFINITIONS(${EBOOK_CFLAGS})
Stepan Salenikovich76c33e62015-05-22 12:24:07 -040075ADD_DEFINITIONS(${LIBNOTIFY_CFLAGS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050076
Guillaume Roguez644caf42015-03-20 16:28:36 -040077IF(NOT ${ENABLE_STATIC} MATCHES false)
78 SET(QT5_MODULE_PATH ${QT5_PATH}/lib/cmake)
79 FIND_PACKAGE(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core DBus)
80 FIND_PACKAGE(Qt5DBus REQUIRED)
81 INCLUDE_DIRECTORIES(SYSTEM ${Qt5DBus_INCLUDE_DIRS} )
82 LINK_DIRECTORIES(${Qt5DBus_LIBRARY_DIRS} )
83 ADD_DEFINITIONS(${Qt5DBus_CFLAGS})
84ENDIF()
85
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050086# warnings
87ADD_DEFINITIONS(
88 -Wall
89 -Wextra
90 -Wno-cpp
91 -Wmissing-noreturn
92 -Wpointer-arith
93 -Wcast-align
94 -Wwrite-strings
95 -Wformat-nonliteral
96 -Wformat-security
97 -Wswitch-enum
98 -Winit-self
99 -Wmissing-include-dirs
100 -Wundef
101 -Wmissing-format-attribute
102 -Wno-reorder
103 -Wunused
104 -Wuninitialized
105 -Woverloaded-virtual
106 -Wsuggest-attribute=const
107 -Wunused-value
108 -Wdouble-promotion
109 -Wnonnull
110 -Wsequence-point
111 -Wunused-but-set-parameter
112 -Wsizeof-pointer-memaccess
113 -Wvarargs
114)
115
116# more warnings
117IF (CMAKE_COMPILER_IS_GNUCC)
118 IF (GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
119 ADD_DEFINITIONS(
120 -Wconditionally-supported
121 -Wdate-time
122 -Wdelete-incomplete
123 -Wfloat-conversion
124 )
125 ENDIF()
126
127 IF (GCC_VERSION VERSION_GREATER 5.0 OR GCC_VERSION VERSION_EQUAL 5.0)
128 ADD_DEFINITIONS(
129 -Wsuggest-override
130 -Wsuggest-final-types
131 -Wsuggest-final-methods
132 -Wbool-compare
133 -Wformat-signedness
134 -Wlogical-not-parentheses
135 -Wnormalized
136 -Wshift-count-negative
137 -Wshift-count-overflow
138 -Wsized-deallocation
139 -Wsizeof-array-argument
140 )
141 ENDIF()
142
143ENDIF()
144
145# source files to compile
146SET( SRC_FILES
147 src/main.cpp
Stepan Salenikovichd81ef292015-02-17 18:47:37 -0500148 src/ring_client.h
149 src/ring_client.cpp
150 src/ring_client_options.h
151 src/ring_client_options.c
Stepan Salenikovich434b88f2015-02-19 17:49:08 -0500152 src/ringmainwindow.h
153 src/ringmainwindow.cpp
Stepan Salenikovich69771842015-02-24 18:11:45 -0500154 src/incomingcallview.h
155 src/incomingcallview.cpp
Stepan Salenikovichc64523b2015-02-27 16:31:00 -0500156 src/currentcallview.h
157 src/currentcallview.cpp
Stepan Salenikovicha3557452015-02-20 14:14:12 -0500158 src/models/gtkaccessproxymodel.h
159 src/models/gtkaccessproxymodel.cpp
160 src/models/gtkqtreemodel.h
161 src/models/gtkqtreemodel.cpp
Stepan Salenikovich297b5d12015-02-26 17:51:13 -0500162 src/utils/drawing.h
163 src/utils/drawing.c
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500164 src/video/video_widget.h
165 src/video/video_widget.cpp
Stepan Salenikovich7ff47962015-03-16 15:10:14 -0400166 src/models/gtkqsortfiltertreemodel.h
167 src/models/gtkqsortfiltertreemodel.cpp
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400168 src/accountview.h
169 src/accountview.cpp
170 src/accountgeneraltab.h
171 src/accountgeneraltab.cpp
172 src/accountaudiotab.h
173 src/accountaudiotab.cpp
174 src/accountvideotab.h
175 src/accountvideotab.cpp
Stepan Salenikovichb7e6a732015-05-04 17:13:22 -0400176 src/accountadvancedtab.h
177 src/accountadvancedtab.cpp
Stepan Salenikovich7a1e71c2015-05-07 11:14:48 -0400178 src/accountsecuritytab.h
179 src/accountsecuritytab.cpp
Stepan Salenikovichc3fede22015-03-20 17:01:47 -0400180 src/models/activeitemproxymodel.h
181 src/models/activeitemproxymodel.cpp
Stepan Salenikovich50c989b2015-03-21 18:32:46 -0400182 src/defines.h
Stepan Salenikovich8bc51e52015-03-21 20:17:29 -0400183 src/video/xrectsel.h
184 src/video/xrectsel.c
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400185 src/dialogs.h
186 src/dialogs.c
Stepan Salenikovich0bd53492015-05-11 14:28:52 -0400187 src/mediasettingsview.h
188 src/mediasettingsview.cpp
Stepan Salenikovichde896112015-05-11 16:46:33 -0400189 src/generalsettingsview.h
190 src/generalsettingsview.cpp
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400191 src/backends/edscontactbackend.h
192 src/backends/edscontactbackend.cpp
193 src/delegates/pixbufdelegate.h
194 src/delegates/pixbufdelegate.cpp
Stepan Salenikovichbbb10d82015-05-13 12:26:44 -0400195 src/callsview.h
196 src/callsview.cpp
Stepan Salenikovich9816a942015-04-22 17:49:16 -0400197 src/contactsview.h
198 src/contactsview.cpp
Stepan Salenikovich7c71bfe2015-05-13 18:08:09 -0400199 src/frequentcontactsview.h
200 src/frequentcontactsview.cpp
Stepan Salenikovich9816a942015-04-22 17:49:16 -0400201 src/historyview.h
202 src/historyview.cpp
203 src/utils/models.h
204 src/utils/models.cpp
205 src/utils/calling.h
206 src/utils/calling.cpp
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400207 src/ringnotify.h
208 src/ringnotify.cpp
Stepan Salenikovichb94873c2015-06-02 16:53:18 -0400209 src/video/videowindow.h
210 src/video/videowindow.cpp
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400211 src/utils/files.h
212 src/utils/files.cpp
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500213)
214
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -0500215# compile glib resource files to c code
216GLIB_COMPILE_RESOURCES( GLIB_RESOURCES_RING
217 SOURCE
218 pixmaps/pixmaps.gresource.xml
Stepan Salenikovich434b88f2015-02-19 17:49:08 -0500219 ui/ui.gresource.xml
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -0500220)
221
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500222# IF(${ENABLE_TEST} MATCHES true)
223# ADD_SUBDIRECTORY( src/test)
224# ENDIF()
225
226# for translations
227# FIND_PACKAGE ( Gettext REQUIRED )
228# ADD_SUBDIRECTORY( po )
229
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400230# install and compile glib gsettings schema
231add_schema("cx.ring.RingGnome.gschema.xml" GSCHEMA_RING)
232
233ADD_EXECUTABLE(gnome-ring ${GLIB_RESOURCES_RING} ${GSCHEMA_RING} ${SRC_FILES})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500234
Guillaume Roguez644caf42015-03-20 16:28:36 -0400235IF(NOT ${ENABLE_STATIC} MATCHES false)
Stepan Salenikovich9aef3122015-03-20 17:04:09 -0400236TARGET_LINK_LIBRARIES(gnome-ring
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500237 ${LIB_RING_CLIENT_LIBRARY}
238 ${GTK3_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400239 ${Qt5Core_LIBRARIES}
240 ${Qt5DBus_LIBRARIES}
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500241 ${CLUTTER_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400242 ${CLUTTERGTK_LIBRARIES}
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400243 ${EBOOK_LIBRARIES}
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400244 ${LIBNOTIFY_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400245 -lpthread
246 -lrt
247 )
248ELSE()
Stepan Salenikovich9aef3122015-03-20 17:04:09 -0400249TARGET_LINK_LIBRARIES(gnome-ring
Guillaume Roguez644caf42015-03-20 16:28:36 -0400250 ${LIB_RING_CLIENT_LIBRARY}
251 ${GTK3_LIBRARIES}
252 ${Qt5Core_LIBRARIES}
253 ${CLUTTER_LIBRARIES}
254 ${CLUTTERGTK_LIBRARIES}
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400255 ${EBOOK_LIBRARIES}
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400256 ${LIBNOTIFY_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400257 )
258ENDIF()
Stepan Salenikovich1c34fc52015-03-13 12:43:54 -0400259
Stepan Salenikovich76c33e62015-05-22 12:24:07 -0400260# configure libnotify variable for config.h file
261IF( LIBNOTIFY_FOUND )
262 SET(USE_LIBNOTIFY 1)
263ELSE()
264 SET(USE_LIBNOTIFY 0)
265ENDIF()
266
267# create config header file to pass cmake settings to source code
268CONFIGURE_FILE (
269 "${PROJECT_SOURCE_DIR}/src/config.h.in"
270 "${PROJECT_BINARY_DIR}/config.h"
271)
272
273# generate .desktop file
274CONFIGURE_FILE (
275 "${PROJECT_SOURCE_DIR}/gnome-ring.desktop.in"
276 "${PROJECT_BINARY_DIR}/gnome-ring.desktop"
277)
278
Stepan Salenikovich9aef3122015-03-20 17:04:09 -0400279INSTALL(TARGETS gnome-ring
Stepan Salenikovich1c34fc52015-03-13 12:43:54 -0400280 RUNTIME DESTINATION bin
281)
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400282
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400283# install .desktop in XDG desktop dir so that it is recognized by the system
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400284INSTALL(FILES ${PROJECT_BINARY_DIR}/gnome-ring.desktop
285 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications
286)
287
Stepan Salenikovichfb7f2952015-05-25 16:44:19 -0400288# install .desktop in the gnome-ring data dir, so that it can be copied to the
289# autostart dir by the client
290INSTALL(FILES ${PROJECT_BINARY_DIR}/gnome-ring.desktop
291 DESTINATION
292 ${CMAKE_INSTALL_PREFIX}/share/gnome-ring/
293 PERMISSIONS
294 WORLD_READ
295 OWNER_WRITE
296 OWNER_READ
297 GROUP_READ
298)
299
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400300INSTALL(FILES pixmaps/ring.svg
301 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps
302)
303
304INSTALL(FILES gnome-ring.appdata.xml
305 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/appdata/
306)
Stepan Salenikovich841deaf2015-04-15 16:08:39 -0400307
Stepan Salenikovich0d707a62015-05-29 10:48:04 -0400308# install shell script which will launch "ring"
Stepan Salenikovichab120ea2015-06-01 18:14:12 -0400309INSTALL(
310 FILES
Stepan Salenikovich2eb07d02015-06-02 11:18:50 -0400311 "${PROJECT_SOURCE_DIR}/src/ring"
Stepan Salenikovichab120ea2015-06-01 18:14:12 -0400312 DESTINATION
313 ${CMAKE_INSTALL_PREFIX}/bin
314 PERMISSIONS
315 WORLD_READ
316 OWNER_WRITE
317 OWNER_READ
318 GROUP_READ
319 OWNER_EXECUTE
320 GROUP_EXECUTE
321 WORLD_EXECUTE
Stepan Salenikovich0d707a62015-05-29 10:48:04 -0400322)
323
Stepan Salenikovich841deaf2015-04-15 16:08:39 -0400324# add a target to generate API documentation with Doxygen
325FIND_PACKAGE(Doxygen)
326IF(DOXYGEN_FOUND)
327 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile @ONLY)
328 ADD_CUSTOM_TARGET(doc
329 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile
330 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
331 COMMENT "Generating API documentation with Doxygen" VERBATIM
332 )
333
334 # create doc/README.md symlink to README since Doxygen doesn't understand file with no extension
335 ADD_CUSTOM_COMMAND(
336 TARGET doc
337 PRE_BUILD
338 COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_SOURCE_DIR}/doc/README.md
339 )
340ENDIF(DOXYGEN_FOUND)