summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Lohrke <carlo@gentoo.org>2007-08-02 16:44:50 +0000
committerCarsten Lohrke <carlo@gentoo.org>2007-08-02 16:44:50 +0000
commit2be5afc89cc54cfe471fa976132dbe71c2613ac1 (patch)
treef7e67feeff61893b76803bc2bb895f469ac5ce75 /x11-libs
parentKeyworded ~x86-fbsd, #183706 thanks to Nathan Smith. (diff)
downloadhistorical-2be5afc89cc54cfe471fa976132dbe71c2613ac1.tar.gz
historical-2be5afc89cc54cfe471fa976132dbe71c2613ac1.tar.bz2
historical-2be5afc89cc54cfe471fa976132dbe71c2613ac1.zip
Possible remote code execution, CVE-2007-3388, bug #187465.
Package-Manager: portage-2.1.3.1
Diffstat (limited to 'x11-libs')
-rw-r--r--x11-libs/qt/ChangeLog10
-rw-r--r--x11-libs/qt/Manifest40
-rw-r--r--x11-libs/qt/files/0081-format-string-fixes.diff197
-rw-r--r--x11-libs/qt/files/0185-fix-format-strings.diff261
-rw-r--r--x11-libs/qt/files/digest-qt-3.3.8-r36
-rw-r--r--x11-libs/qt/files/digest-qt-4.3.0-r13
-rw-r--r--x11-libs/qt/qt-3.3.8-r3.ebuild386
-rw-r--r--x11-libs/qt/qt-4.3.0-r1.ebuild272
8 files changed, 1160 insertions, 15 deletions
diff --git a/x11-libs/qt/ChangeLog b/x11-libs/qt/ChangeLog
index aa98f939fa64..8f667519372e 100644
--- a/x11-libs/qt/ChangeLog
+++ b/x11-libs/qt/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for x11-libs/qt
# Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/ChangeLog,v 1.462 2007/08/01 23:36:28 angelos Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/ChangeLog,v 1.463 2007/08/02 16:44:50 carlo Exp $
+
+*qt-4.3.0-r1 (02 Aug 2007)
+*qt-3.3.8-r3 (02 Aug 2007)
+
+ 02 Aug 2007; Carsten Lohrke <carlo@gentoo.org>
+ +files/0081-format-string-fixes.diff, +files/0185-fix-format-strings.diff,
+ +qt-3.3.8-r3.ebuild, +qt-4.3.0-r1.ebuild:
+ Possible remote code execution, CVE-2007-3388, bug #187465.
01 Aug 2007; Christoph Mende <angelos@gentoo.org> qt-4.3.0.ebuild:
Stable on amd64 wrt bug #186670
diff --git a/x11-libs/qt/Manifest b/x11-libs/qt/Manifest
index cbbceddb7ae7..fd77dcd01078 100644
--- a/x11-libs/qt/Manifest
+++ b/x11-libs/qt/Manifest
@@ -1,6 +1,3 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
AUX 0001-dnd_optimization.patch 5623 RMD160 b62b5868086b4d352be66989cc23cd3bb963e283 SHA1 4f3416c3a7e44d52c1088c52256decb384e4b1bc SHA256 8e138a2fdd053ec81522df19ce30f7e4c05838dfd8e0c8069ffb793ba45d7439
MD5 8ffca1b1b7523339af04fd24b4595ce4 files/0001-dnd_optimization.patch 5623
RMD160 b62b5868086b4d352be66989cc23cd3bb963e283 files/0001-dnd_optimization.patch 5623
@@ -29,6 +26,14 @@ AUX 0048-qclipboard_hack_80072.patch 1662 RMD160 ebfba0d27c03dcceeac7ad64650d5f6
MD5 3e5e045d0c1448839a8dc1c82aeef21b files/0048-qclipboard_hack_80072.patch 1662
RMD160 ebfba0d27c03dcceeac7ad64650d5f6d7039ecdb files/0048-qclipboard_hack_80072.patch 1662
SHA256 e47a1af0272e952cefacd30d466861b40d9bc969f6e5bc5cb32b878140af1d3c files/0048-qclipboard_hack_80072.patch 1662
+AUX 0081-format-string-fixes.diff 6496 RMD160 80e884eaa0784d982609cd2e4690d547036fd2aa SHA1 e2641cbfc8ae47e5122fa31dc8529d723a813b05 SHA256 d831c45eecfc8c6a0011a7c5cc182a4949b4995de4fa92bd76ff1e42b530e1f9
+MD5 e38ccce21c2a294f2dd7cdc0df6f85d0 files/0081-format-string-fixes.diff 6496
+RMD160 80e884eaa0784d982609cd2e4690d547036fd2aa files/0081-format-string-fixes.diff 6496
+SHA256 d831c45eecfc8c6a0011a7c5cc182a4949b4995de4fa92bd76ff1e42b530e1f9 files/0081-format-string-fixes.diff 6496
+AUX 0185-fix-format-strings.diff 9650 RMD160 e49b2a2e1eab94d529879a0f0ea4f77ceaae6ca8 SHA1 371f9f84dde01b7e56afe2445255fc4f1054bf34 SHA256 b8ccdb916a9e3099f741885a0ee62420a86f4c8693e2d30d25d1e41491963b60
+MD5 12ca8b9478343adefbeb3ad8fc73ce77 files/0185-fix-format-strings.diff 9650
+RMD160 e49b2a2e1eab94d529879a0f0ea4f77ceaae6ca8 files/0185-fix-format-strings.diff 9650
+SHA256 b8ccdb916a9e3099f741885a0ee62420a86f4c8693e2d30d25d1e41491963b60 files/0185-fix-format-strings.diff 9650
AUX qt-3.3.4-0047-fix-kmenu-widget.diff 992 RMD160 bada5e23043d314b15f3af1eda70c8833112ebce SHA1 d67e34b540c2f19e7e3e3715535a6732f447b22c SHA256 0dadffc3218b04eb327baf51c1f681843046cdf07a52b943f46373cd8384c275
MD5 4122542a37b787efb9476b0fb1fdafc0 files/qt-3.3.4-0047-fix-kmenu-widget.diff 992
RMD160 bada5e23043d314b15f3af1eda70c8833112ebce files/qt-3.3.4-0047-fix-kmenu-widget.diff 992
@@ -131,18 +136,26 @@ EBUILD qt-3.3.8-r2.ebuild 11283 RMD160 628af3312e8e698b6f8c958f342716d7c5d72d0f
MD5 bb4aed998553ca7b304d6612bfd908a9 qt-3.3.8-r2.ebuild 11283
RMD160 628af3312e8e698b6f8c958f342716d7c5d72d0f qt-3.3.8-r2.ebuild 11283
SHA256 0768a16118af74bd88653e122a204f00e33ac3c81a88cc9c4bc1bb42ea1ac86d qt-3.3.8-r2.ebuild 11283
+EBUILD qt-3.3.8-r3.ebuild 11368 RMD160 f3ef04f1a1aa2ad827e9d1978cede5abda2cdd61 SHA1 728abefc5f309f1889f5c5461326f5296008d47f SHA256 f5d8875913dce3e61e35892fa3de2b082ff1d07350cca27e0777402d9006fd57
+MD5 2de31580f386fa5898e544f4fb5663ef qt-3.3.8-r3.ebuild 11368
+RMD160 f3ef04f1a1aa2ad827e9d1978cede5abda2cdd61 qt-3.3.8-r3.ebuild 11368
+SHA256 f5d8875913dce3e61e35892fa3de2b082ff1d07350cca27e0777402d9006fd57 qt-3.3.8-r3.ebuild 11368
EBUILD qt-4.2.3-r1.ebuild 7851 RMD160 120c059c69277e0b86e06cc1dd8d669d17b50981 SHA1 aff1b2f55ff6080ad5a560a954ef62fc70ad79ab SHA256 73d49b40bd1f533358269b68e4fac42553477b6b06ea054629bb3d5bef35ea20
MD5 f43c53e05ee8c1f1bd1b0a465adf0a0b qt-4.2.3-r1.ebuild 7851
RMD160 120c059c69277e0b86e06cc1dd8d669d17b50981 qt-4.2.3-r1.ebuild 7851
SHA256 73d49b40bd1f533358269b68e4fac42553477b6b06ea054629bb3d5bef35ea20 qt-4.2.3-r1.ebuild 7851
+EBUILD qt-4.3.0-r1.ebuild 8590 RMD160 a1771bdb8b740fa8d5fde04b2511ecec31301d2c SHA1 3a8aaca9bd5bed2ffcf611be5fcf5a6a02454afb SHA256 5da942ed0af9aeac429bdad734627776fb6b8790e0c20a104d7ce14234dd36c7
+MD5 689e860f816771bd665d0eef4762bc92 qt-4.3.0-r1.ebuild 8590
+RMD160 a1771bdb8b740fa8d5fde04b2511ecec31301d2c qt-4.3.0-r1.ebuild 8590
+SHA256 5da942ed0af9aeac429bdad734627776fb6b8790e0c20a104d7ce14234dd36c7 qt-4.3.0-r1.ebuild 8590
EBUILD qt-4.3.0.ebuild 8606 RMD160 af841575b546d647d24b66cfb1a7a29fdcd0d150 SHA1 cc9c0b10663c07f9d8f7e2ce3d5003369f338ce2 SHA256 5eccd562042623690c8e555a24a671dff8143a89d3c2a3226c836c9d1dd4ac96
MD5 5c49e114fc49575daec0daf63e8514d8 qt-4.3.0.ebuild 8606
RMD160 af841575b546d647d24b66cfb1a7a29fdcd0d150 qt-4.3.0.ebuild 8606
SHA256 5eccd562042623690c8e555a24a671dff8143a89d3c2a3226c836c9d1dd4ac96 qt-4.3.0.ebuild 8606
-MISC ChangeLog 31211 RMD160 3f14896aa689e38cdd9b6baf903b7c206601c1ae SHA1 9e17ddb2715b8e002801486aff8bf72ca493ea7e SHA256 098cfdbfecba69aa12f62d5d2387737545424e53c62a8fca978abf76e9afe66a
-MD5 48bf2bd9af1faa343290979130e112a9 ChangeLog 31211
-RMD160 3f14896aa689e38cdd9b6baf903b7c206601c1ae ChangeLog 31211
-SHA256 098cfdbfecba69aa12f62d5d2387737545424e53c62a8fca978abf76e9afe66a ChangeLog 31211
+MISC ChangeLog 31497 RMD160 39c74fa012f211de4bf9207ec01c751653649560 SHA1 41440a8669ec1c5fbcae8f334a375839208f1c4b SHA256 0165f209fb2ead822bd0814c7c5311a4d5f1dfc596faa0b68c91ab2d34ab871b
+MD5 23204b0dcbb7928392bbbe94cb3f0b93 ChangeLog 31497
+RMD160 39c74fa012f211de4bf9207ec01c751653649560 ChangeLog 31497
+SHA256 0165f209fb2ead822bd0814c7c5311a4d5f1dfc596faa0b68c91ab2d34ab871b ChangeLog 31497
MISC metadata.xml 156 RMD160 d76590850d56864c8d99e6877ed15841b55ef1fc SHA1 e872bab086832a9db3f0fa9b1897c70577d3af21 SHA256 94c4f580c1a55f8a5e1a1dcdd6dedfea0b8bd78c1d7137c354938d73c49e4448
MD5 512150b47a904b0240101e319856aab1 metadata.xml 156
RMD160 d76590850d56864c8d99e6877ed15841b55ef1fc metadata.xml 156
@@ -153,16 +166,15 @@ SHA256 ff67af4e95cf1dbfcf39a908b99339305f6cf0031c9e325298fe6f742ec050c0 files/di
MD5 e3af140e5246f4590438a272ec5f4fea files/digest-qt-3.3.8-r2 608
RMD160 5c3ab7ee4a6ee1e30eec67f98def2173fa603ad9 files/digest-qt-3.3.8-r2 608
SHA256 eae58d862519afc74261a63ab18ed1b5a72f0d6e33895cf10a6ee916b2ddb5d5 files/digest-qt-3.3.8-r2 608
+MD5 e3af140e5246f4590438a272ec5f4fea files/digest-qt-3.3.8-r3 608
+RMD160 5c3ab7ee4a6ee1e30eec67f98def2173fa603ad9 files/digest-qt-3.3.8-r3 608
+SHA256 eae58d862519afc74261a63ab18ed1b5a72f0d6e33895cf10a6ee916b2ddb5d5 files/digest-qt-3.3.8-r3 608
MD5 2fe79b4d44373d71c88c550171f5cf12 files/digest-qt-4.2.3-r1 289
RMD160 f3ed6c568633503b4dae6c029c14e063b4f678ee files/digest-qt-4.2.3-r1 289
SHA256 963d86fa2780c337a6c499902231e24b14a6f849edb2870e9374cc89dfa8b147 files/digest-qt-4.2.3-r1 289
MD5 05b5810e7294f4c2b36c1baf6ec434b9 files/digest-qt-4.3.0 289
RMD160 4941b905c8bc924967401226882e1003b7ebca32 files/digest-qt-4.3.0 289
SHA256 d690f3feb8a1a5b623ab75eb2cf2e91338fd01d5a0e386282d9b549c4af1daf9 files/digest-qt-4.3.0 289
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.5 (GNU/Linux)
-
-iD8DBQFGsRkFKhnDs22gwa8RArnWAKCbIAPjZ+yQuOT99+BH2EFWkwAZCACdGkhg
-DQVPoEvyvUfTdQCfwrrvkIM=
-=pYlt
------END PGP SIGNATURE-----
+MD5 05b5810e7294f4c2b36c1baf6ec434b9 files/digest-qt-4.3.0-r1 289
+RMD160 4941b905c8bc924967401226882e1003b7ebca32 files/digest-qt-4.3.0-r1 289
+SHA256 d690f3feb8a1a5b623ab75eb2cf2e91338fd01d5a0e386282d9b549c4af1daf9 files/digest-qt-4.3.0-r1 289
diff --git a/x11-libs/qt/files/0081-format-string-fixes.diff b/x11-libs/qt/files/0081-format-string-fixes.diff
new file mode 100644
index 000000000000..d647874f6c4d
--- /dev/null
+++ b/x11-libs/qt/files/0081-format-string-fixes.diff
@@ -0,0 +1,197 @@
+qt-bugs@ issue : none
+bugs.kde.org number : none
+applied: no
+author: Dirk Mueller/TT
+
+Fixes various, partially exploitable format string errors on Qt 3.x code base.
+
+
+--- src/widgets/qtextedit.cpp Mon Jul 16 10:44:40 CEST 2007
++++ src/widgets/qtextedit.cpp Mon Jul 16 10:44:40 CEST 2007
+
+@@ -6349,7 +6349,7 @@
+ cur = tag->prev;
+ if ( !cur ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning( "QTextEdit::optimParseTags: no left-tag for '<" + tag->tag + ">' in line %d.", tag->line + 1 );
++ qWarning( "QTextEdit::optimParseTags: no left-tag for '<%s>' in line %d.", tag->tag.ascii(), tag->line + 1 );
+ #endif
+ return; // something is wrong - give up
+ }
+@@ -6372,7 +6372,7 @@
+ break;
+ } else if ( !cur->leftTag ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning( "QTextEdit::optimParseTags: mismatching %s-tag for '<" + cur->tag + ">' in line %d.", cur->tag[0] == '/' ? "left" : "right", cur->line + 1 );
++ qWarning( "QTextEdit::optimParseTags: mismatching %s-tag for '<%s>' in line %d.", cur->tag[0] == '/' ? "left" : "right", cur->tag.ascii(), cur->line + 1 );
+ #endif
+ return; // something is amiss - give up
+ }
+--- src/sql/qdatatable.cpp Mon Jul 16 10:45:03 CEST 2007
++++ src/sql/qdatatable.cpp Mon Jul 16 10:45:03 CEST 2007
+
+@@ -1043,8 +1043,8 @@
+ return FALSE;
+ if ( !sqlCursor()->canInsert() ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning("QDataTable::insertCurrent: insert not allowed for " +
+- sqlCursor()->name() );
++ qWarning("QDataTable::insertCurrent: insert not allowed for %s",
++ sqlCursor()->name().latin1() );
+ #endif
+ endInsert();
+ return FALSE;
+@@ -1117,16 +1117,16 @@
+ return FALSE;
+ if ( sqlCursor()->primaryIndex().count() == 0 ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning("QDataTable::updateCurrent: no primary index for " +
+- sqlCursor()->name() );
++ qWarning("QDataTable::updateCurrent: no primary index for %s",
++ sqlCursor()->name().latin1() );
+ #endif
+ endUpdate();
+ return FALSE;
+ }
+ if ( !sqlCursor()->canUpdate() ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning("QDataTable::updateCurrent: updates not allowed for " +
+- sqlCursor()->name() );
++ qWarning("QDataTable::updateCurrent: updates not allowed for %s",
++ sqlCursor()->name().latin1() );
+ #endif
+ endUpdate();
+ return FALSE;
+@@ -1191,8 +1191,8 @@
+ return FALSE;
+ if ( sqlCursor()->primaryIndex().count() == 0 ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning("QDataTable::deleteCurrent: no primary index " +
+- sqlCursor()->name() );
++ qWarning("QDataTable::deleteCurrent: no primary index %s",
++ sqlCursor()->name().latin1() );
+ #endif
+ return FALSE;
+ }
+
+--- src/sql/qsqldatabase.cpp Mon Jul 16 10:45:03 CEST 2007
++++ src/sql/qsqldatabase.cpp Mon Jul 16 10:45:03 CEST 2007
+
+@@ -234,7 +234,8 @@
+ db->open();
+ #ifdef QT_CHECK_RANGE
+ if ( !db->isOpen() )
+- qWarning("QSqlDatabaseManager::database: unable to open database: " + db->lastError().databaseText() + ": " + db->lastError().driverText() );
++ qWarning("QSqlDatabaseManager::database: unable to open database: %s: %s",
++ db->lastError().databaseText().latin1(), db->lastError().driverText().latin1() );
+ #endif
+ }
+ return db;
+@@ -686,7 +687,7 @@
+ if ( !d->driver ) {
+ #ifdef QT_CHECK_RANGE
+ qWarning( "QSqlDatabase: %s driver not loaded", type.latin1() );
+- qWarning( "QSqlDatabase: available drivers: " + drivers().join(" ") );
++ qWarning( "QSqlDatabase: available drivers: %s", drivers().join(" ").latin1() );
+ #endif
+ d->driver = new QNullDriver();
+ d->driver->setLastError( QSqlError( "Driver not loaded", "Driver not loaded" ) );
+
+--- src/sql/qsqlindex.cpp Mon Jul 16 10:45:03 CEST 2007
++++ src/sql/qsqlindex.cpp Mon Jul 16 10:45:03 CEST 2007
+
+@@ -273,7 +273,7 @@
+ if ( field )
+ newSort.append( *field, desc );
+ else
+- qWarning( "QSqlIndex::fromStringList: unknown field: '" + f + "'" );
++ qWarning( "QSqlIndex::fromStringList: unknown field: '%s'", f.latin1());
+ }
+ return newSort;
+ }
+
+--- src/sql/qsqlrecord.cpp Mon Jul 16 10:45:03 CEST 2007
++++ src/sql/qsqlrecord.cpp Mon Jul 16 10:45:03 CEST 2007
+
+@@ -298,7 +298,7 @@
+ return i;
+ }
+ #ifdef QT_CHECK_RANGE
+- qWarning( "QSqlRecord::position: unable to find field " + name );
++ qWarning( "QSqlRecord::position: unable to find field %s", name.latin1() );
+ #endif
+ return -1;
+ }
+@@ -313,7 +313,7 @@
+ checkDetach();
+ if ( !sh->d->contains( i ) ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning( "QSqlRecord::field: index out of range: " + QString::number( i ) );
++ qWarning( "QSqlRecord::field: index out of range: %d", i );
+ #endif
+ return 0;
+ }
+@@ -344,7 +344,7 @@
+ {
+ if ( !sh->d->contains( i ) ) {
+ #ifdef QT_CHECK_RANGE
+- qWarning( "QSqlRecord::field: index out of range: " + QString::number( i ) );
++ qWarning( "QSqlRecord::field: index out of range: %d", i );
+ #endif // QT_CHECK_RANGE
+ return 0;
+ }
+
+--- src/tools/qglobal.cpp Mon Jul 16 10:45:03 CEST 2007
++++ src/tools/qglobal.cpp Mon Jul 16 10:45:03 CEST 2007
+
+@@ -680,7 +680,7 @@
+ if ( code != -1 )
+ qWarning( "%s\n\tError code %d - %s", msg, code, strerror( code ) );
+ else
+- qWarning( msg );
++ qWarning( "%s", msg );
+ #endif
+ #else
+ Q_UNUSED( msg );
+
+--- src/xml/qsvgdevice.cpp Mon Jul 16 10:45:03 CEST 2007
++++ src/xml/qsvgdevice.cpp Mon Jul 16 10:45:03 CEST 2007
+
+@@ -978,7 +978,7 @@
+ // ### catch references to embedded .svg files
+ QPixmap pix;
+ if ( !pix.load( href ) ) {
+- qWarning( "QSvgDevice::play: Couldn't load image "+href );
++ qWarning( "QSvgDevice::play: Couldn't load image %s", href.latin1() );
+ break;
+ }
+ pt->drawPixmap( QRect( x1, y1, w, h ), pix );
+@@ -1024,8 +1024,8 @@
+ break;
+ }
+ case InvalidElement:
+- qWarning( "QSvgDevice::play: unknown element type " +
+- node.nodeName() );
++ qWarning( "QSvgDevice::play: unknown element type %s",
++ node.nodeName().latin1() );
+ break;
+ };
+
+@@ -1111,7 +1111,7 @@
+ {
+ QRegExp reg( QString::fromLatin1("([+-]?\\d*\\.*\\d*[Ee]?[+-]?\\d*)(em|ex|px|%|pt|pc|cm|mm|in|)$") );
+ if ( reg.search( str ) == -1 ) {
+- qWarning( "QSvgDevice::parseLen: couldn't parse " + str );
++ qWarning( "QSvgDevice::parseLen: couldn't parse %s ", str.latin1() );
+ if ( ok )
+ *ok = FALSE;
+ return 0.0;
+@@ -1140,7 +1140,7 @@
+ else if ( u == "pc" )
+ dbl *= m.logicalDpiX() / 6.0;
+ else
+- qWarning( "QSvgDevice::parseLen: Unknown unit " + u );
++ qWarning( "QSvgDevice::parseLen: Unknown unit %s", u.latin1() );
+ }
+ if ( ok )
+ *ok = TRUE;
diff --git a/x11-libs/qt/files/0185-fix-format-strings.diff b/x11-libs/qt/files/0185-fix-format-strings.diff
new file mode 100644
index 000000000000..eed38b4785fa
--- /dev/null
+++ b/x11-libs/qt/files/0185-fix-format-strings.diff
@@ -0,0 +1,261 @@
+qt-bugs@ issue : N171087
+Trolltech task ID :
+bugs.kde.org number :
+applied: no
+author: Dirk Mueller <mueller@kde.org>
+
+This patch fixes various code issues with handling format strings
+None of them seem to be exceptionally bad, but its better safe
+than sorry.
+
+
+--- src/corelib/global/qglobal.h
++++ src/corelib/global/qglobal.h
+@@ -1266,8 +1266,16 @@ Q_CORE_EXPORT void qFatal(const char *,
+ #ifdef QT3_SUPPORT
+ Q_CORE_EXPORT QT3_SUPPORT void qSystemWarning(const char *msg, int code = -1);
+ #endif /* QT3_SUPPORT */
+-Q_CORE_EXPORT void qErrnoWarning(int code, const char *msg, ...);
+-Q_CORE_EXPORT void qErrnoWarning(const char *msg, ...);
++Q_CORE_EXPORT void qErrnoWarning(int code, const char *msg, ...)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 2, 3)))
++#endif
++ ;
++Q_CORE_EXPORT void qErrnoWarning(const char *msg, ...)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 1, 2)))
++#endif
++ ;
+
+ #if (defined(QT_NO_DEBUG_OUTPUT) || defined(QT_NO_TEXTSTREAM)) && !defined(QT_NO_DEBUG_STREAM)
+ #define QT_NO_DEBUG_STREAM
+--- src/corelib/tools/qbytearray.h
++++ src/corelib/tools/qbytearray.h
+@@ -71,8 +71,16 @@ Q_CORE_EXPORT int qstricmp(const char *,
+ Q_CORE_EXPORT int qstrnicmp(const char *, const char *, uint len);
+
+ // implemented in qvsnprintf.cpp
+-Q_CORE_EXPORT int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap);
+-Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt, ...);
++Q_CORE_EXPORT int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 3, 0)))
++#endif
++ ;
++Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt, ...)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 3, 4)))
++#endif
++ ;
+
+ #ifdef QT3_SUPPORT
+ inline QT3_SUPPORT void *qmemmove(void *dst, const void *src, uint len)
+--- src/gui/painting/qprintengine_pdf_p.h
++++ src/gui/painting/qprintengine_pdf_p.h
+@@ -148,7 +148,11 @@ private:
+ void writePage();
+
+ int addXrefEntry(int object, bool printostr = true);
+- void xprintf(const char* fmt, ...);
++ void xprintf(const char* fmt, ...)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 2, 3)))
++#endif
++ ;
+ inline void write(const QByteArray &data) {
+ stream->writeRawData(data.constData(), data.size());
+ streampos += data.size();
+--- src/gui/painting/qprintengine_pdf.cpp
++++ src/gui/painting/qprintengine_pdf.cpp
+@@ -386,9 +386,8 @@ int QPdfEnginePrivate::addConstantAlphaO
+ object = addXrefEntry(-1);
+ QByteArray alphaDef;
+ QPdf::ByteStream s(&alphaDef);
+- s << "<< /ca " << (alpha/qreal(255.)) << ">>\n";
+- xprintf(alphaDef.constData());
+- xprintf("endobj\n");
++ s << "<< /ca " << (alpha/qreal(255.)) << ">>";
++ xprintf("%s\nendobj\n", alphaDef.constData());
+ }
+ currentPage->graphicStates.append(object);
+ return object;
+--- src/qt3support/tools/q3gcache.cpp
++++ src/qt3support/tools/q3gcache.cpp
+@@ -622,7 +622,7 @@ void Q3GCache::statistics() const
+ #if defined(QT_DEBUG)
+ QString line;
+ line.fill(QLatin1Char('*'), 80);
+- qDebug(line.ascii());
++ qDebug("%s", line.ascii());
+ qDebug("CACHE STATISTICS:");
+ qDebug("cache contains %d item%s, with a total cost of %d",
+ count(), count() != 1 ? "s" : "", tCost);
+@@ -643,7 +643,7 @@ void Q3GCache::statistics() const
+ lruList->dumps != 1 ? "have" : "has", lruList->dumpCosts);
+ qDebug("Statistics from internal dictionary class:");
+ dict->statistics();
+- qDebug(line.ascii());
++ qDebug("%s", line.ascii());
+ #endif
+ }
+
+--- src/qt3support/tools/q3gdict.cpp
++++ src/qt3support/tools/q3gdict.cpp
+@@ -828,11 +828,11 @@ void Q3GDict::statistics() const
+ QString line;
+ line.fill(QLatin1Char('-'), 60);
+ double real, ideal;
+- qDebug(line.ascii());
++ qDebug("%s", line.ascii());
+ qDebug("DICTIONARY STATISTICS:");
+ if (count() == 0) {
+ qDebug("Empty!");
+- qDebug(line.ascii());
++ qDebug("%s", line.ascii());
+ return;
+ }
+ real = 0.0;
+@@ -853,7 +853,7 @@ void Q3GDict::statistics() const
+ while (b--)
+ *pbuf++ = '*';
+ *pbuf = '\0';
+- qDebug(buf);
++ qDebug("%s", buf);
+ i++;
+ }
+ qDebug("Array size = %d", size());
+@@ -861,7 +861,7 @@ void Q3GDict::statistics() const
+ qDebug("Real dist = %g", real);
+ qDebug("Rand dist = %g", ideal);
+ qDebug("Real/Rand = %g", real/ideal);
+- qDebug(line.ascii());
++ qDebug("%s", line.ascii());
+ #endif // QT_DEBUG
+ }
+
+--- src/qt3support/tools/q3cstring.h
++++ src/qt3support/tools/q3cstring.h
+@@ -57,7 +57,11 @@ public:
+ }
+
+ Q3CString copy() const { return *this; }
+- Q3CString &sprintf(const char *format, ...);
++ Q3CString &sprintf(const char *format, ...)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 2, 3)))
++#endif
++ ;
+
+ Q3CString left(uint len) const { return QByteArray::left(len); }
+ Q3CString right(uint len) const { return QByteArray::right(len); }
+--- tools/designer/src/lib/uilib/formbuilderextra.cpp
++++ tools/designer/src/lib/uilib/formbuilderextra.cpp
+@@ -33,9 +33,7 @@ namespace QFormInternal {
+ #endif
+
+ void uiLibWarning(const QString &message) {
+- QString prefixedMessage = QLatin1String("Designer: ");
+- prefixedMessage += message;
+- qWarning(prefixedMessage.toUtf8().constData());
++ qWarning("Designer: %s", qPrintable(message));
+ }
+
+ QFormBuilderExtra::QFormBuilderExtra() :
+--- tools/designer/src/lib/shared/qdesigner_utils.cpp
++++ tools/designer/src/lib/shared/qdesigner_utils.cpp
+@@ -40,9 +40,7 @@ namespace qdesigner_internal
+ {
+ QDESIGNER_SHARED_EXPORT void designerWarning(const QString &message)
+ {
+- QString prefixedMessage = QLatin1String("Designer: ");
+- prefixedMessage += message;
+- qWarning(prefixedMessage.toUtf8().constData());
++ qWarning("Designer: %s", qPrintable(message));
+ }
+
+ QString EnumType::id() const
+--- tools/qtestlib/src/qtest_global.h
++++ tools/qtestlib/src/qtest_global.h
+@@ -59,7 +59,11 @@ namespace QTest
+ enum SkipMode { SkipSingle = 1, SkipAll = 2 };
+ enum TestFailMode { Abort = 1, Continue = 2 };
+
+- int Q_TESTLIB_EXPORT qt_snprintf(char *str, int size, const char *format, ...);
++ int Q_TESTLIB_EXPORT qt_snprintf(char *str, int size, const char *format, ...)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 3, 4)))
++#endif
++ ;
+ }
+
+ QT_END_HEADER
+--- tools/assistant/config.cpp
++++ tools/assistant/config.cpp
+@@ -73,12 +73,12 @@ Config *Config::loadConfig(const QString
+
+ QFile file(profileFileName);
+ if (!file.exists()) {
+- qWarning( (QLatin1String("File does not exist: ") + profileFileName).toAscii().constData() );
++ qWarning( "File does not exist: %s", qPrintable(profileFileName) );
+ return 0;
+ }
+ DocuParser *parser = DocuParser::createParser( profileFileName );
+ if (!parser) {
+- qWarning( (QLatin1String("Failed to create parser for file: ") + profileFileName).toAscii().constData() );
++ qWarning( "Failed to create parser for file: %s", qPrintable(profileFileName) );
+ return 0;
+ }
+ if (parser->parserVersion() < DocuParser::Qt320) {
+@@ -89,7 +89,7 @@ Config *Config::loadConfig(const QString
+ parser->parse(&file);
+ config->profil = profileParser->profile();
+ if (!config->profil) {
+- qWarning( (QLatin1String("Config::loadConfig(), no profile in: ") + profileFileName).toAscii().constData() );
++ qWarning( "Config::loadConfig(), no profile in: %s", qPrintable(profileFileName) );
+ return 0;
+ }
+ config->profil->setProfileType(Profile::UserProfile);
+--- tools/assistant/index.cpp
++++ tools/assistant/index.cpp
+@@ -180,7 +180,7 @@ void Index::parseDocument( const QString
+ {
+ QFile file( filename );
+ if ( !file.open(QFile::ReadOnly) ) {
+- qWarning( (QLatin1String("can not open file ") + filename).toAscii().constData() );
++ qWarning( "can not open file %s", qPrintable(filename) );
+ return;
+ }
+
+@@ -352,7 +352,7 @@ QString Index::getDocumentTitle( const Q
+
+ QFile file( fileName );
+ if ( !file.open( QFile::ReadOnly ) ) {
+- qWarning( (QLatin1String("cannot open file ") + fileName).toAscii().constData() );
++ qWarning( "cannot open file %s", qPrintable(fileName) );
+ return fileName;
+ }
+ QTextStream s( &file );
+@@ -474,7 +474,7 @@ bool Index::searchForPattern( const QStr
+ QString fName = url.toLocalFile();
+ QFile file( fName );
+ if ( !file.open( QFile::ReadOnly ) ) {
+- qWarning( (QLatin1String("cannot open file ") + fName).toAscii().constData() );
++ qWarning( "cannot open file %s", qPrintable(fName) );
+ return false;
+ }
+
+--- tools/linguist/shared/profileevaluator.h
++++ tools/linguist/shared/profileevaluator.h
+@@ -88,7 +88,11 @@ protected:
+
+ private:
+ void logMessage(const QString &msg, MessageType mt = MT_DebugLevel2);
+- void logMessage(MessageType mt, const char *msg, ...);
++ void logMessage(MessageType mt, const char *msg, ...)
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 3, 4)))
++#endif
++ ;
+ QString expandVariableReferences(const QString &value);
+ QString evaluateExpandFunction(const QByteArray &func, const QString &arguments);
diff --git a/x11-libs/qt/files/digest-qt-3.3.8-r3 b/x11-libs/qt/files/digest-qt-3.3.8-r3
new file mode 100644
index 000000000000..5cda06f7046f
--- /dev/null
+++ b/x11-libs/qt/files/digest-qt-3.3.8-r3
@@ -0,0 +1,6 @@
+MD5 37aec12c8c7b0e164957ec1aa3fd0189 qt-x11-free-3.3.8.tar.gz 17393124
+RMD160 65188370f6aa7093c9601783264825cf66b74eb4 qt-x11-free-3.3.8.tar.gz 17393124
+SHA256 975fa7b0c1e02f84d9013a9cde2123695fdd512ff4394ba89f530f4ee8597139 qt-x11-free-3.3.8.tar.gz 17393124
+MD5 7f056a1fa246004cb3ec19fc11a88dc1 qt-x11-immodule-unified-qt3.3.8-20070321-gentoo.diff.bz2 137387
+RMD160 7f4f79c95faa2b8e71a78308af8feae5f6a6b06a qt-x11-immodule-unified-qt3.3.8-20070321-gentoo.diff.bz2 137387
+SHA256 06994304d2b7c699c4b6ea4183877652e261170f74282e89a3700ce6d4a98918 qt-x11-immodule-unified-qt3.3.8-20070321-gentoo.diff.bz2 137387
diff --git a/x11-libs/qt/files/digest-qt-4.3.0-r1 b/x11-libs/qt/files/digest-qt-4.3.0-r1
new file mode 100644
index 000000000000..1f47068a30ba
--- /dev/null
+++ b/x11-libs/qt/files/digest-qt-4.3.0-r1
@@ -0,0 +1,3 @@
+MD5 8012acea71b35c18247bd92c4721589d qt-x11-opensource-src-4.3.0.tar.gz 41955515
+RMD160 2106dd8dda7a5b16305ba701e33c17e9349fddc3 qt-x11-opensource-src-4.3.0.tar.gz 41955515
+SHA256 abc37774d327a9b1d1d35e223f014c7e92168cd6c7baf66156badca68f8f1440 qt-x11-opensource-src-4.3.0.tar.gz 41955515
diff --git a/x11-libs/qt/qt-3.3.8-r3.ebuild b/x11-libs/qt/qt-3.3.8-r3.ebuild
new file mode 100644
index 000000000000..deacf65c2958
--- /dev/null
+++ b/x11-libs/qt/qt-3.3.8-r3.ebuild
@@ -0,0 +1,386 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/qt-3.3.8-r3.ebuild,v 1.1 2007/08/02 16:44:50 carlo Exp $
+
+# *** Please remember to update qt3.eclass when revbumping this ***
+
+inherit eutils flag-o-matic toolchain-funcs
+
+SRCTYPE="free"
+DESCRIPTION="The Qt toolkit is a comprehensive C++ application development framework."
+HOMEPAGE="http://www.trolltech.com/"
+
+IMMQT_P="qt-x11-immodule-unified-qt3.3.8-20070321-gentoo"
+
+SRC_URI="ftp://ftp.trolltech.com/qt/source/qt-x11-${SRCTYPE}-${PV}.tar.gz
+ immqt? ( mirror://gentoo/${IMMQT_P}.diff.bz2 )
+ immqt-bc? ( mirror://gentoo/${IMMQT_P}.diff.bz2 )"
+LICENSE="|| ( QPL-1.0 GPL-2 )"
+
+SLOT="3"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+IUSE="cups debug doc examples firebird gif ipv6 mysql nas nis odbc opengl postgres sqlite xinerama immqt immqt-bc"
+
+DEPEND="x11-libs/libXcursor
+ x11-libs/libXi
+ x11-libs/libXrandr
+ x11-libs/libSM
+ x11-proto/inputproto
+ x11-proto/xextproto
+ xinerama? ( x11-proto/xineramaproto x11-libs/libXinerama )
+ virtual/xft
+ media-libs/libpng
+ media-libs/jpeg
+ >=media-libs/libmng-1.0.9
+ >=media-libs/freetype-2
+ sys-libs/zlib
+ nas? ( >=media-libs/nas-1.5 )
+ mysql? ( virtual/mysql )
+ firebird? ( dev-db/firebird )
+ opengl? ( virtual/opengl virtual/glu )
+ postgres? ( dev-db/libpq )
+ cups? ( net-print/cups )"
+PDEPEND="odbc? ( ~dev-db/qt-unixODBC-$PV )"
+
+S=${WORKDIR}/qt-x11-${SRCTYPE}-${PV}
+
+QTBASE=/usr/qt/3
+
+pkg_setup() {
+ if use immqt && use immqt-bc ; then
+ ewarn
+ ewarn "immqt and immqt-bc are exclusive. You cannot set both."
+ ewarn "Please specify either immqt or immqt-bc."
+ ewarn
+ die
+ elif use immqt ; then
+ ewarn
+ ewarn "You are going to compile binary imcompatible immodule for Qt. This means"
+ ewarn "you have to recompile everything depending on Qt after you install it."
+ ewarn "Be aware."
+ ewarn
+ fi
+
+ export QTDIR=${S}
+
+ CXX=$(tc-getCXX)
+ if [[ ${CXX/g++/} != ${CXX} ]]; then
+ PLATCXX="g++"
+ elif [[ ${CXX/icpc/} != ${CXX} ]]; then
+ PLATCXX="icc"
+ else
+ die "Unknown compiler ${CXX}."
+ fi
+
+ case ${CHOST} in
+ *-freebsd*|*-dragonfly*)
+ PLATNAME="freebsd" ;;
+ *-openbsd*)
+ PLATNAME="openbsd" ;;
+ *-netbsd*)
+ PLATNAME="netbsd" ;;
+ *-darwin*)
+ PLATNAME="darwin" ;;
+ *-linux-*|*-linux)
+ PLATNAME="linux" ;;
+ *)
+ die "Unknown CHOST, no platform choosed."
+ esac
+
+ # probably this should be '*-64' for 64bit archs
+ # in a fully multilib environment (no compatibility symlinks)
+ export PLATFORM="${PLATNAME}-${PLATCXX}"
+}
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+
+ sed -i -e 's:read acceptance:acceptance=yes:' configure
+
+ # Do not link with -rpath. See bug #75181.
+ find ${S}/mkspecs -name qmake.conf | xargs \
+ sed -i -e 's:QMAKE_RPATH.*:QMAKE_RPATH =:'
+
+ # Patch for uic includehint errors (aseigo patch)
+ epatch ${FILESDIR}/${P}-uic-fix.patch
+
+ # Patch for mysql unload crash (Bug #171883)
+ epatch ${FILESDIR}/${P}-mysql-unload-crash.diff
+
+ # KDE related patches
+ epatch ${FILESDIR}/0001-dnd_optimization.patch
+ epatch ${FILESDIR}/0002-dnd_active_window_fix.patch
+ epatch ${FILESDIR}/0038-dragobject-dont-prefer-unknown.patch
+ epatch ${FILESDIR}/0044-qscrollview-windowactivate-fix.diff
+ epatch ${FILESDIR}/0047-fix-kmenu-widget.diff
+ epatch ${FILESDIR}/0048-qclipboard_hack_80072.patch
+
+ # possible rce, CVE-2007-3388
+ epatch ${FILESDIR}/0081-format-string-fixes.diff
+
+ # ulibc patch (bug #100246)
+ epatch ${FILESDIR}/qt-ulibc.patch
+
+ # xinerama patch: http://ktown.kde.org/~seli/xinerama/
+ epatch "${FILESDIR}/${P}-seli-xinerama.patch"
+
+ epatch ${FILESDIR}/utf8-bug-qt3.diff
+
+ # Visibility patch, apply only on GCC 4.1 and later for safety
+ # [[ $(gcc-major-version)$(gcc-minor-version) -ge 41 ]] && \
+ epatch "${FILESDIR}/${P}-visibility.patch"
+
+ if use immqt || use immqt-bc ; then
+ epatch ../${IMMQT_P}.diff
+ sh make-symlinks.sh || die "make symlinks failed"
+ fi
+
+ if use ppc-macos ; then
+ epatch "${FILESDIR}/${PN}-3.3.5-macos.patch"
+ fi
+
+ # known working flags wrt #77623
+ use sparc && export CFLAGS="-O1" && export CXXFLAGS="${CFLAGS}"
+ # set c/xxflags and ldflags
+ strip-flags
+ append-flags -fno-strict-aliasing
+ sed -i -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
+ -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
+ -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
+ -e "s:\<QMAKE_CC\>.*=.*:QMAKE_CC=$(tc-getCC):" \
+ -e "s:\<QMAKE_CXX\>.*=.*:QMAKE_CXX=$(tc-getCXX):" \
+ -e "s:\<QMAKE_LINK\>.*=.*:QMAKE_LINK=$(tc-getCXX):" \
+ -e "s:\<QMAKE_LINK_SHLIB\>.*=.*:QMAKE_LINK_SHLIB=$(tc-getCXX):" \
+ ${S}/mkspecs/${PLATFORM}/qmake.conf || die
+
+ if [ $(get_libdir) != "lib" ] ; then
+ sed -i -e "s:/lib$:/$(get_libdir):" \
+ ${S}/mkspecs/${PLATFORM}/qmake.conf || die
+ fi
+}
+
+src_compile() {
+ export SYSCONF=${D}${QTBASE}/etc/settings
+
+ # Let's just allow writing to these directories during Qt emerge
+ # as it makes Qt much happier.
+ addwrite "${QTBASE}/etc/settings"
+ addwrite "${HOME}/.qt"
+
+ [ $(get_libdir) != "lib" ] && myconf="${myconf} -L/usr/$(get_libdir)"
+
+ # unixODBC support is now a PDEPEND on dev-db/qt-unixODBC; see bug 14178.
+ use nas && myconf="${myconf} -system-nas-sound"
+ use nis && myconf="${myconf} -nis" || myconf="${myconf} -no-nis"
+ use gif && myconf="${myconf} -qt-gif" || myconf="${myconf} -no-gif"
+ use mysql && myconf="${myconf} -plugin-sql-mysql -I/usr/include/mysql -L/usr/$(get_libdir)/mysql" || myconf="${myconf} -no-sql-mysql"
+ use postgres && myconf="${myconf} -plugin-sql-psql -I/usr/include/postgresql/server -I/usr/include/postgresql/pgsql -I/usr/include/postgresql/pgsql/server" || myconf="${myconf} -no-sql-psql"
+ use firebird && myconf="${myconf} -plugin-sql-ibase -I/opt/firebird/include" || myconf="${myconf} -no-sql-ibase"
+ use sqlite && myconf="${myconf} -plugin-sql-sqlite" || myconf="${myconf} -no-sql-sqlite"
+ use cups && myconf="${myconf} -cups" || myconf="${myconf} -no-cups"
+ use opengl && myconf="${myconf} -enable-module=opengl" || myconf="${myconf} -disable-opengl"
+ use debug && myconf="${myconf} -debug" || myconf="${myconf} -release -no-g++-exceptions"
+ use xinerama && myconf="${myconf} -xinerama" || myconf="${myconf} -no-xinerama"
+
+ myconf="${myconf} -system-zlib"
+
+ use ipv6 && myconf="${myconf} -ipv6" || myconf="${myconf} -no-ipv6"
+ use immqt-bc && myconf="${myconf} -inputmethod"
+ use immqt && myconf="${myconf} -inputmethod -inputmethod-ext"
+
+ if use ppc-macos ; then
+ myconf="${myconf} -no-sql-ibase -no-sql-mysql -no-sql-psql -no-cups -lresolv -shared"
+ myconf="${myconf} -I/usr/X11R6/include -L/usr/X11R6/lib"
+ myconf="${myconf} -L${S}/lib -I${S}/include"
+ sed -i -e "s,#define QT_AOUT_UNDERSCORE,," mkspecs/${PLATFORM}/qplatformdefs.h || die
+ fi
+
+ export YACC='byacc -d'
+ tc-export CC CXX
+ export LINK="$(tc-getCXX)"
+
+ ./configure -sm -thread -stl -system-libjpeg -verbose -largefile \
+ -qt-imgfmt-{jpeg,mng,png} -tablet -system-libmng \
+ -system-libpng -xft -platform ${PLATFORM} -xplatform \
+ ${PLATFORM} -xrender -prefix ${QTBASE} -libdir ${QTBASE}/$(get_libdir) \
+ -fast -no-sql-odbc ${myconf} -dlopen-opengl || die
+
+ emake src-qmake src-moc sub-src || die
+
+ export DYLD_LIBRARY_PATH="${S}/lib:/usr/X11R6/lib:${DYLD_LIBRARY_PATH}"
+ export LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}"
+
+ emake sub-tools || die
+
+ if use examples; then
+ emake sub-tutorial sub-examples || die
+ fi
+
+ # Make the msg2qm utility (not made by default)
+ cd ${S}/tools/msg2qm
+ ../../bin/qmake
+ emake
+
+ # Make the qembed utility (not made by default)
+ cd ${S}/tools/qembed
+ ../../bin/qmake
+ emake
+
+}
+
+src_install() {
+ # binaries
+ into ${QTBASE}
+ dobin bin/*
+ dobin tools/msg2qm/msg2qm
+ dobin tools/qembed/qembed
+
+ # libraries
+ if use ppc-macos; then
+ # dolib is broken on BSD because of missing readlink(1)
+ dodir ${QTBASE}/$(get_libdir)
+ cp -fR lib/*.{dylib,la,a} ${D}/${QTBASE}/$(get_libdir) || die
+
+ cd ${D}/${QTBASE}/$(get_libdir)
+ for lib in libqt-mt* ; do
+ ln -s ${lib} ${lib/-mt/}
+ done
+ else
+ dolib.so lib/lib{editor,qassistantclient,designercore}.a
+ dolib.so lib/libqt-mt.la
+ dolib.so lib/libqt-mt.so.${PV} lib/libqui.so.1.0.0
+ cd ${D}/${QTBASE}/$(get_libdir)
+
+ for x in libqui.so ; do
+ ln -s $x.1.0.0 $x.1.0
+ ln -s $x.1.0 $x.1
+ ln -s $x.1 $x
+ done
+
+ # version symlinks - 3.3.5->3.3->3->.so
+ ln -s libqt-mt.so.${PV} libqt-mt.so.3.3
+ ln -s libqt-mt.so.3.3 libqt-mt.so.3
+ ln -s libqt-mt.so.3 libqt-mt.so
+
+ # libqt -> libqt-mt symlinks
+ ln -s libqt-mt.so.${PV} libqt.so.${PV}
+ ln -s libqt-mt.so.3.3 libqt.so.3.3
+ ln -s libqt-mt.so.3 libqt.so.3
+ ln -s libqt-mt.so libqt.so
+ fi
+
+ # plugins
+ cd ${S}
+ local plugins=$(find plugins -name "lib*.so" -print)
+ for x in ${plugins}; do
+ exeinto ${QTBASE}/$(dirname ${x})
+ doexe ${x}
+ done
+
+ # Past this point just needs to be done once
+ is_final_abi || return 0
+
+ # includes
+ cd ${S}
+ dodir ${QTBASE}/include/private
+ cp include/* ${D}/${QTBASE}/include/
+ cp include/private/* ${D}/${QTBASE}/include/private/
+
+ # prl files
+ sed -i -e "s:${S}:${QTBASE}:g" ${S}/lib/*.prl
+ insinto ${QTBASE}/$(get_libdir)
+ doins ${S}/lib/*.prl
+
+ # pkg-config file
+ insinto ${QTBASE}/$(get_libdir)/pkgconfig
+ doins ${S}/lib/*.pc
+
+ # List all the multilib libdirs
+ local libdirs
+ for libdir in $(get_all_libdirs); do
+ libdirs="${libdirs}:${QTBASE}/${libdir}"
+ done
+
+ # environment variables
+ if use ppc-macos; then
+ cat <<EOF > ${T}/45qt3
+PATH=${QTBASE}/bin
+ROOTPATH=${QTBASE}/bin
+DYLD_LIBRARY_PATH=${libdirs:1}
+QMAKESPEC=${PLATFORM}
+MANPATH=${QTBASE}/doc/man
+PKG_CONFIG_PATH=${QTBASE}/$(get_libdir)/pkgconfig
+EOF
+ else
+ cat <<EOF > ${T}/45qt3
+PATH=${QTBASE}/bin
+ROOTPATH=${QTBASE}/bin
+LDPATH=${libdirs:1}
+QMAKESPEC=${PLATFORM}
+MANPATH=${QTBASE}/doc/man
+PKG_CONFIG_PATH=${QTBASE}/$(get_libdir)/pkgconfig
+EOF
+ fi
+ cat <<EOF > ${T}/50qtdir3
+QTDIR=${QTBASE}
+EOF
+
+ cat <<EOF > ${T}/50-qt3-revdep
+SEARCH_DIRS="${QTBASE}"
+EOF
+
+ insinto /etc/revdep-rebuild
+ doins ${T}/50-qt3-revdep
+
+ doenvd ${T}/45qt3 ${T}/50qtdir3
+
+ if [ "${SYMLINK_LIB}" = "yes" ]; then
+ dosym $(get_abi_LIBDIR ${DEFAULT_ABI}) ${QTBASE}/lib
+ fi
+
+ insinto ${QTBASE}/tools/designer
+ doins -r tools/designer/templates
+
+ insinto ${QTBASE}
+ doins -r translations
+
+ keepdir ${QTBASE}/etc/settings
+
+ if use doc; then
+ insinto ${QTBASE}
+ doins -r ${S}/doc
+ fi
+
+ if use examples; then
+ find ${S}/examples ${S}/tutorial -name Makefile | \
+ xargs sed -i -e "s:${S}:${QTBASE}:g"
+
+ cp -r ${S}/examples ${D}${QTBASE}/
+ cp -r ${S}/tutorial ${D}${QTBASE}/
+ fi
+
+ # misc build reqs
+ insinto ${QTBASE}/mkspecs
+ doins -r ${S}/mkspecs/${PLATFORM}
+
+ sed -e "s:${S}:${QTBASE}:g" \
+ ${S}/.qmake.cache > ${D}${QTBASE}/.qmake.cache
+
+ dodoc FAQ README README-QT.TXT changes*
+ if use immqt || use immqt-bc ; then
+ dodoc ${S}/README.immodule
+ fi
+}
+
+pkg_postinst() {
+ echo
+ elog "After a rebuild of Qt, it can happen that Qt plugins (such as Qt/KDE styles,"
+ elog "or widgets for the Qt designer) are no longer recognized. If this situation"
+ elog "occurs you should recompile the packages providing these plugins,"
+ elog "and you should also make sure that Qt and its plugins were compiled with the"
+ elog "same version of gcc. Packages that may need to be rebuilt are, for instance,"
+ elog "kde-base/kdelibs, kde-base/kdeartwork and kde-base/kdeartwork-styles."
+ elog "See http://doc.trolltech.com/3.3/plugins-howto.html for more infos."
+ echo
+}
diff --git a/x11-libs/qt/qt-4.3.0-r1.ebuild b/x11-libs/qt/qt-4.3.0-r1.ebuild
new file mode 100644
index 000000000000..910af11e76c1
--- /dev/null
+++ b/x11-libs/qt/qt-4.3.0-r1.ebuild
@@ -0,0 +1,272 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/qt-4.3.0-r1.ebuild,v 1.1 2007/08/02 16:44:50 carlo Exp $
+
+inherit eutils flag-o-matic toolchain-funcs multilib
+
+SRCTYPE="opensource-src"
+DESCRIPTION="The Qt toolkit is a comprehensive C++ application development framework."
+HOMEPAGE="http://www.trolltech.com/"
+
+SRC_URI="ftp://ftp.trolltech.com/pub/qt/source/qt-x11-${SRCTYPE}-${PV}.tar.gz"
+S=${WORKDIR}/qt-x11-${SRCTYPE}-${PV}
+
+LICENSE="|| ( QPL-1.0 GPL-2 )"
+SLOT="4"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~sparc ~x86 ~x86-fbsd"
+
+IUSE_INPUT_DEVICES="input_devices_wacom"
+
+IUSE="accessibility cups dbus debug doc examples firebird gif glib jpeg mng mysql nas nis odbc opengl pch png postgres qt3support sqlite sqlite3 ssl tiff xinerama zlib ${IUSE_INPUT_DEVICES}"
+
+DEPEND="x11-libs/libXrandr
+ x11-libs/libXcursor
+ x11-libs/libXi
+ x11-libs/libXfont
+ x11-libs/libSM
+ x11-proto/xextproto
+ x11-proto/inputproto
+ dev-util/pkgconfig
+ xinerama? ( x11-proto/xineramaproto x11-libs/libXinerama )
+ virtual/xft
+ >=media-libs/freetype-2
+ png? ( media-libs/libpng )
+ jpeg? ( media-libs/jpeg )
+ mng? ( >=media-libs/libmng-1.0.9 )
+ tiff? ( media-libs/tiff )
+ nas? ( >=media-libs/nas-1.5 )
+ odbc? ( dev-db/unixODBC )
+ mysql? ( virtual/mysql )
+ firebird? ( dev-db/firebird )
+ sqlite3? ( =dev-db/sqlite-3* )
+ sqlite? ( =dev-db/sqlite-2* )
+ opengl? ( virtual/opengl virtual/glu )
+ postgres? ( dev-db/libpq )
+ cups? ( net-print/cups )
+ zlib? ( sys-libs/zlib )
+ glib? ( dev-libs/glib )
+ dbus? ( >=sys-apps/dbus-1.0.2 )
+ ssl? ( dev-libs/openssl )
+ input_devices_wacom? ( x11-drivers/linuxwacom )"
+
+pkg_setup() {
+ QTBASEDIR=/usr/$(get_libdir)/qt4
+ QTPREFIXDIR=/usr
+ QTBINDIR=/usr/bin
+ QTLIBDIR=/usr/$(get_libdir)/qt4
+ QTPCDIR=/usr/$(get_libdir)/pkgconfig
+ QTDATADIR=/usr/share/qt4
+ QTDOCDIR=/usr/share/doc/${PF}
+ QTHEADERDIR=/usr/include/qt4
+ QTPLUGINDIR=${QTLIBDIR}/plugins
+ QTSYSCONFDIR=/etc/qt4
+ QTTRANSDIR=${QTDATADIR}/translations
+ QTEXAMPLESDIR=${QTDATADIR}/examples
+ QTDEMOSDIR=${QTDATADIR}/demos
+
+ PLATFORM=$(qt_mkspecs_dir)
+
+}
+
+qt_use() {
+ local flag="$1"
+ local feature="$1"
+ local enableval=
+
+ [[ -n $2 ]] && feature=$2
+ [[ -n $3 ]] && enableval="-$3"
+
+ useq $flag && echo "${enableval}-${feature}" || echo "-no-${feature}"
+ return 0
+}
+
+qt_mkspecs_dir() {
+ # Allows us to define which mkspecs dir we want to use.
+ local spec
+
+ case ${CHOST} in
+ *-freebsd*|*-dragonfly*)
+ spec="freebsd" ;;
+ *-openbsd*)
+ spec="openbsd" ;;
+ *-netbsd*)
+ spec="netbsd" ;;
+ *-darwin*)
+ spec="darwin" ;;
+ *-linux-*|*-linux)
+ spec="linux" ;;
+ *)
+ die "Unknown CHOST, no platform choosed."
+ esac
+
+ CXX=$(tc-getCXX)
+ if [[ ${CXX/g++/} != ${CXX} ]]; then
+ spec="${spec}-g++"
+ elif [[ ${CXX/icpc/} != ${CXX} ]]; then
+ spec="${spec}-icc"
+ else
+ die "Unknown compiler ${CXX}."
+ fi
+
+ echo "${spec}"
+}
+
+src_unpack() {
+
+ unpack ${A}
+ cd ${S}
+ epatch ${FILESDIR}/qt-4.1.4-sparc.patch
+ epatch ${FILESDIR}/qt-4.2.3-hppa-ldcw-fix.patch
+ epatch ${FILESDIR}/qt-4.3.0-alpha-threading.patch
+
+ epatch${FILESDIR}/0185-fix-format-strings.diff
+
+ cd ${S}/mkspecs/$(qt_mkspecs_dir)
+ # set c/xxflags and ldflags
+
+ # Don't let the user go too overboard with flags. If you really want to, uncomment
+ # out the line below and give 'er a whirl.
+ strip-flags
+ replace-flags -O3 -O2
+
+ sed -i -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
+ -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
+ -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
+ -e "/CONFIG/s:$: nostrip:" \
+ qmake.conf
+
+ # Do not link with -rpath. See bug #75181.
+ sed -i -e "s:QMAKE_RPATH.*=.*:QMAKE_RPATH=:" qmake.conf
+
+ # Replace X11R6/ directories, so /usr/X11R6/lib -> /usr/lib
+ sed -i -e "s:X11R6/::" qmake.conf
+
+ # The trolls moved the definitions of the above stuff for g++, so we need to edit those files
+ # separately as well.
+ cd ${S}/mkspecs/common
+
+ sed -i -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CPPFLAGS} ${CFLAGS} ${ASFLAGS}:" \
+ -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CPPFLAGS} ${CXXFLAGS} ${ASFLAGS}:" \
+ -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
+ g++.conf
+
+ # Do not link with -rpath. See bug #75181.
+ sed -i -e "s:QMAKE_RPATH.*=.*:QMAKE_RPATH=:" g++.conf
+
+ # Replace X11R6/ directories, so /usr/X11R6/lib -> /usr/lib
+ sed -i -e "s:X11R6/::" linux.conf
+
+ cd ${S}/qmake
+
+ sed -i -e "s:CXXFLAGS.*=:CXXFLAGS=${CPPFLAGS} ${CXXFLAGS} ${ASFLAGS} :" \
+ -e "s:LFLAGS.*=:LFLAGS=${LDFLAGS} :" Makefile.unix
+
+ cd ${S}
+
+}
+
+src_compile() {
+ export PATH="${S}/bin:${PATH}"
+ export LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}"
+
+ [ $(get_libdir) != "lib" ] && myconf="${myconf} -L/usr/$(get_libdir)"
+
+ # Disable visibility explicitly if gcc version isn't 4
+ if [[ "$(gcc-major-version)" != "4" ]]; then
+ myconf="${myconf} -no-reduce-exports"
+ fi
+
+ # Add a switch that will attempt to use recent binutils to reduce relocations. Should be harmless for other
+ # cases. From bug #178535
+ myconf="${myconf} -reduce-relocations"
+
+ myconf="${myconf} $(qt_use accessibility) $(qt_use cups) $(qt_use xinerama)"
+ myconf="${myconf} $(qt_use opengl) $(qt_use nis)"
+
+ use nas && myconf="${myconf} -system-nas-sound"
+
+ myconf="${myconf} $(qt_use gif gif qt) $(qt_use png libpng system)"
+ myconf="${myconf} $(qt_use jpeg libjpeg system) $(qt_use tiff libtiff system)"
+ myconf="${myconf} $(qt_use zlib zlib system) $(qt_use mng libmng system)"
+
+ use debug && myconf="${myconf} -debug -no-separate-debug-info" || myconf="${myconf} -release -no-separate-debug-info"
+
+ use mysql && myconf="${myconf} -plugin-sql-mysql -I/usr/include/mysql -L/usr/$(get_libdir)/mysql" || myconf="${myconf} -no-sql-mysql"
+ use postgres && myconf="${myconf} -plugin-sql-psql -I/usr/include/postgresql/pgsql" || myconf="${myconf} -no-sql-psql"
+ use firebird && myconf="${myconf} -plugin-sql-ibase -I/opt/firebird/include" || myconf="${myconf} -no-sql-ibase"
+ use sqlite3 && myconf="${myconf} -plugin-sql-sqlite -system-sqlite" || myconf="${myconf} -no-sql-sqlite"
+ use sqlite && myconf="${myconf} -plugin-sql-sqlite2" || myconf="${myconf} -no-sql-sqlite2"
+ use odbc && myconf="${myconf} -plugin-sql-odbc" || myconf="${myconf} -no-sql-odbc"
+
+ use dbus && myconf="${myconf} -qdbus" || myconf="${myconf} -no-qdbus"
+ use glib && myconf="${myconf} -glib" || myconf="${myconf} -no-glib"
+ use qt3support && myconf="${myconf} -qt3support" || myconf="${myconf} -no-qt3support"
+ use ssl && myconf="${myconf} -openssl" || myconf="${myconf} -no-openssl"
+
+ use pch && myconf="${myconf} -pch" || myconf="${myconf} -no-pch"
+
+ use input_devices_wacom && myconf="${myconf} -tablet" || myconf="${myconf} -no-tablet"
+
+ myconf="${myconf} -xrender -xrandr -xkb -xshape -sm"
+
+ if ! use examples; then
+ myconf="${myconf} -nomake examples"
+ fi
+
+ myconf="-stl -verbose -largefile -confirm-license \
+ -platform ${PLATFORM} -xplatform ${PLATFORM} -no-rpath \
+ -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} -datadir ${QTDATADIR} \
+ -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR} \
+ -sysconfdir ${QTSYSCONFDIR} -translationdir ${QTTRANSDIR} \
+ -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR} ${myconf}"
+
+ echo ./configure ${myconf}
+ ./configure ${myconf} || die
+
+ emake all || die
+}
+
+src_install() {
+ export PATH="${S}/bin:${PATH}"
+ export LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}"
+
+ make INSTALL_ROOT=${D} install_subtargets || die
+ make INSTALL_ROOT=${D} install_qmake || die
+ make INSTALL_ROOT=${D} install_mkspecs || die
+
+ if use doc; then
+ make INSTALL_ROOT=${D} install_htmldocs || die
+ fi
+
+ # Install the translations. This may get use flagged later somehow
+ make INSTALL_ROOT=${D} install_translations || die
+
+ keepdir "${QTSYSCONFDIR}"
+
+ sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${D}/${QTLIBDIR}/*.la
+ sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${D}/${QTLIBDIR}/*.prl
+ sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${D}/${QTLIBDIR}/*.pc
+
+ # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
+ sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${D}/${QTLIBDIR}/*.pc
+
+ # Move .pc files into the pkgconfig directory
+ dodir ${QTPCDIR}
+ mv ${D}/${QTLIBDIR}/pkgconfig/*.pc ${D}/${QTPCDIR}
+
+ # Install .desktop files, from bug #174033
+ insinto /usr/share/applications
+ doins ${FILESDIR}/qt4/*.desktop
+
+ # List all the multilib libdirs
+ local libdirs
+ for libdir in $(get_all_libdirs); do
+ libdirs="${libdirs}:/usr/${libdir}/qt4"
+ done
+
+ cat > "${T}/44qt4" << EOF
+LDPATH=${libdirs:1}
+QMAKESPEC=$(qt_mkspecs_dir)
+EOF
+ doenvd "${T}/44qt4"
+}