3 # 2.4.2 had a bug with out-of-source builds and UIC dependencies.
4 CMAKE_MINIMUM_REQUIRED(VERSION 2.4.3 FATAL_ERROR)
6 # Select if Quassel should be built in client, server or monolithic mode
7 SET(BUILD "mono" CACHE STRING "Defines which Quassel parts are to be built. Can contain 'core', 'gui' and/or 'monolithic' (which is the default), or 'all' to build everything.")
11 IF(BUILD MATCHES "core" OR BUILD MATCHES "all")
13 MESSAGE("Building Quassel core.")
14 ENDIF(BUILD MATCHES "core" OR BUILD MATCHES "all")
15 IF(BUILD MATCHES "gui" OR BUILD MATCHES "all")
17 MESSAGE("Building Quassel GUI for Qt.")
18 ENDIF(BUILD MATCHES "gui" OR BUILD MATCHES "all")
19 IF(BUILD MATCHES "mono" OR BUILD MATCHES "all")
21 MESSAGE("Building monolithic Quassel.")
22 ENDIF(BUILD MATCHES "mono" OR BUILD MATCHES "all")
23 IF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_QTGUI)
24 MESSAGE(FATAL_ERROR "\nYou have not selected which parts of Quassel I should build. Aborting.\nRun 'cmake <path> -DBUILD=<part>', where <part> contains one or more of 'core', 'gui' or 'monolithic', or 'all' to build everything.\n")
25 ENDIF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_QTGUI)
27 #IF(BUILD_CORE OR BUILD_QTGUI)
28 # MESSAGE(FATAL_ERROR "\nBuilding of standalone core or GUI not supported at this time. Please check back later.\n")
29 #ENDIF(BUILD_CORE OR BUILD_QTGUI)
31 SET(CMAKE_BUILD_TYPE Debug)
32 SET(GCC_WARN "-Wall -Wextra -ansi -Wno-unused-parameter") # may not be portable!
35 SET(quassel_mono_SRCS common/build_mono.cpp)
36 SET(quassel_core_SRCS common/build_core.cpp)
37 SET(quassel_qtgui_SRCS common/build_qtgui.cpp)
38 SET(quassel_RCCS images/icons.qrc)
39 SET(quassel_DIRS common client core qtgui)
41 # Build correct absolute paths for subdirs to include
43 FOREACH(dir ${quassel_DIRS})
44 SET(SDIRS ${SDIRS} "${CMAKE_CURRENT_SOURCE_DIR}/${dir}")
46 INCLUDE_DIRECTORIES(${SDIRS} plugins contrib/qxt)
47 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/qtgui) # so that ui files are found
49 # We need Qt4 support.
50 SET(QT_MIN_VERSION "4.3.0") # 4.3 is required for SSL, crypto and some other stuff
51 FIND_PACKAGE(Qt4 REQUIRED)
53 # Set needed libraries
54 SET(QT_USE_QTXML true)
55 SET(QT_USE_QTSQL true)
56 SET(QT_USE_QTNETWORK true)
57 SET(QT_USE_QTUITOOLS true)
58 SET(QT_DONT_USE_QTGUI true) # This is added later if GUI is requested
59 INCLUDE(${QT_USE_FILE})
61 ADD_DEFINITIONS(${GCC_WARN})
63 # Define subdirs. CMake complains if a directory is added twice, so make sure this
64 # does not happen in any combination of the requested targets.
66 ADD_SUBDIRECTORY(contrib/qxt)
67 ADD_SUBDIRECTORY(common)
69 ADD_SUBDIRECTORY(core)
71 IF(BUILD_MONO AND NOT BUILD_CORE)
72 ADD_SUBDIRECTORY(core)
73 ENDIF(BUILD_MONO AND NOT BUILD_CORE)
75 QT4_ADD_RESOURCES(_RCCS ${quassel_RCCS})
80 ADD_EXECUTABLE(quasselcore ${quassel_core_SRCS} ${_RCCS})
81 TARGET_LINK_LIBRARIES(quasselcore common core ${QT_LIBRARIES})
82 SET(TARGET_LIST ${TARGET_LIST} quasselcore)
85 IF(BUILD_QTGUI OR BUILD_MONO) # OK, now we need QtGui!
86 REMOVE_DEFINITIONS(-DQT_CORE_LIB -DQT_GUI_LIB ${QT_DEFINITIONS})
87 SET(QT_DONT_USE_QTGUI "")
88 SET(QT_INCLUDE_DIR "")
90 INCLUDE(${QT_USE_FILE})
91 ADD_SUBDIRECTORY(client)
92 ADD_SUBDIRECTORY(qtgui)
95 ADD_EXECUTABLE(quassel ${quassel_mono_SRCS} ${_RCCS})
96 TARGET_LINK_LIBRARIES(quassel common client core qtgui ${QT_LIBRARIES})
97 SET(TARGET_LIST ${TARGET_LIST} quassel)
101 ADD_EXECUTABLE(quasselclient ${quassel_qtgui_SRCS} ${_RCCS})
102 TARGET_LINK_LIBRARIES(quasselclient common client qtgui ${QT_LIBRARIES})
103 SET(TARGET_LIST ${TARGET_LIST} quasselclient)
106 ENDIF(BUILD_QTGUI OR BUILD_MONO)
108 INSTALL(TARGETS ${TARGET_LIST}
109 RUNTIME DESTINATION bin
110 LIBRARY DESTINATION lib
111 ARCHIVE DESTINATION lib/static)