summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Elio Pettenò <flameeyes@gentoo.org>2006-10-20 18:17:18 +0000
committerDiego Elio Pettenò <flameeyes@gentoo.org>2006-10-20 18:17:18 +0000
commit69d909795fd1e508682e1a8acfe54782cb8b3567 (patch)
tree05feefa5a5503a2fd39fea5c626dd7486c449046
parentstable and unstable version bumps (bug #151860) (diff)
downloadgentoo-2-69d909795fd1e508682e1a8acfe54782cb8b3567.tar.gz
gentoo-2-69d909795fd1e508682e1a8acfe54782cb8b3567.tar.bz2
gentoo-2-69d909795fd1e508682e1a8acfe54782cb8b3567.zip
Add new version of the patches for CVE-2006-4811 directly from Trolltech, hopefully fixing the problems for good.
(Portage version: 2.1.2_pre3-r5)
-rw-r--r--x11-libs/qt/ChangeLog14
-rw-r--r--x11-libs/qt/files/digest-qt-3.3.6-r46
-rw-r--r--x11-libs/qt/files/digest-qt-4.1.4-r23
-rw-r--r--x11-libs/qt/files/digest-qt-4.2.0-r23
-rw-r--r--x11-libs/qt/files/qt-3.3.6-CVE-2006-4811-bis.patch140
-rw-r--r--x11-libs/qt/files/qt-4.1.4-CVE-2006-4811-bis.patch179
-rw-r--r--x11-libs/qt/files/qt-4.2.0-CVE-2006-4811-bis.patch179
-rw-r--r--x11-libs/qt/qt-3.3.6-r4.ebuild381
-rw-r--r--x11-libs/qt/qt-4.1.4-r2.ebuild224
-rw-r--r--x11-libs/qt/qt-4.2.0-r2.ebuild210
10 files changed, 1338 insertions, 1 deletions
diff --git a/x11-libs/qt/ChangeLog b/x11-libs/qt/ChangeLog
index 4e9c030db6c7..873c7df0c1c7 100644
--- a/x11-libs/qt/ChangeLog
+++ b/x11-libs/qt/ChangeLog
@@ -1,6 +1,18 @@
# ChangeLog for x11-libs/qt
# Copyright 1999-2006 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/ChangeLog,v 1.365 2006/10/20 11:47:44 kloeri Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/ChangeLog,v 1.366 2006/10/20 18:17:18 flameeyes Exp $
+
+*qt-4.2.0-r2 (20 Oct 2006)
+*qt-4.1.4-r2 (20 Oct 2006)
+*qt-3.3.6-r4 (20 Oct 2006)
+
+ 20 Oct 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/qt-3.3.6-CVE-2006-4811-bis.patch,
+ +files/qt-4.1.4-CVE-2006-4811-bis.patch,
+ +files/qt-4.2.0-CVE-2006-4811-bis.patch, +qt-3.3.6-r4.ebuild,
+ +qt-4.1.4-r2.ebuild, +qt-4.2.0-r2.ebuild:
+ Add new version of the patches for CVE-2006-4811 directly from Trolltech,
+ hopefully fixing the problems for good.
20 Oct 2006; Bryan Østergaard <kloeri@gentoo.org> qt-3.3.6-r3.ebuild:
Stable on Alpha, bug 151838.
diff --git a/x11-libs/qt/files/digest-qt-3.3.6-r4 b/x11-libs/qt/files/digest-qt-3.3.6-r4
new file mode 100644
index 000000000000..935dada8500c
--- /dev/null
+++ b/x11-libs/qt/files/digest-qt-3.3.6-r4
@@ -0,0 +1,6 @@
+MD5 dc1384c03ac08af21f6fefab32d982cf qt-x11-free-3.3.6.tar.bz2 14565843
+RMD160 84c0b6bc6dc727d40a5a8df29a81aafc743c0161 qt-x11-free-3.3.6.tar.bz2 14565843
+SHA256 04f12083f6a6f7a8fd4d34a6c1efd37db76a67580c424f4fb7b7c43c0565e6ae qt-x11-free-3.3.6.tar.bz2 14565843
+MD5 08e49b5372bd44f973d8f2263458a5b6 qt-x11-immodule-unified-qt3.3.6-20060317-gentoo.diff.bz2 110200
+RMD160 51e480e651261796622a0d824ad549fd5e90089a qt-x11-immodule-unified-qt3.3.6-20060317-gentoo.diff.bz2 110200
+SHA256 e67d8720903ded64c1e2eadc91f2fd8cfb5d08e0d71addf17499f21a0891df18 qt-x11-immodule-unified-qt3.3.6-20060317-gentoo.diff.bz2 110200
diff --git a/x11-libs/qt/files/digest-qt-4.1.4-r2 b/x11-libs/qt/files/digest-qt-4.1.4-r2
new file mode 100644
index 000000000000..bf0aa52f457e
--- /dev/null
+++ b/x11-libs/qt/files/digest-qt-4.1.4-r2
@@ -0,0 +1,3 @@
+MD5 88f8c9c4622108baca2950baac3c02d6 qt-x11-opensource-src-4.1.4.tar.gz 32174985
+RMD160 a7e8558f275751b1a6217827784c3b81f84d6d5f qt-x11-opensource-src-4.1.4.tar.gz 32174985
+SHA256 1687e40065023469fa308d47db6158a529ee42e740e38cb5c89e6f20ee68e59c qt-x11-opensource-src-4.1.4.tar.gz 32174985
diff --git a/x11-libs/qt/files/digest-qt-4.2.0-r2 b/x11-libs/qt/files/digest-qt-4.2.0-r2
new file mode 100644
index 000000000000..f1fdcfed86c0
--- /dev/null
+++ b/x11-libs/qt/files/digest-qt-4.2.0-r2
@@ -0,0 +1,3 @@
+MD5 2c062a125d5ca66397e3430ba537fbec qt-x11-opensource-src-4.2.0.tar.gz 37084418
+RMD160 d9825a32fcfd495bf61316b4ee346a78ef5cc4f8 qt-x11-opensource-src-4.2.0.tar.gz 37084418
+SHA256 80abfeca291291ee4647c13fcd113741b98accb0205361cb2b18a914f4c0caba qt-x11-opensource-src-4.2.0.tar.gz 37084418
diff --git a/x11-libs/qt/files/qt-3.3.6-CVE-2006-4811-bis.patch b/x11-libs/qt/files/qt-3.3.6-CVE-2006-4811-bis.patch
new file mode 100644
index 000000000000..9a42a34bb294
--- /dev/null
+++ b/x11-libs/qt/files/qt-3.3.6-CVE-2006-4811-bis.patch
@@ -0,0 +1,140 @@
+--- //depot/qt/3/src/kernel/qfontengine_x11.cpp Thu Oct 19 14:41:41 CEST 2006
++++ //depot/qt/3/src/kernel/qfontengine_x11.cpp Thu Oct 19 14:41:41 CEST 2006
+
+@@ -171,7 +171,8 @@
+
+ QRect br = xmat.mapRect(QRect(x, y - si->ascent, w, h));
+ QRect br2 = br & pdevRect;
+- if (br2.width() <= 0 || br2.height() <= 0)
++ if (br2.width() <= 0 || br2.height() <= 0
++ || br2.width() >= 32768 || br2.height() >= 32768)
+ return;
+ QWMatrix mat = QPixmap::trueMatrix( xmat, w, h );
+ QBitmap wx_bm = ::transform(dpy, bm, br2.x() - br.x(), br2.y() - br.y(), br2.width(), br2.height(), mat);
+
+--- //depot/qt/3/src/kernel/qimage.cpp Thu Oct 19 14:41:41 CEST 2006
++++ //depot/qt/3/src/kernel/qimage.cpp Thu Oct 19 14:41:41 CEST 2006
+
+@@ -475,7 +475,12 @@
+ Endian bitOrder )
+ {
+ init();
+- if ( w <= 0 || h <= 0 || depth <= 0 || numColors < 0 )
++ int bpl = ((w*depth+31)/32)*4; // bytes per scanline
++ if ( w <= 0 || h <= 0 || depth <= 0 || numColors < 0
++ || INT_MAX / sizeof(uchar *) < uint(h)
++ || INT_MAX / uint(depth) < uint(w)
++ || bpl <= 0
++ || INT_MAX / uint(bpl) < uint(h) )
+ return; // invalid parameter(s)
+ data->w = w;
+ data->h = h;
+@@ -483,7 +488,6 @@
+ data->ncols = depth != 32 ? numColors : 0;
+ if ( !yourdata )
+ return; // Image header info can be saved without needing to allocate memory.
+- int bpl = ((w*depth+31)/32)*4; // bytes per scanline
+ data->nbytes = bpl*h;
+ if ( colortable || !data->ncols ) {
+ data->ctbl = colortable;
+@@ -525,7 +529,10 @@
+ Endian bitOrder )
+ {
+ init();
+- if ( !yourdata || w <= 0 || h <= 0 || depth <= 0 || numColors < 0 )
++ if ( !yourdata || w <= 0 || h <= 0 || depth <= 0 || numColors < 0
++ || INT_MAX / sizeof(uchar *) < uint(h)
++ || INT_MAX / uint(bpl) < uint(h)
++ )
+ return; // invalid parameter(s)
+ data->w = w;
+ data->h = h;
+@@ -1264,7 +1271,7 @@
+ if ( data->ncols != numColors ) // could not alloc color table
+ return FALSE;
+
+- if ( INT_MAX / depth < width) { // sanity check for potential overflow
++ if ( INT_MAX / uint(depth) < uint(width) ) { // sanity check for potential overflow
+ setNumColors( 0 );
+ return FALSE;
+ }
+@@ -1277,7 +1284,9 @@
+ // #### WWA: shouldn't this be (width*depth+7)/8:
+ const int pad = bpl - (width*depth)/8; // pad with zeros
+ #endif
+- if (INT_MAX / bpl < height) { // sanity check for potential overflow
++ if ( INT_MAX / uint(bpl) < uint(height)
++ || bpl < 0
++ || INT_MAX / sizeof(uchar *) < uint(height) ) { // sanity check for potential overflow
+ setNumColors( 0 );
+ return FALSE;
+ }
+
+--- //depot/qt/3/src/kernel/qpixmap_x11.cpp Thu Oct 19 14:41:41 CEST 2006
++++ //depot/qt/3/src/kernel/qpixmap_x11.cpp Thu Oct 19 14:41:41 CEST 2006
+
+@@ -953,6 +953,9 @@
+ bool force_mono = (dd == 1 || isQBitmap() ||
+ (conversion_flags & ColorMode_Mask)==MonoOnly );
+
++ if ( w >= 32768 || h >= 32768 )
++ return FALSE;
++
+ // get rid of the mask
+ delete data->mask;
+ data->mask = 0;
+@@ -1678,11 +1681,11 @@
+
+ QPixmap QPixmap::xForm( const QWMatrix &matrix ) const
+ {
+- int w = 0;
+- int h = 0; // size of target pixmap
+- int ws, hs; // size of source pixmap
++ uint w = 0;
++ uint h = 0; // size of target pixmap
++ uint ws, hs; // size of source pixmap
+ uchar *dptr; // data in target pixmap
+- int dbpl, dbytes; // bytes per line/bytes total
++ uint dbpl, dbytes; // bytes per line/bytes total
+ uchar *sptr; // data in original pixmap
+ int sbpl; // bytes per line in original
+ int bpp; // bits per pixel
+@@ -1697,19 +1700,24 @@
+
+ QWMatrix mat( matrix.m11(), matrix.m12(), matrix.m21(), matrix.m22(), 0., 0. );
+
++ double scaledWidth;
++ double scaledHeight;
++
+ if ( matrix.m12() == 0.0F && matrix.m21() == 0.0F ) {
+ if ( matrix.m11() == 1.0F && matrix.m22() == 1.0F )
+ return *this; // identity matrix
+- h = qRound( matrix.m22()*hs );
+- w = qRound( matrix.m11()*ws );
+- h = QABS( h );
+- w = QABS( w );
++ scaledHeight = matrix.m22()*hs;
++ scaledWidth = matrix.m11()*ws;
++ h = QABS( qRound( scaledHeight ) );
++ w = QABS( qRound( scaledWidth ) );
+ } else { // rotation or shearing
+ QPointArray a( QRect(0,0,ws+1,hs+1) );
+ a = mat.map( a );
+ QRect r = a.boundingRect().normalize();
+ w = r.width()-1;
+ h = r.height()-1;
++ scaledWidth = w;
++ scaledHeight = h;
+ }
+
+ mat = trueMatrix( mat, ws, hs ); // true matrix
+@@ -1718,7 +1726,8 @@
+ bool invertible;
+ mat = mat.invert( &invertible ); // invert matrix
+
+- if ( h == 0 || w == 0 || !invertible ) { // error, return null pixmap
++ if ( h == 0 || w == 0 || !invertible
++ || QABS(scaledWidth) >= 32768 || QABS(scaledHeight) >= 32768 ) { // error, return null pixmap
+ QPixmap pm;
+ pm.data->bitmap = data->bitmap;
+ return pm;
diff --git a/x11-libs/qt/files/qt-4.1.4-CVE-2006-4811-bis.patch b/x11-libs/qt/files/qt-4.1.4-CVE-2006-4811-bis.patch
new file mode 100644
index 000000000000..e57cbb2f8e36
--- /dev/null
+++ b/x11-libs/qt/files/qt-4.1.4-CVE-2006-4811-bis.patch
@@ -0,0 +1,179 @@
+--- qt/4.1.5/src/gui/image/qimage.cpp Fri Oct 20 10:22:49 CEST 2006
++++ qt/4.1.5/src/gui/image/qimage.cpp Fri Oct 20 10:22:49 CEST 2006
+@@ -180,12 +180,12 @@
+
+ QImageData * QImageData::create(const QSize &size, QImage::Format format, int numColors)
+ {
+- int width = size.width();
+- int height = size.height();
+- if (width <= 0 || height <= 0 || numColors < 0 || format == QImage::Format_Invalid)
++ if (!size.isValid() || numColors < 0 || format == QImage::Format_Invalid)
+ return 0; // invalid parameter(s)
++ uint width = size.width();
++ uint height = size.height();
+
+- int depth = 0;
++ uint depth = 0;
+ switch(format) {
+ case QImage::NImageFormats:
+ case QImage::Format_Invalid:
+@@ -214,6 +214,15 @@
+ #endif
+ }
+
++ const int bytes_per_line = ((width * depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 8)
++
++ // sanity check for potential overflows
++ if (INT_MAX/depth < width
++ || bytes_per_line <= 0
++ || INT_MAX/uint(bytes_per_line) < height
++ || INT_MAX/sizeof(uchar *) < uint(height))
++ return 0;
++
+ QImageData *d = new QImageData;
+ d->colortable.resize(numColors);
+ if (depth == 1) {
+@@ -230,7 +239,7 @@
+ d->format = format;
+ d->has_alpha_clut = false;
+
+- d->bytes_per_line = ((width * d->depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 8)
++ d->bytes_per_line = bytes_per_line;
+
+ d->nbytes = d->bytes_per_line*height;
+ d->data = (uchar *)malloc(d->nbytes);
+@@ -753,7 +762,16 @@
+ : QPaintDevice()
+ {
+ d = 0;
+- if (format == Format_Invalid || width <= 0 || height <= 0 || !data)
++
++ if (format == Format_Invalid )
++ return;
++ const int depth = depthForFormat(format);
++ const int bytes_per_line = ((width * depth + 31)/32) * 4;
++ if (width <= 0 || height <= 0 || !data
++ || INT_MAX/sizeof(uchar *) < uint(height)
++ || INT_MAX/uint(depth) < uint(width)
++ || bytes_per_line <= 0
++ || INT_MAX/uint(bytes_per_line) < uint(height))
+ return; // invalid parameter(s)
+ d = new QImageData;
+ d->ref.ref();
+@@ -762,10 +780,10 @@
+ d->data = data;
+ d->width = width;
+ d->height = height;
+- d->depth = depthForFormat(format);
++ d->depth = depth;
+ d->format = format;
+
+- d->bytes_per_line = ((width * d->depth + 31)/32) * 4;
++ d->bytes_per_line = bytes_per_line;
+ d->nbytes = d->bytes_per_line * height;
+ }
+
+@@ -987,7 +1005,13 @@
+ Format f = formatFor(depth, bitOrder);
+ if (f == Format_Invalid)
+ return;
+- if (w <= 0 || h <= 0 || numColors < 0 || !data)
++
++ const int bytes_per_line = ((w*depth+31)/32)*4; // bytes per scanline
++ if (w <= 0 || h <= 0 || numColors < 0 || !data
++ || INT_MAX/sizeof(uchar *) < uint(h)
++ || INT_MAX/uint(depth) < uint(w)
++ || bytes_per_line <= 0
++ || INT_MAX/uint(bytes_per_line) < uint(h))
+ return; // invalid parameter(s)
+ d = new QImageData;
+ d->ref.ref();
+@@ -1001,7 +1025,7 @@
+ if (depth == 32)
+ numColors = 0;
+
+- d->bytes_per_line = ((w*depth+31)/32)*4; // bytes per scanline
++ d->bytes_per_line = bytes_per_line;
+ d->nbytes = d->bytes_per_line * h;
+ if (colortable) {
+ d->colortable.resize(numColors);
+@@ -1035,7 +1059,11 @@
+ Format f = formatFor(depth, bitOrder);
+ if (f == Format_Invalid)
+ return;
+- if (!data || w <= 0 || h <= 0 || depth <= 0 || numColors < 0)
++ if (!data || w <= 0 || h <= 0 || depth <= 0 || numColors < 0
++ || INT_MAX/sizeof(uchar *) < uint(h)
++ || INT_MAX/uint(depth) < uint(w)
++ || bpl <= 0
++ || INT_MAX/uint(bpl) < uint(h))
+ return; // invalid parameter(s)
+
+ d = new QImageData;
+--- qt/4.1.5/src/gui/image/qpixmap_x11.cpp Fri Oct 20 10:22:59 CEST 2006
++++ qt/4.1.5/src/gui/image/qpixmap_x11.cpp Fri Oct 20 10:22:59 CEST 2006
+@@ -978,6 +978,9 @@
+ const int dd = X11->use_xrender && img.hasAlphaChannel() ? 32 : pixmap.data->xinfo.depth();
+ bool force_mono = (dd == 1 || (flags & Qt::ColorMode_Mask) == Qt::MonoOnly);
+
++ if (uint(w) >= 32768 || uint(h) >= 32768)
++ return QPixmap();
++
+ // must be monochrome
+ if (force_mono) {
+ if (d != 1) {
+@@ -1787,11 +1790,11 @@
+
+ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) const
+ {
+- int w = 0;
+- int h = 0; // size of target pixmap
+- int ws, hs; // size of source pixmap
++ uint w = 0;
++ uint h = 0; // size of target pixmap
++ uint ws, hs; // size of source pixmap
+ uchar *dptr; // data in target pixmap
+- int dbpl, dbytes; // bytes per line/bytes total
++ uint dbpl, dbytes; // bytes per line/bytes total
+ uchar *sptr; // data in original pixmap
+ int sbpl; // bytes per line in original
+ int bpp; // bits per pixel
+@@ -1806,20 +1809,24 @@
+
+ QMatrix mat(matrix.m11(), matrix.m12(), matrix.m21(), matrix.m22(), 0., 0.);
+ bool complex_xform = false;
++ qreal scaledWidth;
++ qreal scaledHeight;
+
+ if (mat.m12() == 0.0F && mat.m21() == 0.0F) {
+ if (mat.m11() == 1.0F && mat.m22() == 1.0F) // identity matrix
+ return *this;
+- h = int(qAbs(mat.m22()) * hs + 0.9999);
+- w = int(qAbs(mat.m11()) * ws + 0.9999);
+- h = qAbs(h);
+- w = qAbs(w);
++ scaledHeight = qAbs(mat.m22()) * hs + 0.9999;
++ scaledWidth = qAbs(mat.m11()) * ws + 0.9999;
++ h = qAbs(int(scaledHeight));
++ w = qAbs(int(scaledWidth));
+ } else { // rotation or shearing
+ QPolygonF a(QRectF(0, 0, ws+1, hs+1));
+ a = mat.map(a);
+ QRectF r = a.boundingRect().normalized();
+ w = int(r.width() + 0.9999);
+ h = int(r.height() + 0.9999);
++ scaledWidth = w;
++ scaledHeight = h;
+ complex_xform = true;
+ }
+ mat = trueMatrix(mat, ws, hs); // true matrix
+@@ -1828,7 +1835,8 @@
+ bool invertible;
+ mat = mat.inverted(&invertible); // invert matrix
+
+- if (h == 0 || w == 0 || !invertible)
++ if (h == 0 || w == 0 || !invertible
++ || qAbs(scaledWidth) >= 32768 || qAbs(scaledHeight) >= 32768 ) // error, return null pixmap
+ return QPixmap();
+
+ if (mode == Qt::SmoothTransformation) {
diff --git a/x11-libs/qt/files/qt-4.2.0-CVE-2006-4811-bis.patch b/x11-libs/qt/files/qt-4.2.0-CVE-2006-4811-bis.patch
new file mode 100644
index 000000000000..1150dc9ac587
--- /dev/null
+++ b/x11-libs/qt/files/qt-4.2.0-CVE-2006-4811-bis.patch
@@ -0,0 +1,179 @@
+--- //depot/qt/4.2/src/gui/image/qimage.cpp Fri Oct 20 10:25:38 CEST 2006
++++ //depot/qt/4.2/src/gui/image/qimage.cpp Fri Oct 20 10:25:38 CEST 2006
+@@ -208,12 +208,12 @@
+
+ QImageData * QImageData::create(const QSize &size, QImage::Format format, int numColors)
+ {
+- int width = size.width();
+- int height = size.height();
+- if (width <= 0 || height <= 0 || numColors < 0 || format == QImage::Format_Invalid)
++ if (!size.isValid() || numColors < 0 || format == QImage::Format_Invalid)
+ return 0; // invalid parameter(s)
++ uint width = size.width();
++ uint height = size.height();
+
+- int depth = 0;
++ uint depth = 0;
+ switch(format) {
+ case QImage::NImageFormats:
+ case QImage::Format_Invalid:
+@@ -240,6 +240,15 @@
+ break;
+ }
+
++ const int bytes_per_line = ((width * depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 8)
++
++ // sanity check for potential overflows
++ if (INT_MAX/depth < width
++ || bytes_per_line <= 0
++ || INT_MAX/uint(bytes_per_line) < height
++ || INT_MAX/sizeof(uchar *) < uint(height))
++ return 0;
++
+ QImageData *d = new QImageData;
+ d->colortable.resize(numColors);
+ if (depth == 1) {
+@@ -256,7 +265,7 @@
+ d->format = format;
+ d->has_alpha_clut = false;
+
+- d->bytes_per_line = ((width * d->depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 8)
++ d->bytes_per_line = bytes_per_line;
+
+ d->nbytes = d->bytes_per_line*height;
+ d->data = (uchar *)malloc(d->nbytes);
+@@ -783,7 +792,16 @@
+ : QPaintDevice()
+ {
+ d = 0;
+- if (format == Format_Invalid || width <= 0 || height <= 0 || !data)
++
++ if (format == Format_Invalid )
++ return;
++ const int depth = depthForFormat(format);
++ const int bytes_per_line = ((width * depth + 31)/32) * 4;
++ if (width <= 0 || height <= 0 || !data
++ || INT_MAX/sizeof(uchar *) < uint(height)
++ || INT_MAX/uint(depth) < uint(width)
++ || bytes_per_line <= 0
++ || INT_MAX/uint(bytes_per_line) < uint(height))
+ return; // invalid parameter(s)
+ d = new QImageData;
+ d->ref.ref();
+@@ -792,10 +810,10 @@
+ d->data = data;
+ d->width = width;
+ d->height = height;
+- d->depth = depthForFormat(format);
++ d->depth = depth;
+ d->format = format;
+
+- d->bytes_per_line = ((width * d->depth + 31)/32) * 4;
++ d->bytes_per_line = bytes_per_line;
+ d->nbytes = d->bytes_per_line * height;
+ }
+
+@@ -1055,7 +1073,13 @@
+ Format f = formatFor(depth, bitOrder);
+ if (f == Format_Invalid)
+ return;
+- if (w <= 0 || h <= 0 || numColors < 0 || !data)
++
++ const int bytes_per_line = ((w*depth+31)/32)*4; // bytes per scanline
++ if (w <= 0 || h <= 0 || numColors < 0 || !data
++ || INT_MAX/sizeof(uchar *) < uint(h)
++ || INT_MAX/uint(depth) < uint(w)
++ || bytes_per_line <= 0
++ || INT_MAX/uint(bytes_per_line) < uint(h))
+ return; // invalid parameter(s)
+ d = new QImageData;
+ d->ref.ref();
+@@ -1069,7 +1093,7 @@
+ if (depth == 32)
+ numColors = 0;
+
+- d->bytes_per_line = ((w*depth+31)/32)*4; // bytes per scanline
++ d->bytes_per_line = bytes_per_line;
+ d->nbytes = d->bytes_per_line * h;
+ if (colortable) {
+ d->colortable.resize(numColors);
+@@ -1104,7 +1128,11 @@
+ Format f = formatFor(depth, bitOrder);
+ if (f == Format_Invalid)
+ return;
+- if (!data || w <= 0 || h <= 0 || depth <= 0 || numColors < 0)
++ if (!data || w <= 0 || h <= 0 || depth <= 0 || numColors < 0
++ || INT_MAX/sizeof(uchar *) < uint(h)
++ || INT_MAX/uint(depth) < uint(w)
++ || bpl <= 0
++ || INT_MAX/uint(bpl) < uint(h))
+ return; // invalid parameter(s)
+
+ d = new QImageData;
+--- //depot/qt/4.2/src/gui/image/qpixmap_x11.cpp Fri Oct 20 10:26:21 CEST 2006
++++ //depot/qt/4.2/src/gui/image/qpixmap_x11.cpp Fri Oct 20 10:26:21 CEST 2006
+@@ -993,6 +993,9 @@
+ const int dd = X11->use_xrender && img.hasAlphaChannel() ? 32 : pixmap.data->xinfo.depth();
+ bool force_mono = (dd == 1 || (flags & Qt::ColorMode_Mask) == Qt::MonoOnly);
+
++ if (uint(w) >= 32768 || uint(h) >= 32768)
++ return QPixmap();
++
+ // must be monochrome
+ if (force_mono) {
+ if (d != 1) {
+@@ -1802,11 +1805,11 @@
+
+ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) const
+ {
+- int w = 0;
+- int h = 0; // size of target pixmap
+- int ws, hs; // size of source pixmap
++ uint w = 0;
++ uint h = 0; // size of target pixmap
++ uint ws, hs; // size of source pixmap
+ uchar *dptr; // data in target pixmap
+- int dbpl, dbytes; // bytes per line/bytes total
++ uint dbpl, dbytes; // bytes per line/bytes total
+ uchar *sptr; // data in original pixmap
+ int sbpl; // bytes per line in original
+ int bpp; // bits per pixel
+@@ -1821,20 +1824,24 @@
+
+ QMatrix mat(matrix.m11(), matrix.m12(), matrix.m21(), matrix.m22(), 0., 0.);
+ bool complex_xform = false;
++ qreal scaledWidth;
++ qreal scaledHeight;
+
+ if (mat.m12() == 0.0F && mat.m21() == 0.0F) {
+ if (mat.m11() == 1.0F && mat.m22() == 1.0F) // identity matrix
+ return *this;
+- h = int(qAbs(mat.m22()) * hs + 0.9999);
+- w = int(qAbs(mat.m11()) * ws + 0.9999);
+- h = qAbs(h);
+- w = qAbs(w);
++ scaledHeight = qAbs(mat.m22()) * hs + 0.9999;
++ scaledWidth = qAbs(mat.m11()) * ws + 0.9999;
++ h = qAbs(int(scaledHeight));
++ w = qAbs(int(scaledWidth));
+ } else { // rotation or shearing
+ QPolygonF a(QRectF(0, 0, ws+1, hs+1));
+ a = mat.map(a);
+ QRectF r = a.boundingRect().normalized();
+ w = int(r.width() + 0.9999);
+ h = int(r.height() + 0.9999);
++ scaledWidth = w;
++ scaledHeight = h;
+ complex_xform = true;
+ }
+ mat = trueMatrix(mat, ws, hs); // true matrix
+@@ -1843,7 +1850,8 @@
+ bool invertible;
+ mat = mat.inverted(&invertible); // invert matrix
+
+- if (h == 0 || w == 0 || !invertible)
++ if (h == 0 || w == 0 || !invertible
++ || qAbs(scaledWidth) >= 32768 || qAbs(scaledHeight) >= 32768 ) // error, return null pixmap
+ return QPixmap();
+
+ if (mode == Qt::SmoothTransformation) {
diff --git a/x11-libs/qt/qt-3.3.6-r4.ebuild b/x11-libs/qt/qt-3.3.6-r4.ebuild
new file mode 100644
index 000000000000..3535f6750b34
--- /dev/null
+++ b/x11-libs/qt/qt-3.3.6-r4.ebuild
@@ -0,0 +1,381 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/qt-3.3.6-r4.ebuild,v 1.1 2006/10/20 18:17:18 flameeyes Exp $
+
+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.6-20060317-gentoo"
+
+SRC_URI="ftp://ftp.trolltech.com/qt/source/qt-x11-${SRCTYPE}-${PV}.tar.bz2
+ 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 ~ppc-macos ~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/x11-7
+ )
+ 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? ( dev-db/mysql )
+ firebird? ( dev-db/firebird )
+ opengl? ( virtual/opengl virtual/glu )
+ postgres? ( dev-db/postgresql )
+ 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/icc/} != ${CXX} ]]; then
+ PLATCXX="icpc"
+ 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
+
+ # 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
+
+ # ulibc patch (bug #100246)
+ epatch ${FILESDIR}/qt-ulibc.patch
+
+ # bug #151838
+ epatch "${FILESDIR}/${P}-CVE-2006-4811-bis.patch"
+
+ # 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" || 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
+
+ insinto /etc/env.d
+ doins ${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
+ einfo "After a rebuild of Qt, it can happen that Qt plugins (such as Qt/KDE styles,"
+ einfo "or widgets for the Qt designer) are no longer recognized. If this situation"
+ einfo "occurs you should recompile the packages providing these plugins,"
+ einfo "and you should also make sure that Qt and its plugins were compiled with the"
+ einfo "same version of gcc. Packages that may need to be rebuilt are, for instance,"
+ einfo "kde-base/kdelibs, kde-base/kdeartwork and kde-base/kdeartwork-styles."
+ einfo "See http://doc.trolltech.com/3.3/plugins-howto.html for more infos."
+ echo
+}
diff --git a/x11-libs/qt/qt-4.1.4-r2.ebuild b/x11-libs/qt/qt-4.1.4-r2.ebuild
new file mode 100644
index 000000000000..00a4b3dc9ce3
--- /dev/null
+++ b/x11-libs/qt/qt-4.1.4-r2.ebuild
@@ -0,0 +1,224 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/qt-4.1.4-r2.ebuild,v 1.1 2006/10/20 18:17:18 flameeyes 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="~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+IUSE="accessibility cups debug doc examples firebird gif jpeg mng mysql nas nis odbc opengl png postgres sqlite xinerama zlib"
+
+DEPEND="x11-libs/libXrandr
+ x11-libs/libXcursor
+ x11-libs/libXi
+ x11-libs/libXfont
+ x11-libs/libSM
+ x11-proto/xextproto
+ x11-proto/inputproto
+ 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 )
+ nas? ( >=media-libs/nas-1.5 )
+ odbc? ( dev-db/unixODBC )
+ mysql? ( dev-db/mysql )
+ firebird? ( dev-db/firebird )
+ opengl? ( virtual/opengl virtual/glu )
+ postgres? ( dev-db/libpq )
+ cups? ( net-print/cups )
+ zlib? ( sys-libs/zlib )"
+
+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() {
+ useq ${1} && echo "-${1}" || echo "-no-${1}"
+ 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/icc/} != ${CXX} ]]; then
+ spec="${spec}-icc"
+ else
+ die "Unknown compiler ${CXX}."
+ fi
+
+ if [[ $(get_libdir) == "lib64" ]]; then
+ spec="${spec}-64"
+ fi
+
+ echo "${spec}"
+}
+
+src_unpack() {
+
+ unpack ${A}
+ cd ${S}
+ epatch ${FILESDIR}/qt4-parisc-linux.diff
+ epatch ${FILESDIR}/qt-4.1.4-sparc.patch
+
+ sed -i -e 's:read acceptance:acceptance=yes:' configure
+
+ cd 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}:" \
+ 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
+
+ cd ${S}
+
+ if [[ "$(gcc-major-version)" == "4" ]]; then
+ einfo "Visibility support: auto"
+ else
+ einfo "Visibility support: disabled"
+ sed -i -e "s:CFG_REDUCE_EXPORTS=auto:CFG_REDUCE_EXPORTS=no:" configure
+ fi
+
+ epatch "${FILESDIR}/${P}-CVE-2006-4811-bis.patch"
+}
+
+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)"
+
+ 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"
+ use gif && myconf="${myconf} -qt-gif" || myconf="${myconf} -no-gif"
+ use png && myconf="${myconf} -system-libpng" || myconf="${myconf} -qt-libpng"
+ use jpeg && myconf="${myconf} -system-libjpeg" || myconf="${myconf} -qt-libjpeg"
+ use debug && myconf="${myconf} -debug-and-release" || myconf="${myconf} -release"
+ use zlib && myconf="${myconf} -system-zlib" || myconf="${myconf} -qt-zlib"
+
+ 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" || myconf="${myconf} -no-sql-ibase"
+ use sqlite && myconf="${myconf} -plugin-sql-sqlite" || myconf="${myconf} -no-sql-sqlite"
+ use odbc && myconf="${myconf} -plugin-sql-odbc" || myconf="${myconf} -no-sql-odbc"
+
+ myconf="${myconf} -tablet -xrender -xrandr -xkb -xshape -sm"
+
+ ./configure -stl -verbose -largefile \
+ -platform ${PLATFORM} -xplatform ${PLATFORM} \
+ -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} -datadir ${QTDATADIR} \
+ -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR} \
+ -sysconfdir ${QTSYSCONFDIR} -translationdir ${QTTRANSDIR} \
+ -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR} ${myconf} || die
+
+ emake sub-tools-all-ordered || die
+ if use examples; then
+ emake sub-examples-all-ordered || die
+ fi
+}
+
+src_install() {
+ export PATH="${S}/bin:${PATH}"
+ export LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}"
+
+ make INSTALL_ROOT=${D} sub-tools-install_subtargets-ordered || die
+
+ if use examples; then
+ make INSTALL_ROOT=${D} sub-examples-install_subtargets || die
+ make INSTALL_ROOT=${D} sub-demos-install_subtargets || die
+ fi
+
+ 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
+
+ # The private header files of QTestLib aren't installed, but are needed by the test library.
+ # This is supposedly fixed in Qt 4.1.1, so this can probably be removed when it is released
+ dodir ${QTHEADERDIR}/QtTest/private
+ cp -pPR ${S}/tools/qtestlib/src/*_p.h ${D}/${QTHEADERDIR}/QtTest/private
+
+ 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
+
+ # Move .pc files into the pkgconfig directory
+ dodir ${QTPCDIR}
+ mv ${D}/${QTLIBDIR}/*.pc ${D}/${QTPCDIR}
+
+ # 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"
+}
diff --git a/x11-libs/qt/qt-4.2.0-r2.ebuild b/x11-libs/qt/qt-4.2.0-r2.ebuild
new file mode 100644
index 000000000000..a25c86d6847d
--- /dev/null
+++ b/x11-libs/qt/qt-4.2.0-r2.ebuild
@@ -0,0 +1,210 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/qt/qt-4.2.0-r2.ebuild,v 1.1 2006/10/20 18:17:18 flameeyes 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="~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+KEYWORDS="-* ~ppc64 ~sparc ~x86"
+IUSE="accessibility cups debug dbus doc examples firebird gif glib jpeg mng mysql nas nis odbc opengl pch png postgres sqlite xinerama zlib"
+
+# need glib and dbus
+
+DEPEND="x11-libs/libXrandr
+ x11-libs/libXcursor
+ x11-libs/libXi
+ x11-libs/libXfont
+ x11-libs/libSM
+ x11-proto/xextproto
+ x11-proto/inputproto
+ xinerama? ( x11-proto/xineramaproto x11-libs/libXinerama )
+ virtual/xft
+ >=media-libs/freetype-2
+ dbus? ( >=sys-apps/dbus-0.62 )
+ png? ( media-libs/libpng )
+ jpeg? ( media-libs/jpeg )
+ mng? ( >=media-libs/libmng-1.0.9 )
+ nas? ( >=media-libs/nas-1.5 )
+ odbc? ( dev-db/unixODBC )
+ mysql? ( dev-db/mysql )
+ firebird? ( dev-db/firebird )
+ opengl? ( virtual/opengl virtual/glu )
+ postgres? ( dev-db/libpq )
+ cups? ( net-print/cups )
+ zlib? ( sys-libs/zlib )
+ glib? ( dev-libs/glib )"
+
+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() {
+ useq ${1} && echo "-${1}" || echo "-no-${1}"
+ return 0
+}
+
+qt_mkspecs_dir() {
+ # Allows us to define which mkspecs dir we want to use. Currently we only use
+ # linux-g++ or linux-g++-64, but others could be used for various platforms.
+
+ if [[ $(get_libdir) == "lib" ]]; then
+ echo "linux-g++"
+ else
+ echo "linux-g++-64"
+ fi
+}
+
+src_unpack() {
+
+ unpack ${A}
+ cd ${S}
+# epatch ${FILESDIR}/qt4-parisc-linux.diff
+ epatch ${FILESDIR}/qt-4.1.4-sparc.patch
+
+ sed -i -e 's:read acceptance:acceptance=yes:' configure
+
+ cd 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}:" \
+ 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
+
+ cd ${S}
+
+ if [[ "$(gcc-major-version)" == "4" ]]; then
+ einfo "Visibility support: auto"
+ else
+ einfo "Visibility support: disabled"
+ sed -i -e "s:CFG_REDUCE_EXPORTS=auto:CFG_REDUCE_EXPORTS=no:" configure
+ fi
+
+ epatch "${FILESDIR}/${P}-CVE-2006-4811-bis.patch"
+}
+
+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)"
+
+ 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"
+ use gif && myconf="${myconf} -qt-gif" || myconf="${myconf} -no-gif"
+ use png && myconf="${myconf} -system-libpng" || myconf="${myconf} -qt-libpng"
+ use jpeg && myconf="${myconf} -system-libjpeg" || myconf="${myconf} -qt-libjpeg"
+ use debug && myconf="${myconf} -debug -separate-debug-info" || myconf="${myconf} -release -no-separate-debug-info"
+ use zlib && myconf="${myconf} -system-zlib" || myconf="${myconf} -qt-zlib"
+
+ 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" || myconf="${myconf} -no-sql-ibase"
+ use sqlite && myconf="${myconf} -plugin-sql-sqlite" || myconf="${myconf} -no-sql-sqlite"
+ 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 pch && myconf="${myconf} -pch"
+
+ myconf="${myconf} -tablet -xrender -xrandr -xkb -xshape -sm"
+
+ ./configure -stl -verbose -largefile \
+ -platform ${PLATFORM} -xplatform ${PLATFORM} \
+ -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} -datadir ${QTDATADIR} \
+ -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR} \
+ -sysconfdir ${QTSYSCONFDIR} -translationdir ${QTTRANSDIR} \
+ -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR} ${myconf} || die
+
+ emake sub-tools-all-ordered || die
+ if use examples; then
+ emake sub-examples-all-ordered || die
+ fi
+}
+
+src_install() {
+ export PATH="${S}/bin:${PATH}"
+ export LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}"
+
+ make INSTALL_ROOT=${D} sub-tools-install_subtargets-ordered || die
+
+ if use examples; then
+ make INSTALL_ROOT=${D} sub-examples-install_subtargets || die
+ make INSTALL_ROOT=${D} sub-demos-install_subtargets || die
+ fi
+
+ 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
+
+ # The private header files of QTestLib aren't installed, but are needed by the test library.
+ # This is supposedly fixed in Qt 4.1.1, so this can probably be removed when it is released
+ # dodir ${QTHEADERDIR}/QtTest/private
+ # cp -pPR ${S}/tools/qtestlib/src/*_p.h ${D}/${QTHEADERDIR}/QtTest/private
+
+ 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
+
+ # Move .pc files into the pkgconfig directory
+ dodir ${QTPCDIR}
+ mv ${D}/${QTLIBDIR}/*.pc ${D}/${QTPCDIR}
+
+ # 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"
+}