fixed sending of pasted lines
[quassel.git] / CMakeLists.txt
index 6a2cf83..cb35165 100644 (file)
@@ -2,24 +2,27 @@
 #
 # You may pass various options to cmake:
 # -DWANT_(CORE|QTCLIENT|MONO)=(ON|OFF)
 #
 # You may pass various options to cmake:
 # -DWANT_(CORE|QTCLIENT|MONO)=(ON|OFF)
-#                     : select binaries to build
-# -DWITH_OPENSSL=OFF  : Disable OpenSSL support
-# -DWITH_DBUS=OFF     : Disable D-Bus support (dbus notifications)
-# -DWITH_WEBKIT=OFF   : Disable WebKit support (link previews)
-# -DWITH_PHONON=OFF   : Disable Phonon support (audio notifications)
-# -DWITH_KDE=ON       : Enable KDE4 support
+#                        : select binaries to build
+# -DWITH_OPENSSL=OFF     : Disable OpenSSL support
+# -DWITH_DBUS=OFF        : Disable D-Bus support (dbus notifications)
+# -DWITH_WEBKIT=OFF      : Disable WebKit support (link previews)
+# -DWITH_PHONON=OFF      : Disable Phonon support (audio notifications)
+# -DWITH_LIBINDICATE=OFF : Disable libindicate support (Ayatana notifications)
+# -DWITH_KDE=ON          : Enable KDE4 support
+# -DWITH_OXYGEN=(ON|OFF) : Whether to install Oxygen icons (default: yes, unless KDE > 4.3.0 is present and enabled)
 #
 #
-# -DEMBED_DATA=ON     : Embed all data files in icons the binary, rather than installing them separately
+# -DEMBED_DATA=ON        : Embed all data files in icons the binary, rather than installing them separately
 #
 #
-# -DQT=/path/to/qt    : Choose a Qt4 installation to use instead of the system Qt4
-# -DSTATIC=ON         : Enable static building of Quassel. Use with care.
-# -DDEPLOY=ON         : Mac OS X only. Use only for creating Quassel Packages!
+# -DQT=/path/to/qt       : Choose a Qt4 installation to use instead of the system Qt4
+# -DSTATIC=ON            : Enable static building of Quassel. Use with care.
+# -DDEPLOY=ON            : Mac OS X only. Use only for creating Quassel Packages!
 #
 # NOTE: You should remove CMakeCache.txt if you plan to change any of these values!
 
 project(QuasselIRC)
 
 #
 # NOTE: You should remove CMakeCache.txt if you plan to change any of these values!
 
 project(QuasselIRC)
 
-cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
+# cmake 2.6.2 is required for KDE >=4.2 and should be widespread enough now
+cmake_minimum_required(VERSION 2.6.2 FATAL_ERROR)
 
 if(COMMAND cmake_policy)
    cmake_policy(SET CMP0003 NEW)
 
 if(COMMAND cmake_policy)
    cmake_policy(SET CMP0003 NEW)
@@ -39,12 +42,13 @@ option(WITH_OPENSSL  "Enable OpenSSL support if present on the system"      ON)
 option(WITH_DBUS     "Enable D-Bus support if present on the system"   ON)
 option(WITH_WEBKIT   "Enable WebKit support (for link previews)"       ON)
 option(WITH_PHONON   "Enable Phonon support (for audio notifications)" ON)
 option(WITH_DBUS     "Enable D-Bus support if present on the system"   ON)
 option(WITH_WEBKIT   "Enable WebKit support (for link previews)"       ON)
 option(WITH_PHONON   "Enable Phonon support (for audio notifications)" ON)
+option(WITH_LIBINDICATE "Enable Ayatana notification support"           ON)
 option(WITH_KDE      "Enable KDE4 integration"                         OFF)
 
 option(WITH_KDE      "Enable KDE4 integration"                         OFF)
 
-# We use icon paths from KDE 4.3 trunk, which are partially invalid on older and possibly
+# We use icon paths from KDE 4.3.x, which are partially invalid on older and possibly
 # even on newer KDE versions. Do not disable this unless you are sure that your Quassel will
 # run on a matching KDE version only.
 # even on newer KDE versions. Do not disable this unless you are sure that your Quassel will
 # run on a matching KDE version only.
-option(WITH_OXYGEN   "Install Oxygen icons. Heavily recommended unless you use KDE 4.3" ON)
+set(WITH_OXYGEN AUTO CACHE STRING "Install Oxygen icons (default is \"AUTO\" to install when KDE 4.3 or later is present")
 
 option(STATIC        "Enable static building (might not be portable)" OFF)
 
 
 option(STATIC        "Enable static building (might not be portable)" OFF)
 
