X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2FCMakeLists.txt;h=238cb8670d147b27d2d99eefd9d3da40cf85058a;hp=d2a89fd5bd7162ff185ff5f38ce9c50e0caeda7e;hb=ac654fdeeece68d64561920479f064ad3c237e26;hpb=130ccf5033c21ca3ad0e0357a82953b5727bd0e9 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d2a89fd5..238cb867 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,108 +1,93 @@ -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_GUI ) -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_GUI true) - MESSAGE("Building Quassel GUI.") -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_GUI) - 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_GUI) - -IF(BUILD_CORE OR BUILD_GUI) - MESSAGE(FATAL_ERROR "\nBuilding of standalone core or GUI not supported at this time. Please check back later.\n") -ENDIF(BUILD_CORE OR BUILD_GUI) - -SET(CMAKE_BUILD_TYPE Debug) - -# 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_DIRS main gui core) - -# 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}) - -# 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_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(main) -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}) - -SET(TARGET_LIST ) - -IF(BUILD_CORE) - ADD_DEFINITIONS(-DBUILD_CORE) - ADD_EXECUTABLE(quasselcore ${quassel_core_SRCS} ${_RCCS}) - TARGET_LINK_LIBRARIES(quasselcore core main ${QT_LIBRARIES}) - SET(TARGET_LIST ${TARGET_LIST} quasselcore) -ENDIF(BUILD_CORE) - -IF(BUILD_GUI 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(gui) - - IF(BUILD_MONO) - ADD_DEFINITIONS(-DBUILD_MONO) - ADD_EXECUTABLE(quassel ${quassel_mono_SRCS} ${_RCCS}) - TARGET_LINK_LIBRARIES(quassel gui core main ${QT_LIBRARIES}) - SET(TARGET_LIST ${TARGET_LIST} quassel) - ENDIF(BUILD_MONO) - - IF(BUILD_GUI) - ADD_DEFINITIONS(-DBUILD_GUI) - ADD_EXECUTABLE(quasselgui ${quassel_gui_SRCS} ${_RCCS}) - TARGET_LINK_LIBRARIES(quasselgui gui main ${QT_LIBRARIES}) - SET(TARGET_LIST ${TARGET_LIST} quasselgui) - ENDIF(BUILD_GUI) - -ENDIF(BUILD_GUI 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(BUILD_CORE) + add_subdirectory(core) + include_directories(BEFORE core) +endif(BUILD_CORE) +if(BUILD_GUI) + add_subdirectory(client) + add_subdirectory(uisupport) + add_subdirectory(qtui) + include_directories(BEFORE client) + include_directories(BEFORE uisupport) + include_directories(BEFORE qtui) + + if(STATIC) + link_directories(${QT_PLUGINS_DIR}/imageformats) + set(CLIENT_LIBS ${CLIENT_LIBS} qjpeg qgif) + endif(STATIC) +endif(BUILD_GUI) + +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) +if(WITH_QT5) + qt5_add_resources(CLIENT_DEPS ${CLIENT_RCS}) + qt5_add_resources(CORE_DEPS ${CORE_RCS}) + qt5_add_resources(COMMON_DEPS ${COMMON_RCS}) +else(WITH_QT5) + qt4_add_resources(CLIENT_DEPS ${CLIENT_RCS}) + qt4_add_resources(CORE_DEPS ${CORE_RCS}) + qt4_add_resources(COMMON_DEPS ${COMMON_RCS}) +endif(WITH_QT5) + +if(WANT_CORE) + setup_qt_variables(Network Script Sql ${CORE_QT_MODULES}) + include_directories(${QUASSEL_QT_INCLUDES}) + add_executable(quasselcore common/main.cpp ${COMMON_DEPS} ${CORE_DEPS}) + add_dependencies(quasselcore po genversion_run) + set_target_properties(quasselcore PROPERTIES + COMPILE_FLAGS "-DBUILD_CORE ${QUASSEL_QT_COMPILEFLAGS}" + 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_qt_variables(Gui Network ${CLIENT_QT_MODULES}) + include_directories(${QUASSEL_QT_INCLUDES}) + add_executable(quasselclient WIN32 common/main.cpp ${COMMON_DEPS} ${CLIENT_DEPS}) + add_dependencies(quasselclient po genversion_run) + set_target_properties(quasselclient PROPERTIES + COMPILE_FLAGS "-DBUILD_QTUI ${QUASSEL_QT_COMPILEFLAGS} ${CLIENT_COMPILE_FLAGS}" + OUTPUT_NAME ../quasselclient) + target_link_libraries(quasselclient ${LINK_KDE} mod_qtui mod_uisupport mod_client mod_common ${CLIENT_LIBS} + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES} ${CLIENT_LIBRARIES}) + install(TARGETS quasselclient RUNTIME DESTINATION ${BIN_INSTALL_DIR}) +endif(WANT_QTCLIENT) + +if(WANT_MONO) + setup_qt_variables(Gui Network Script Sql ${CLIENT_QT_MODULES} ${CORE_QT_MODULES}) + include_directories(${QUASSEL_QT_INCLUDES}) + if(NOT WITH_QT5) + qt4_wrap_cpp(MOC qtui/monoapplication.h) + endif(NOT WITH_QT5) + add_executable(quassel WIN32 common/main.cpp qtui/monoapplication.cpp ${MOC} ${COMMON_DEPS} ${CLIENT_DEPS} ${CORE_DEPS}) + add_dependencies(quassel po genversion_run) + set_target_properties(quassel PROPERTIES + COMPILE_FLAGS "-DBUILD_MONO ${QUASSEL_QT_COMPILEFLAGS} ${CLIENT_COMPILE_FLAGS}" + OUTPUT_NAME ../quassel) + target_link_libraries(quassel mod_qtui mod_uisupport mod_client mod_core mod_common ${CLIENT_LIBS} + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES} ${CLIENT_LIBRARIES}) + 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)