Introduce secure transport backend for Windows Runtime

The change creates a stub implementation for WinRT, adding the needed
files and classes to build SSL support on that platform.

Task-number: QTBUG-37497
Change-Id: Idc3e8aa91c5eb8a938705f2385d1074fe6c1d83e
Reviewed-by: Richard J. Moore <rich@kde.org>
Reviewed-by: Andrew Knight <andrew.knight@digia.com>
This commit is contained in:
Oliver Wolff 2014-08-12 20:04:05 +03:00 committed by Andrew Knight
parent 2be0bf0765
commit cec893e4f0
11 changed files with 645 additions and 24 deletions

View File

@ -73,7 +73,9 @@
#ifndef QT_NO_HTTP
#ifndef QT_NO_SSL
#ifndef QT_NO_OPENSSL
# include <private/qsslcontext_openssl_p.h>
#endif
# include <private/qsslsocket_p.h>
# include <QtNetwork/qsslsocket.h>
# include <QtNetwork/qsslerror.h>

View File

@ -116,6 +116,9 @@
#ifndef QT_NO_OPENSSL
#include "qsslsocket_openssl_symbols_p.h"
#endif
#ifdef Q_OS_WINRT
#include "qsslsocket_winrt_p.h"
#endif
#include "qsslcertificate.h"
#include "qsslcertificate_p.h"

View File

@ -0,0 +1,191 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtNetwork module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qsslcertificate.h"
#include "qsslcertificate_p.h"
QT_BEGIN_NAMESPACE
bool QSslCertificate::operator==(const QSslCertificate &other) const
{
if (d == other.d)
return true;
return false;
}
bool QSslCertificate::isNull() const
{
Q_UNIMPLEMENTED();
return true;
}
bool QSslCertificate::isSelfSigned() const
{
Q_UNIMPLEMENTED();
return true;
}
QByteArray QSslCertificate::version() const
{
Q_UNIMPLEMENTED();
return QByteArray();
}
QByteArray QSslCertificate::serialNumber() const
{
Q_UNIMPLEMENTED();
return QByteArray();
}
QStringList QSslCertificate::issuerInfo(SubjectInfo info) const
{
Q_UNIMPLEMENTED();
return QStringList();
}
QStringList QSslCertificate::issuerInfo(const QByteArray &attribute) const
{
Q_UNIMPLEMENTED();
return QStringList();
}
QStringList QSslCertificate::subjectInfo(SubjectInfo info) const
{
Q_UNIMPLEMENTED();
return QStringList();
}
QStringList QSslCertificate::subjectInfo(const QByteArray &attribute) const
{
Q_UNIMPLEMENTED();
return QStringList();
}
QList<QByteArray> QSslCertificate::subjectInfoAttributes() const
{
Q_UNIMPLEMENTED();
return QList<QByteArray>();
}
QList<QByteArray> QSslCertificate::issuerInfoAttributes() const
{
Q_UNIMPLEMENTED();
return QList<QByteArray>();
}
QMultiMap<QSsl::AlternativeNameEntryType, QString> QSslCertificate::subjectAlternativeNames() const
{
Q_UNIMPLEMENTED();
return QMultiMap<QSsl::AlternativeNameEntryType, QString>();
}
QDateTime QSslCertificate::effectiveDate() const
{
Q_UNIMPLEMENTED();
return QDateTime();
}
QDateTime QSslCertificate::expiryDate() const
{
Q_UNIMPLEMENTED();
return QDateTime();
}
Qt::HANDLE QSslCertificate::handle() const
{
Q_UNIMPLEMENTED();
return 0;
}
QSslKey QSslCertificate::publicKey() const
{
Q_UNIMPLEMENTED();
return QSslKey();
}
QList<QSslCertificateExtension> QSslCertificate::extensions() const
{
Q_UNIMPLEMENTED();
return QList<QSslCertificateExtension>();
}
QByteArray QSslCertificate::toPem() const
{
Q_UNIMPLEMENTED();
return QByteArray();
}
QByteArray QSslCertificate::toDer() const
{
Q_UNIMPLEMENTED();
return QByteArray();
}
QString QSslCertificate::toText() const
{
Q_UNIMPLEMENTED();
return QString();
}
void QSslCertificatePrivate::init(const QByteArray &data, QSsl::EncodingFormat format)
{
Q_UNIMPLEMENTED();
}
QList<QSslCertificate> QSslCertificatePrivate::certificatesFromPem(const QByteArray &pem, int count)
{
Q_UNIMPLEMENTED();
Q_UNUSED(pem)
Q_UNUSED(count)
return QList<QSslCertificate>();
}
QList<QSslCertificate> QSslCertificatePrivate::certificatesFromDer(const QByteArray &der, int count)
{
Q_UNIMPLEMENTED();
Q_UNUSED(der)
Q_UNUSED(count)
return QList<QSslCertificate>();
}
QT_END_NAMESPACE