@@ -62,7 +66,6 @@ endif(STATIC OR WIN32)
 option(EMBED_DATA    "Embed all data files in the binary (rather than installing them separately)"   ${EMBED_DEFAULT})
 
 set(QT "" CACHE STRING "Path to a Qt installation to use instead of the system Qt (e.g. for static builds)")
 option(EMBED_DATA    "Embed all data files in the binary (rather than installing them separately)"   ${EMBED_DEFAULT})
 
 set(QT "" CACHE STRING "Path to a Qt installation to use instead of the system Qt (e.g. for static builds)")
-set(LINGUAS "" CACHE STRING "Comma-separated list of locales specifying languages that should be compiled")
 
 # Some settings imply others
 if(STATIC)
 
 # Some settings imply others
 if(STATIC)
@@ -103,13 +106,26 @@ endif(NOT CMAKE_BUILD_TYPE)
 # 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...
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ansi -Wall -Wextra -Wnon-virtual-dtor")
-  set(CMAKE_CXX_FLAGS_RELWITHDEBUGINFO "-O2")
-  set(CMAKE_CXX_FLAGS_DEBUG "-g -fno-reorder-blocks -fno-schedule-insns -fno-inline")
-  set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3")
+  # -fno-strict-aliasing is needed apparently for Qt < 4.6
+  set(CMAKE_CXX_FLAGS                  "${CMAKE_CXX_FLAGS} -ansi -Wall -Wextra -Wnon-virtual-dtor -fno-strict-aliasing")
+  set(CMAKE_CXX_FLAGS_RELEASE          "-O2 ${CMAKE_CXX_FLAGS}")
+  set(CMAKE_CXX_FLAGS_RELWITHDEBUGINFO "-g -O2 ${CMAKE_CXX_FLAGS}")
+  set(CMAKE_CXX_FLAGS_DEBUG            "-g -ggdb -fno-reorder-blocks -fno-schedule-insns -fno-inline ${CMAKE_CXX_FLAGS}")
+  set(CMAKE_CXX_FLAGS_DEBUGFULL        "-g3 ${CMAKE_CXX_FLAGS_DEBUG}")
 endif(CMAKE_COMPILER_IS_GNUCXX)
 
 endif(CMAKE_COMPILER_IS_GNUCXX)
 
-set(QT_MIN_VERSION "4.4.0")
+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")
+
+if(WANT_MONO OR WANT_QTCLIENT)
+  set(QT_MIN_VERSION "4.5.0")
+else(WANT_MONO OR WANT_QTCLIENT)
+  set(QT_MIN_VERSION "4.4.0")
+endif(WANT_MONO OR WANT_QTCLIENT)
 
 if(APPLE AND DEPLOY)
   set(CMAKE_OSX_ARCHITECTURES "i386;ppc")
 
 if(APPLE AND DEPLOY)
   set(CMAKE_OSX_ARCHITECTURES "i386;ppc")
@@ -140,24 +156,21 @@ include(${QT_USE_FILE})
 include_directories(${QT_INCLUDES})
 
 # Setup OpenSSL
 include_directories(${QT_INCLUDES})
 
 # 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
+# own SSL stuff in this case. Qt should care for adding what it needs itself.
 if(WITH_OPENSSL)
 if(WITH_OPENSSL)
-  find_package(OpenSSL)
-else(WITH_OPENSSL)
-  message(STATUS "Disabling OpenSSL support")
-endif(WITH_OPENSSL)
-
-if(OPENSSL_FOUND)
-  if(NOT QT_DEFINITIONS MATCHES "QT_NO_OPENSSL")
-    message(STATUS "Found OpenSSL support in Qt")
+  if(QT_QCONFIG MATCHES "openssl")
+    message(STATUS "Found OpenSSL support in Qt, enabling SSL")
     add_definitions(-DHAVE_SSL)
     set(HAVE_SSL true)
     add_definitions(-DHAVE_SSL)
     set(HAVE_SSL true)
-    set(MOC_DEFINES ${MOC_DEFINES} -DHAVE_SSL)
-  else(NOT QT_DEFINITIONS MATCHES "QT_NO_OPENSSL")
-    message(STATUS "No OpenSSL support found in Qt, disabling")
-  endif(NOT QT_DEFINITIONS MATCHES "QT_NO_OPENSSL")
-else(OPENSSL_FOUND)
-  add_definitions(-DQT_NO_OPENSSL)
-endif(OPENSSL_FOUND)
+  else(QT_QCONFIG MATCHES "openssl")
+    message(STATUS "No OpenSSL support found in Qt, disabling SSL")
+    add_definitions(-DQT_NO_OPENSSL)
+  endif(QT_QCONFIG MATCHES "openssl")
+else(WITH_OPENSSL)
+  message(STATUS "Not enabling OpenSSL support")
+endif(WITH_OPENSSL)
 
 # Setup D-Bus support
 if(WITH_DBUS)
 
 # Setup D-Bus support
 if(WITH_DBUS)
