Big, big, major commit this time:
[quassel.git] / CMakeLists.txt
index f04e566..58a6b95 100644 (file)
@@ -1,33 +1,35 @@
 PROJECT(Quassel)
 
 PROJECT(Quassel)
 
-# CMAKE_MINIMUM_REQUIRED(VERSION 2.4.2)
+# 2.4.2 had a bug with out-of-source builds and UIC dependencies.
+CMAKE_MINIMUM_REQUIRED(VERSION 2.4.3 FATAL_ERROR)
 
 # Select if Quassel should be built in client, server or monolithic mode
 
 # Select if Quassel should be built in client, server or monolithic mode
-SET(BUILD "mono" CACHE STRING "Defines which Quassel parts are to be built. Can contain 'core', 'gui' and/or 'monolithic' (which is the default).")
+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.")
 SET(BUILD_CORE )
 SET(BUILD_GUI )
 SET(BUILD_MONO )
 SET(BUILD_CORE )
 SET(BUILD_GUI )
 SET(BUILD_MONO )
-IF(BUILD MATCHES "core")
+IF(BUILD MATCHES "core" OR BUILD MATCHES "all")
   SET(BUILD_CORE true)
   SET(BUILD_CORE true)
-  MESSAGE(STATUS "Building Quassel core.")
-ENDIF(BUILD MATCHES "core")
-IF(BUILD MATCHES "gui")
+  MESSAGE("Building Quassel core.")
+ENDIF(BUILD MATCHES "core" OR BUILD MATCHES "all")
+IF(BUILD MATCHES "gui" OR BUILD MATCHES "all")
   SET(BUILD_GUI true)
   SET(BUILD_GUI true)
-  MESSAGE(STATUS "Building Quassel GUI.")
-ENDIF(BUILD MATCHES "gui")
-IF(BUILD MATCHES "mono")
+  MESSAGE("Building Quassel GUI.")
+ENDIF(BUILD MATCHES "gui" OR BUILD MATCHES "all")
+IF(BUILD MATCHES "mono" OR BUILD MATCHES "all")
   SET(BUILD_MONO true)
   SET(BUILD_MONO true)
-  MESSAGE(STATUS "Building monolithic Quassel.")
-ENDIF(BUILD MATCHES "mono")
+  MESSAGE("Building monolithic Quassel.")
+ENDIF(BUILD MATCHES "mono" OR BUILD MATCHES "all")
 IF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_GUI)
 IF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_GUI)
-  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'.")
+  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")
 ENDIF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_GUI)
 
 # Define files
 SET(quassel_mono_SRCS main/main_mono.cpp)
 SET(quassel_core_SRCS main/main_core.cpp)
 ENDIF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_GUI)
 
 # Define files
 SET(quassel_mono_SRCS main/main_mono.cpp)
 SET(quassel_core_SRCS main/main_core.cpp)
+SET(quassel_gui_SRCS  main/main_gui.cpp ${common_SRCS})
 SET(quassel_RCCS images/icons.qrc)
 SET(quassel_RCCS images/icons.qrc)
-SET(quassel_DIRS gui core network)
+SET(quassel_DIRS main gui core network)
 
 # Build correct absolute paths for subdirs to include
 SET(SDIRS "")
 
 # Build correct absolute paths for subdirs to include
 SET(SDIRS "")
@@ -41,16 +43,29 @@ FIND_PACKAGE(Qt4 REQUIRED)
 
 # Set needed libraries
 SET(QT_USE_QTXML true)
 
 # Set needed libraries
 SET(QT_USE_QTXML true)
+SET(QT_USE_QTNETWORK true)
 SET(QT_DONT_USE_QTGUI true)   # This is added later if GUI is requested
 INCLUDE(${QT_USE_FILE})
 
 SET(QT_DONT_USE_QTGUI true)   # This is added later if GUI is requested
 INCLUDE(${QT_USE_FILE})
 
-ADD_SUBDIRECTORY(network)
-ADD_SUBDIRECTORY(core)
+# Define subdirs. CMake complains if a directory is added twice, so make sure this
+# does not happen in any combination of the requested targets.
+
+ADD_SUBDIRECTORY(main)
+IF(BUILD_CORE)
+  ADD_SUBDIRECTORY(core)
+  ADD_SUBDIRECTORY(network)
+ENDIF(BUILD_CORE)
+IF(BUILD_MONO AND NOT BUILD_CORE)
+  ADD_SUBDIRECTORY(core)
+  ADD_SUBDIRECTORY(network)
+ENDIF(BUILD_MONO AND NOT BUILD_CORE)
+
 QT4_ADD_RESOURCES(_RCCS ${quassel_RCCS})
 
 IF(BUILD_CORE)
 QT4_ADD_RESOURCES(_RCCS ${quassel_RCCS})
 
 IF(BUILD_CORE)
+  ADD_DEFINITIONS(-DBUILD_CORE)
   ADD_EXECUTABLE(quasselcore ${quassel_core_SRCS} ${_RCCS})
   ADD_EXECUTABLE(quasselcore ${quassel_core_SRCS} ${_RCCS})
-  TARGET_LINK_LIBRARIES(quasselcore core network ${QT_LIBRARIES})
+  TARGET_LINK_LIBRARIES(quasselcore core network main ${QT_LIBRARIES})
 ENDIF(BUILD_CORE)
 
 IF(BUILD_GUI OR BUILD_MONO)  # OK, now we need QtGui!
 ENDIF(BUILD_CORE)
 
 IF(BUILD_GUI OR BUILD_MONO)  # OK, now we need QtGui!
@@ -59,16 +74,18 @@ IF(BUILD_GUI OR BUILD_MONO)  # OK, now we need QtGui!
   SET(QT_INCLUDE_DIR "")
   SET(QT_LIBRARIES "")
   INCLUDE(${QT_USE_FILE})
   SET(QT_INCLUDE_DIR "")
   SET(QT_LIBRARIES "")
   INCLUDE(${QT_USE_FILE})
+  ADD_SUBDIRECTORY(gui)
 
   IF(BUILD_MONO)
 
   IF(BUILD_MONO)
-    ADD_SUBDIRECTORY(gui)
+    ADD_DEFINITIONS(-DBUILD_MONO)
     ADD_EXECUTABLE(quassel ${quassel_mono_SRCS} ${_RCCS})
     ADD_EXECUTABLE(quassel ${quassel_mono_SRCS} ${_RCCS})
-    TARGET_LINK_LIBRARIES(quassel gui core network ${QT_LIBRARIES})
+    TARGET_LINK_LIBRARIES(quassel gui core network main ${QT_LIBRARIES})
   ENDIF(BUILD_MONO)
 
   IF(BUILD_GUI)
   ENDIF(BUILD_MONO)
 
   IF(BUILD_GUI)
-    ADD_SUBDIRECTORY(gui)
-    MESSAGE(FATAL_ERROR "Client mode not yet supported.")
+    ADD_DEFINITIONS(-DBUILD_GUI)
+    ADD_EXECUTABLE(quasselgui ${quassel_gui_SRCS} ${_RCCS})
+    TARGET_LINK_LIBRARIES(quasselgui gui main ${QT_LIBRARIES})
   ENDIF(BUILD_GUI)
 
 ENDIF(BUILD_GUI OR BUILD_MONO)
   ENDIF(BUILD_GUI)
 
 ENDIF(BUILD_GUI OR BUILD_MONO)