summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-04-13 13:14:23 (GMT)
committerTobias Markmann <tm@ayena.de>2015-04-28 12:38:26 (GMT)
commit4ac05ebaf6c913b4bfcc7c4e7abeb6ace9efe5c8 (patch)
tree24be42f31167f2ca82bb3026e939a65233f84846
parent908b442c7b5e74c9d557a1468b321ef4255e402e (diff)
downloadswift-4ac05ebaf6c913b4bfcc7c4e7abeb6ace9efe5c8.zip
swift-4ac05ebaf6c913b4bfcc7c4e7abeb6ace9efe5c8.tar.bz2
Add Qt flags detection using pkg-config on Linux platforms
Fix qt4.py SCons module to use the specific tools of the correct Qt verison. On non-Windows and non-Darwin platforms SCons will try to detect the correct Qt compiler and linker flags from pkg-config. Added the ability to build Slimber with Qt5. Fixed Qt5 support on Linux when using prebuilt Qt distribution from Qt. This patch adds support for building Swift on Arch Linux, with Qt4 and Qt5. Test-Information: Tested under Mac OS X 10.9.5 and Manjaor Linux (Arch Linux) in Qt4 and Qt5 configuration, and tested Qt5 Linux binary from their website on Arch Linux with the qt variable set in config.py. Change-Id: I2e19ab4aa7a26fdd989e2a12faa51a0f3f89c3ce
-rw-r--r--BuildTools/SCons/Tools/qt4.py75
-rw-r--r--Slimber/Qt/SConscript10
-rw-r--r--Swift/QtUI/QtCertificateViewerDialog.cpp29
-rw-r--r--Swift/QtUI/QtUtilities.cpp9
-rw-r--r--Swift/QtUI/SConscript2
5 files changed, 94 insertions, 31 deletions
diff --git a/BuildTools/SCons/Tools/qt4.py b/BuildTools/SCons/Tools/qt4.py
index ad4f1c0..ea86223 100644
--- a/BuildTools/SCons/Tools/qt4.py
+++ b/BuildTools/SCons/Tools/qt4.py
@@ -200,7 +200,11 @@ def _detect(env):
try: return os.environ['QTDIR']
except KeyError: pass
- moc = env.WhereIs('moc-qt4') or env.WhereIs('moc4') or env.WhereIs('moc')
+ moc = None
+ if env["qt5"]:
+ moc = env.WhereIs('moc-qt5') or env.WhereIs('moc5') or env.WhereIs('moc')
+ else :
+ moc = env.WhereIs('moc-qt4') or env.WhereIs('moc4') or env.WhereIs('moc')
if moc:
import sys
if sys.platform == "darwin" :
@@ -222,14 +226,24 @@ def generate(env):
def locateQt4Command(env, command, qtdir) :
if len(qtdir) == 0 :
qtdir = "/usr"
- suffixes = [
- '-qt4',
- '-qt4.exe',
- '4',
- '4.exe',
- '',
- '.exe',
- ]
+ if env["qt5"]:
+ suffixes = [
+ '-qt5',
+ '-qt5.exe',
+ '5',
+ '5.exe',
+ '',
+ '.exe',
+ ]
+ else :
+ suffixes = [
+ '-qt4',
+ '-qt4.exe',
+ '4',
+ '4.exe',
+ '',
+ '.exe',
+ ]
triedPaths = []
for suffix in suffixes :
fullpath = os.path.join(qtdir,'bin',command + suffix)
@@ -426,6 +440,8 @@ def enable_modules(self, modules, debug=False, crosscompiling=False, version='4'
'QtMultimedia',
'QtWebKitWidgets',
]
+ if sys.platform != "win32" and sys.platform != "darwin" and not crosscompiling :
+ validModules += ['QtX11Extras']
staticModules = [
'QtUiTools',
]
@@ -456,16 +472,37 @@ def enable_modules(self, modules, debug=False, crosscompiling=False, version='4'
debugSuffix = ''
if sys.platform != "win32" and sys.platform != "darwin" and not crosscompiling :
- if debug : debugSuffix = '_debug'
- if version == '4' :
- self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include", "phonon")])
- for module in modules :
- self.AppendUnique(LIBS=[module+debugSuffix])
- self.AppendUnique(LIBPATH=[os.path.join("$QTDIR","lib")])
- self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include")])
- self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include",module)])
- self["QT4_MOCCPPPATH"] = self["CPPPATH"]
- return
+ if self["qt"]:
+ # The user specified qt path in config.py and we are going to use the
+ # installation under that location.
+ UsePkgConfig = False
+ else:
+ # The user did not specify a qt path in config py and we are going to
+ # ask pkg-config for the correct flags.
+ UsePkgConfig = True
+ if not UsePkgConfig:
+ if debug : debugSuffix = '_debug'
+ if version == '4' :
+ self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include", "phonon")])
+ for module in modules :
+ module_str = module
+ if not version == '4' :
+ module_str = module_str.replace('Qt', 'Qt5')
+ self.AppendUnique(LIBS=[module_str+debugSuffix])
+ self.AppendUnique(LIBPATH=[os.path.join("$QTDIR","lib")])
+ self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include")])
+ self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include",module)])
+ self["QT4_MOCCPPPATH"] = self["CPPPATH"]
+ return
+ else:
+ test_env = self.Clone()
+ modules_str = " ".join(modules)
+ if not version == '4' :
+ modules_str = modules_str.replace('Qt', 'Qt5')
+ test_env.ParseConfig("pkg-config --cflags --libs " + modules_str)
+ self.AppendUnique(LIBS=test_env["LIBS"], LIBPATH=test_env["LIBPATH"], CPPPATH=test_env["CPPPATH"])
+ self["QT4_MOCCPPPATH"] = self["CPPPATH"]
+ return
if sys.platform == "win32" or crosscompiling :
if crosscompiling:
diff --git a/Slimber/Qt/SConscript b/Slimber/Qt/SConscript
index b4f0bc3..7a18465 100644
--- a/Slimber/Qt/SConscript
+++ b/Slimber/Qt/SConscript
@@ -23,7 +23,15 @@ if myenv.get("HAVE_LIBIDN") :
myenv.Tool("qt4", toolpath = ["#/BuildTools/SCons/Tools"])
myenv.Tool("nsis", toolpath = ["#/BuildTools/SCons/Tools"])
-myenv.EnableQt4Modules(['QtCore', 'QtGui'], debug = False)
+
+
+qt4modules = ['QtCore', 'QtGui']
+if myenv["qt5"] :
+ qt_version = '5'
+ qt4modules += ['QtWidgets']
+else :
+ qt_version = '4'
+myenv.EnableQt4Modules(qt4modules, debug = False, version = qt_version)
myenv.Append(CPPPATH = ["."])
diff --git a/Swift/QtUI/QtCertificateViewerDialog.cpp b/Swift/QtUI/QtCertificateViewerDialog.cpp
index 15a52ba..8108978 100644
--- a/Swift/QtUI/QtCertificateViewerDialog.cpp
+++ b/Swift/QtUI/QtCertificateViewerDialog.cpp
@@ -4,14 +4,22 @@
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
+/*
+ * Copyright (c) 2015 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+
#include "QtCertificateViewerDialog.h"
#include "ui_QtCertificateViewerDialog.h"
#include <Swiften/Base/foreach.h>
-#include <QTreeWidgetItem>
-#include <QLabel>
#include <QDateTime>
+#include <QLabel>
+#include <QString>
+#include <QStringList>
+#include <QTreeWidgetItem>
namespace Swift {
@@ -48,7 +56,7 @@ void QtCertificateViewerDialog::setCertificateChain(const std::vector<Certificat
if (currentChain.size() > 1) {
QTreeWidgetItem* parent = root;
for (int n = 1; n < currentChain.size(); n++) {
- QTreeWidgetItem* link = new QTreeWidgetItem(parent, QStringList(QString("↳ ") + currentChain.at(n).subjectInfo(QSslCertificate::CommonName)));
+ QTreeWidgetItem* link = new QTreeWidgetItem(parent, QStringList(QString("↳ ") + (QStringList(currentChain.at(n).subjectInfo(QSslCertificate::CommonName)).join(", "))));
link->setExpanded(true);
link->setData(0, Qt::UserRole, QVariant(n));
parent = link;
@@ -74,7 +82,8 @@ void QtCertificateViewerDialog::currentItemChanged(QTreeWidgetItem* current, QTr
#define ADD_FIELD( TITLE, VALUE) \
ui->certGridLayout->addWidget(new QLabel(TITLE), rowCount, 0, 1, 1, Qt::AlignRight); \
- valueLabel = new QLabel(VALUE); \
+ valueLabel = new QLabel(); \
+ valueLabel->setText(QStringList(VALUE).join(", ")); \
valueLabel->setTextFormat(Qt::PlainText); \
valueLabel->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard); \
ui->certGridLayout->addWidget(valueLabel, rowCount++, 1, 1, 1, Qt::AlignLeft);
@@ -106,10 +115,16 @@ void QtCertificateViewerDialog::setCertificateDetails(const QSslCertificate& cer
ADD_FIELD(tr("Country"), cert.subjectInfo(QSslCertificate::CountryName));
ADD_FIELD(tr("State"), cert.subjectInfo(QSslCertificate::StateOrProvinceName));
- if (!cert.alternateSubjectNames().empty()) {
+#if QT_VERSION < 0x050000
+ QMultiMap<QSsl::AlternateNameEntryType, QString> altNames = cert.alternateSubjectNames();
+#define SANTYPE QSsl::AlternateNameEntryType
+#else
+ QMultiMap<QSsl::AlternativeNameEntryType, QString> altNames = cert.subjectAlternativeNames();
+#define SANTYPE QSsl::AlternativeNameEntryType
+#endif
+ if (!altNames.empty()) {
ADD_SECTION(tr("Alternate Subject Names"));
- QMultiMap<QSsl::AlternateNameEntryType, QString> altNames = cert.alternateSubjectNames();
- foreach (const QSsl::AlternateNameEntryType &type, altNames.uniqueKeys()) {
+ foreach (const SANTYPE &type, altNames.uniqueKeys()) {
foreach (QString name, altNames.values(type)) {
if (type == QSsl::EmailEntry) {
ADD_FIELD(tr("E-mail Address"), name);
diff --git a/Swift/QtUI/QtUtilities.cpp b/Swift/QtUI/QtUtilities.cpp
index 70686e7..b4b1b09 100644
--- a/Swift/QtUI/QtUtilities.cpp
+++ b/Swift/QtUI/QtUtilities.cpp
@@ -1,18 +1,19 @@
/*
- * Copyright (c) 2010-2013 Isode Limited.
+ * Copyright (c) 2010-2015 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include "QtUtilities.h"
-#include <QTextDocument>
-#include <QWidget>
+#include <QtGui>
#if defined (Q_OS_UNIX) && !defined(Q_OS_MAC)
#include <QX11Info>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#endif
+#include <QTextDocument>
+#include <QWidget>
#include "Swift/Controllers/ApplicationInfo.h"
@@ -20,7 +21,7 @@ namespace QtUtilities {
void setX11Resource(QWidget* widget, const QString& c) {
-#if defined (Q_OS_UNIX) && !defined(Q_OS_MAC)
+#if defined (Q_OS_UNIX) && !defined(Q_OS_MAC) && QT_VERSION < 0x050000
char res_class[] = SWIFT_APPLICATION_NAME;
XClassHint hint;
QByteArray resName = (QString(SWIFT_APPLICATION_NAME) + "-" + c).toUtf8();
diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript
index f3251d2..86b41d3 100644
--- a/Swift/QtUI/SConscript
+++ b/Swift/QtUI/SConscript
@@ -61,6 +61,8 @@ qt4modules = ['QtCore', 'QtWebKit', 'QtGui']
if myenv["qt5"] :
qt_version = '5'
qt4modules += ['QtWidgets', 'QtWebKitWidgets', 'QtMultimedia']
+ if env["PLATFORM"] != "win32" and env["PLATFORM"] != "darwin" :
+ qt4modules += ['QtX11Extras']
else :
qt_version = '4'
if env["PLATFORM"] == "posix" :