add configure options for debug/release OpenSSL
authorPeter Kümmel <syntheticpp@gmx.net>
Thu, 26 Jul 2012 15:16:29 +0000 (17:16 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 31 Jul 2012 09:47:39 +0000 (11:47 +0200)
msvc cannot use the same library for debug and release builds
if openssl libraries are linked statically into the network library.

Change-Id: Ic27ede2d9531b94aff4c50c1699947ce72caf286
Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
src/network/ssl/ssl.pri
tools/configure/configureapp.cpp
tools/configure/configureapp.h

index c81e461..517e7d5 100644 (file)
@@ -27,7 +27,18 @@ contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) {
                ssl/qsslcertificateextension.cpp
 
     # Add optional SSL libs
-    LIBS_PRIVATE += $$OPENSSL_LIBS
+    # Static linking of OpenSSL with msvc:
+    #   - Binaries http://slproweb.com/products/Win32OpenSSL.html
+    #   - also needs -lUser32 -lAdvapi32 -lGdi32 -lCrypt32
+    #   - libs in <OPENSSL_DIR>\lib\VC\static
+    #   - configure: -openssl -openssl-linked -I <OPENSSL_DIR>\include -L <OPENSSL_DIR>\lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD"
+
+    CONFIG(debug, debug|release) {
+        LIBS_PRIVATE += $$OPENSSL_LIBS_DEBUG
+    } else {
+        LIBS_PRIVATE += $$OPENSSL_LIBS_RELEASE
+    }
 
+    LIBS_PRIVATE += $$OPENSSL_LIBS
     windows:LIBS += -lcrypt32
 }
index 1786404..b2e484d 100644 (file)
@@ -965,6 +965,10 @@ void Configure::parseCmdLine()
             qmakeLibs += QString("-l" + configCmdLine.at(i));
         } else if (configCmdLine.at(i).startsWith("OPENSSL_LIBS=")) {
             opensslLibs = configCmdLine.at(i);
+        } else if (configCmdLine.at(i).startsWith("OPENSSL_LIBS_DEBUG=")) {
+            opensslLibsDebug = configCmdLine.at(i);
+        } else if (configCmdLine.at(i).startsWith("OPENSSL_LIBS_RELEASE=")) {
+            opensslLibsRelease = configCmdLine.at(i);
         } else if (configCmdLine.at(i).startsWith("PSQL_LIBS=")) {
             psqlLibs = configCmdLine.at(i);
         } else if (configCmdLine.at(i).startsWith("SYBASE=")) {
@@ -2608,8 +2612,18 @@ void Configure::generateOutputVars()
         qmakeVars += QString("INCLUDEPATH    += ") + formatPaths(qmakeIncludes);
     if (!opensslLibs.isEmpty())
         qmakeVars += opensslLibs;
-    else if (dictionary[ "OPENSSL" ] == "linked")
-        qmakeVars += QString("OPENSSL_LIBS    = -lssleay32 -llibeay32");
+    if (dictionary[ "OPENSSL" ] == "linked") {
+        if (!opensslLibsDebug.isEmpty() || !opensslLibsRelease.isEmpty()) {
+            if (opensslLibsDebug.isEmpty() || opensslLibsRelease.isEmpty()) {
+                cout << "Error: either both or none of OPENSSL_LIBS_DEBUG/_RELEASE must be defined." << endl;
+                exit(1);
+            }
+            qmakeVars += opensslLibsDebug;
+            qmakeVars += opensslLibsRelease;
+        } else if (opensslLibs.isEmpty()) {
+            qmakeVars += QString("OPENSSL_LIBS    = -lssleay32 -llibeay32");
+        }
+    }
     if (!psqlLibs.isEmpty())
         qmakeVars += QString("QT_LFLAGS_PSQL=") + psqlLibs.section("=", 1);
 
@@ -3402,11 +3416,18 @@ void Configure::displayConfig()
         sout << "WARNING: Using static linking will disable the use of plugins." << endl;
         sout << "         Make sure you compile ALL needed modules into the library." << endl;
     }
-    if (dictionary[ "OPENSSL" ] == "linked" && opensslLibs.isEmpty()) {
-        sout << "NOTE: When linking against OpenSSL, you can override the default" << endl;
-        sout << "library names through OPENSSL_LIBS." << endl;
-        sout << "For example:" << endl;
-        sout << "    configure -openssl-linked OPENSSL_LIBS=\"-lssleay32 -llibeay32\"" << endl;
+    if (dictionary[ "OPENSSL" ] == "linked") {
+        if (!opensslLibsDebug.isEmpty() || !opensslLibsRelease.isEmpty()) {
+            sout << "Using OpenSSL libraries:" << endl;
+            sout << "   debug  : " << opensslLibsDebug << endl;
+            sout << "   release: " << opensslLibsRelease << endl;
+            sout << "   both   : " << opensslLibs << endl;
+        } else if (opensslLibs.isEmpty()) {
+            sout << "NOTE: When linking against OpenSSL, you can override the default" << endl;
+            sout << "library names through OPENSSL_LIBS and optionally OPENSSL_LIBS_DEBUG/OPENSSL_LIBS_RELEASE" << endl;
+            sout << "For example:" << endl;
+            sout << "    configure -openssl-linked OPENSSL_LIBS=\"-lssleay32 -llibeay32\"" << endl;
+        }
     }
     if (dictionary[ "ZLIB_FORCED" ] == "yes") {
         QString which_zlib = "supplied";
index ff5050a..7f4cbdb 100644 (file)
@@ -141,6 +141,8 @@ private:
     QStringList qmakeIncludes;
     QStringList qmakeLibs;
     QString opensslLibs;
+    QString opensslLibsDebug;
+    QString opensslLibsRelease;
     QString psqlLibs;
     QString sybase;
     QString sybaseLibs;