@@ -166,12 +179,11 @@ if(WITH_DBUS)
     add_definitions(-DHAVE_DBUS)
     set(LINK_DBUS DBUS)
     set(HAVE_DBUS true)
     add_definitions(-DHAVE_DBUS)
     set(LINK_DBUS DBUS)
     set(HAVE_DBUS true)
-    set(MOC_DEFINES ${MOC_DEFINES} -DHAVE_DBUS)
   else(QT_QTDBUS_FOUND)
     message(STATUS "QtDBus not found, disabling D-Bus support")
   endif(QT_QTDBUS_FOUND)
 else(WITH_DBUS)
   else(QT_QTDBUS_FOUND)
     message(STATUS "QtDBus not found, disabling D-Bus support")
   endif(QT_QTDBUS_FOUND)
 else(WITH_DBUS)
-  message(STATUS "Disabling D-Bus support")
+  message(STATUS "Not enabling D-Bus support")
 endif(WITH_DBUS)
 
 # Setup QtWebKit support
 endif(WITH_DBUS)
 
 # Setup QtWebKit support
@@ -181,12 +193,11 @@ if(WITH_WEBKIT)
     add_definitions(-DHAVE_WEBKIT)
     set(LINK_WEBKIT WEBKIT)
     set(HAVE_WEBKIT true)
     add_definitions(-DHAVE_WEBKIT)
     set(LINK_WEBKIT WEBKIT)
     set(HAVE_WEBKIT true)
-    set(MOC_DEFINES ${MOC_DEFINES} -DHAVE_WEBKIT)
   else(QT_QTWEBKIT_FOUND)
     message(STATUS "QtWebKit not found, disabling WebKit support")
   endif(QT_QTWEBKIT_FOUND)
 else(WITH_WEBKIT)
   else(QT_QTWEBKIT_FOUND)
     message(STATUS "QtWebKit not found, disabling WebKit support")
   endif(QT_QTWEBKIT_FOUND)
 else(WITH_WEBKIT)
-  message(STATUS "Disabling WebKit support")
+  message(STATUS "Not enabling WebKit support")
 endif(WITH_WEBKIT)
 
 # Setup KDE4 support
 endif(WITH_WEBKIT)
 
 # Setup KDE4 support
@@ -197,17 +208,24 @@ if(WITH_KDE)
     include_directories(${KDE4_INCLUDES})
     add_definitions(-DHAVE_KDE ${KDE4_DEFINITIONS})
     set(HAVE_KDE 1)
     include_directories(${KDE4_INCLUDES})
     add_definitions(-DHAVE_KDE ${KDE4_DEFINITIONS})
     set(HAVE_KDE 1)
-    set(MOC_DEFINES ${MOC_DEFINES} -DHAVE_KDE)
-    set(QUASSEL_KDE_LIBRARIES ${KDE4_KDECORE_LIBS} ${KDE4_KDEUI_LIBRARY} knotifyconfig)
+    set(QUASSEL_KDE_LIBRARIES ${KDE4_KDECORE_LIBS} ${KDE4_KDEUI_LIBRARY} ${KDE4_SOLID_LIBS} knotifyconfig)
     # We always use external icons for KDE4 support, since we use its iconloader rather than our own
     set(EMBED_DATA OFF)
   else(KDE4_FOUND)
     message(STATUS "KDE4 not found, disabling KDE integration")
   endif(KDE4_FOUND)
 else(WITH_KDE)
     # We always use external icons for KDE4 support, since we use its iconloader rather than our own
     set(EMBED_DATA OFF)
   else(KDE4_FOUND)
     message(STATUS "KDE4 not found, disabling KDE integration")
   endif(KDE4_FOUND)
 else(WITH_KDE)
-  message(STATUS "Disabling KDE4 integration")
+  message(STATUS "Not enabling KDE4 integration")
 endif(WITH_KDE)
 
 endif(WITH_KDE)
 
+# needed to compile with mingw without kde
+if(MINGW AND NOT HAVE_KDE)
+    add_definitions(-D_WIN32_WINNT=0x0500)
+    message(STATUS "Added _WIN32_WINNT=0x0500 definition for MinGW")
+# workaround for bug in mingw gcc 4.0
+    add_definitions(-U__STRICT_ANSI__)
+endif(MINGW AND NOT HAVE_KDE)
+
 # 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)