View File

@ -0,0 +1,82 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtNetwork module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qsslkey.h"
#include "qsslkey_p.h"
QT_BEGIN_NAMESPACE
void QSslKeyPrivate::clear(bool deep)
{
Q_UNIMPLEMENTED();
}
void QSslKeyPrivate::decodeDer(const QByteArray &der, const QByteArray &passPhrase,
bool deepClear)
{
Q_UNIMPLEMENTED();
}
void QSslKeyPrivate::decodePem(const QByteArray &pem, const QByteArray &passPhrase,
bool deepClear)
{
Q_UNIMPLEMENTED();
}
int QSslKeyPrivate::length() const
{
Q_UNIMPLEMENTED();
return -1;
}
QByteArray QSslKeyPrivate::toPem(const QByteArray &passPhrase) const
{
Q_UNIMPLEMENTED();
return QByteArray();
}
Qt::HANDLE QSslKeyPrivate::handle() const
{
Q_UNIMPLEMENTED();
return 0;
}
QT_END_NAMESPACE

View File

@ -294,6 +294,9 @@
#ifndef QT_NO_OPENSSL
#include "qsslsocket_openssl_p.h"
#endif
#ifdef Q_OS_WINRT
#include "qsslsocket_winrt_p.h"
#endif
#include "qsslconfiguration_p.h"
#include <QtCore/qdebug.h>

View File

@ -217,7 +217,7 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_flushWriteBuffer())
Q_PRIVATE_SLOT(d_func(), void _q_flushReadBuffer())
Q_PRIVATE_SLOT(d_func(), void _q_resumeImplementation())
#ifdef Q_OS_WIN
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
Q_PRIVATE_SLOT(d_func(), void _q_caRootLoaded(QSslCertificate,QSslCertificate))
#endif
friend class QSslSocketBackendPrivate;

View File

