blob: dbdaf855142098f147b2ed17e8cfc9ea28f23244 [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
22# create config header file to pass cmake settings to source code
23CONFIGURE_FILE (
24 "${PROJECT_SOURCE_DIR}/src/config.h.in"
25 "${PROJECT_BINARY_DIR}/config.h"
26)
27
Stepan Salenikovichb42fde72015-03-30 12:29:09 -040028# generate .desktop file
29CONFIGURE_FILE (
30 "${PROJECT_SOURCE_DIR}/gnome-ring.desktop.in"
31 "${PROJECT_BINARY_DIR}/gnome-ring.desktop"
32)
33
Stepan Salenikovichc1dac252015-03-25 17:19:35 -040034# add the binary tree to the search path for include files
35# so that we will find config.h
36INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}")
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050037
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -050038LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
39
40# the GResources.cmake module isn't automatically detected
41INCLUDE(${CMAKE_SOURCE_DIR}/cmake/GResources.cmake)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050042
43# make sure we're using Qt5
44SET(ENABLE_QT5 true)
45
46# for now, set debug as default
47SET(CMAKE_BUILD_TYPE Debug)
48
49# find packages
50FIND_PACKAGE(PkgConfig REQUIRED)
51PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0>=3.10)
52FIND_PACKAGE(LibRingClient REQUIRED)
53FIND_PACKAGE(Qt5Core REQUIRED)
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050054PKG_CHECK_MODULES(CLUTTER REQUIRED clutter-1.0)
55PKG_CHECK_MODULES(CLUTTERGTK REQUIRED clutter-gtk-1.0)
Stepan Salenikovich2d63d5e2015-03-22 23:23:54 -040056PKG_CHECK_MODULES(ICONSYMBLIC REQUIRED gnome-icon-theme-symbolic)
Stepan Salenikovich6f687072015-03-26 10:43:37 -040057PKG_CHECK_MODULES(EBOOK REQUIRED libebook-1.2>=3.10)
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050058
59# include libs
60INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS})
61INCLUDE_DIRECTORIES(${LIB_RING_CLIENT_INCLUDE_DIR})
Stepan Salenikovichd2dbcee2015-02-27 16:52:28 -050062INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS} )
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050063INCLUDE_DIRECTORIES(${CLUTTER_INCLUDE_DIRS})
64INCLUDE_DIRECTORIES(${CLUTTERGTK_INCLUDE_DIRS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -040065INCLUDE_DIRECTORIES(${EBOOK_INCLUDE_DIRS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050066
67# link libs
68LINK_DIRECTORIES(${GTK3_LIBRARY_DIRS})
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050069LINK_DIRECTORIES(${LIB_RING_LIBRARY_INCLUDE_DIR})
70LINK_DIRECTORIES(${Qt5Core_LIBRARY_DIRS} )
71LINK_DIRECTORIES(${CLUTTER_LIBRARY_DIRS})
72LINK_DIRECTORIES(${CLUTTERGTK_LIBRARY_DIRS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -040073LINK_DIRECTORIES(${EBOOK_LIBRARY_DIRS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050074
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050075# lib compiler flags
76ADD_DEFINITIONS(${GTK3_CFLAGS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050077ADD_DEFINITIONS(${GTK3_CFLAGS_OTHER})
Stepan Salenikovich36c025c2015-03-03 19:06:44 -050078ADD_DEFINITIONS(${LIB_RING_LIBRARY_CFLAGS})
79ADD_DEFINITIONS(${Qt5Core_CFLAGS})
80ADD_DEFINITIONS(${CLUTTER_CFLAGS})
81ADD_DEFINITIONS(${CLUTTERGTK_CFLAGS})
Stepan Salenikovich6f687072015-03-26 10:43:37 -040082ADD_DEFINITIONS(${EBOOK_CFLAGS})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050083
Guillaume Roguez644caf42015-03-20 16:28:36 -040084IF(NOT ${ENABLE_STATIC} MATCHES false)
85 SET(QT5_MODULE_PATH ${QT5_PATH}/lib/cmake)
86 FIND_PACKAGE(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core DBus)
87 FIND_PACKAGE(Qt5DBus REQUIRED)
88 INCLUDE_DIRECTORIES(SYSTEM ${Qt5DBus_INCLUDE_DIRS} )
89 LINK_DIRECTORIES(${Qt5DBus_LIBRARY_DIRS} )
90 ADD_DEFINITIONS(${Qt5DBus_CFLAGS})
91ENDIF()
92
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -050093# warnings
94ADD_DEFINITIONS(
95 -Wall
96 -Wextra
97 -Wno-cpp
98 -Wmissing-noreturn
99 -Wpointer-arith
100 -Wcast-align
101 -Wwrite-strings
102 -Wformat-nonliteral
103 -Wformat-security
104 -Wswitch-enum
105 -Winit-self
106 -Wmissing-include-dirs
107 -Wundef
108 -Wmissing-format-attribute
109 -Wno-reorder
110 -Wunused
111 -Wuninitialized
112 -Woverloaded-virtual
113 -Wsuggest-attribute=const
114 -Wunused-value
115 -Wdouble-promotion
116 -Wnonnull
117 -Wsequence-point
118 -Wunused-but-set-parameter
119 -Wsizeof-pointer-memaccess
120 -Wvarargs
121)
122
123# more warnings
124IF (CMAKE_COMPILER_IS_GNUCC)
125 IF (GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
126 ADD_DEFINITIONS(
127 -Wconditionally-supported
128 -Wdate-time
129 -Wdelete-incomplete
130 -Wfloat-conversion
131 )
132 ENDIF()
133
134 IF (GCC_VERSION VERSION_GREATER 5.0 OR GCC_VERSION VERSION_EQUAL 5.0)
135 ADD_DEFINITIONS(
136 -Wsuggest-override
137 -Wsuggest-final-types
138 -Wsuggest-final-methods
139 -Wbool-compare
140 -Wformat-signedness
141 -Wlogical-not-parentheses
142 -Wnormalized
143 -Wshift-count-negative
144 -Wshift-count-overflow
145 -Wsized-deallocation
146 -Wsizeof-array-argument
147 )
148 ENDIF()
149
150ENDIF()
151
152# source files to compile
153SET( SRC_FILES
154 src/main.cpp
Stepan Salenikovichd81ef292015-02-17 18:47:37 -0500155 src/ring_client.h
156 src/ring_client.cpp
157 src/ring_client_options.h
158 src/ring_client_options.c
Stepan Salenikovich434b88f2015-02-19 17:49:08 -0500159 src/ringmainwindow.h
160 src/ringmainwindow.cpp
Stepan Salenikovich69771842015-02-24 18:11:45 -0500161 src/incomingcallview.h
162 src/incomingcallview.cpp
Stepan Salenikovichc64523b2015-02-27 16:31:00 -0500163 src/currentcallview.h
164 src/currentcallview.cpp
Stepan Salenikovicha3557452015-02-20 14:14:12 -0500165 src/models/gtkaccessproxymodel.h
166 src/models/gtkaccessproxymodel.cpp
167 src/models/gtkqtreemodel.h
168 src/models/gtkqtreemodel.cpp
Stepan Salenikovich297b5d12015-02-26 17:51:13 -0500169 src/utils/drawing.h
170 src/utils/drawing.c
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500171 src/video/video_widget.h
172 src/video/video_widget.cpp
Stepan Salenikovich15142182015-03-11 17:15:26 -0400173 src/backends/minimalhistorybackend.h
174 src/backends/minimalhistorybackend.cpp
Stepan Salenikovich7ff47962015-03-16 15:10:14 -0400175 src/models/gtkqsortfiltertreemodel.h
176 src/models/gtkqsortfiltertreemodel.cpp
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400177 src/accountview.h
178 src/accountview.cpp
179 src/accountgeneraltab.h
180 src/accountgeneraltab.cpp
181 src/accountaudiotab.h
182 src/accountaudiotab.cpp
183 src/accountvideotab.h
184 src/accountvideotab.cpp
Stepan Salenikovichb7e6a732015-05-04 17:13:22 -0400185 src/accountadvancedtab.h
186 src/accountadvancedtab.cpp
Stepan Salenikovichc3fede22015-03-20 17:01:47 -0400187 src/models/activeitemproxymodel.h
188 src/models/activeitemproxymodel.cpp
Stepan Salenikovich50c989b2015-03-21 18:32:46 -0400189 src/defines.h
Stepan Salenikovich8bc51e52015-03-21 20:17:29 -0400190 src/video/xrectsel.h
191 src/video/xrectsel.c
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400192 src/dialogs.h
193 src/dialogs.c
Stepan Salenikovich0bd53492015-05-11 14:28:52 -0400194 src/mediasettingsview.h
195 src/mediasettingsview.cpp
Stepan Salenikovichde896112015-05-11 16:46:33 -0400196 src/generalsettingsview.h
197 src/generalsettingsview.cpp
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400198 src/backends/edscontactbackend.h
199 src/backends/edscontactbackend.cpp
200 src/delegates/pixbufdelegate.h
201 src/delegates/pixbufdelegate.cpp
Stepan Salenikovich9816a942015-04-22 17:49:16 -0400202 src/contactsview.h
203 src/contactsview.cpp
204 src/historyview.h
205 src/historyview.cpp
206 src/utils/models.h
207 src/utils/models.cpp
208 src/utils/calling.h
209 src/utils/calling.cpp
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500210)
211
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -0500212# compile glib resource files to c code
213GLIB_COMPILE_RESOURCES( GLIB_RESOURCES_RING
214 SOURCE
215 pixmaps/pixmaps.gresource.xml
Stepan Salenikovich434b88f2015-02-19 17:49:08 -0500216 ui/ui.gresource.xml
Stepan Salenikovicha8df7ea2015-02-18 12:46:36 -0500217)
218
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500219# IF(${ENABLE_TEST} MATCHES true)
220# ADD_SUBDIRECTORY( src/test)
221# ENDIF()
222
223# for translations
224# FIND_PACKAGE ( Gettext REQUIRED )
225# ADD_SUBDIRECTORY( po )
226
Stepan Salenikovich9aef3122015-03-20 17:04:09 -0400227ADD_EXECUTABLE(gnome-ring ${GLIB_RESOURCES_RING} ${SRC_FILES})
Stepan Salenikoviche3500cb2015-02-13 15:55:46 -0500228
Guillaume Roguez644caf42015-03-20 16:28:36 -0400229IF(NOT ${ENABLE_STATIC} MATCHES false)
Stepan Salenikovich9aef3122015-03-20 17:04:09 -0400230TARGET_LINK_LIBRARIES(gnome-ring
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500231 ${LIB_RING_CLIENT_LIBRARY}
232 ${GTK3_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400233 ${Qt5Core_LIBRARIES}
234 ${Qt5DBus_LIBRARIES}
Stepan Salenikovich36c025c2015-03-03 19:06:44 -0500235 ${CLUTTER_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400236 ${CLUTTERGTK_LIBRARIES}
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400237 ${EBOOK_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400238 -lpthread
239 -lrt
240 )
241ELSE()
Stepan Salenikovich9aef3122015-03-20 17:04:09 -0400242TARGET_LINK_LIBRARIES(gnome-ring
Guillaume Roguez644caf42015-03-20 16:28:36 -0400243 ${LIB_RING_CLIENT_LIBRARY}
244 ${GTK3_LIBRARIES}
245 ${Qt5Core_LIBRARIES}
246 ${CLUTTER_LIBRARIES}
247 ${CLUTTERGTK_LIBRARIES}
Stepan Salenikovich6f687072015-03-26 10:43:37 -0400248 ${EBOOK_LIBRARIES}
Guillaume Roguez644caf42015-03-20 16:28:36 -0400249 )
250ENDIF()
Stepan Salenikovich1c34fc52015-03-13 12:43:54 -0400251
Stepan Salenikovich9aef3122015-03-20 17:04:09 -0400252INSTALL(TARGETS gnome-ring
Stepan Salenikovich1c34fc52015-03-13 12:43:54 -0400253 RUNTIME DESTINATION bin
254)
Stepan Salenikovichb42fde72015-03-30 12:29:09 -0400255
256INSTALL(FILES ${PROJECT_BINARY_DIR}/gnome-ring.desktop
257 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications
258)
259
260INSTALL(FILES pixmaps/ring.svg
261 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps
262)
263
264INSTALL(FILES gnome-ring.appdata.xml
265 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/appdata/
266)
Stepan Salenikovich841deaf2015-04-15 16:08:39 -0400267
268# add a target to generate API documentation with Doxygen
269FIND_PACKAGE(Doxygen)
270IF(DOXYGEN_FOUND)
271 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile @ONLY)
272 ADD_CUSTOM_TARGET(doc
273 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile
274 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
275 COMMENT "Generating API documentation with Doxygen" VERBATIM
276 )
277
278 # create doc/README.md symlink to README since Doxygen doesn't understand file with no extension
279 ADD_CUSTOM_COMMAND(
280 TARGET doc
281 PRE_BUILD
282 COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_SOURCE_DIR}/doc/README.md
283 )
284ENDIF(DOXYGEN_FOUND)