Add support for Qt5 in the build system
authorManuel Nickschas <sputnick@quassel-irc.org>
Fri, 30 Mar 2012 23:17:14 +0000 (01:17 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 1 Apr 2012 22:07:17 +0000 (00:07 +0200)
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
cmake/modules/QuasselMacros.cmake
src/CMakeLists.txt
src/client/CMakeLists.txt
src/common/CMakeLists.txt
src/core/CMakeLists.txt
src/qtui/CMakeLists.txt
src/uisupport/CMakeLists.txt

index 63d5f5f..4c6c1a5 100644 (file)
@@ -1,6 +1,7 @@
 # This is the cmake-based build system for Quassel IRC.
 #
 # You may pass various options to cmake:
 # 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
 # -DWANT_(CORE|QTCLIENT|MONO)=(ON|OFF)
 #                        : select binaries to build
 # -DWITH_OPENSSL=OFF     : Disable OpenSSL support
 # -DSTATIC=ON            : Enable static building of Quassel. Use with care.
 # -DDEPLOY=ON            : Mac OS X only. Use only for creating Quassel Packages!
 #
 # -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!
 
 # 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
 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)
 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")
 
 # 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)
 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)
 
   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...
 # 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)
 
   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")
 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)
 
   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
 ##############
 
 # 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)
 
 # Execinfo is needed for generating backtraces
 find_package(ExecInfo)
@@ -161,18 +207,6 @@ if(EXECINFO_FOUND)
   link_libraries(${EXECINFO_LIBRARIES})
 endif(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!
 
 # 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)
 
   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
 # 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)
 
   message(STATUS "Not enabling OpenSSL support")
 endif(WITH_OPENSSL)
 
+
 # Check for GUI specific stuff
 if(BUILD_GUI)
 
   # Setup D-Bus support
   if(WITH_DBUS)
 # 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)
       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(HAVE_DBUS true)
+      set(CLIENT_QT_MODULES ${CLIENT_QT_MODULES} DBus)
 
       # check if we have dbusmenu as well
 
       # 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")
       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)
 
   else(WITH_DBUS)
     message(STATUS "Not enabling D-Bus support")
   endif(WITH_DBUS)
 
-  # Setup QtWebKit support
+  # Setup QtWebkit support
   if(WITH_WEBKIT)
   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)
       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)
       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)
   else(WITH_WEBKIT)
-    message(STATUS "Not enabling WebKit support")
+    message(STATUS "Not enabling Webkit support")
   endif(WITH_WEBKIT)
 
   # Setup KDE4 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")
     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(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")
     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)
 
   # 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
     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")
     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(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 "")
     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)
 
 
 endif(BUILD_GUI)
 
@@ -305,20 +361,20 @@ endif(BUILD_GUI)
 if(BUILD_CORE)
 
   # Setup encryption support
 if(BUILD_CORE)
 
   # Setup encryption support
-  if(WITH_CRYPT)
+  if(WITH_CRYPT AND NOT WITH_QT5)
     find_package(QCA2)
     if(QCA2_FOUND)
     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)
       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)
     endif(QCA2_FOUND)
-  else(WITH_CRYPT)
+  else(WITH_CRYPT AND NOT WITH_QT5)
     message(STATUS "Not enabling encryption support")
     message(STATUS "Not enabling encryption support")
-  endif(WITH_CRYPT)
+  endif(WITH_CRYPT AND NOT WITH_QT5)
 
   # Setup syslog support
   if(WITH_SYSLOG)
 
   # Setup syslog support
   if(WITH_SYSLOG)
@@ -336,6 +392,10 @@ if(BUILD_CORE)
 
 endif(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)
 # 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)
 
   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.
 # 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)
 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}
 
 get_target_property(GENVERSION_EXECUTABLE genversion LOCATION)
 add_custom_target(genversion_run ALL ${GENVERSION_EXECUTABLE}
index 2e2dfef..f0791ec 100644 (file)
@@ -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_LIBRARIES )
+  set(QUASSEL_QT_INCLUDES ${QT_INCLUDE_DIR})    # Qt4
+  set(QUASSEL_QT_DEFINITIONS ${QT_DEFINITIONS}) # Qt4
+
   IF(WIN32)
   IF(WIN32)
-    set(MAIN MAIN)
+    set(MAIN Main)
   ENDIF(WIN32)
   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)
 
 # This generates a .ts from a .po file
 macro(generate_ts outvar basename)