@ -72,11 +72,13 @@
#include <CoreFoundation/CFArray.h>
#elif defined(Q_OS_WIN)
#include <QtCore/qt_windows.h>
#ifndef Q_OS_WINRT
#include <wincrypt.h>
#endif // !Q_OS_WINRT
#ifndef HCRYPTPROV_LEGACY
#define HCRYPTPROV_LEGACY HCRYPTPROV
#endif
#endif
#endif // !HCRYPTPROV_LEGACY
#endif // Q_OS_WIN
QT_BEGIN_NAMESPACE
@ -86,7 +88,7 @@ QT_BEGIN_NAMESPACE
typedef OSStatus (*PtrSecTrustCopyAnchorCertificates)(CFArrayRef*);
#endif
#if defined(Q_OS_WIN)
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
#if defined(Q_OS_WINCE)
typedef HCERTSTORE (WINAPI *PtrCertOpenSystemStoreW)(LPCSTR, DWORD, HCRYPTPROV_LEGACY, DWORD, const void*);
#else
@ -94,7 +96,7 @@ QT_BEGIN_NAMESPACE
#endif
typedef PCCERT_CONTEXT (WINAPI *PtrCertFindCertificateInStore)(HCERTSTORE, DWORD, DWORD, DWORD, const void*, PCCERT_CONTEXT);
typedef BOOL (WINAPI *PtrCertCloseStore)(HCERTSTORE, DWORD);
#endif
#endif // Q_OS_WIN && !Q_OS_WINRT
@ -153,11 +155,11 @@ public:
static PtrSecCertificateCopyData ptrSecCertificateCopyData;
static PtrSecTrustSettingsCopyCertificates ptrSecTrustSettingsCopyCertificates;
static PtrSecTrustCopyAnchorCertificates ptrSecTrustCopyAnchorCertificates;
#elif defined(Q_OS_WIN)
#elif defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
static PtrCertOpenSystemStoreW ptrCertOpenSystemStoreW;
static PtrCertFindCertificateInStore ptrCertFindCertificateInStore;
static PtrCertCloseStore ptrCertCloseStore;
#endif
#endif // Q_OS_WIN && !Q_OS_WINRT
// The socket itself, including private slots.
QTcpSocket *plainSocket;
@ -178,7 +180,7 @@ public:
void _q_flushWriteBuffer();
void _q_flushReadBuffer();
void _q_resumeImplementation();
#ifdef Q_OS_WIN
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
virtual void _q_caRootLoaded(QSslCertificate,QSslCertificate) = 0;
#endif

View File

@ -0,0 +1,204 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtNetwork module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
/****************************************************************************
**
** In addition, as a special exception, the copyright holders listed above give
** permission to link the code of its release of Qt with the OpenSSL project's
** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
** same license as the original version), and distribute the linked executables.
**
** You must comply with the GNU General Public License version 2 in all
** respects for all of the code used other than the "OpenSSL" code. If you
** modify this file, you may extend this exception to your version of the file,
** but you are not obligated to do so. If you do not wish to do so, delete
** this exception statement from your version of this file.
**
****************************************************************************/
//#define QSSLSOCKET_DEBUG
//#define QT_DECRYPT_SSL_TRAFFIC
#include "qsslsocket_winrt_p.h"
#include "qsslsocket.h"
#include "qsslcertificate_p.h"
QT_BEGIN_NAMESPACE
bool QSslSocketPrivate::s_loadRootCertsOnDemand = false;
QSslSocketBackendPrivate::QSslSocketBackendPrivate()
{
ensureInitialized();
}
QSslSocketBackendPrivate::~QSslSocketBackendPrivate()
{
}
void QSslSocketPrivate::deinitialize()
{
Q_UNIMPLEMENTED();
}
bool QSslSocketPrivate::supportsSsl()
{
return true;
}
bool QSslSocketPrivate::ensureLibraryLoaded()
{
return true;
}
void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
{
Q_UNIMPLEMENTED();
}
void QSslSocketPrivate::ensureInitialized()
{
}
long QSslSocketPrivate::sslLibraryVersionNumber()
{
Q_UNIMPLEMENTED();
return 0;
}
QString QSslSocketPrivate::sslLibraryVersionString()
{
Q_UNIMPLEMENTED();
return QString::number(sslLibraryVersionNumber());
}
long QSslSocketPrivate::sslLibraryBuildVersionNumber()
{
Q_UNIMPLEMENTED();
return 0;
}
QString QSslSocketPrivate::sslLibraryBuildVersionString()
{
Q_UNIMPLEMENTED();
return QString::number(sslLibraryBuildVersionNumber());
}
void QSslSocketPrivate::resetDefaultCiphers()
{
Q_UNIMPLEMENTED();
}
QList<QSslCertificate> QSslSocketPrivate::systemCaCertificates()
{
Q_UNIMPLEMENTED();
ensureInitialized();
QList<QSslCertificate> systemCerts;
return systemCerts;
}
void QSslSocketBackendPrivate::startClientEncryption()
{
Q_UNIMPLEMENTED();
}
void QSslSocketBackendPrivate::startServerEncryption()
{
Q_UNIMPLEMENTED();
}
void QSslSocketBackendPrivate::transmit()
{
Q_UNIMPLEMENTED();
}
void QSslSocketBackendPrivate::disconnectFromHost()
{
Q_UNIMPLEMENTED();
}
void QSslSocketBackendPrivate::disconnected()
{
Q_UNIMPLEMENTED();
}
QSslCipher QSslSocketBackendPrivate::sessionCipher() const
{
Q_UNIMPLEMENTED();
return QSslCipher();
}
QSsl::SslProtocol QSslSocketBackendPrivate::sessionProtocol() const
{
Q_UNIMPLEMENTED();
return QSsl::UnknownProtocol;
}
void QSslSocketBackendPrivate::continueHandshake()
{
Q_UNIMPLEMENTED();
}
QList<QSslError> QSslSocketBackendPrivate::verify(QList<QSslCertificate> certificateChain, const QString &hostName)
{
Q_UNIMPLEMENTED();
Q_UNUSED(certificateChain)
Q_UNUSED(hostName)
QList<QSslError> errors;
return errors;
}
bool QSslSocketBackendPrivate::importPKCS12(QIODevice *device,
QSslKey *key, QSslCertificate *cert,
QList<QSslCertificate> *caCertificates,
const QByteArray &passPhrase)
{
Q_UNIMPLEMENTED();
Q_UNUSED(device)
Q_UNUSED(key)
Q_UNUSED(cert)
Q_UNUSED(caCertificates)
Q_UNUSED(passPhrase)
return false;
}
QT_END_NAMESPACE

