X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2FCMakeLists.txt;h=05c0c2a439c5246858bbd5d58273aff38ae7316e;hp=7e0244ffd80d83b3de9b82d2844d435b00f88d64;hb=dc2aa39d20b60e7cd8e0ba66ca6c9ed729add008;hpb=8c3b7e4773e9f20ad9ea264cbaafaa52485bdf86 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7e0244ff..05c0c2a4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,109 +1,82 @@ -PROJECT(Quassel) - -# 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 -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_QTGUI ) -SET(BUILD_MONO ) -IF(BUILD MATCHES "core" OR BUILD MATCHES "all") - SET(BUILD_CORE true) - MESSAGE("Building Quassel core.") -ENDIF(BUILD MATCHES "core" OR BUILD MATCHES "all") -IF(BUILD MATCHES "gui" OR BUILD MATCHES "all") - SET(BUILD_QTGUI true) - MESSAGE("Building Quassel GUI for Qt.") -ENDIF(BUILD MATCHES "gui" OR BUILD MATCHES "all") -IF(BUILD MATCHES "mono" OR BUILD MATCHES "all") - SET(BUILD_MONO true) - MESSAGE("Building monolithic Quassel.") -ENDIF(BUILD MATCHES "mono" OR BUILD MATCHES "all") -IF(NOT BUILD_MONO AND NOT BUILD_CORE AND NOT BUILD_QTGUI) - MESSAGE(FATAL_ERROR "\nYou have not selected which parts of Quassel I should build. Aborting.\nRun 'cmake -DBUILD=', where 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_QTGUI) - -#IF(BUILD_CORE OR BUILD_QTGUI) -# MESSAGE(FATAL_ERROR "\nBuilding of standalone core or GUI not supported at this time. Please check back later.\n") -#ENDIF(BUILD_CORE OR BUILD_QTGUI) - -SET(CMAKE_BUILD_TYPE Debug) - -# Define files -SET(quassel_mono_SRCS common/build_mono.cpp) -SET(quassel_core_SRCS common/build_core.cpp) -SET(quassel_qtgui_SRCS common/build_qtgui.cpp) -SET(quassel_RCCS images/icons.qrc) -SET(quassel_DIRS common client core qtgui) - -# Build correct absolute paths for subdirs to include -SET(SDIRS "") -FOREACH(dir ${quassel_DIRS}) - SET(SDIRS ${SDIRS} "${CMAKE_CURRENT_SOURCE_DIR}/${dir}") -ENDFOREACH(dir) -INCLUDE_DIRECTORIES(${SDIRS} plugins) -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/qtgui) # so that ui files are found - -# We need Qt4 support. -SET(QT_MIN_VERSION "4.3.0") # 4.3 is required for SSL, crypto and some other stuff -FIND_PACKAGE(Qt4 REQUIRED) - -# Set needed libraries -SET(QT_USE_QTXML true) -SET(QT_USE_QTSQL true) -SET(QT_USE_QTNETWORK true) -SET(QT_USE_QTUITOOLS true) -SET(QT_DONT_USE_QTGUI true) # This is added later if GUI is requested -INCLUDE(${QT_USE_FILE}) - -# 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(common) -IF(BUILD_CORE) - ADD_SUBDIRECTORY(core) -ENDIF(BUILD_CORE) -IF(BUILD_MONO AND NOT BUILD_CORE) - ADD_SUBDIRECTORY(core) -ENDIF(BUILD_MONO AND NOT BUILD_CORE) - -QT4_ADD_RESOURCES(_RCCS ${quassel_RCCS}) - -ADD_DEFINITIONS(-Wall -Wextra -ansi) # may not be portable! - -SET(TARGET_LIST ) - -IF(BUILD_CORE) - ADD_EXECUTABLE(quasselcore ${quassel_core_SRCS} ${_RCCS}) - TARGET_LINK_LIBRARIES(quasselcore common core ${QT_LIBRARIES}) - SET(TARGET_LIST ${TARGET_LIST} quasselcore) -ENDIF(BUILD_CORE) - -IF(BUILD_QTGUI OR BUILD_MONO) # OK, now we need QtGui! - REMOVE_DEFINITIONS(-DQT_CORE_LIB -DQT_GUI_LIB ${QT_DEFINITIONS}) - SET(QT_DONT_USE_QTGUI "") - SET(QT_INCLUDE_DIR "") - SET(QT_LIBRARIES "") - INCLUDE(${QT_USE_FILE}) - ADD_SUBDIRECTORY(client) - ADD_SUBDIRECTORY(qtgui) - - IF(BUILD_MONO) - ADD_EXECUTABLE(quassel ${quassel_mono_SRCS} ${_RCCS}) - TARGET_LINK_LIBRARIES(quassel common client core qtgui ${QT_LIBRARIES}) - SET(TARGET_LIST ${TARGET_LIST} quassel) - ENDIF(BUILD_MONO) - - IF(BUILD_QTGUI) - ADD_EXECUTABLE(quasselclient ${quassel_qtgui_SRCS} ${_RCCS}) - TARGET_LINK_LIBRARIES(quasselclient common client qtgui ${QT_LIBRARIES}) - SET(TARGET_LIST ${TARGET_LIST} quasselclient) - ENDIF(BUILD_QTGUI) - -ENDIF(BUILD_QTGUI OR BUILD_MONO) - -INSTALL(TARGETS ${TARGET_LIST} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib/static) +# Builds the three main targets + +add_subdirectory(common) +include_directories(BEFORE common) +if(WANT_CORE OR WANT_MONO) + add_subdirectory(core) + include_directories(BEFORE core) +endif(WANT_CORE OR WANT_MONO) +if(WANT_QTCLIENT OR WANT_MONO) + add_subdirectory(client) + add_subdirectory(uisupport) + add_subdirectory(qtui) + include_directories(BEFORE client) + include_directories(BEFORE uisupport) + include_directories(BEFORE qtui) +# if(HAVE_KDE) +# add_subdirectory(kdeui) +# include_directories(kdeui) +# set(LINK_KDE mod_kdeui) +# endif(HAVE_KDE) +endif(WANT_QTCLIENT OR WANT_MONO) + +include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) # for version.gen + +# Add resources. Can't be done in other subdirs apparently. +# Note that these variables need to contain paths relative to src/ (this dir) +qt4_add_resources(CLIENT_DEPS ${CLIENT_RCS}) +qt4_add_resources(CORE_DEPS ${CORE_RCS}) +qt4_add_resources(COMMON_DEPS ${COMMON_RCS}) + +if(WANT_CORE) + setup_qt4_variables(NETWORK SCRIPT SQL) + add_executable(quasselcore common/main.cpp ${COMMON_DEPS} ${CORE_DEPS}) + add_dependencies(quasselcore i18n genversion_run) + set_target_properties(quasselcore PROPERTIES + COMPILE_FLAGS "-DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB -DBUILD_CORE" + OUTPUT_NAME ../quasselcore) + target_link_libraries(quasselcore mod_core mod_common + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES}) + install(TARGETS quasselcore RUNTIME DESTINATION ${BIN_INSTALL_DIR}) +endif(WANT_CORE) + +if(WANT_QTCLIENT) + setup_qt4_variables(${LINK_DBUS} GUI NETWORK ${LINK_WEBKIT}) + add_executable(quasselclient WIN32 common/main.cpp ${COMMON_DEPS} ${CLIENT_DEPS}) + add_dependencies(quasselclient i18n genversion_run) + set_target_properties(quasselclient PROPERTIES + COMPILE_FLAGS "-DQT_GUI_LIB -DQT_NETWORK_LIB -DBUILD_QTUI" + OUTPUT_NAME ../quasselclient) + target_link_libraries(quasselclient ${LINK_KDE} mod_qtui mod_uisupport mod_client mod_common + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_KDE_LIBRARIES} ${QUASSEL_SSL_LIBRARIES} ${PHONON_LIBS}) + install(TARGETS quasselclient RUNTIME DESTINATION ${BIN_INSTALL_DIR}) +endif(WANT_QTCLIENT) + +if(WANT_MONO) + setup_qt4_variables(${LINK_DBUS} GUI NETWORK SCRIPT SQL ${LINK_WEBKIT}) + qt4_wrap_cpp(MOC qtui/monoapplication.h) + add_executable(quassel WIN32 common/main.cpp qtui/monoapplication.cpp ${MOC} ${COMMON_DEPS} ${CLIENT_DEPS} ${CORE_DEPS}) + add_dependencies(quassel i18n genversion_run) + set_target_properties(quassel PROPERTIES + COMPILE_FLAGS "-DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB -DBUILD_MONO" + OUTPUT_NAME ../quassel) + target_link_libraries(quassel mod_qtui mod_uisupport mod_client mod_core mod_common + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_KDE_LIBRARIES} ${QUASSEL_SSL_LIBRARIES} ${PHONON_LIBS}) + install(TARGETS quassel RUNTIME DESTINATION ${BIN_INSTALL_DIR}) +endif(WANT_MONO) + +# Build bundles for MacOSX +if(APPLE) + add_custom_command(TARGET quasselclient POST_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py + ${CMAKE_SOURCE_DIR} "Quassel Client" ../quasselclient) + add_custom_command(TARGET quassel POST_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py + ${CMAKE_SOURCE_DIR} "Quassel" ../quassel) + if(DEPLOY) + add_custom_command(TARGET quasselclient POST_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Client ..) + add_custom_command(TARGET quasselcore POST_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Core ..) + endif(DEPLOY) +endif(APPLE)