diff options
author | root <root@rshg054.dnsready.net> | 2012-01-20 23:14:48 +0000 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2012-01-20 23:14:48 +0000 |
commit | a1922d0ec660fdc1892f2783515f781c090df0a9 (patch) | |
tree | 6d38a09231ff439c051261d41bfa066870e1fccb /staging/qt3 | |
parent | eefecc8813e0c062a2058b33209cb30830f824b6 (diff) |
Fri Jan 20 23:14:48 UTC 2012
Diffstat (limited to 'staging/qt3')
-rw-r--r-- | staging/qt3/PKGBUILD | 133 | ||||
-rw-r--r-- | staging/qt3/eastern_asian_languagues.diff | 39 | ||||
-rw-r--r-- | staging/qt3/gcc-4.6.patch | 33 | ||||
-rw-r--r-- | staging/qt3/mysql.patch | 47 | ||||
-rw-r--r-- | staging/qt3/qt-copy-kde-patches.tar.bz2 | bin | 0 -> 31498 bytes | |||
-rw-r--r-- | staging/qt3/qt-font-default-subst.diff | 77 | ||||
-rw-r--r-- | staging/qt3/qt-odbc.patch | 19 | ||||
-rw-r--r-- | staging/qt3/qt-patches.tar.bz2 | bin | 0 -> 3708 bytes | |||
-rw-r--r-- | staging/qt3/qt.install | 12 | ||||
-rw-r--r-- | staging/qt3/qt.profile | 4 | ||||
-rw-r--r-- | staging/qt3/qt3-png15.patch | 212 | ||||
-rw-r--r-- | staging/qt3/utf8-bug-qt3.diff | 101 |
12 files changed, 677 insertions, 0 deletions
diff --git a/staging/qt3/PKGBUILD b/staging/qt3/PKGBUILD new file mode 100644 index 000000000..57b052598 --- /dev/null +++ b/staging/qt3/PKGBUILD @@ -0,0 +1,133 @@ +# $Id: PKGBUILD 146911 2012-01-19 05:18:20Z eric $ +# Maintainer: Eric BĂ©langer <eric@archlinux.org> + +pkgname=qt3 +pkgver=3.3.8 +pkgrel=22 +pkgdesc="The QT3 gui toolkit" +arch=('i686' 'x86_64') +url="http://www.trolltech.com/products/qt/index.html" +license=('GPL') +depends=('libpng' 'libxmu' 'libxcursor' 'libxinerama' 'mesa' 'libxft' + 'libxrandr' 'libmng') +makedepends=('mysql' 'postgresql' 'unixodbc' 'sqlite3') +optdepends=('libmysqlclient' 'postgresql-libs' 'unixodbc') +options=('!libtool') +install=qt.install +source=(ftp://ftp.trolltech.com/qt/source/qt-x11-free-${pkgver}.tar.bz2 + qt.profile qt3-png15.patch qt-copy-kde-patches.tar.bz2 + qt-patches.tar.bz2 utf8-bug-qt3.diff qt-font-default-subst.diff + mysql.patch eastern_asian_languagues.diff qt-odbc.patch gcc-4.6.patch) +sha1sums=('91b192cb8e80679607d24ae35d6e20ed68d149d7' + 'd2e257a9011208b2cb81b9cf47915b9a2f9dab83' + '3d19510c46016a1a211d97bf8f82b01498b1b33c' + '9cb2e5bec782069692ee337cfa171539d9d73753' + '116afa0e737bdf27ea27f9b3653aeb56db9ec151' + 'ca5ecb29c7f1c826d48703339a3371038e306bb7' + 'd928ff55adb52c4bab2fb268df022651551cd70c' + 'bb6aad81cce143c23ff7840b1d79f6b2007a0c04' + '40c7b8f06a21f809ddeb8b5560e9da63ccac6a17' + '1346320614f6f86fbeb10b9fbad721dea29f5b61' + 'd9b83b8f6f9c8bd98d290dc1d0e9913a00b62c3f') + +# qt-copy-kde-patches come from http://websvn.kde.org/trunk/qt-copy/patches/ +# other qt-patches come from fedora and gentoo + +build() { + unset QMAKESPEC + export QTDIR="${srcdir}"/qt-x11-free-${pkgver} + export PATH=${QTDIR}/bin:${PATH} + export LD_LIBRARY_PATH=${QTDIR}/lib:${LD_LIBRARY_PATH} + export QMAKESPEC=$QTDIR/mkspecs/linux-g++ + cd "${srcdir}"/qt-x11-free-${pkgver} + # apply qt patches from kde.org + for i in ../qt-copy-kde-patches/*; do + patch -Np0 -i $i + done + # apply other qt patches and one security fix from debian/gentoo + for i in ../qt-patches/*; do + patch -Np1 -i $i + done + # fix utf8 bug + patch -p0 -i "${srcdir}"/utf8-bug-qt3.diff + # fix asia fonts + patch -p0 -i "${srcdir}"/qt-font-default-subst.diff + # fix segfaults on exit when using mysql DB driver + patch -p0 -i "${srcdir}"/mysql.patch + # fix CJK font/chars select error (FS#11245) + patch -p1 -i "${srcdir}"/eastern_asian_languagues.diff + # fix build problem against new unixODBC + patch -p1 -i "${srcdir}"/qt-odbc.patch + # fix build with gcc 4.6.0 + patch -p1 -i "${srcdir}"/gcc-4.6.patch + + patch -p0 -i "${srcdir}"/qt3-png15.patch + # start compiling qt + sed -i 's|-cp -P -f|-cp -L -f|' qmake/Makefile.unix + rm -rf doc/html examples tutorial + sed -i "s|sub-tutorial sub-examples||" Makefile + sed -i "s|-O2|$CXXFLAGS|" mkspecs/linux-g++/qmake.conf + sed -i "s|-O2|$CXXFLAGS|" mkspecs/linux-g++-32/qmake.conf + sed -i "s|-O2|$CXXFLAGS|" mkspecs/linux-g++-64/qmake.conf + sed -i "s|-I. |$CXXFLAGS -I. |" qmake/Makefile.unix + sed -i "s|read acceptance|acceptance=yes|" configure + + # remove unwanted mkspecs + rm -rf mkspecs/{*aix*,*bsd*,cygwin*,dgux*,darwin*,hpux*,hurd*,irix*,lynxos*,macx*,qnx*,reliant*,sco*,solaris*,tru64*,unixware*,win32*} + + if [ "$CARCH" = "x86_64" ]; then + export ARCH="-64" + else unset ARCH + fi + + ./configure -prefix /opt/qt \ + -platform linux-g++$ARCH \ + -system-zlib \ + -qt-gif \ + -release \ + -shared \ + -sm \ + -nis \ + -thread \ + -stl \ + -system-lib{png,jpeg,mng} \ + -no-g++-exceptions \ + -plugin-sql-{mysql,psql,sqlite,odbc} + + # fix /opt/qt/lib path + [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" "${srcdir}"/qt-x11-free-${pkgver}/src/Makefile + [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" "${srcdir}"/qt-x11-free-${pkgver}/tools/designer/designer/Makefile + [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" "${srcdir}"/qt-x11-free-${pkgver}/tools/designer/editor/Makefile + [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" "${srcdir}"/qt-x11-free-${pkgver}/tools/assistant/lib/Makefile + [ "$CARCH" = "x86_64" ] && sed -i "s|/opt/qt/lib64|/opt/qt/lib|g" "${srcdir}"/qt-x11-free-${pkgver}/tools/designer/uilib/Makefile + + cd "${srcdir}"/qt-x11-free-${pkgver} + make -C qmake + cd "${srcdir}"/qt-x11-free-${pkgver}/plugins/src/sqldrivers/mysql + "${srcdir}"/qt-x11-free-${pkgver}/bin/qmake -o Makefile "INCPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient" mysql.pro + cd "${srcdir}"/qt-x11-free-${pkgver}/plugins/src/sqldrivers/psql + "${srcdir}"/qt-x11-free-${pkgver}/bin/qmake -o Makefile "INCPATH+=/usr/src/include /usr/include/postgresql/server" "LIBS+=-L/usr/lib -lpq" psql.pro + + cd "${srcdir}"/qt-x11-free-${pkgver} + # fix the broken makefiles + #sed -i 's|[[:space:]]*strip.*doc/html.*$|#|g' src/Makefile + make +} + +package() { + cd "${srcdir}"/qt-x11-free-${pkgver} + make INSTALL_ROOT="${pkgdir}" install + rm -rf "${pkgdir}"/opt/qt/{phrasebooks,templates,translations} + sed -i "s|-L${srcdir}/qt-x11-free-${pkgver}/lib ||g" "${pkgdir}"/opt/qt/lib/*.prl + install -D -m755 qmake/qmake "${pkgdir}"/opt/qt/bin/qmake + install -D -m755 "${srcdir}"/qt.profile "${pkgdir}"/etc/profile.d/qt3.sh + ln -sf /opt/qt/bin/qtconfig "${pkgdir}"/opt/qt/bin/qt3config + rm -f "${pkgdir}"/opt/qt/mkspecs/linux-g++$ARCH/linux-g++$ARCH + + # install man pages + install -d -m755 "${pkgdir}"/opt/qt/man + cp -r "${srcdir}"/qt-x11-free-${pkgver}/doc/man/{man1,man3} "${pkgdir}"/opt/qt/man/ + + install -d -m755 "${pkgdir}"/etc/ld.so.conf.d/ + echo '/opt/qt/lib' > "${pkgdir}"/etc/ld.so.conf.d/qt3.conf +} diff --git a/staging/qt3/eastern_asian_languagues.diff b/staging/qt3/eastern_asian_languagues.diff new file mode 100644 index 000000000..7c25eef7d --- /dev/null +++ b/staging/qt3/eastern_asian_languagues.diff @@ -0,0 +1,39 @@ +--- qt-x11-free-3.3.8b/src/kernel/qfontdatabase.cpp 2008-01-15 21:09:13.000000000 +0200 ++++ qt-x11-free-3.3.8b/src/kernel/qfontdatabase.cpp 2008-03-10 11:34:22.000000000 +0200 +@@ -966,20 +966,22 @@ + + #ifdef Q_WS_X11 + if (script == QFont::Han) { +- // modify script according to locale +- static QFont::Script defaultHan = QFont::UnknownScript; +- if (defaultHan == QFont::UnknownScript) { +- QCString locale = setlocale(LC_ALL, NULL); +- if (locale.contains("ko")) +- defaultHan = QFont::Han_Korean; +- else if (locale.contains("zh_TW") || locale.contains("zh_HK")) +- defaultHan = QFont::Han_TraditionalChinese; +- else if (locale.contains("zh")) +- defaultHan = QFont::Han_SimplifiedChinese; +- else +- defaultHan = QFont::Han_Japanese; +- } +- script = defaultHan; ++ // modify script according to locale ++ static QFont::Script defaultHan; ++ QCString locale = setlocale(LC_ALL, NULL); ++ ++ if (locale.contains("ko")) ++ defaultHan = QFont::Han_Korean; ++ else if (locale.contains("zh_TW") || locale.contains("zh_HK")) ++ defaultHan = QFont::Han_TraditionalChinese; ++ else if (locale.contains("zh")) ++ defaultHan = QFont::Han_SimplifiedChinese; ++ else if (locale.contains("ja")) ++ defaultHan = QFont::Han_Japanese; ++ else ++ defaultHan = QFont::Han; // don't change ++ ++ script = defaultHan; + } + #endif + diff --git a/staging/qt3/gcc-4.6.patch b/staging/qt3/gcc-4.6.patch new file mode 100644 index 000000000..bcbffcea6 --- /dev/null +++ b/staging/qt3/gcc-4.6.patch @@ -0,0 +1,33 @@ +diff -up qt-x11-free-3.3.8b/src/tools/qmap.h.cstddef qt-x11-free-3.3.8b/src/tools/qmap.h +--- qt-x11-free-3.3.8b/src/tools/qmap.h.cstddef 2008-01-15 13:09:13.000000000 -0600 ++++ qt-x11-free-3.3.8b/src/tools/qmap.h 2011-01-30 21:14:29.275088725 -0600 +@@ -49,6 +49,7 @@ + #include "qvaluelist.h" + #endif // QT_H + ++#include <cstddef> + #ifndef QT_NO_STL + #include <iterator> + #include <map> +diff -up qt-x11-free-3.3.8b/src/tools/qvaluelist.h.cstddef qt-x11-free-3.3.8b/src/tools/qvaluelist.h +--- qt-x11-free-3.3.8b/src/tools/qvaluelist.h.cstddef 2008-01-15 13:09:13.000000000 -0600 ++++ qt-x11-free-3.3.8b/src/tools/qvaluelist.h 2011-01-30 21:14:01.765846592 -0600 +@@ -47,6 +47,7 @@ + #include "qdatastream.h" + #endif // QT_H + ++#include <cstddef> + #ifndef QT_NO_STL + #include <iterator> + #include <list> +diff -up qt-x11-free-3.3.8b/src/tools/qvaluevector.h.cstddef qt-x11-free-3.3.8b/src/tools/qvaluevector.h +--- qt-x11-free-3.3.8b/src/tools/qvaluevector.h.cstddef 2008-01-15 13:09:13.000000000 -0600 ++++ qt-x11-free-3.3.8b/src/tools/qvaluevector.h 2011-01-30 21:14:01.765846592 -0600 +@@ -45,6 +45,7 @@ + #include "qdatastream.h" + #endif // QT_H + ++#include <cstddef> + #ifndef QT_NO_STL + #include <vector> + #endif diff --git a/staging/qt3/mysql.patch b/staging/qt3/mysql.patch new file mode 100644 index 000000000..5f61edc67 --- /dev/null +++ b/staging/qt3/mysql.patch @@ -0,0 +1,47 @@ +--- src/sql/drivers/mysql/qsql_mysql.cpp ++++ src/sql/drivers/mysql/qsql_mysql.cpp +@@ -37,7 +37,6 @@ + #include "qsql_mysql.h" + #include <private/qsqlextension_p.h> + +-#include <qapplication.h> + #include <qdatetime.h> + #include <qvaluevector.h> + #include <qsqlrecord.h> +@@ -341,14 +340,6 @@ int QMYSQLResult::numRowsAffected() + } + + ///////////////////////////////////////////////////////// +-static void qServerEnd() +-{ +-#ifndef Q_NO_MYSQL_EMBEDDED +-# if MYSQL_VERSION_ID >= 40000 +- mysql_server_end(); +-# endif // MYSQL_VERSION_ID +-#endif // Q_NO_MYSQL_EMBEDDED +-} + + static void qServerInit() + { +@@ -366,9 +357,7 @@ static void qServerInit() + qWarning( "QMYSQLDriver::qServerInit: unable to start server." ); + # endif + } +- qAddPostRoutine(qServerEnd); + init = TRUE; +- + # endif // MYSQL_VERSION_ID + #endif // Q_NO_MYSQL_EMBEDDED + } +@@ -411,6 +400,11 @@ QMYSQLDriver::~QMYSQLDriver() + QSqlOpenExtension *ext = qSqlOpenExtDict()->take( this ); + delete ext; + } ++#ifndef Q_NO_MYSQL_EMBEDDED ++# if MYSQL_VERSION_ID > 40000 ++ mysql_server_end(); ++# endif ++#endif + } + + bool QMYSQLDriver::hasFeature( DriverFeature f ) const diff --git a/staging/qt3/qt-copy-kde-patches.tar.bz2 b/staging/qt3/qt-copy-kde-patches.tar.bz2 Binary files differnew file mode 100644 index 000000000..19d899963 --- /dev/null +++ b/staging/qt3/qt-copy-kde-patches.tar.bz2 diff --git a/staging/qt3/qt-font-default-subst.diff b/staging/qt3/qt-font-default-subst.diff new file mode 100644 index 000000000..3e286f74e --- /dev/null +++ b/staging/qt3/qt-font-default-subst.diff @@ -0,0 +1,77 @@ +--- src/kernel/qfontdatabase_x11.cpp ++++ src/kernel/qfontdatabase_x11.cpp +@@ -1589,15 +1589,6 @@ QFontEngine *loadEngine( QFont::Script s + if (script == QFont::Latin) + // add Euro character + FcCharSetAddChar(cs, 0x20ac); +- if (script == QFont::Han_SimplifiedChinese) +- FcCharSetAddChar(cs, 0x3400); +- if (script == QFont::Han_TraditionalChinese){ +- FcCharSetAddChar(cs, 0x3435); +- FcCharSetAddChar(cs, 0xE000); +- FcCharSetAddChar(cs, 0xF6B1); +- } +- if (script == QFont::MiscellaneousSymbols) +- FcCharSetAddChar(cs, 0x2714); + FcPatternAddCharSet(pattern, FC_CHARSET, cs); + FcCharSetDestroy(cs); + } +@@ -1813,7 +1804,11 @@ static QFontEngine *loadFontConfigFont(c + FcPatternPrint(pattern); + #endif + ++ // XftFontMatch calls the right ConfigSubstitute variants, but as we use ++ // FcFontMatch/Sort here we have to do it manually. + FcConfigSubstitute(0, pattern, FcMatchPattern); ++ XftDefaultSubstitute(QPaintDevice::x11AppDisplay(), QPaintDevice::x11AppScreen(), pattern); ++ + // qDebug("1: pattern contains:"); + // FcPatternPrint(pattern); + +@@ -1847,10 +1842,6 @@ static QFontEngine *loadFontConfigFont(c + value.u.s = (const FcChar8 *)cs.data(); + FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue); + } +-#ifdef FONT_MATCH_DEBUG +- printf("final pattern contains:\n"); +- FcPatternPrint(pattern); +-#endif + } + + if (script != QFont::Unicode) { +@@ -1860,19 +1851,15 @@ static QFontEngine *loadFontConfigFont(c + if (script == QFont::Latin) + // add Euro character + FcCharSetAddChar(cs, 0x20ac); +- if (script == QFont::Han_SimplifiedChinese) +- FcCharSetAddChar(cs, 0x3400); +- if (script == QFont::Han_TraditionalChinese) { +- FcCharSetAddChar(cs, 0x3435); +- FcCharSetAddChar(cs, 0xE000); +- FcCharSetAddChar(cs, 0xF6B1); +- } +- if (script == QFont::MiscellaneousSymbols) +- FcCharSetAddChar(cs, 0x2714); + FcPatternAddCharSet(pattern, FC_CHARSET, cs); + FcCharSetDestroy(cs); + } + ++#ifdef FONT_MATCH_DEBUG ++ printf("final pattern contains:\n"); ++ FcPatternPrint(pattern); ++#endif ++ + QFontEngine *fe = 0; + + for( int jj = (FcGetVersion() >= 20392 ? 0 : 1); jj < 2; ++jj ) { +--- src/kernel/qfontdatabase.cpp ++++ src/kernel/qfontdatabase.cpp +@@ -554,7 +554,7 @@ static const unsigned short sample_chars + // GeometricSymbols, + { 0x2500, 0x0 }, + // MiscellaneousSymbols, +- { 0x2640, 0x0 }, ++ { 0x2640, 0x2714, 0x0 }, + // EnclosedAndSquare, + { 0x2460, 0x0 }, + // Braille, diff --git a/staging/qt3/qt-odbc.patch b/staging/qt3/qt-odbc.patch new file mode 100644 index 000000000..6f21e3cf1 --- /dev/null +++ b/staging/qt3/qt-odbc.patch @@ -0,0 +1,19 @@ +diff -up qt-x11-free-3.3.8/src/sql/drivers/odbc/qsql_odbc.cpp.orig qt-x11-free-3.3.8/src/sql/drivers/odbc/qsql_odbc.cpp +--- qt-x11-free-3.3.8/src/sql/drivers/odbc/qsql_odbc.cpp.orig 2009-02-24 11:32:27.000000000 +0100 ++++ qt-x11-free-3.3.8/src/sql/drivers/odbc/qsql_odbc.cpp 2009-02-24 11:33:43.000000000 +0100 +@@ -57,13 +57,13 @@ + #endif + + // newer platform SDKs use SQLLEN instead of SQLINTEGER +-#ifdef SQLLEN ++#if defined(SQLLEN) || defined(Q_OS_WIN64) || defined(Q_OS_UNIX) + # define QSQLLEN SQLLEN + #else + # define QSQLLEN SQLINTEGER + #endif + +-#ifdef SQLULEN ++#if defined(SQLULEN) || defined(Q_OS_WIN64) || defined(Q_OS_UNIX) + # define QSQLULEN SQLULEN + #else + # define QSQLULEN SQLUINTEGER diff --git a/staging/qt3/qt-patches.tar.bz2 b/staging/qt3/qt-patches.tar.bz2 Binary files differnew file mode 100644 index 000000000..3f4aee171 --- /dev/null +++ b/staging/qt3/qt-patches.tar.bz2 diff --git a/staging/qt3/qt.install b/staging/qt3/qt.install new file mode 100644 index 000000000..6d042daae --- /dev/null +++ b/staging/qt3/qt.install @@ -0,0 +1,12 @@ +post_install() { + post_remove +} + +post_upgrade() { + post_remove +} + +post_remove() { + # this can be removed in future versions + sed -e '/\/opt\/qt\/lib/d' -i etc/ld.so.conf +} diff --git a/staging/qt3/qt.profile b/staging/qt3/qt.profile new file mode 100644 index 000000000..ed4d232ae --- /dev/null +++ b/staging/qt3/qt.profile @@ -0,0 +1,4 @@ +export QTDIR=/opt/qt +export QT_XFT=true +export PATH=$PATH:$QTDIR/bin +export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/qt/lib/pkgconfig diff --git a/staging/qt3/qt3-png15.patch b/staging/qt3/qt3-png15.patch new file mode 100644 index 000000000..e64fea36a --- /dev/null +++ b/staging/qt3/qt3-png15.patch @@ -0,0 +1,212 @@ +$NetBSD: patch-as,v 1.5 2011/03/25 15:28:26 wiz Exp $ + +--- src/kernel/qpngio.cpp.orig 2007-02-02 10:01:15.000000000 -0400 ++++ src/kernel/qpngio.cpp +@@ -43,6 +43,7 @@ + #include "qiodevice.h" + + #include <png.h> ++#include <zlib.h> + + + #ifdef Q_OS_TEMP +@@ -123,9 +124,24 @@ void setup_qt( QImage& image, png_struct + png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, + 0, 0, 0); + ++ png_colorp info_ptr_palette = NULL; ++ int info_ptr_num_palette = 0; ++ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_PLTE)) { ++ png_get_PLTE(png_ptr, info_ptr, &info_ptr_palette, &info_ptr_num_palette); ++ } ++ ++ png_bytep info_ptr_trans_alpha = NULL; ++ int info_ptr_num_trans = 0; ++ png_color_16p info_ptr_trans_color = NULL; ++ ++ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { ++ png_get_tRNS(png_ptr, info_ptr, &info_ptr_trans_alpha, &info_ptr_num_trans, &info_ptr_trans_color); ++ } ++ ++ + if ( color_type == PNG_COLOR_TYPE_GRAY ) { + // Black & White or 8-bit grayscale +- if ( bit_depth == 1 && info_ptr->channels == 1 ) { ++ if ( bit_depth == 1 && png_get_channels(png_ptr, info_ptr) == 1 ) { + png_set_invert_mono( png_ptr ); + png_read_update_info( png_ptr, info_ptr ); + if (!image.create( width, height, 1, 2, QImage::BigEndian )) +@@ -159,7 +175,7 @@ void setup_qt( QImage& image, png_struct + image.setColor( i, qRgba(c,c,c,0xff) ); + } + if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) { +- const int g = info_ptr->trans_values.gray; ++ const int g = info_ptr_trans_color->gray; + if (g < ncols) { + image.setAlphaBuffer(TRUE); + image.setColor(g, image.color(g) & RGB_MASK); +@@ -168,7 +184,7 @@ void setup_qt( QImage& image, png_struct + } + } else if ( color_type == PNG_COLOR_TYPE_PALETTE + && png_get_valid(png_ptr, info_ptr, PNG_INFO_PLTE) +- && info_ptr->num_palette <= 256 ) ++ && info_ptr_num_palette <= 256 ) + { + // 1-bit and 8-bit color + if ( bit_depth != 1 ) +@@ -176,28 +192,28 @@ void setup_qt( QImage& image, png_struct + png_read_update_info( png_ptr, info_ptr ); + png_get_IHDR(png_ptr, info_ptr, + &width, &height, &bit_depth, &color_type, 0, 0, 0); +- if (!image.create(width, height, bit_depth, info_ptr->num_palette, ++ if (!image.create(width, height, bit_depth, info_ptr_num_palette, + QImage::BigEndian)) + return; + int i = 0; + if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) { + image.setAlphaBuffer( TRUE ); +- while ( i < info_ptr->num_trans ) { ++ while ( i < info_ptr_num_trans ) { + image.setColor(i, qRgba( +- info_ptr->palette[i].red, +- info_ptr->palette[i].green, +- info_ptr->palette[i].blue, +- info_ptr->trans[i] ++ info_ptr_palette[i].red, ++ info_ptr_palette[i].green, ++ info_ptr_palette[i].blue, ++ info_ptr_trans_alpha[i] + ) + ); + i++; + } + } +- while ( i < info_ptr->num_palette ) { ++ while ( i < info_ptr_num_palette ) { + image.setColor(i, qRgba( +- info_ptr->palette[i].red, +- info_ptr->palette[i].green, +- info_ptr->palette[i].blue, ++ info_ptr_palette[i].red, ++ info_ptr_palette[i].green, ++ info_ptr_palette[i].blue, + 0xff + ) + ); +@@ -284,7 +300,7 @@ void read_png_image(QImageIO* iio) + return; + } + +- if (setjmp(png_ptr->jmpbuf)) { ++ if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + iio->setStatus(-4); + return; +@@ -469,7 +485,7 @@ bool QPNGImageWriter::writeImage(const Q + return FALSE; + } + +- if (setjmp(png_ptr->jmpbuf)) { ++ if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_write_struct(&png_ptr, &info_ptr); + return FALSE; + } +@@ -491,10 +507,16 @@ bool QPNGImageWriter::writeImage(const Q + + png_set_write_fn(png_ptr, (void*)this, qpiw_write_fn, qpiw_flush_fn); + ++#warning XXXtnn not too sure about this ++/* ++according to png.h, channels is only used on read, not writes, so we ++should be able to comment this out. ++ + info_ptr->channels = + (image.depth() == 32) + ? (image.hasAlphaBuffer() ? 4 : 3) + : 1; ++*/ + + png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(), + image.depth() == 1 ? 1 : 8 /* per channel */, +@@ -504,11 +526,12 @@ bool QPNGImageWriter::writeImage(const Q + : PNG_COLOR_TYPE_RGB + : PNG_COLOR_TYPE_PALETTE, 0, 0, 0); + ++ png_color_8 sig_bit; ++ sig_bit.red = 8; ++ sig_bit.green = 8; ++ sig_bit.blue = 8; ++ png_set_sBIT(png_ptr, info_ptr, &sig_bit); + +- //png_set_sBIT(png_ptr, info_ptr, 8); +- info_ptr->sig_bit.red = 8; +- info_ptr->sig_bit.green = 8; +- info_ptr->sig_bit.blue = 8; + + if (image.depth() == 1 && image.bitOrder() == QImage::LittleEndian) + png_set_packswap(png_ptr); +@@ -522,11 +545,14 @@ bool QPNGImageWriter::writeImage(const Q + png_set_PLTE(png_ptr, info_ptr, palette, num_palette); + int* trans = new int[num_palette]; + int num_trans = 0; ++ png_colorp info_ptr_palette = NULL; ++ int tmp; ++ png_get_PLTE(png_ptr, info_ptr, &info_ptr_palette, &tmp); + for (int i=0; i<num_palette; i++) { + QRgb rgb=image.color(i); +- info_ptr->palette[i].red = qRed(rgb); +- info_ptr->palette[i].green = qGreen(rgb); +- info_ptr->palette[i].blue = qBlue(rgb); ++ info_ptr_palette[i].red = qRed(rgb); ++ info_ptr_palette[i].green = qGreen(rgb); ++ info_ptr_palette[i].blue = qBlue(rgb); + if (image.hasAlphaBuffer()) { + trans[i] = rgb >> 24; + if (trans[i] < 255) { +@@ -534,6 +560,7 @@ bool QPNGImageWriter::writeImage(const Q + } + } + } ++ png_set_PLTE(png_ptr, info_ptr, info_ptr_palette, num_palette); + if (num_trans) { + copy_trans = new png_byte[num_trans]; + for (int i=0; i<num_trans; i++) +@@ -544,7 +571,10 @@ bool QPNGImageWriter::writeImage(const Q + } + + if ( image.hasAlphaBuffer() ) { +- info_ptr->sig_bit.alpha = 8; ++ png_color_8p sig_bit; ++ png_get_sBIT(png_ptr, info_ptr, &sig_bit); ++ sig_bit->alpha = 8; ++ png_set_sBIT(png_ptr, info_ptr, sig_bit); + } + + // Swap ARGB to RGBA (normal PNG format) before saving on +@@ -1030,7 +1060,7 @@ int QPNGFormat::decode(QImage& img, QIma + return -1; + } + +- if (setjmp((png_ptr)->jmpbuf)) { ++ if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_read_struct(&png_ptr, &info_ptr, 0); + image = 0; + return -1; +@@ -1057,7 +1087,7 @@ int QPNGFormat::decode(QImage& img, QIma + + if ( !png_ptr ) return 0; + +- if (setjmp(png_ptr->jmpbuf)) { ++ if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_read_struct(&png_ptr, &info_ptr, 0); + image = 0; + state = MovieStart; +@@ -1117,7 +1147,7 @@ void QPNGFormat::end(png_structp png, pn + consumer->frameDone(QPoint(offx,offy),r); + consumer->end(); + state = FrameStart; +- unused_data = (int)png->buffer_size; // Since libpng doesn't tell us ++ unused_data = png_process_data_pause(png, 0); + } + + #ifdef PNG_USER_CHUNKS_SUPPORTED diff --git a/staging/qt3/utf8-bug-qt3.diff b/staging/qt3/utf8-bug-qt3.diff new file mode 100644 index 000000000..43e84a99f --- /dev/null +++ b/staging/qt3/utf8-bug-qt3.diff @@ -0,0 +1,101 @@ +--- src/codecs/qutfcodec.cpp ++++ src/codecs/qutfcodec.cpp +@@ -154,6 +154,7 @@ + + class QUtf8Decoder : public QTextDecoder { + uint uc; ++ uint min_uc; + int need; + bool headerDone; + public: +@@ -167,8 +168,9 @@ + result.setLength( len ); // worst case + QChar *qch = (QChar *)result.unicode(); + uchar ch; ++ int error = -1; + for (int i=0; i<len; i++) { +- ch = *chars++; ++ ch = chars[i]; + if (need) { + if ( (ch&0xc0) == 0x80 ) { + uc = (uc << 6) | (ch & 0x3f); +@@ -182,6 +184,8 @@ + *qch++ = QChar(high); + *qch++ = QChar(low); + headerDone = TRUE; ++ } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) { ++ *qch++ = QChar::replacement; + } else { + if (headerDone || QChar(uc) != QChar::byteOrderMark) + *qch++ = uc; +@@ -190,6 +194,7 @@ + } + } else { + // error ++ i = error; + *qch++ = QChar::replacement; + need = 0; + } +@@ -200,12 +205,21 @@ + } else if ((ch & 0xe0) == 0xc0) { + uc = ch & 0x1f; + need = 1; ++ error = i; ++ min_uc = 0x80; + } else if ((ch & 0xf0) == 0xe0) { + uc = ch & 0x0f; + need = 2; ++ error = i; ++ min_uc = 0x800; + } else if ((ch&0xf8) == 0xf0) { + uc = ch & 0x07; + need = 3; ++ error = i; ++ min_uc = 0x10000; ++ } else { ++ // error ++ *qch++ = QChar::replacement; + } + } + } +--- src/tools/qstring.cpp ++++ src/tools/qstring.cpp +@@ -5805,6 +5805,7 @@ + result.setLength( len ); // worst case + QChar *qch = (QChar *)result.unicode(); + uint uc = 0; ++ uint min_uc = 0; + int need = 0; + int error = -1; + uchar ch; +@@ -5822,6 +5823,12 @@ + unsigned short low = uc%0x400 + 0xdc00; + *qch++ = QChar(high); + *qch++ = QChar(low); ++ } else if (uc < min_uc || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) { ++ // overlong seqence, UTF16 surrogate or BOM ++ i = error; ++ qch = addOne(qch, result); ++ *qch++ = QChar(0xdbff); ++ *qch++ = QChar(0xde00+((uchar)utf8[i])); + } else { + *qch++ = uc; + } +@@ -5844,14 +5851,17 @@ + uc = ch & 0x1f; + need = 1; + error = i; ++ min_uc = 0x80; + } else if ((ch & 0xf0) == 0xe0) { + uc = ch & 0x0f; + need = 2; + error = i; ++ min_uc = 0x800; + } else if ((ch&0xf8) == 0xf0) { + uc = ch & 0x07; + need = 3; + error = i; ++ min_uc = 0x10000; + } else { + // Error + qch = addOne(qch, result); |