1
CMAKE_MINIMUM_REQUIRED (VERSION 2.6 FATAL_ERROR)
2
IF (COMMAND cmake_policy)
3
	cmake_policy (SET CMP0003 NEW)
4
ENDIF (COMMAND cmake_policy)
5
PROJECT( qutim )
6
SET(QT_MIN_VERSION "4.6.0")
7
8
set(CMAKE_QUTIM_VERSION_MAJOR    0  CACHE INT "Major qutIM version number" FORCE)
9
set(CMAKE_QUTIM_VERSION_MINOR    2  CACHE INT "Minor qutIM version number" FORCE)
10
set(CMAKE_QUTIM_VERSION_SECMINOR 80 CACHE INT "Secminor qutIM version number" FORCE)
11
set(CMAKE_QUTIM_VERSION_PATCH    0  CACHE INT "Release qutIM version number" FORCE)
12
set(CMAKE_QUTIM_VERSION_STRING "${CMAKE_QUTIM_VERSION_MAJOR}.${CMAKE_QUTIM_VERSION_MINOR}.${CMAKE_QUTIM_VERSION_SECMINOR}.${CMAKE_QUTIM_VERSION_PATCH}" CACHE STRING "qutIM version string" FORCE)
13
14
ADD_DEFINITIONS ( -DLIBQUTIM_LIBRARY )
15
16
if( UNIX )
17
	if( BSD )
18
		SET( CMAKE_THREAD_LIBS -pthread )
19
		SET( CMAKE_USE_PTHREADS ON )
20
		SET( CMAKE_EXE_LINKER_FLAGS -pthread )
21
	endif( BSD )
