X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=CMakeLists.txt;h=cf1a80beb5afae5280dfa2a688615b9a6fbba17d;hp=bf34d35d48d866cc990ad4a1ee32ae1c8650c7fc;hb=b49776c9ad0154988d28b9cba2bdae495f098399;hpb=4bee97e877d9ba4677ab90456377822da6203e29 diff --git a/CMakeLists.txt b/CMakeLists.txt index bf34d35d..cf1a80be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,26 +1,31 @@ # This is the cmake-based build system for Quassel IRC. # You may pass various options to cmake: -# -DBUILD= : Select binaries to build. may contain any combination -# of "core", "client", "mono" or "all". +# -DWANT_(CORE|QTCLIENT|MONO)=(ON|OFF) +# : select binaries to build # -DQT=/path/to/qt : Choose a Qt4 installation to use instead of the system Qt4 -# -DSTATIC=1 : Enable static building of Quassel, most useful with a static Qt. -# -DSTATICWIN=1 : Enable static building for Windows. +# -DSTATIC : Enable static building of Quassel. Use with care. # -DSPUTDEV : Do not use. # # NOTE: You need to remove CMakeCache.txt if you plan to change any of these values! project(QuasselIRC) -cmake_minimum_required(VERSION 2.4.5) +# Target scopes don't work in older versions +cmake_minimum_required(VERSION 2.4.7 FATAL_ERROR) # This would suppress annoying warnings on cmake-2.6, but we can't use it # with 2.4, so... DUH! # cmake_policy(SET CMP0003 OLD) # suppress linker warnings +# Temporary if(STATICWIN) - set(CMAKE_BUILD_TYPE Release) + set(STATIC 1) endif(STATICWIN) +if(STATIC) + set(CMAKE_BUILD_TYPE Release) +endif(STATIC) + # Enable various flags on gcc include(CheckCXXCompilerFlag) check_cxx_compiler_flag(-Wall Wall) @@ -38,32 +43,9 @@ endif(ansi) set(QT_MIN_VERSION "4.3.0") -# By default, we build all binaries -if(NOT DEFINED BUILD) - set(BUILD all) -endif(NOT DEFINED BUILD) - -# User might define which binaries to build by invoking cmake -DBUILD=, -# where might contain any combination of "core", "client", "mono" or "all" -if(BUILD MATCHES all) - set(BUILD_CORE true) - set(BUILD_QTCLIENT true) - set(BUILD_MONO true) - message(STATUS "Building Quassel Client, Quassel Core and monolithic Quassel.") -else(BUILD MATCHES all) - if(BUILD MATCHES core) - set(BUILD_CORE true) - message(STATUS "Building Quassel Core") - endif(BUILD MATCHES core) - if(BUILD MATCHES client) - set(BUILD_QTCLIENT true) - message(STATUS "Building Quassel Client") - endif(BUILD MATCHES client) - if(BUILD MATCHES mono) - set(BUILD_MONO true) - message(STATUS "Building monolithic Quassel") - endif(BUILD MATCHES mono) -endif(BUILD MATCHES all) +option(WANT_CORE "Build the core (server) binary" ON) +option(WANT_QTCLIENT "Build the Qt4 GUI client binary" ON) +option(WANT_MONO "Build the monolithic (all-in-one) binary" ON) # Enable mostly b0rked stuff (new ChatView), do not enable this unless you know what you do... if(SPUTDEV) @@ -99,18 +81,18 @@ add_dependencies(genversion_run genversion) # Add needed subdirs add_subdirectory(src/common) include_directories(src/common) -if(BUILD_CORE OR BUILD_MONO) +if(WANT_CORE OR WANT_MONO) add_subdirectory(src/core) include_directories(src/core) -endif(BUILD_CORE OR BUILD_MONO) -if(BUILD_QTCLIENT OR BUILD_MONO) +endif(WANT_CORE OR WANT_MONO) +if(WANT_QTCLIENT OR WANT_MONO) add_subdirectory(src/client) add_subdirectory(src/uisupport) add_subdirectory(src/qtui) include_directories(src/client) include_directories(src/uisupport) include_directories(src/qtui) -endif(BUILD_QTCLIENT OR BUILD_MONO) +endif(WANT_QTCLIENT OR WANT_MONO) # Make sure version.gen exists before building mod_common add_dependencies(mod_common genversion_run) @@ -122,17 +104,22 @@ qt4_add_resources(RC_QUASSEL_ICONS src/icons/quassel-icons.qrc) qt4_add_resources(RC_SQL src/core/sql.qrc) # Set global buildflags -if(DEFINED STATIC) - set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc ${CMAKE_EXE_LINKER_FLAGS}") - link_directories(${CMAKE_BINARY_DIR}/staticlibs) -endif(DEFINED STATIC) - -if(STATICWIN AND WIN32) +# This is very much non-portable, so don't use -DSTATICGCC until you know what +# you do. +if(STATIC AND CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "-static-libgcc ${CMAKE_CXX_FLAGS}") + link_directories(${CMAKE_BINARY_DIR}/staticlibs) # override dynamic libs + if(OPENSSL_FOUND) + set(QUASSEL_SSL_LIBRARIES ssl crypto) # these miss in static builds + endif(OPENSSL_FOUND) +endif(STATIC AND CMAKE_COMPILER_IS_GNUCXX) + +if(STATIC AND WIN32) link_libraries(imm32 winmm) # missing by default :/ if(OPENSSL_FOUND) link_libraries(${OPENSSL_LIBRARIES} libeay32MD) endif(OPENSSL_FOUND) -endif(STATICWIN AND WIN32) +endif(STATIC AND WIN32) if(WIN32) set(WIN32_RC src/icons/win32.rc) # for app icons on windows @@ -152,32 +139,35 @@ macro(setup_qt4_variables) endmacro(setup_qt4_variables) # Now we have everything, so just glue the right pieces together :) -if(BUILD_CORE) +if(WANT_CORE) setup_qt4_variables(NETWORK SCRIPT SQL) add_executable(quasselcore ${CMAKE_SOURCE_DIR}/src/common/main.cpp ${RC_SQL} ${RC_I18N} ${WIN32_RC}) set_target_properties(quasselcore PROPERTIES COMPILE_FLAGS "-DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB -DBUILD_CORE") - target_link_libraries(quasselcore mod_core mod_common ${QUASSEL_QT_LIBRARIES}) -endif(BUILD_CORE) + target_link_libraries(quasselcore mod_core mod_common + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES}) +endif(WANT_CORE) -if(BUILD_QTCLIENT) +if(WANT_QTCLIENT) setup_qt4_variables(GUI NETWORK) add_executable(quasselclient ${CMAKE_SOURCE_DIR}/src/common/main.cpp ${RC_ICONS} ${RC_QUASSEL_ICONS} ${RC_I18N} ${WIN32_RC}) set_target_properties(quasselclient PROPERTIES COMPILE_FLAGS "-DQT_GUI_LIB -DQT_NETWORK_LIB -DBUILD_QTUI") - target_link_libraries(quasselclient mod_qtui mod_uisupport mod_client mod_common ${QUASSEL_QT_LIBRARIES}) -endif(BUILD_QTCLIENT) + target_link_libraries(quasselclient mod_qtui mod_uisupport mod_client mod_common + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES}) +endif(WANT_QTCLIENT) -if(BUILD_MONO) +if(WANT_MONO) setup_qt4_variables(GUI NETWORK SCRIPT SQL) add_executable(quassel ${CMAKE_SOURCE_DIR}/src/common/main.cpp ${RC_ICONS} ${RC_QUASSEL_ICONS} ${RC_SQL} ${RC_I18N} ${WIN32_RC}) set_target_properties(quassel PROPERTIES COMPILE_FLAGS "-DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB -DBUILD_MONO") - target_link_libraries(quassel mod_qtui mod_uisupport mod_client mod_core mod_common ${QUASSEL_QT_LIBRARIES}) -endif(BUILD_MONO) + target_link_libraries(quassel mod_qtui mod_uisupport mod_client mod_core mod_common + ${QUASSEL_QT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES}) +endif(WANT_MONO) # Build bundles for MacOSX if(APPLE) @@ -190,23 +180,23 @@ if(APPLE) endif(APPLE) # Install rules -if(BUILD_CORE) +if(WANT_CORE) install(TARGETS quasselcore RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -endif(BUILD_CORE) +endif(WANT_CORE) -if(BUILD_QTCLIENT) +if(WANT_QTCLIENT) install(TARGETS quasselclient RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(FILES quasselclient.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) -endif(BUILD_QTCLIENT) +endif(WANT_QTCLIENT) -if(BUILD_MONO) +if(WANT_MONO) install(TARGETS quassel RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(FILES quassel.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) -endif(BUILD_MONO) +endif(WANT_MONO)