@@ -216,15 +234,30 @@ if(NOT HAVE_KDE)
       message(STATUS "Enabling Phonon support")
       add_definitions(-DHAVE_PHONON)
       set(HAVE_PHONON true)
       message(STATUS "Enabling Phonon support")
       add_definitions(-DHAVE_PHONON)
       set(HAVE_PHONON true)
-      set(MOC_DEFINES ${MOC_DEFINES} -DHAVE_PHONON)
     else(PHONON_FOUND)
       message(STATUS "Phonon not found, disabling audio notifications")
     endif(PHONON_FOUND)
   else(WITH_PHONON)
     else(PHONON_FOUND)
       message(STATUS "Phonon not found, disabling audio notifications")
     endif(PHONON_FOUND)
   else(WITH_PHONON)
-    message(STATUS "Disabling Phonon support")
+    message(STATUS "Not enabling Phonon support")
   endif(WITH_PHONON)
 endif(NOT HAVE_KDE)
 
   endif(WITH_PHONON)
 endif(NOT HAVE_KDE)
 
+# Setup libindicate-qt support
+if(WITH_LIBINDICATE)
+  find_package(PkgConfig QUIET)
+  if(PKG_CONFIG_FOUND)
+    pkg_check_modules(INDICATEQT indicate-qt>=0.2.1)
+    if(INDICATEQT_FOUND)
+      message(STATUS "Enabling Ayatana notification support")
+      add_definitions(-DHAVE_INDICATEQT)
+    else(INDICATEQT_FOUND)
+      message(STATUS "Disabling Ayatana notification support")
+    endif(INDICATEQT_FOUND)
+  endif(PKG_CONFIG_FOUND)
+else(WITH_LIBINDICATE)
+  message(STATUS "Not enabling Ayatana notification support")
+endif(WITH_LIBINDICATE)
+
 # Now set up install locations; those are set by KDE if integration is enabled
 if(NOT HAVE_KDE)
   if(WIN32)
 # Now set up install locations; those are set by KDE if integration is enabled
 if(NOT HAVE_KDE)
   if(WIN32)
@@ -240,6 +273,12 @@ if(NOT HAVE_KDE)
   endif(WIN32)
 endif(NOT HAVE_KDE)
 
   endif(WIN32)
 endif(NOT HAVE_KDE)
 
+if(EMBED_DATA)
+  message(STATUS "Embedding data files into the binary")
+else(EMBED_DATA)
+  message(STATUS "Installing data files separately")
+endif(EMBED_DATA)
+
 # RPATH needs to be set correctly
 # Do this down here, since otherwise KDE wants to handle it itself, and fails
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH 1)
 # RPATH needs to be set correctly
 # Do this down here, since otherwise KDE wants to handle it itself, and fails
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH 1)
@@ -258,16 +297,18 @@ endif(STATIC AND CMAKE_COMPILER_IS_GNUCXX)
 
 if(WIN32)
   link_libraries(imm32 winmm dbghelp Secur32)  # missing by default :/
 
 if(WIN32)
   link_libraries(imm32 winmm dbghelp Secur32)  # missing by default :/
-
-  if(HAVE_SSL)
-     link_libraries(${OPENSSL_LIBRARIES} libeay32MD)
-  endif(HAVE_SSL)
+  if(MSVC)
+    link_libraries(Version dwmapi shlwapi)
+  endif(MSVC)
+  if(HAVE_SSL AND STATIC)
+     find_package(OpenSSL REQUIRED)
+     link_libraries(${OPENSSL_LIBRARIES})
+  endif(HAVE_SSL AND STATIC)
 endif(WIN32)
 
 endif(WIN32)
 
-if(STATIC)
-  link_directories(${QT_PLUGINS_DIR}/imageformats)
-  link_libraries(qjpeg qgif)
-endif(STATIC)
+if(INDICATEQT_FOUND)
+  add_definitions(-DXDG_APPS_INSTALL_DIR=${XDG_APPS_INSTALL_DIR})
+endif(INDICATEQT_FOUND)
 
 # 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.
@@ -288,5 +329,5 @@ set(CLIENT_DEPS )
 add_subdirectory(data)
 add_subdirectory(icons)
 add_subdirectory(pics)
 add_subdirectory(data)
 add_subdirectory(icons)
 add_subdirectory(pics)
-add_subdirectory(i18n)
+add_subdirectory(po)
 add_subdirectory(src)
 add_subdirectory(src)