View File

@ -0,0 +1,101 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtNetwork module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
/****************************************************************************
**
** In addition, as a special exception, the copyright holders listed above give
** permission to link the code of its release of Qt with the OpenSSL project's
** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
** same license as the original version), and distribute the linked executables.
**
** You must comply with the GNU General Public License version 2 in all
** respects for all of the code used other than the "OpenSSL" code. If you
** modify this file, you may extend this exception to your version of the file,
** but you are not obligated to do so. If you do not wish to do so, delete
** this exception statement from your version of this file.
**
****************************************************************************/
#ifndef QSSLSOCKET_OPENSSL_P_H
#define QSSLSOCKET_OPENSSL_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
// of the QLibrary class. This header file may change from
// version to version without notice, or even be removed.
//
// We mean it.
//
#include "qsslsocket_p.h"
QT_BEGIN_NAMESPACE
class QSslSocketBackendPrivate : public QSslSocketPrivate
{
Q_DECLARE_PUBLIC(QSslSocket)
public:
QSslSocketBackendPrivate();
~QSslSocketBackendPrivate();
// Platform specific functions
void startClientEncryption() Q_DECL_OVERRIDE;
void startServerEncryption() Q_DECL_OVERRIDE;
void transmit() Q_DECL_OVERRIDE;
void disconnectFromHost() Q_DECL_OVERRIDE;
void disconnected() Q_DECL_OVERRIDE;
QSslCipher sessionCipher() const Q_DECL_OVERRIDE;
QSsl::SslProtocol sessionProtocol() const Q_DECL_OVERRIDE;
void continueHandshake() Q_DECL_OVERRIDE;
static QList<QSslError> verify(QList<QSslCertificate> certificateChain, const QString &hostName);
static bool importPKCS12(QIODevice *device,
QSslKey *key, QSslCertificate *cert,
QList<QSslCertificate> *caCertificates,
const QByteArray &passPhrase);
};
QT_END_NAMESPACE
#endif

View File

