diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri index c81e461d3f..517e7d541a 100644 --- a/src/network/ssl/ssl.pri +++ b/src/network/ssl/ssl.pri @@ -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 \lib\VC\static + # - configure: -openssl -openssl-linked -I \include -L \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 } diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 17864046c9..b2e484d2a8 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -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"; diff --git a/tools/configure/configureapp.h b/tools/configure/configureapp.h index ff5050ad8d..7f4cbdb983 100644 --- a/tools/configure/configureapp.h +++ b/tools/configure/configureapp.h @@ -141,6 +141,8 @@ private: QStringList qmakeIncludes; QStringList qmakeLibs; QString opensslLibs; + QString opensslLibsDebug; + QString opensslLibsRelease; QString psqlLibs; QString sybase; QString sybaseLibs;