Big refactoring completed. Everything prepared for the separation of core and gui.
[quassel.git] / CMakeLists.txt
1 PROJECT(Quassel)
2
3 # CMAKE_MINIMUM_REQUIRED(VERSION 2.4.2)
4
5 # Select if Quassel should be built in client, server or monolithic mode
6 SET(BUILD "mono" CACHE STRING "Defines which Quassel parts are to be built. Can contain 'core', 'gui' and/or 'monolithic' (which is the default).")
7 SET(BUILD_CORE )
8 SET(BUILD_GUI )
9 SET(BUILD_MONO )
10 IF(BUILD MATCHES "core")
11   SET(BUILD_CORE true)
12   MESSAGE(STATUS "Building Quassel core.")
13 ENDIF(BUILD MATCHES "core")
14 IF(BUILD MATCHES "gui")
15   SET(BUILD_GUI true)
16   MESSAGE(STATUS "Building Quassel GUI.")
17 ENDIF(BUILD MATCHES "gui")
18 IF(BUILD MATCHES "mono")
19   SET(BUILD_MONO true)
20   MESSAGE(STATUS "Building monolithic Quassel.")
21 ENDIF(BUILD MATCHES "mono")
22 IF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_GUI)
23   MESSAGE(FATAL_ERROR "You have not selected which parts of Quassel I should build. Aborting.\nRun 'cmake -DBUILD=<part>', where <part> contains one or more of 'core', 'gui' or 'monolithic'.")
24 ENDIF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_GUI)
25
26 # Define files
27 SET(quassel_mono_SRCS main/main_mono.cpp)
28 SET(quassel_core_SRCS main/main_core.cpp)
29 #SET(quassel_gui_SRCS  main/main_gui.cpp ${common_SRCS})
30 SET(quassel_RCCS images/icons.qrc)
31 SET(quassel_DIRS main gui core network)
32
33 # Build correct absolute paths for subdirs to include
34 SET(SDIRS "")
35 FOREACH(dir ${quassel_DIRS})
36   SET(SDIRS ${SDIRS} "${CMAKE_CURRENT_SOURCE_DIR}/${dir}")
37 ENDFOREACH(dir)
38 INCLUDE_DIRECTORIES(${SDIRS})
39
40 # We need Qt4 support.
41 FIND_PACKAGE(Qt4 REQUIRED)
42
43 # Set needed libraries
44 SET(QT_USE_QTXML true)
45 SET(QT_USE_QTNETWORK true)
46 SET(QT_DONT_USE_QTGUI true)   # This is added later if GUI is requested
47 INCLUDE(${QT_USE_FILE})
48
49 ADD_SUBDIRECTORY(main)
50 QT4_ADD_RESOURCES(_RCCS ${quassel_RCCS})
51
52 IF(BUILD_CORE)
53   ADD_DEFINITIONS(-DBUILD_CORE)
54   ADD_SUBDIRECTORY(network)
55   ADD_SUBDIRECTORY(core)
56   ADD_EXECUTABLE(quasselcore ${quassel_core_SRCS} ${_RCCS})
57   TARGET_LINK_LIBRARIES(quasselcore core network main ${QT_LIBRARIES})
58 ENDIF(BUILD_CORE)
59
60 IF(BUILD_GUI OR BUILD_MONO)  # OK, now we need QtGui!
61   REMOVE_DEFINITIONS(-DQT_CORE_LIB -DQT_GUI_LIB ${QT_DEFINITIONS})
62   SET(QT_DONT_USE_QTGUI "")
63   SET(QT_INCLUDE_DIR "")
64   SET(QT_LIBRARIES "")
65   INCLUDE(${QT_USE_FILE})
66
67   IF(BUILD_MONO)
68     ADD_DEFINITIONS(-DBUILD_MONO)
69     ADD_SUBDIRECTORY(gui)
70     ADD_SUBDIRECTORY(network)
71     ADD_SUBDIRECTORY(core)
72     ADD_EXECUTABLE(quassel ${quassel_mono_SRCS} ${_RCCS})
73     TARGET_LINK_LIBRARIES(quassel gui core network main ${QT_LIBRARIES})
74   ENDIF(BUILD_MONO)
75
76   IF(BUILD_GUI)
77     ADD_DEFINITIONS(-DBUILD_GUI)
78     ADD_SUBDIRECTORY(gui)
79     ADD_EXECUTABLE(quasselgui ${quassel_gui_SRCS} ${_RCCS})
80     TARGET_LINK_LIBRARIES(quasselgui gui main ${QT_LIBRARIES})
81   ENDIF(BUILD_GUI)
82
83 ENDIF(BUILD_GUI OR BUILD_MONO)