22
endif( UNIX )
23
24
SET (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
25
SET (CMAKE_BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
26
SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
27
LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
28
SET (QT_USE_QTNETWORK true)
29
SET (QT_USE_QTXML true)
30
SET (QT_USE_QTSCRIPT true)
31
32
SET (QUTIM_PLUGINS_DEST "lib/qutim/")
33
FIND_PACKAGE (Qt4 REQUIRED)
34
35
INCLUDE(CPackOptions.cmake.in)
36
INCLUDE(UseQt4)
37
INCLUDE(MacroEnsureVersion)
38
INCLUDE(QutIMMacros)
39
40
#simple hack for include dirs
41
macro(LIST_SUBDIRECTORIES retval curdir)
42
	file(GLOB sub-dir RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${curdir}/*)
43
	set(list_of_dirs "")
44
	foreach(dir ${sub-dir})
45
		#TODO fix IS DIRECTORY macro
46
		if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${dir})
47
			message(STATUS "Found 3rdparty dir: ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${dir}")
48
		endif()
49
	endforeach()
50
	set(${retval} ${sub-dir})
51
endmacro()
52
53
LIST_SUBDIRECTORIES(3RDPARTY_INCLUDE_DIRS "3rdparty")
54
55
#Include X11, spike for freebsd
56
FIND_PACKAGE(X11)
57
58
INCLUDE_DIRECTORIES (.
59
	..
60
	../3rdparty
61
	src
62
	${CMAKE_CURRENT_BINARY_DIR}
63
	include
64
	${QT_QTGUI_INCLUDE_DIR}
65
	${QT_QTCORE_INCLUDE_DIR}
66
	${QT_QTXML_INCLUDE_DIR}	
67
	${3RDPARTY_INCLUDE_DIRS}
68
	${X11_INCLUDE_DIR}		
69
	)
70
71
if( WIN32 )
72
	list(APPEND QUTIM_LIBS secur32 )
73
endif( WIN32 )
74
75
file( GLOB HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h" )
76
file( GLOB SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp" )
77
file( GLOB SOURCES_MM RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.mm" )
78
list( APPEND SOURCE SOURCE_MM} )
79
file( GLOB FORMS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.ui" )
80
list( APPEND SOURCES "main.cpp" )
81
82
SET (RESOURCES
83
	qutim.qrc
84
	)
85
86
#TODO fix in future
87
if (MINGW)
88
	find_program( MINGW_WINDRES NAMES "mingw32-windres" "windres" )
89
	execute_process( COMMAND "${MINGW_WINDRES}"
90
		"-i" "${CMAKE_CURRENT_SOURCE_DIR}/qutim.rc" "-o" "${CMAKE_CURRENT_BINARY_DIR}/qutim_res.o" )
91
	LIST (APPEND SOURCES qutim_res.o)
92
else(MINGW)
93
	LIST (APPEND SOURCES qutim.rc)
94
endif(MINGW)
95
96
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/libqutim/" "${CMAKE_CURRENT_BINARY_DIR}/libqutim")
97
98
find_package( QutIM REQUIRED )
99
include_directories( ${QUTIM_INCLUDE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/libqutim/include/qutim_hook" )
100
101
REMOVE_DEFINITIONS ( -DLIBQUTIM_LIBRARY )
102
103
set( QUTIM_PATH ${CMAKE_CURRENT_SOURCE_DIR} CACHE FILEPATH "Path to qutim sources")
104
set( QUTIM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE FILEPATH "Path to qutim build directory")
105
option( QUTIM_COPY_PLUGINS_TO_BINARY_DIR "Copy plugins to qutim build directory" OFF )
106
set( QUTIM_LIBRARIES libqutim )
107
108
# For Apple set the icns file containing icons
109
IF(APPLE)
110
	# set how it shows up in the Info.plist file
111
	SET(MACOSX_BUNDLE_ICON_FILE qutim.icns)
112
	SET(MACOSX_BUNDLE_INFO_STRING "Module based instant messenger")
113
	SET(MACOSX_BUNDLE_LONG_VERSION_STRING "0.3 beta (0.2.80)")
114
	SET(MACOSX_BUNDLE_BUNDLE_NAME "qutIM")
115
	SET(MACOSX_BUNDLE_BUNDLE_VERSION "0.3 beta")
116
	# set where in the bundle to put the icns file
117
	SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/qutim.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
118
	# include the icns file in the target
119
	SET(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/qutim.icns)
120
	GET_FILENAME_COMPONENT(qt_lib_path ${QT_QTGUI_LIBRARY_RELEASE} PATH)
121
	find_path(qtmenu_nib_path NAMES "classes.nib" "info.nib"  PATHS "${QT_QTGUI_LIBRARY_RELEASE}/Resources/qt_menu.nib"
122
		"${qt_lib_path}/Resources/qt_menu.nib"
123
	)
124
	set(qt_menu_nib_sources "${qtmenu_nib_path}/classes.nib" "${qtmenu_nib_path}/info.nib" "${qtmenu_nib_path}/keyedobjects.nib" )
125
	SET_SOURCE_FILES_PROPERTIES(${qt_menu_nib_sources} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/qt_menu.nib)
126
	SET(SOURCES ${SOURCES} ${qt_menu_nib_sources})
127
ENDIF(APPLE)
128
129
IF (APPLE)
130
	IF (${CMAKE_GENERATOR} MATCHES "Unix Makefiles")
131
		set (QUTIM_BUNDLE_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/qutim.app")
132
		add_custom_target(qutim-bundle ALL)
133
		add_dependencies(qutim-bundle qutim translations)
134
	ELSE(${CMAKE_GENERATOR} MATCHES "Unix Makefiles")
135
		message (WARNING "You have to use Unix Makefiles generator to automatically bundle deploying")
136
		set (QUTIM_BUNDLE_LOCATION "")
137
	ENDIF(${CMAKE_GENERATOR} MATCHES "Unix Makefiles")
138
ENDIF(APPLE)
139
140
#additional resources path
141
set (QUTIM_ADDITIONAL_RESOURCES_PATH "" CACHE PATH "Path to additional resources")
142
143
set( QUTIM_ADDITIONAL_SOURCES "" CACHE INTERNAL "" FORCE )
144
set( QUTIM_ADDITIONAL_LIBRARIES "" CACHE INTERNAL "" FORCE )
145
set( QUTIM_ADDITIONAL_RCC ${QUTIM_ADDITIONAL_RESOURCES_PATH} CACHE INTERNAL "" FORCE )
146
147
add_subdirectory(src/corelayers)
148
foreach( additional_path ${QUTIM_ADDITIONAL_PATHS} )
149
	add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/../${additional_path}/" "${CMAKE_CURRENT_BINARY_DIR}/../${additional_path}" )
150
endforeach( additional_path ${QUTIM_ADDITIONAL_PATHS} )
151
152
message(STATUS ${QUTIM_ADDITIONAL_RCC})
153
list(APPEND RESOURCES ${QUTIM_ADDITIONAL_RCC})
154
155
QT4_WRAP_CPP (MOC_SRCS ${HEADERS})
156
QT4_WRAP_UI (UIS_H ${FORMS})
157
QT4_ADD_RESOURCES (RCC ${RESOURCES})
158
159
#QUTIM_ADD_OPTION(QUTIM_MOBILE_UI
160
#	"User interface for mobile devices like Nokia 5800"
161
#	"qutIM will be compiled with mobile ui"
162
#	OFF
163
#)
164
165
QUTIM_ADD_OPTION(QUTIM_SINGLE_PROFILE
166
	"Single profil by default" 
167
	"qutIM will be compiled without multiply profiles by default"
168
	ON
169
)
170
IF (APPLE)
171
	set (DEFAULT_QUTIM_GUI_TYPE "MACOSX_BUNDLE")
172
	IF (NOT CMAKE_BUILD_TYPE)
173
		set (CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
174
	ENDIF(NOT CMAKE_BUILD_TYPE)
175
ELSE (APPLE)
176
	set (DEFAULT_QUTIM_GUI_TYPE "")
177
ENDIF (APPLE)
178
SET( QUTIM_GUI_TYPE ${DEFAULT_QUTIM_GUI_TYPE} CACHE STRING "qutIM GUI TYPE" )
179
IF( QUTIM_GUI_TYPE )
180
	MESSAGE(STATUS "qutIM will be compiled with ${QUTIM_GUI_TYPE} GUI type")
181
ENDIF()
182
183
QUTIM_ADD_EXECUTABLE (qutim
184
	${QUTIM_GUI_TYPE}
185
	${SOURCES}
186
	${HEADERS}
187
	${MOC_SRCS}
188
	${UIS_H}
189
	${RCC}
190
	${QUTIM_ADDITIONAL_SOURCES}
191
	)
192
193
if(MSVC)
194
	set(QUTIM_COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS} /W3")
195
	set(LIBQUTIM_COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS} /W3")
196
else()
197
	if(SYMBIAN)
198
		#disable stupid warnings
199
		set(QUTIM_COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS} -w")
200
		set(LIBQUTIM_COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS} -w")
201
	else()
202
		set(QUTIM_COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS} -Wall -Wextra")
203
		set(LIBQUTIM_COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS} -Wall -Wextra")
204
		if(NOT WIN32)
205
			set(LIBQUTIM_COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS} -fvisibility=hidden")
206
		endif(NOT WIN32)
207
	endif()
208
endif()
209
210
set(QUTIM_COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS} -DQUTIM_CORE -DXDG_STATIC")
211
set_target_properties(qutim PROPERTIES COMPILE_FLAGS "${QUTIM_COMPILE_FLAGS}")
212
set_target_properties(libqutim PROPERTIES COMPILE_FLAGS "${LIBQUTIM_COMPILE_FLAGS}")
213
214
qutim_target_link_libraries (qutim
215
	${QT_LIBRARIES}
216
	${QT_QTMAIN_LIBRARY}
217
	${QUTIM_LIBS}
218
	${QUTIM_ADDITIONAL_LIBRARIES}
219
	libqutim
220
	)
221
222
IF (APPLE AND QUTIM_BUNDLE_LOCATION)
223
224
	macro(_deploy_plugins_dir _plugin)
225
		set(plugin_dir "${QT_PLUGINS_DIR}/${_plugin}")
226
		file(GLOB plugins ${plugin_dir} "${plugin_dir}/*.dylib")
227
		get_filename_component(category ${plugin_dir} NAME_WE)
228
		get_filename_component(_abs_FILE ${plugin_dir} ABSOLUTE)
229
		foreach(plugin ${plugins})
230
			get_filename_component(_abs_PATH ${plugin} ABSOLUTE)
231
			get_filename_component(name ${plugin} NAME)
232
			#TODO remove this hack
233
			if(NOT ${_abs_PATH} STREQUAL ${_abs_FILE})
234
				add_custom_command(TARGET qutim-bundle POST_BUILD
235
					COMMAND ${CMAKE_COMMAND}
236
						ARGS -E copy
237
						${_abs_PATH}
238
						${QUTIM_BUNDLE_LOCATION}/Contents/PlugIns/${category}/${name}
239
				)
240
			endif()
241
		endforeach()
242
	endmacro()
243
244
	macro(_mac_deploy_plugin _dir _plugin)
245
		set(plugin "${_dir}/lib${_plugin}.dylib") #evil hack
246
		get_filename_component(_absfile "${QT_PLUGINS_DIR}/${plugin}" ABSOLUTE)
247
		if(EXISTS ${_absfile})
248
			message(STATUS "found ${_dir}/${_plugin} plugin.")
249
			add_custom_command(TARGET qutim-bundle POST_BUILD
250
				COMMAND ${CMAKE_COMMAND}
251
					ARGS -E copy
252
					${_absfile}
253
					${QUTIM_BUNDLE_LOCATION}/Contents/PlugIns/${plugin}
254
			)
255
		endif()
256
	endmacro()
257
258
	_mac_deploy_plugin(bearer qcorewlanbearer)
259
	_mac_deploy_plugin(bearer qgenericbearer)
260
261
	_mac_deploy_plugin(iconengines qsvgicon)
262
263
	_mac_deploy_plugin(imageformats qgif)
264
	_mac_deploy_plugin(imageformats qsvg)
265
	_mac_deploy_plugin(imageformats qjpeg)
266
	_mac_deploy_plugin(imageformats qmng)
267
268
	add_custom_command(TARGET qutim-bundle POST_BUILD
269
		COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/utils/deployqutim.sh
270
			${QUTIM_BUNDLE_LOCATION}
271
		)
272
273
ENDIF (APPLE AND QUTIM_BUNDLE_LOCATION)
274
275
if( LANGUAGE )
276
	LANGUAGE_UPDATE( core ${LANGUAGE} "${CMAKE_CURRENT_SOURCE_DIR}" )
277
endif( LANGUAGE )
278
279
FILE(GLOB CMAKE_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.cmake")
280
281
FILE (GLOB DEV_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/libqutim/*.h")
282
FILE (GLOB DEV_HEADERS_EXCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/libqutim/*_p.h")
283
LIST(REMOVE_ITEM DEV_HEADERS ${DEV_HEADERS_EXCLUDE})
284
285
INSTALL(FILES ${CMAKE_MODULES}
286
	DESTINATION share/cmake/Modules
287
		COMPONENT CoreDevel
288
)
289
INSTALL(TARGETS qutim
290
	RUNTIME DESTINATION bin
291
		COMPONENT Core
292
	BUNDLE DESTINATION .
293
		COMPONENT Core
294
)
295
296
QUTIM_ADD_ARTWORK_DIR(share/qutim)
297
298
IF(UNIX AND NOT APPLE)
299
	INSTALL(DIRECTORY share/applications share/icons share/pixmaps
300
		DESTINATION share
301
			COMPONENT Core
302
	)
303
ENDIF()
304
305
INSTALL(DIRECTORY share/config
306
	DESTINATION share/qutim
307
		COMPONENT Core
308
)
309
310
CPACK_ADD_COMPONENT(Core
311
	DISPLAY_NAME "Core"
312
	DESCRIPTION "TODO"
313
)
314
315
if(QUTIM_DEVELOPER_BUILD)
316
	message(STATUS "Selected developer build. Development tools will be installed")
317
else()
318
	message(STATUS "Development tools will not be installed")
319
endif()
320
321
qutim_add_devel_component(CoreDevel
322
	DISPLAY_NAME "Core Devel"
323
	DESCRIPTION "Common devel files"
324
)
325
326
#additional artwork sources
327
SET(QUTIM_ADDITIONAL_ART_PATH "-NOTFOUND" CACHE PATH "Path to additional artwork")
328
IF(QUTIM_ADDITIONAL_ART_PATH)
329
	QUTIM_ADD_ARTWORK_DIR(${QUTIM_ADDITIONAL_ART_PATH})
330
ENDIF()
331
332
CPACK_ADD_COMPONENT(Core
333
	DISPLAY_NAME "Core"
334
	DESCRIPTION "TODO"
335
)
336
CPACK_ADD_COMPONENT(CoreDevel
337
	DISPLAY_NAME "Core Devel"
338
	DESCRIPTION "Common devel files"
339
)
340
341
#small simple hack for install Qt dlls and plugins
342
IF(WIN32)
343
	SET(QUTIM_REQUIRED_DLL_DIR "" CACHE PATH "Path to Qt dll's and plugins. Note: you must add them yourself")
344
	FILE(GLOB dlls ${QUTIM_REQUIRED_DLL_DIR}/*)
345
	FOREACH(QUTIM_DLL ${dlls})
346
		IF(IS_DIRECTORY ${QUTIM_DLL})
347
			INSTALL(DIRECTORY ${QUTIM_DLL}
348
				DESTINATION bin
349
					COMPONENT Qt
350
			)
351
		ELSEIF(${QUTIM_DLL} MATCHES ".\\.dll")
352
			INSTALL(FILES ${QUTIM_DLL}
353
				DESTINATION bin
354
					COMPONENT Qt
355
			)
356
		ENDIF()
357
	ENDFOREACH()
358
	LIST(APPEND CPACK_COMPONENTS_ALL Qt)
359
	CPACK_ADD_COMPONENT(Qt
360
		DISPLAY_NAME "Qt Libraries"
361
		DESCRIPTION ""
362
	)
363
ENDIF(WIN32)