Fix SSL detection
authorManuel Nickschas <sputnick@quassel-irc.org>
Sun, 23 Mar 2014 20:28:28 +0000 (21:28 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 23 Mar 2014 20:34:38 +0000 (21:34 +0100)
As there is no easy way to check for QT_CONFIG with Qt5 and CMake,
and the way we did it for Qt4 is hackish at best, let's do it the
proper way and compile a short code snippet that checks for the
appropriate defines (QT_NO_OPENSSL for Qt4, and QT_NO_SSL for Qt5).

This should be the most robust way of figuring this out, and is rather
easy with CMake.

CMakeLists.txt

index b760710..11e0d08 100644 (file)
@@ -22,16 +22,18 @@ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
-# Moar stuff
+# Include various CMake modules...
+include(CMakePushCheckState)
 include(CheckFunctionExists)
 include(CheckIncludeFile)
+include(CheckCXXSourceCompiles)
+include(CMakeDependentOption)
+include(FeatureSummary)
 
+# ... and our own stuff
 include(QuasselCompileSettings)
 include(QuasselMacros)
 
-include(CMakeDependentOption)
-include(FeatureSummary)
-
 
 # Options and variables that can be set on the command line
 #####################################################################
@@ -320,10 +322,24 @@ if (KDE4_FOUND)
     add_definitions(-DHAVE_KDE ${KDE4_DEFINITIONS})
 endif()
 
-# Check for SSL support in Qt (broken for Qt5 currently)
-# We don't link to the OpenSSL libraries ourselves.
-if (QT_QCONFIG MATCHES "openssl")
-    set(HAVE_SSL true)
+# Check for SSL support in Qt
+# As there's no easy way to get Qt's configuration in particular for Qt5, let's just compile
+# a small test program checking the defines. This works for both Qt4 and Qt5.
+cmake_push_check_state(RESET)
+if (Qt5_POSITION_INDEPENDENT_CODE)
+    set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+endif()
+set(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES} ${Qt5Core_INCLUDE_DIRS})
+check_cxx_source_compiles("
+    #include \"qglobal.h\"
+    #if defined QT_NO_OPENSSL || defined QT_NO_SSL
+    #  error \"No SSL support\"
+    #endif
+    int main() {}"
+    HAVE_SSL)
+cmake_pop_check_state()
+
+if (HAVE_SSL)
     add_definitions(-DHAVE_SSL)
 endif()
 add_feature_info("SSL support in Qt" HAVE_SSL "Use secure network connections")