@ -1,5 +1,5 @@
# OpenSSL support; compile in QSslSocket.
contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) {
contains(QT_CONFIG, ssl) | contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) {
HEADERS += ssl/qssl.h \
ssl/qsslcertificate.h \
ssl/qsslcertificate_p.h \
@ -11,25 +11,35 @@ contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) {
ssl/qsslkey.h \
ssl/qsslkey_p.h \
ssl/qsslsocket.h \
ssl/qsslsocket_openssl_p.h \
ssl/qsslsocket_openssl_symbols_p.h \
ssl/qsslsocket_p.h \
ssl/qsslcertificateextension.h \
ssl/qsslcertificateextension_p.h \
ssl/qsslcontext_openssl_p.h
ssl/qsslcertificateextension_p.h
SOURCES += ssl/qssl.cpp \
ssl/qsslcertificate.cpp \
ssl/qsslcertificate_openssl.cpp \
ssl/qsslconfiguration.cpp \
ssl/qsslcipher.cpp \
ssl/qsslkey_p.cpp \
ssl/qsslerror.cpp \
ssl/qsslkey_openssl.cpp \
ssl/qsslsocket.cpp \
ssl/qsslcertificateextension.cpp
winrt {
HEADERS += ssl/qsslsocket_winrt_p.h
SOURCES += ssl/qsslcertificate_winrt.cpp \
ssl/qsslkey_winrt.cpp \
ssl/qsslsocket_winrt.cpp
}
}
contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) {
HEADERS += ssl/qsslcontext_openssl_p.h \
ssl/qsslsocket_openssl_p.h \
ssl/qsslsocket_openssl_symbols_p.h
SOURCES += ssl/qsslcertificate_openssl.cpp \
ssl/qsslcontext_openssl.cpp \
ssl/qsslkey_openssl.cpp \
ssl/qsslsocket_openssl.cpp \
ssl/qsslsocket_openssl_symbols.cpp \
ssl/qsslcertificateextension.cpp \
ssl/qsslcontext_openssl.cpp
ssl/qsslsocket_openssl_symbols.cpp
android:!android-no-sdk: SOURCES += ssl/qsslsocket_openssl_android.cpp

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2013 Intel Corporation
** Contact: http://www.qt-project.org/legal
**
@ -274,6 +274,7 @@ Configure::Configure(int& argc, char** argv)
dictionary[ "OPENGL" ] = "yes";
dictionary[ "OPENGL_ES_2" ] = "yes";
dictionary[ "OPENVG" ] = "no";
dictionary[ "SSL" ] = "auto";
dictionary[ "OPENSSL" ] = "auto";
dictionary[ "DBUS" ] = "auto";
@ -858,7 +859,11 @@ void Configure::parseCmdLine()
else if (configCmdLine.at(i) == "-avx2")
dictionary[ "AVX2" ] = "yes";
else if (configCmdLine.at(i) == "-no-openssl") {
else if (configCmdLine.at(i) == "-no-ssl") {
dictionary[ "SSL"] = "no";
} else if (configCmdLine.at(i) == "-ssl") {
dictionary[ "SSL" ] = "yes";
} else if (configCmdLine.at(i) == "-no-openssl") {
dictionary[ "OPENSSL"] = "no";
} else if (configCmdLine.at(i) == "-openssl") {
dictionary[ "OPENSSL" ] = "yes";
@ -1627,6 +1632,7 @@ void Configure::applySpecSpecifics()
dictionary[ "OPENGL" ] = "yes";
dictionary[ "OPENGL_ES_2" ] = "yes";
dictionary[ "OPENVG" ] = "no";
dictionary[ "SSL" ] = "yes";
dictionary[ "OPENSSL" ] = "no";
dictionary[ "DBUS" ] = "no";
dictionary[ "ZLIB" ] = "qt";
@ -1643,6 +1649,7 @@ void Configure::applySpecSpecifics()
dictionary[ "STYLE_WINDOWSCE" ] = "yes";
dictionary[ "STYLE_WINDOWSMOBILE" ] = "yes";
dictionary[ "OPENGL" ] = "no";
dictionary[ "SSL" ] = "no";
dictionary[ "OPENSSL" ] = "no";
dictionary[ "RTTI" ] = "no";
dictionary[ "SSE2" ] = "no";
@ -1958,6 +1965,8 @@ bool Configure::displayHelp()
desc("AVX", "yes", "-avx", "Compile with use of AVX instructions.");
desc("AVX2", "no", "-no-avx2", "Do not compile with use of AVX2 instructions.");
desc("AVX2", "yes", "-avx2", "Compile with use of AVX2 instructions.\n");
desc("SSL", "no", "-no-ssl", "Do not compile support for SSL.");
desc("SSL", "yes", "-ssl", "Enable run-time SSL support.");
desc("OPENSSL", "no", "-no-openssl", "Do not compile support for OpenSSL.");
desc("OPENSSL", "yes", "-openssl", "Enable run-time OpenSSL support.");
desc("OPENSSL", "linked","-openssl-linked", "Enable linked OpenSSL support.\n");
@ -2373,6 +2382,18 @@ void Configure::autoDetection()
dictionary["AVX2"] = checkAvailability("AVX2") ? "yes" : "no";
if (dictionary["NEON"] == "auto")
dictionary["NEON"] = checkAvailability("NEON") ? "yes" : "no";
if (dictionary["SSL"] == "auto") {
if (platform() == WINDOWS_RT) {
dictionary["SSL"] = "yes";
} else {
// On Desktop Windows openssl and ssl always have the same value (for now). OpenSSL is
// the only backend and if it is available and should be built, that also means that
// SSL support in general is enabled.
if (dictionary["OPENSSL"] == "auto")
dictionary["OPENSSL"] = checkAvailability("OPENSSL") ? "yes" : "no";
dictionary["SSL"] = dictionary["OPENSSL"];
}
}
if (dictionary["OPENSSL"] == "auto")
dictionary["OPENSSL"] = checkAvailability("OPENSSL") ? "yes" : "no";
if (dictionary["DBUS"] == "auto")
@ -2805,6 +2826,9 @@ void Configure::generateOutputVars()
qtConfig += "egl";
}
if (dictionary[ "SSL" ] == "yes")
qtConfig += "ssl";
if (dictionary[ "OPENSSL" ] == "yes")
qtConfig += "openssl";
else if (dictionary[ "OPENSSL" ] == "linked")
@ -3515,10 +3539,8 @@ void Configure::generateConfigfiles()
if (dictionary["GUI"] == "no") qconfigList += "QT_NO_GUI";
if (dictionary["OPENGL"] == "no") qconfigList += "QT_NO_OPENGL";
if (dictionary["OPENVG"] == "no") qconfigList += "QT_NO_OPENVG";
if (dictionary["OPENSSL"] == "no") {
qconfigList += "QT_NO_OPENSSL";
qconfigList += "QT_NO_SSL";
}
if (dictionary["SSL"] == "no") qconfigList += "QT_NO_SSL";
if (dictionary["OPENSSL"] == "no") qconfigList += "QT_NO_OPENSSL";
if (dictionary["OPENSSL"] == "linked") qconfigList += "QT_LINKED_OPENSSL";
if (dictionary["DBUS"] == "no") qconfigList += "QT_NO_DBUS";
if (dictionary["QML_DEBUG"] == "no") qconfigList += "QT_QML_NO_DEBUGGER";
@ -3656,6 +3678,7 @@ void Configure::displayConfig()
sout << "Glib support................" << dictionary[ "QT_GLIB" ] << endl;
sout << "CUPS support................" << dictionary[ "QT_CUPS" ] << endl;
sout << "OpenVG support.............." << dictionary[ "OPENVG" ] << endl;
sout << "SSL support................." << dictionary[ "SSL" ] << endl;
sout << "OpenSSL support............." << dictionary[ "OPENSSL" ] << endl;
sout << "Qt D-Bus support............" << dictionary[ "DBUS" ] << endl;
sout << "Qt Widgets module support..." << dictionary[ "WIDGETS" ] << endl;