Some small stuff, like adding semicolons to Qt macro defs in order to not
[quassel.git] / src / CMakeLists.txt
1 PROJECT(Quassel)
2
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)
5
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.")
8 SET(BUILD_CORE )
9 SET(BUILD_QTGUI )
10 SET(BUILD_MONO )
11 IF(BUILD MATCHES "core" OR BUILD MATCHES "all")
12   SET(BUILD_CORE true)
13   MESSAGE("Building Quassel core.")
14 ENDIF(BUILD MATCHES "core" OR BUILD MATCHES "all")
15 IF(BUILD MATCHES "gui" OR BUILD MATCHES "all")
16   SET(BUILD_QTGUI true)
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")
20   SET(BUILD_MONO true)
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)
26
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)
30
31 SET(CMAKE_BUILD_TYPE Debug)
32 SET(GCC_WARN "-Wall -Wextra -ansi -Wno-unused-parameter")  # may not be portable!
33
34 # Define files
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)
40
41 # Build correct absolute paths for subdirs to include
42 SET(SDIRS "")
43 FOREACH(dir ${quassel_DIRS})
44   SET(SDIRS ${SDIRS} "${CMAKE_CURRENT_SOURCE_DIR}/${dir}")
45 ENDFOREACH(dir)
46 INCLUDE_DIRECTORIES(${SDIRS} plugins contrib/qxt)
47 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/qtgui) # so that ui files are found
48
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)
52
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})
60
61 ADD_DEFINITIONS(${GCC_WARN})
62
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.
65
66 ADD_SUBDIRECTORY(contrib/qxt)
67 ADD_SUBDIRECTORY(common)
68 IF(BUILD_CORE)
69   ADD_SUBDIRECTORY(core)
70 ENDIF(BUILD_CORE)
71 IF(BUILD_MONO AND NOT BUILD_CORE)
72   ADD_SUBDIRECTORY(core)
73 ENDIF(BUILD_MONO AND NOT BUILD_CORE)
74
75 QT4_ADD_RESOURCES(_RCCS ${quassel_RCCS})
76
77 SET(TARGET_LIST )
78
79 IF(BUILD_CORE)
80   ADD_EXECUTABLE(quasselcore ${quassel_core_SRCS} ${_RCCS})
81   TARGET_LINK_LIBRARIES(quasselcore common core ${QT_LIBRARIES})
82   SET(TARGET_LIST ${TARGET_LIST} quasselcore)
83 ENDIF(BUILD_CORE)
84
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 "")
89   SET(QT_LIBRARIES "")
90   INCLUDE(${QT_USE_FILE})
91   ADD_SUBDIRECTORY(client)
92   ADD_SUBDIRECTORY(qtgui)
93
94   IF(BUILD_MONO)
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)
98   ENDIF(BUILD_MONO)
99
100   IF(BUILD_QTGUI)
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)
104   ENDIF(BUILD_QTGUI)
105
106 ENDIF(BUILD_QTGUI OR BUILD_MONO)
107
108 INSTALL(TARGETS ${TARGET_LIST}
109         RUNTIME DESTINATION bin
110         LIBRARY DESTINATION lib
111         ARCHIVE DESTINATION lib/static)