index 42cfe07..238cb86 100644 (file)
@@ -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)
 
 # 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)
 
 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
   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})
                                     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)
 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
   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})
                                       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)
 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
   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})
                                 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})
index c851907..67ca7f8 100644 (file)
@@ -1,13 +1,16 @@
 # Builds the client module
 
 # 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
 
 set(SOURCES
     abstractmessageprocessor.cpp
+    abstractui.cpp
     backlogrequester.cpp
     buffermodel.cpp
     buffersettings.cpp
     backlogrequester.cpp
     buffermodel.cpp
     buffersettings.cpp
@@ -17,6 +20,7 @@ set(SOURCES
     clientbacklogmanager.cpp
     clientbufferviewconfig.cpp
     clientbufferviewmanager.cpp
     clientbacklogmanager.cpp
     clientbufferviewconfig.cpp
     clientbufferviewmanager.cpp
+    clientcoreinfo.cpp
     clientidentity.cpp
     clientignorelistmanager.cpp
     clientirclisthelper.cpp
     clientidentity.cpp
     clientignorelistmanager.cpp
     clientirclisthelper.cpp
@@ -66,9 +70,13 @@ set(HEADERS
     coreaccount.h
    )
 
     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)
 
 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}")
index 0e3e2a1..9c273e6 100644 (file)
@@ -1,7 +1,6 @@
 # Builds the common module
 # 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
 
 set(SOURCES
     aliasmanager.cpp
@@ -12,6 +11,7 @@ set(SOURCES
     bufferviewconfig.cpp
     bufferviewmanager.cpp
     cliparser.cpp
     bufferviewconfig.cpp
     bufferviewmanager.cpp
     cliparser.cpp
+    coreinfo.cpp
     ctcpevent.cpp
     event.cpp
     eventmanager.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)
 
     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_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")
 
 if(APPLE)
   target_link_libraries(mod_common "-framework CoreServices" "-framework CoreFoundation")
index b669424..5c6f0b6 100644 (file)
@@ -1,10 +1,6 @@
 # Builds the core module
 
 # 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
 
 set(SOURCES
     abstractsqlstorage.cpp
@@ -86,13 +82,17 @@ if(HAVE_QCA2)
   include_directories(${QCA2_INCLUDE_DIR})
 endif(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)
 
 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})
 
 if(HAVE_QCA2)
   target_link_libraries(mod_core ${QCA2_LIBRARIES})
index aa0496d..86217b8 100644 (file)
@@ -1,15 +1,20 @@
 # Builds the qtui module
 
 # 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)
 if(HAVE_DBUS)
-  set(QT_USE_QTDBUS 1)
+  list(APPEND _modules DBus)
 endif(HAVE_DBUS)
 endif(HAVE_DBUS)
+
 if(HAVE_WEBKIT)
 if(HAVE_WEBKIT)
-  set(QT_USE_QTWEBKIT 1)
-  set(QT_USE_XMLPATTERNS 1)
+  list(APPEND _modules Webkit XmlPatterns)
 endif(HAVE_WEBKIT)
 endif(HAVE_WEBKIT)
-include(${QT_USE_FILE})
+
+setup_qt_variables(Gui Network ${_modules})
 
 set(SOURCES
     aboutdlg.cpp
 
 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})
   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)
 endif(HAVE_DBUS)
 
 if(HAVE_SSL)
@@ -192,15 +203,21 @@ foreach(FRM ${SP_FORMS})
   set(SPFRM ${SPFRM} settingspages/${FRM})
 endforeach(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
 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)
 
 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}")
index 5afab31..934e3fd 100644 (file)
@@ -1,16 +1,15 @@
 # Builds the uisupport module
 
 # 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
 
 set(SOURCES
     abstractbuffercontainer.cpp
     abstractitemview.cpp
+    abstractnotificationbackend.cpp
     action.cpp
     actioncollection.cpp
     bufferhotlistfilter.cpp
     action.cpp
     actioncollection.cpp
     bufferhotlistfilter.cpp
@@ -83,10 +82,15 @@ if(HAVE_KDE)
     set(HEADERS ${HEADERS} kcmdlinewrapper.h)
 endif(HAVE_KDE)
 
     set(HEADERS ${HEADERS} kcmdlinewrapper.h)
 endif(HAVE_KDE)
 
-qt4_wrap_cpp(MOC ${MOC_HDRS})
-
 include_directories(${CMAKE_SOURCE_DIR}/src/common
 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)
 
 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}")