summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extra/qt/.md5sum2
-rwxr-xr-xextra/qt/Pkgfile9
-rw-r--r--extra/qt/qt-4.7.1-add-postgresql9.patch215
-rw-r--r--extra/qt/qt-4.7.1-fix-qtbug-15857.patch32
4 files changed, 256 insertions, 2 deletions
diff --git a/extra/qt/.md5sum b/extra/qt/.md5sum
index ff1020473..915013424 100644
--- a/extra/qt/.md5sum
+++ b/extra/qt/.md5sum
@@ -1 +1,3 @@
+ae3bb58e7b63786d420905baf083fcd2 qt-4.7.1-add-postgresql9.patch
+c359d7b8c3a7fdd99512feaab8c2e26b qt-4.7.1-fix-qtbug-15857.patch
6f88d96507c84e9fea5bf3a71ebeb6d7 qt-everywhere-opensource-src-4.7.1.tar.gz
diff --git a/extra/qt/Pkgfile b/extra/qt/Pkgfile
index e7342e79b..2e713b365 100755
--- a/extra/qt/Pkgfile
+++ b/extra/qt/Pkgfile
@@ -6,10 +6,12 @@
name=qt
version=4.7.1
-release=3
+release=4
_name=qt-everywhere-opensource-src-${version}
-source=(http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-$version.tar.gz)
+source=(http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-$version.tar.gz
+ qt-4.7.1-fix-qtbug-15857.patch
+ qt-4.7.1-add-postgresql9.patch)
build() {
unset QMAKESPC
@@ -19,6 +21,9 @@ build() {
cd ${_name}
+ patch -Np1 -i ../qt-4.7.1-fix-qtbug-15857.patch
+ patch -Np1 -i ../qt-4.7.1-add-postgresql9.patch
+
sed -i "s|-O2|$CXXFLAGS|" mkspecs/common/g++.conf
sed -i "/^QMAKE_RPATH/s| -Wl,-rpath,||g" mkspecs/common/g++.conf
sed -i "/^QMAKE_LFLAGS\s/s|+=|+= $LDFLAGS|g" mkspecs/common/g++.conf
diff --git a/extra/qt/qt-4.7.1-add-postgresql9.patch b/extra/qt/qt-4.7.1-add-postgresql9.patch
new file mode 100644
index 000000000..32c45a80a
--- /dev/null
+++ b/extra/qt/qt-4.7.1-add-postgresql9.patch
@@ -0,0 +1,215 @@
+From 03f94089a16cf6b6a3b533ba1f90444eb18c29ab Mon Sep 17 00:00:00 2001
+From: Charles Yin <charles.yin@nokia.com>
+Date: Thu, 4 Nov 2010 15:38:57 +1000
+Subject: [PATCH] Add Postgresql 8.x and 9 supports
+
+Change-Id: Ic740686ead768cc3e106703049d878549dfd3c6a
+Task-number:QTBUG-14206
+Reviewed-by: Michael Goddard
+---
+ src/sql/drivers/psql/qsql_psql.cpp | 116 +++++++++++++++++++++---------
+ src/sql/drivers/psql/qsql_psql.h | 6 ++-
+ tests/auto/qsqldatabase/tst_databases.h | 2 +
+ 3 files changed, 88 insertions(+), 36 deletions(-)
+
+diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp
+index 2a4e595..bf9685f 100644
+--- a/src/sql/drivers/psql/qsql_psql.cpp
++++ b/src/sql/drivers/psql/qsql_psql.cpp
+@@ -54,7 +54,6 @@
+ #include <qstringlist.h>
+ #include <qmutex.h>
+
+-
+ #include <libpq-fe.h>
+ #include <pg_config.h>
+
+@@ -619,6 +618,50 @@ static void setDatestyle(PGconn* connection)
+ PQclear(result);
+ }
+
++static QPSQLDriver::Protocol qMakePSQLVersion(int vMaj, int vMin)
++{
++ switch (vMaj) {
++ case 6:
++ return QPSQLDriver::Version6;
++ case 7:
++ {
++ switch (vMin) {
++ case 1:
++ return QPSQLDriver::Version71;
++ case 3:
++ return QPSQLDriver::Version73;
++ case 4:
++ return QPSQLDriver::Version74;
++ default:
++ return QPSQLDriver::Version7;
++ }
++ break;
++ }
++ case 8:
++ {
++ switch (vMin) {
++ case 1:
++ return QPSQLDriver::Version81;
++ case 2:
++ return QPSQLDriver::Version82;
++ case 3:
++ return QPSQLDriver::Version83;
++ case 4:
++ return QPSQLDriver::Version84;
++ default:
++ return QPSQLDriver::Version8;
++ }
++ break;
++ }
++ case 9:
++ return QPSQLDriver::Version9;
++ break;
++ default:
++ break;
++ }
++ return QPSQLDriver::VersionUnknown;
++}
++
+ static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection)
+ {
+ QPSQLDriver::Protocol serverVersion = QPSQLDriver::Version6;
+@@ -626,50 +669,44 @@ static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection)
+ int status = PQresultStatus(result);
+ if (status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK) {
+ QString val = QString::fromAscii(PQgetvalue(result, 0, 0));
++
+ QRegExp rx(QLatin1String("(\\d+)\\.(\\d+)"));
+ rx.setMinimal(true); // enforce non-greedy RegExp
++
+ if (rx.indexIn(val) != -1) {
+ int vMaj = rx.cap(1).toInt();
+ int vMin = rx.cap(2).toInt();
+-
+- switch (vMaj) {
+- case 7:
+- switch (vMin) {
+- case 0:
+- serverVersion = QPSQLDriver::Version7;
+- break;
+- case 1:
+- case 2:
+- serverVersion = QPSQLDriver::Version71;
+- break;
+- default:
+- serverVersion = QPSQLDriver::Version73;
+- break;
+- }
+- break;
+- case 8:
+- switch (vMin) {
+- case 0:
+- serverVersion = QPSQLDriver::Version8;
+- break;
+- case 1:
+- serverVersion = QPSQLDriver::Version81;
+- break;
+- case 2:
+- default:
+- serverVersion = QPSQLDriver::Version82;
+- break;
+- }
+- break;
+- default:
+- break;
++ serverVersion = qMakePSQLVersion(vMaj, vMin);
++#ifdef PG_MAJORVERSION
++ if (rx.indexIn(QLatin1String(PG_MAJORVERSION)) != -1) {
++ vMaj = rx.cap(1).toInt();
++ vMin = rx.cap(2).toInt();
++ }
++ QPSQLDriver::Protocol clientVersion = qMakePSQLVersion(vMaj, vMin);
++
++ if (serverVersion >= QPSQLDriver::Version9 && clientVersion < QPSQLDriver::Version9) {
++ //Client version before QPSQLDriver::Version9 only supports escape mode for bytea type,
++ //but bytea format is set to hex by default in PSQL 9 and above. So need to force the
++ //server use the old escape mode when connects to the new server with old client library.
++ result = PQexec(connection, "SET bytea_output=escape; ");
++ status = PQresultStatus(result);
++ } else if (serverVersion == QPSQLDriver::VersionUnknown) {
++ serverVersion = clientVersion;
++ if (serverVersion != QPSQLDriver::VersionUnknown)
++ qWarning("The server version of this PostgreSQL is unknown, falling back to the client version.");
+ }
++#endif
+ }
+ }
+ PQclear(result);
+
+- if (serverVersion < QPSQLDriver::Version71)
++ //keep the old behavior unchanged
++ if (serverVersion == QPSQLDriver::VersionUnknown)
++ serverVersion = QPSQLDriver::Version6;
++
++ if (serverVersion < QPSQLDriver::Version71) {
+ qWarning("This version of PostgreSQL is not supported and may not work.");
++ }
+
+ return serverVersion;
+ }
+@@ -852,7 +889,10 @@ bool QPSQLDriver::commitTransaction()
+ // This hack can dissapear once there is an API to query this sort of information.
+ if (d->pro == QPSQLDriver::Version8 ||
+ d->pro == QPSQLDriver::Version81 ||
+- d->pro == QPSQLDriver::Version82) {
++ d->pro == QPSQLDriver::Version82 ||
++ d->pro == QPSQLDriver::Version83 ||
++ d->pro == QPSQLDriver::Version84 ||
++ d->pro == QPSQLDriver::Version9) {
+ transaction_failed = qstrcmp(PQcmdStatus(res), "ROLLBACK") == 0;
+ }
+
+@@ -963,6 +1003,9 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const
+ case QPSQLDriver::Version8:
+ case QPSQLDriver::Version81:
+ case QPSQLDriver::Version82:
++ case QPSQLDriver::Version83:
++ case QPSQLDriver::Version84:
++ case QPSQLDriver::Version9:
+ stmt = QLatin1String("SELECT pg_attribute.attname, pg_attribute.atttypid::int, "
+ "pg_class.relname "
+ "FROM pg_attribute, pg_class "
+@@ -1046,6 +1089,9 @@ QSqlRecord QPSQLDriver::record(const QString& tablename) const
+ case QPSQLDriver::Version8:
+ case QPSQLDriver::Version81:
+ case QPSQLDriver::Version82:
++ case QPSQLDriver::Version83:
++ case QPSQLDriver::Version84:
++ case QPSQLDriver::Version9:
+ stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
+ "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
+ "pg_attrdef.adsrc "
+diff --git a/src/sql/drivers/psql/qsql_psql.h b/src/sql/drivers/psql/qsql_psql.h
+index 22871ff..107da87 100644
+--- a/src/sql/drivers/psql/qsql_psql.h
++++ b/src/sql/drivers/psql/qsql_psql.h
+@@ -97,6 +97,7 @@ class Q_EXPORT_SQLDRIVER_PSQL QPSQLDriver : public QSqlDriver
+ Q_OBJECT
+ public:
+ enum Protocol {
++ VersionUnknown = -1,
+ Version6 = 6,
+ Version7 = 7,
+ Version71 = 8,
+@@ -104,7 +105,10 @@ public:
+ Version74 = 10,
+ Version8 = 11,
+ Version81 = 12,
+- Version82 = 13
++ Version82 = 13,
++ Version83 = 14,
++ Version84 = 15,
++ Version9 = 16,
+ };
+
+ explicit QPSQLDriver(QObject *parent=0);
+
+--
+1.6.1
+
diff --git a/extra/qt/qt-4.7.1-fix-qtbug-15857.patch b/extra/qt/qt-4.7.1-fix-qtbug-15857.patch
new file mode 100644
index 000000000..4a0dfb8b1
--- /dev/null
+++ b/extra/qt/qt-4.7.1-fix-qtbug-15857.patch
@@ -0,0 +1,32 @@
+From 6ae84f1183e91c910ca92a55e37f8254ace805c0 Mon Sep 17 00:00:00 2001
+From: Jiang Jiang <jiang.jiang@nokia.com>
+Date: Mon, 6 Dec 2010 13:07:36 +0100
+Subject: [PATCH] Fix QTextEdit::selectAll crash from textChanged()
+
+Doing selectAll() after the entire block of text has been removed
+will cause this crash, because we didn't check if the block we
+found is valid or not.
+
+Task-number: QTBUG-15857
+Reviewed-by: Eskil
+---
+ src/gui/text/qtextcursor.cpp | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp
+index 769ab2f..f73cc4b 100644
+--- a/src/gui/text/qtextcursor.cpp
++++ b/src/gui/text/qtextcursor.cpp
+@@ -363,6 +363,9 @@ bool QTextCursorPrivate::movePosition(QTextCursor::MoveOperation op, QTextCursor
+ bool adjustX = true;
+ QTextBlock blockIt = block();
+
++ if (!blockIt.isValid())
++ return false;
++
+ if (op >= QTextCursor::Left && op <= QTextCursor::WordRight
+ && blockIt.textDirection() == Qt::RightToLeft) {
+ if (op == QTextCursor::Left)
+--
+1.6.1
+