From ff81aaec156b8dc2e12f49286fd69e55f215af29 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sat, 31 Mar 2012 01:17:14 +0200 Subject: [PATCH] Add support for Qt5 in the build system Support for building against Qt5 can now be enabled by passing -DWITH_QT5=1 to CMake. Note that your Qt5 installation (the qmake location) needs to be in your PATH, unless it's already in one of the standard system locations. Needless to say that Qt5 support in Quassel is highly experimental, though surprisingly it seems to work mostly fine already. A README.Qt5 with known issues is forthcoming. As a side effect, I've cleaned up the build system a bit and got rid of QT_USE_FILE and the related fugly hacks for Qt4 (so that the -I and -D options now actually match the modules we're building against). --- CMakeLists.txt | 208 ++++++++++++++++++++---------- cmake/modules/QuasselMacros.cmake | 48 +++++-- src/CMakeLists.txt | 31 +++-- src/client/CMakeLists.txt | 22 +++- src/common/CMakeLists.txt | 14 +- src/core/CMakeLists.txt | 16 +-- src/qtui/CMakeLists.txt | 43 ++++-- src/uisupport/CMakeLists.txt | 24 ++-- 8 files changed, 268 insertions(+), 138 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 63d5f5fa..4c6c1a55 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ # This is the cmake-based build system for Quassel IRC. # # You may pass various options to cmake: +# # -DWANT_(CORE|QTCLIENT|MONO)=(ON|OFF) # : select binaries to build # -DWITH_OPENSSL=OFF : Disable OpenSSL support @@ -19,14 +20,18 @@ # -DSTATIC=ON : Enable static building of Quassel. Use with care. # -DDEPLOY=ON : Mac OS X only. Use only for creating Quassel Packages! # +# -DWITH_QT5=ON : Enable (very) experimental support for Qt5 (see doc/README.Qt5!) +# # NOTE: You should remove CMakeCache.txt if you plan to change any of these values! + project(QuasselIRC) include(CheckFunctionExists) include(CheckIncludeFile) # cmake 2.6.2 is required for KDE >=4.2 and should be widespread enough now +# For building against Qt5, we check for an even newer cmake version below! cmake_minimum_required(VERSION 2.6.2 FATAL_ERROR) if(COMMAND cmake_policy) @@ -57,6 +62,9 @@ option(WITH_SYSLOG "Use syslog for storing log data" ON) # run on a matching KDE version only. set(WITH_OXYGEN AUTO CACHE STRING "Install Oxygen icons (default is \"AUTO\" to install when KDE 4.3 or later is present") +# Enable very experimental support for Qt5. Might break the compilation, or even more! +option(WITH_QT5 "Enable (very) experimental support for Qt5" OFF) + option(STATIC "Enable static building (might not be portable)" OFF) if(APPLE) @@ -110,6 +118,17 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${DEFAULT_BUILD_TYPE} CACHE STRING "CMake Build Type" FORCE) endif(NOT CMAKE_BUILD_TYPE) +# Qt debug flags +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG QT_DEBUG) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_FULLDEBUG QT_DEBUG) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG NDEBUG) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_DEBUG NDEBUG) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG NDEBUG) + +IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS QT_NO_DEBUG NDEBUG) +ENDIF() + # Enable various flags on gcc if(CMAKE_COMPILER_IS_GNUCXX) # Let's just hope that all gccs support these options and skip the tests... @@ -121,13 +140,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 ${CMAKE_CXX_FLAGS_DEBUG}") endif(CMAKE_COMPILER_IS_GNUCXX) -string(TOUPPER ${CMAKE_BUILD_TYPE} upper_build_type) -if(upper_build_type STREQUAL "RELEASE" OR upper_build_type STREQUAL "RELWITHDEBUGINFO") - add_definitions(-DNDEBUG -DQT_NO_DEBUG) -else(upper_build_type STREQUAL "RELEASE" OR upper_build_type STREQUAL "RELWITHDEBUGINFO") - set(DEBUG 1) -endif(upper_build_type STREQUAL "RELEASE" OR upper_build_type STREQUAL "RELWITHDEBUGINFO") - +# Mac build stuff if(APPLE AND DEPLOY) set(CMAKE_OSX_ARCHITECTURES "i386;ppc") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.4") @@ -143,15 +156,48 @@ if(WANT_MONO OR WANT_CORE) set(BUILD_CORE true) endif(WANT_MONO OR WANT_CORE) + +# Version checks +################ + +if(WITH_QT5) + set(QT_MIN_VERSION "5.0.0") + add_definitions(-DHAVE_QT5) + + # Qt5 needs a new enough cmake... + cmake_minimum_required(VERSION 2.8.6 FATAL_ERROR) + + # ... for automoc + set(CMAKE_AUTOMOC ON) +else(WITH_QT5) + + # GUI stuff needs some new features + if(BUILD_GUI) + set(QT_MIN_VERSION "4.6.0") + else(BUILD_GUI) + set(QT_MIN_VERSION "4.4.0") + endif(BUILD_GUI) +endif(WITH_QT5) + + # Dependencies ############## -# GUI stuff needs some new features -if(BUILD_GUI) - set(QT_MIN_VERSION "4.6.0") -else(BUILD_GUI) - set(QT_MIN_VERSION "4.4.0") -endif(BUILD_GUI) +if(WITH_QT5) + find_package(Qt5Core ${QT_MIN_VERSION} REQUIRED) + # We need QtWidgets + set(CLIENT_QT_MODULES ${CLIENT_QT_MODULES} Widgets) +else(WITH_QT5) + # Select a Qt installation here, if you don't want to use system Qt + if(QT) + # FindQt4 will look for the qmake binary in $PATH, so we just prepend the Qt dir + set(ENV{PATH} ${QT}/bin:$ENV{PATH}) + endif(QT) + + # Now that we have the correct $PATH, lets find Qt! + find_package(Qt4 REQUIRED) +endif(WITH_QT5) + # Execinfo is needed for generating backtraces find_package(ExecInfo) @@ -161,18 +207,6 @@ if(EXECINFO_FOUND) link_libraries(${EXECINFO_LIBRARIES}) endif(EXECINFO_FOUND) -# Select a Qt installation here, if you don't want to use system Qt -if(QT) - # FindQt4 will look for the qmake binary in $PATH, so we just prepend the Qt dir - set(ENV{PATH} ${QT}/bin:$ENV{PATH}) -endif(QT) - -# Now that we have the correct $PATH, lets find Qt! -find_package(Qt4 REQUIRED) - -set(QT_DONT_USE_QTGUI 1) -include(${QT_USE_FILE}) -include_directories(${QT_INCLUDES}) # PkgConfig isn't strictly required. # However, some optional deps might not be found if it's not present, so warn! @@ -182,6 +216,7 @@ if(NOT PKG_CONFIG_FOUND) message(STATUS " Affected features might include encryption support, DBus menus and Ayatana notifications.") endif(NOT PKG_CONFIG_FOUND) + # Setup OpenSSL # We don't link to or include OpenSSL ourselves, but use exclusively the Qt API. # Thus, we simply check if OpenSSL support is present in Qt's config and enable our @@ -199,54 +234,63 @@ else(WITH_OPENSSL) message(STATUS "Not enabling OpenSSL support") endif(WITH_OPENSSL) + # Check for GUI specific stuff if(BUILD_GUI) # Setup D-Bus support if(WITH_DBUS) - if(QT_QTDBUS_FOUND) + if(WITH_QT5) + find_package(Qt5DBus ${QT_MIN_VERSION}) + find_package(Qt5DBusTools) + endif(WITH_QT5) + + if(QT_QTDBUS_FOUND OR (Qt5DBus_FOUND AND Qt5DBusTools_FOUND)) message(STATUS "Found QtDBus, enabling D-Bus support") add_definitions(-DHAVE_DBUS) - set(CLIENT_QT4_VARS ${CLIENT_QT4_VARS} DBUS) - set(CLIENT_COMPILE_FLAGS "${CLIENT_COMPILE_FLAGS} -DQT_DBUS_LIB") set(HAVE_DBUS true) + set(CLIENT_QT_MODULES ${CLIENT_QT_MODULES} DBus) # check if we have dbusmenu as well - find_package(DBusMenuQt) - if(DBUSMENUQT_FOUND) - message(STATUS "Enabling support for exporting the tray menu via D-Bus") - add_definitions(-DHAVE_DBUSMENU) - include_directories(${DBUSMENUQT_INCLUDE_DIR}) - set(CLIENT_LIBRARIES ${CLIENT_LIBRARIES} ${DBUSMENUQT_LIBRARIES}) - set(CLIENT_COMPILE_FLAGS "${CLIENT_COMPILE_FLAGS} ${DBUSMENUQT_DEFINITIONS}") - else(DBUSMENUQT_FOUND) - message(STATUS "Disabling support for exporting the tray menu via D-Bus") - endif(DBUSMENUQT_FOUND) - - else(QT_QTDBUS_FOUND) + if(NOT WITH_QT5) + find_package(DBusMenuQt) + if(DBUSMENUQT_FOUND) + message(STATUS "Enabling support for exporting the tray menu via D-Bus") + add_definitions(-DHAVE_DBUSMENU) + include_directories(${DBUSMENUQT_INCLUDE_DIR}) + set(CLIENT_LIBRARIES ${CLIENT_LIBRARIES} ${DBUSMENUQT_LIBRARIES}) + set(CLIENT_COMPILE_FLAGS "${CLIENT_COMPILE_FLAGS} ${DBUSMENUQT_DEFINITIONS}") + else(DBUSMENUQT_FOUND) + message(STATUS "Disabling support for exporting the tray menu via D-Bus") + endif(DBUSMENUQT_FOUND) + endif(NOT WITH_QT5) + + else(QT_QTDBUS_FOUND OR (Qt5DBus_FOUND AND Qt5DBusTools_FOUND)) message(STATUS "QtDBus not found, disabling D-Bus support") - endif(QT_QTDBUS_FOUND) + endif(QT_QTDBUS_FOUND OR (Qt5DBus_FOUND AND Qt5DBusTools_FOUND)) else(WITH_DBUS) message(STATUS "Not enabling D-Bus support") endif(WITH_DBUS) - # Setup QtWebKit support + # Setup QtWebkit support if(WITH_WEBKIT) - if(QT_QTWEBKIT_FOUND) + if(WITH_QT5) + find_package(Qt5Webkit ${QT_MIN_VERSION} QUIET) + endif(WITH_QT5) + if(QT_QTWEBKIT_FOUND OR Qt5Webkit_FOUND) message(STATUS "Found QtWebKit, enabling WebKit support") add_definitions(-DHAVE_WEBKIT) - set(CLIENT_QT4_VARS ${CLIENT_QT4_VARS} WEBKIT XMLPATTERNS) - set(CLIENT_COMPILE_FLAGS "${CLIENT_COMPILE_FLAGS} -DQT_WEBKIT_LIB -DQT_XMLPATTERNS_LIB") + set(CLIENT_QT_MODULES ${CLIENT_QT_MODULES} Webkit XmlPatterns) set(HAVE_WEBKIT true) - else(QT_QTWEBKIT_FOUND) - message(STATUS "QtWebKit not found, disabling WebKit support") - endif(QT_QTWEBKIT_FOUND) + else(QT_QTWEBKIT_FOUND OR Qt5Webkit_FOUND) + message(STATUS "QtWebkit not found, disabling Webkit support") + endif(QT_QTWEBKIT_FOUND OR Qt5Webkit_FOUND) else(WITH_WEBKIT) - message(STATUS "Not enabling WebKit support") + message(STATUS "Not enabling Webkit support") endif(WITH_WEBKIT) # Setup KDE4 support - if(WITH_KDE) + if(WITH_KDE AND NOT WITH_QT5) find_package(KDE4) if(KDE4_FOUND) message(STATUS "Enabling KDE4 integration") @@ -259,30 +303,42 @@ if(BUILD_GUI) else(KDE4_FOUND) message(STATUS "KDE4 not found, disabling KDE integration") endif(KDE4_FOUND) - else(WITH_KDE) + else(WITH_KDE AND NOT WITH_QT5) message(STATUS "Not enabling KDE4 integration") - endif(WITH_KDE) + endif(WITH_KDE AND NOT WITH_QT5) # Setup Phonon support - we only need this if we don't have or want KDE4 if(NOT HAVE_KDE) if(WITH_PHONON) - find_package(Phonon) - if(PHONON_FOUND) - message(STATUS "Enabling Phonon support") - add_definitions(-DHAVE_PHONON) - include_directories(${PHONON_INCLUDES}) - set(CLIENT_LIBRARIES ${CLIENT_LIBRARIES} ${PHONON_LIBS}) - set(HAVE_PHONON true) - else(PHONON_FOUND) - message(STATUS "Phonon not found, disabling audio notifications") - endif(PHONON_FOUND) + if(WITH_QT5) + find_package(Qt5phonon) + if(Qt5phonon_FOUND) + message(STATUS "Enabling Phonon support") + add_definitions(-DHAVE_PHONON) + set(HAVE_PHONON true) + set(CLIENT_QT_MODULES ${CLIENT_QT_MODULES} phonon) + else(Qt5phonon_FOUND) + message(STATUS "Phonon not found, disabling audio notifications") + endif(Qt5phonon_FOUND) + else(WITH_QT5) + find_package(Phonon) + if(PHONON_FOUND) + message(STATUS "Enabling Phonon support") + add_definitions(-DHAVE_PHONON) + include_directories(${PHONON_INCLUDES}) + set(CLIENT_LIBRARIES ${CLIENT_LIBRARIES} ${PHONON_LIBS}) + set(HAVE_PHONON true) + else(PHONON_FOUND) + message(STATUS "Phonon not found, disabling audio notifications") + endif(PHONON_FOUND) + endif(WITH_QT5) else(WITH_PHONON) message(STATUS "Not enabling Phonon support") endif(WITH_PHONON) endif(NOT HAVE_KDE) # Setup libindicate-qt support - if(WITH_LIBINDICATE) + if(WITH_LIBINDICATE AND NOT WITH_QT5) pkg_check_modules(INDICATEQT QUIET indicate-qt>=0.2.1) if(INDICATEQT_FOUND) message(STATUS "Enabling Ayatana notification support") @@ -293,11 +349,11 @@ if(BUILD_GUI) else(INDICATEQT_FOUND) message(STATUS "Disabling Ayatana notification support") endif(INDICATEQT_FOUND) - else(WITH_LIBINDICATE) + else(WITH_LIBINDICATE AND NOT WITH_QT5) message(STATUS "Not enabling Ayatana notification support") # We don't want to link against it even if another package has found it set(INDICATEQT_LIBRARIES "") - endif(WITH_LIBINDICATE) + endif(WITH_LIBINDICATE AND NOT WITH_QT5) endif(BUILD_GUI) @@ -305,20 +361,20 @@ endif(BUILD_GUI) if(BUILD_CORE) # Setup encryption support - if(WITH_CRYPT) + if(WITH_CRYPT AND NOT WITH_QT5) find_package(QCA2) if(QCA2_FOUND) - message(STATUS "Found QCA2, enabling encryption support") + message(STATUS "Enabling encryption support") add_definitions(-DHAVE_QCA2) set(LINK_QCA2 QCA2) set(HAVE_QCA2 true) set(MOC_DEFINES ${MOC_DEFINES} -DHAVE_QCA2) else(QCA2_FOUND) - message(STATUS "QCA2 not found, disabling encryption support") + message(STATUS "Disabling encryption support") endif(QCA2_FOUND) - else(WITH_CRYPT) + else(WITH_CRYPT AND NOT WITH_QT5) message(STATUS "Not enabling encryption support") - endif(WITH_CRYPT) + endif(WITH_CRYPT AND NOT WITH_QT5) # Setup syslog support if(WITH_SYSLOG) @@ -336,6 +392,10 @@ if(BUILD_CORE) endif(BUILD_CORE) + +# Various settings +################## + # needed to compile with mingw without kde if(MINGW AND NOT HAVE_KDE) add_definitions(-D_WIN32_WINNT=0x0500) @@ -406,10 +466,16 @@ if(NOT WIN32) endif(HAVE_UMASK) endif(NOT WIN32) + # We need to create a version.gen # For this, we create our genversion binary and make sure it is run every time. + +setup_qt_variables() +include_directories(${QUASSEL_QT_INCLUDES}) + add_executable(genversion ${CMAKE_SOURCE_DIR}/src/common/genversion.cpp) -target_link_libraries(genversion ${QT_LIBRARIES} ${QT_CORE_LIB_DEPENDENCIES}) +target_link_libraries(genversion ${QUASSEL_QT_LIBRARIES}) +set_target_properties(genversion PROPERTIES COMPILE_FLAGS "${QUASSEL_QT_COMPILEFLAGS}") get_target_property(GENVERSION_EXECUTABLE genversion LOCATION) add_custom_target(genversion_run ALL ${GENVERSION_EXECUTABLE} diff --git a/cmake/modules/QuasselMacros.cmake b/cmake/modules/QuasselMacros.cmake index 2e2dfef3..f0791ec6 100644 --- a/cmake/modules/QuasselMacros.cmake +++ b/cmake/modules/QuasselMacros.cmake @@ -1,21 +1,41 @@ -# This macro sets variables for additional Qt modules. -# We need this because targets need different Qt4 modules, i.e. different libs -# and defines. We can't simply include UseQt4 several times, since definitions add up. -# We workaround this by using our own macro to figure out what to add. +# This macro sets variables for the Qt modules we need. -macro(setup_qt4_variables) +macro(setup_qt_variables) set(QUASSEL_QT_LIBRARIES ) + set(QUASSEL_QT_INCLUDES ${QT_INCLUDE_DIR}) # Qt4 + set(QUASSEL_QT_DEFINITIONS ${QT_DEFINITIONS}) # Qt4 + IF(WIN32) - set(MAIN MAIN) + set(MAIN Main) ENDIF(WIN32) - foreach(qtmod CORE ${ARGV} ${MAIN}) - set(QUASSEL_QT_LIBRARIES ${QUASSEL_QT_LIBRARIES} ${QT_QT${qtmod}_LIBRARY}) - if(STATIC) - set(QUASSEL_QT_LIBRARIES ${QUASSEL_QT_LIBRARIES} ${QT_${qtmod}_LIB_DEPENDENCIES}) - endif(STATIC) - endforeach(qtmod ${ARGV}) - set(QUASSEL_QT_LIBRARIES ${QUASSEL_QT_LIBRARIES} ${QT_LIBRARIES}) -endmacro(setup_qt4_variables) + foreach(qtmod Core ${ARGV} ${MAIN}) + if(WITH_QT5) + find_package(Qt5${qtmod} ${QT_MIN_VERSION} REQUIRED) + list(APPEND QUASSEL_QT_LIBRARIES ${Qt5${qtmod}_LIBRARIES}) + list(APPEND QUASSEL_QT_INCLUDES ${Qt5${qtmod}_INCLUDE_DIRS}) + list(APPEND QUASSEL_QT_DEFINITIONS ${Qt5${qtmod}_DEFINITIONS} ${Qt5${qtmod}_EXECUTABLE_COMPILE_FLAGS}) + else(WITH_QT5) + string(TOUPPER ${qtmod} QTMOD) + list(APPEND QUASSEL_QT_LIBRARIES ${QT_QT${QTMOD}_LIBRARY}) + if(STATIC) + list(APPEND QUASSEL_QT_LIBRARIES ${QT_QT${QTMOD}_LIB_DEPENDENCIES}) + endif(STATIC) + list(APPEND QUASSEL_QT_INCLUDES ${QT_QT${QTMOD}_INCLUDE_DIR}) + list(APPEND QUASSEL_QT_DEFINITIONS -DQT_QT${QTMOD}_LIB) + endif(WITH_QT5) + endforeach(qtmod) + + list(REMOVE_DUPLICATES QUASSEL_QT_LIBRARIES) + list(REMOVE_DUPLICATES QUASSEL_QT_INCLUDES) + list(REMOVE_DUPLICATES QUASSEL_QT_DEFINITIONS) + + # The COMPILE_FLAGS property expects a string, not a list... + set(QUASSEL_QT_COMPILEFLAGS ) + foreach(flag ${QUASSEL_QT_DEFINITIONS}) + set(QUASSEL_QT_COMPILEFLAGS "${QUASSEL_QT_COMPILEFLAGS} ${flag}") + endforeach(flag) + +endmacro(setup_qt_variables) # This generates a .ts from a .po file macro(generate_ts outvar basename) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 42cfe07e..238cb867 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,16 +24,23 @@ 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(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_qt4_variables(NETWORK SCRIPT SQL) + 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 "-DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB -DBUILD_CORE" + COMPILE_FLAGS "-DBUILD_CORE ${QUASSEL_QT_COMPILEFLAGS}" OUTPUT_NAME ../quasselcore) target_link_libraries(quasselcore mod_core mod_common ${QUASSEL_QT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES}) @@ -41,11 +48,12 @@ if(WANT_CORE) endif(WANT_CORE) if(WANT_QTCLIENT) - setup_qt4_variables(GUI NETWORK ${CLIENT_QT4_VARS}) + 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 "-DQT_GUI_LIB -DQT_NETWORK_LIB ${CLIENT_COMPILE_FLAGS} -DBUILD_QTUI" + 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}) @@ -53,12 +61,15 @@ if(WANT_QTCLIENT) endif(WANT_QTCLIENT) if(WANT_MONO) - setup_qt4_variables(GUI NETWORK SCRIPT SQL ${CLIENT_QT4_VARS}) - qt4_wrap_cpp(MOC qtui/monoapplication.h) + 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 "-DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB ${CLIENT_COMPILE_FLAGS} -DBUILD_MONO" + 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}) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index c8519070..67ca7f86 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -1,13 +1,16 @@ # Builds the client module -# We still have some minor deps to QtUi: QItemSelectionModel -# set(QT_DONT_USE_QTGUI 1) -set(QT_USE_QTNETWORK 1) -set(QT_USE_QTDBUS 1) -include(${QT_USE_FILE}) +# In Qt4, we still have some minor deps to QtUi: QItemSelectionModel, QSortFilterProxyModel +# Still in Qt5: QAbstractItemView in BufferModel +if(NOT WITH_QT5) + setup_qt_variables(Gui Network DBus) +else(NOT WITH_QT5) + setup_qt_variables(Widgets Network DBus) +endif(NOT WITH_QT5) set(SOURCES abstractmessageprocessor.cpp + abstractui.cpp backlogrequester.cpp buffermodel.cpp buffersettings.cpp @@ -17,6 +20,7 @@ set(SOURCES clientbacklogmanager.cpp clientbufferviewconfig.cpp clientbufferviewmanager.cpp + clientcoreinfo.cpp clientidentity.cpp clientignorelistmanager.cpp clientirclisthelper.cpp @@ -66,9 +70,13 @@ set(HEADERS coreaccount.h ) -qt4_wrap_cpp(MOC ${MOC_HDRS}) +include_directories(${CMAKE_SOURCE_DIR}/src/common ${QUASSEL_QT_INCLUDES}) -include_directories(${CMAKE_SOURCE_DIR}/src/common) +if(NOT WITH_QT5) + qt4_wrap_cpp(MOC ${MOC_HDRS}) +endif(NOT WITH_QT5) add_library(mod_client STATIC ${SOURCES} ${MOC} ${HEADERS}) add_dependencies(mod_client mod_common) + +set_target_properties(mod_client PROPERTIES COMPILE_FLAGS "${QUASSEL_QT_COMPILEFLAGS}") diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 0e3e2a1c..9c273e64 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -1,7 +1,6 @@ # Builds the common module -set(QT_DONT_USE_QTGUI 1) -set(QT_USE_QTNETWORK 1) -include(${QT_USE_FILE}) + +setup_qt_variables(Core Network) set(SOURCES aliasmanager.cpp @@ -12,6 +11,7 @@ set(SOURCES bufferviewconfig.cpp bufferviewmanager.cpp cliparser.cpp + coreinfo.cpp ctcpevent.cpp event.cpp eventmanager.cpp @@ -79,12 +79,16 @@ if(CMAKE_HOST_UNIX) set(SOURCES ${SOURCES} logbacktrace_unix.cpp) endif(CMAKE_HOST_UNIX) -qt4_wrap_cpp(MOC ${MOC_HDRS}) +include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR} ${QUASSEL_QT_INCLUDES}) # for version.inc and version.gen + +if(NOT WITH_QT5) + qt4_wrap_cpp(MOC ${MOC_HDRS}) +endif(NOT WITH_QT5) -include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) # for version.inc and version.gen set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES version.gen) add_library(mod_common STATIC ${SOURCES} ${MOC}) +set_target_properties(mod_common PROPERTIES COMPILE_FLAGS "${QUASSEL_QT_COMPILEFLAGS}") if(APPLE) target_link_libraries(mod_common "-framework CoreServices" "-framework CoreFoundation") diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index b6694247..5c6f0b69 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,10 +1,6 @@ # Builds the core module -set(QT_DONT_USE_QTGUI 1) -set(QT_USE_QTNETWORK 1) -set(QT_USE_QTSQL 1) -set(QT_USE_QTSCRIPT 1) -include(${QT_USE_FILE}) +setup_qt_variables(Network Sql Script) set(SOURCES abstractsqlstorage.cpp @@ -86,13 +82,17 @@ if(HAVE_QCA2) include_directories(${QCA2_INCLUDE_DIR}) endif(HAVE_QCA2) -qt4_wrap_cpp(MOC ${MOC_HDRS}) -set(CORE_RCS ${CORE_RCS} core/sql.qrc PARENT_SCOPE) +include_directories(${CMAKE_SOURCE_DIR}/src/common ${QUASSEL_QT_INCLUDES}) + +if(NOT WITH_QT5) + qt4_wrap_cpp(MOC ${MOC_HDRS}) +endif(NOT WITH_QT5) -include_directories(${CMAKE_SOURCE_DIR}/src/common) +set(CORE_RCS ${CORE_RCS} core/sql.qrc PARENT_SCOPE) add_library(mod_core STATIC ${SOURCES} ${MOC} ${HEADERS}) add_dependencies(mod_core mod_common) +set_target_properties(mod_core PROPERTIES COMPILE_FLAGS "${QUASSEL_QT_COMPILEFLAGS}") if(HAVE_QCA2) target_link_libraries(mod_core ${QCA2_LIBRARIES}) diff --git a/src/qtui/CMakeLists.txt b/src/qtui/CMakeLists.txt index aa0496db..86217b8f 100644 --- a/src/qtui/CMakeLists.txt +++ b/src/qtui/CMakeLists.txt @@ -1,15 +1,20 @@ # Builds the qtui module -set(QT_DONT_USE_QTGUI 0) -set(QT_USE_QTNETWORK 1) +set(_modules ) + +if(WITH_QT5) + list(APPEND _modules Widgets) +endif(WITH_QT5) + if(HAVE_DBUS) - set(QT_USE_QTDBUS 1) + list(APPEND _modules DBus) endif(HAVE_DBUS) + if(HAVE_WEBKIT) - set(QT_USE_QTWEBKIT 1) - set(QT_USE_XMLPATTERNS 1) + list(APPEND _modules Webkit XmlPatterns) endif(HAVE_WEBKIT) -include(${QT_USE_FILE}) + +setup_qt_variables(Gui Network ${_modules}) set(SOURCES aboutdlg.cpp @@ -153,9 +158,15 @@ if(HAVE_DBUS) set(SOURCES ${SOURCES} statusnotifieritem.cpp statusnotifieritemdbus.cpp) set(MOC_HDRS ${MOC_HDRS} statusnotifieritem.h statusnotifieritemdbus.h) set(FORMS ${FORMS}) - qt4_add_dbus_interface(DBUS ../../interfaces/org.kde.StatusNotifierWatcher.xml statusnotifierwatcher) - qt4_add_dbus_interface(DBUS ../../interfaces/org.freedesktop.Notifications.xml notificationsclient) - qt4_add_dbus_adaptor(DBUS ../../interfaces/org.kde.StatusNotifierItem.xml statusnotifieritemdbus.h StatusNotifierItemDBus) + if(WITH_QT5) + qt5_add_dbus_interface(DBUS ../../interfaces/org.kde.StatusNotifierWatcher.xml statusnotifierwatcher) + qt5_add_dbus_interface(DBUS ../../interfaces/org.freedesktop.Notifications.xml notificationsclient) + qt5_add_dbus_adaptor(DBUS ../../interfaces/org.kde.StatusNotifierItem.xml statusnotifieritemdbus.h StatusNotifierItemDBus) + else(WITH_QT5) + qt4_add_dbus_interface(DBUS ../../interfaces/org.kde.StatusNotifierWatcher.xml statusnotifierwatcher) + qt4_add_dbus_interface(DBUS ../../interfaces/org.freedesktop.Notifications.xml notificationsclient) + qt4_add_dbus_adaptor(DBUS ../../interfaces/org.kde.StatusNotifierItem.xml statusnotifieritemdbus.h StatusNotifierItemDBus) + endif(WITH_QT5) endif(HAVE_DBUS) if(HAVE_SSL) @@ -192,15 +203,21 @@ foreach(FRM ${SP_FORMS}) set(SPFRM ${SPFRM} settingspages/${FRM}) endforeach(FRM ${SP_FORMS}) -qt4_wrap_cpp(MOC ${MOC_HDRS} ${SPHDR}) -qt4_wrap_ui(UI ${FORMPATH} ${SPFRM}) - include_directories(${CMAKE_SOURCE_DIR}/src/common ${CMAKE_SOURCE_DIR}/src/client ${CMAKE_SOURCE_DIR}/src/qtui ${CMAKE_SOURCE_DIR}/src/qtui/settingspages ${CMAKE_SOURCE_DIR}/src/uisupport - ${CMAKE_CURRENT_BINARY_DIR}) + ${CMAKE_CURRENT_BINARY_DIR} + ${QUASSEL_QT_INCLUDES}) + +if(WITH_QT5) + qt5_wrap_ui(UI ${FORMPATH} ${SPFRM}) +else(WITH_QT5) + qt4_wrap_cpp(MOC ${MOC_HDRS} ${SPHDR}) + qt4_wrap_ui(UI ${FORMPATH} ${SPFRM}) +endif(WITH_QT5) add_library(mod_qtui STATIC ${SOURCES} ${SPSRC} ${MOC} ${DBUS} ${UI} ${HEADERS}) add_dependencies(mod_qtui mod_common mod_client mod_uisupport) +set_target_properties(mod_qtui PROPERTIES COMPILE_FLAGS "${QUASSEL_QT_COMPILEFLAGS}") diff --git a/src/uisupport/CMakeLists.txt b/src/uisupport/CMakeLists.txt index 5afab319..934e3fdd 100644 --- a/src/uisupport/CMakeLists.txt +++ b/src/uisupport/CMakeLists.txt @@ -1,16 +1,15 @@ # Builds the uisupport module -set(QT_DONT_USE_QTGUI 0) -set(QT_USE_QTNETWORK 1) -include(${QT_USE_FILE}) - -if (QCA2_FOUND) - include_directories(${QCA2_INCLUDE_DIR}) -endif (QCA2_FOUND) +if(WITH_QT5) + setup_qt_variables(Widgets Network) +else(WITH_QT5) + setup_qt_variables(Gui Network) +endif(WITH_QT5) set(SOURCES abstractbuffercontainer.cpp abstractitemview.cpp + abstractnotificationbackend.cpp action.cpp actioncollection.cpp bufferhotlistfilter.cpp @@ -83,10 +82,15 @@ if(HAVE_KDE) set(HEADERS ${HEADERS} kcmdlinewrapper.h) endif(HAVE_KDE) -qt4_wrap_cpp(MOC ${MOC_HDRS}) - include_directories(${CMAKE_SOURCE_DIR}/src/common - ${CMAKE_SOURCE_DIR}/src/client) + ${CMAKE_SOURCE_DIR}/src/client + ${QUASSEL_QT_INCLUDES} + ${QCA2_INCLUDE_DIR}) + +if(NOT WITH_QT5) + qt4_wrap_cpp(MOC ${MOC_HDRS}) +endif(NOT WITH_QT5) add_library(mod_uisupport STATIC ${SOURCES} ${MOC} ${HEADERS}) add_dependencies(mod_uisupport mod_common mod_client) +set_target_properties(mod_uisupport PROPERTIES COMPILE_FLAGS "${QUASSEL_QT_COMPILEFLAGS}") -- 2.20.1