| 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) |