diff options
author | Diego Elio Pettenò <flameeyes@gentoo.org> | 2006-10-20 18:17:18 +0000 |
---|---|---|
committer | Diego Elio Pettenò <flameeyes@gentoo.org> | 2006-10-20 18:17:18 +0000 |
commit | 69d909795fd1e508682e1a8acfe54782cb8b3567 (patch) | |
tree | 05feefa5a5503a2fd39fea5c626dd7486c449046 | |
parent | stable and unstable version bumps (bug #151860) (diff) | |
download | gentoo-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/ChangeLog | 14 | ||||
-rw-r--r-- | x11-libs/qt/files/digest-qt-3.3.6-r4 | 6 | ||||
-rw-r--r-- | x11-libs/qt/files/digest-qt-4.1.4-r2 | 3 | ||||
-rw-r--r-- | x11-libs/qt/files/digest-qt-4.2.0-r2 | 3 | ||||
-rw-r--r-- | x11-libs/qt/files/qt-3.3.6-CVE-2006-4811-bis.patch | 140 | ||||
-rw-r--r-- | x11-libs/qt/files/qt-4.1.4-CVE-2006-4811-bis.patch | 179 | ||||
-rw-r--r-- | x11-libs/qt/files/qt-4.2.0-CVE-2006-4811-bis.patch | 179 | ||||
-rw-r--r-- | x11-libs/qt/qt-3.3.6-r4.ebuild | 381 | ||||
-rw-r--r-- | x11-libs/qt/qt-4.1.4-r2.ebuild | 224 | ||||
-rw-r--r-- | x11-libs/qt/qt-4.2.0-r2.ebuild | 210 |
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" +} |