diff --git a/qgis-2.8.1-arm.patch b/qgis-2.8.1-arm.patch new file mode 100644 index 0000000..79f1d2f --- /dev/null +++ b/qgis-2.8.1-arm.patch @@ -0,0 +1,430 @@ +commit 1aff7335d004bc410eb61e1436ee7648716f9319 +Author: Juergen E. Fischer +Date: Mon Mar 9 09:27:27 2015 +0100 + + fix arm build + +diff --git a/src/app/qgsdecorationgrid.cpp b/src/app/qgsdecorationgrid.cpp +index ba2f8c0..ba7735d 100644 +--- a/src/app/qgsdecorationgrid.cpp ++++ b/src/app/qgsdecorationgrid.cpp +@@ -217,14 +217,14 @@ void QgsDecorationGrid::render( QPainter * p ) + + // p->setPen( mGridPen ); + +- QList< QPair< double, QLineF > > verticalLines; ++ QList< QPair< qreal, QLineF > > verticalLines; + yGridLines( verticalLines ); +- QList< QPair< double, QLineF > > horizontalLines; ++ QList< QPair< qreal, QLineF > > horizontalLines; + xGridLines( horizontalLines ); + //QgsDebugMsg( QString("grid has %1 vertical and %2 horizontal lines").arg( verticalLines.size() ).arg( horizontalLines.size() ) ); + +- QList< QPair< double, QLineF > >::const_iterator vIt = verticalLines.constBegin(); +- QList< QPair< double, QLineF > >::const_iterator hIt = horizontalLines.constBegin(); ++ QList< QPair< qreal, QLineF > >::const_iterator vIt = verticalLines.constBegin(); ++ QList< QPair< qreal, QLineF > >::const_iterator hIt = horizontalLines.constBegin(); + + //simpler approach: draw vertical lines first, then horizontal ones + if ( mGridStyle == QgsDecorationGrid::Line ) +@@ -338,7 +338,7 @@ void QgsDecorationGrid::render( QPainter * p ) + } + } + +-void QgsDecorationGrid::drawCoordinateAnnotations( QPainter* p, const QList< QPair< double, QLineF > >& hLines, const QList< QPair< double, QLineF > >& vLines ) ++void QgsDecorationGrid::drawCoordinateAnnotations( QPainter* p, const QList< QPair< qreal, QLineF > >& hLines, const QList< QPair< qreal, QLineF > >& vLines ) + { + if ( !p ) + { +@@ -346,7 +346,7 @@ void QgsDecorationGrid::drawCoordinateAnnotations( QPainter* p, const QList< QPa + } + + QString currentAnnotationString; +- QList< QPair< double, QLineF > >::const_iterator it = hLines.constBegin(); ++ QList< QPair< qreal, QLineF > >::const_iterator it = hLines.constBegin(); + for ( ; it != hLines.constEnd(); ++it ) + { + currentAnnotationString = QString::number( it->first, 'f', mGridAnnotationPrecision ); +@@ -566,7 +566,7 @@ QPolygonF canvasExtent() + return poly; + } + +-int QgsDecorationGrid::xGridLines( QList< QPair< double, QLineF > >& lines ) const ++int QgsDecorationGrid::xGridLines( QList< QPair< qreal, QLineF > >& lines ) const + { + // prepare horizontal lines + lines.clear(); +@@ -612,7 +612,7 @@ int QgsDecorationGrid::xGridLines( QList< QPair< double, QLineF > >& lines ) con + return 0; + } + +-int QgsDecorationGrid::yGridLines( QList< QPair< double, QLineF > >& lines ) const ++int QgsDecorationGrid::yGridLines( QList< QPair< qreal, QLineF > >& lines ) const + { + // prepare vertical lines + +diff --git a/src/app/qgsdecorationgrid.h b/src/app/qgsdecorationgrid.h +index 22f4549..3ad7ebf 100644 +--- a/src/app/qgsdecorationgrid.h ++++ b/src/app/qgsdecorationgrid.h +@@ -199,7 +199,7 @@ class APP_EXPORT QgsDecorationGrid: public QgsDecorationItem + @param p drawing painter + @param hLines horizontal coordinate lines in item coordinates + @param vLines vertical coordinate lines in item coordinates*/ +- void drawCoordinateAnnotations( QPainter* p, const QList< QPair< double, QLineF > >& hLines, const QList< QPair< double, QLineF > >& vLines ); ++ void drawCoordinateAnnotations( QPainter* p, const QList< QPair< qreal, QLineF > >& hLines, const QList< QPair< qreal, QLineF > >& vLines ); + void drawCoordinateAnnotation( QPainter* p, const QPointF& pos, QString annotationString ); + /**Draws a single annotation + @param p drawing painter +@@ -209,10 +209,10 @@ class APP_EXPORT QgsDecorationGrid: public QgsDecorationItem + void drawAnnotation( QPainter* p, const QPointF& pos, int rotation, const QString& annotationText ); + /**Returns the grid lines with associated coordinate value + @return 0 in case of success*/ +- int xGridLines( QList< QPair< double, QLineF > >& lines ) const; ++ int xGridLines( QList< QPair< qreal, QLineF > >& lines ) const; + /**Returns the grid lines for the y-coordinates. Not vertical in case of rotation + @return 0 in case of success*/ +- int yGridLines( QList< QPair< double, QLineF > >& lines ) const; ++ int yGridLines( QList< QPair< qreal, QLineF > >& lines ) const; + /**Returns the item border of a point (in item coordinates)*/ + Border borderForLineCoord( const QPointF& point, QPainter* p ) const; + +diff --git a/src/app/qgsmapmouseevent.cpp b/src/app/qgsmapmouseevent.cpp +index 997aaa0..631c750 100644 +--- a/src/app/qgsmapmouseevent.cpp ++++ b/src/app/qgsmapmouseevent.cpp +@@ -86,8 +86,7 @@ void QgsMapMouseEvent::snapPoint() + + QPoint QgsMapMouseEvent::mapToPixelCoordinates( QgsMapCanvas* canvas, const QgsPoint& point ) + { +- double x = point.x(); +- double y = point.y(); ++ qreal x = point.x(), y = point.y(); + + canvas->mapSettings().mapToPixel().transformInPlace( x, y ); + +diff --git a/src/core/composer/qgscomposermapgrid.cpp b/src/core/composer/qgscomposermapgrid.cpp +index 7d790e6..7656be2 100644 +--- a/src/core/composer/qgscomposermapgrid.cpp ++++ b/src/core/composer/qgscomposermapgrid.cpp +@@ -1838,7 +1838,7 @@ bool QgsComposerMapGrid::shouldShowDivisionForDisplayMode( const QgsComposerMapG + || ( mode == QgsComposerMapGrid::LongitudeOnly && coordinate == QgsComposerMapGrid::Longitude ); + } + +-bool sortByDistance( const QPair& a, const QPair& b ) ++bool sortByDistance( const QPair& a, const QPair& b ) + { + return a.first < b.first; + } +@@ -1885,7 +1885,7 @@ QgsComposerMapGrid::BorderSide QgsComposerMapGrid::borderForLineCoord( const QPo + } + + //otherwise, guess side based on closest map side to point +- QList< QPair > distanceToSide; ++ QList< QPair > distanceToSide; + distanceToSide << qMakePair( p.x(), QgsComposerMapGrid::Left ); + distanceToSide << qMakePair( mComposerMap->rect().width() - p.x(), QgsComposerMapGrid::Right ); + distanceToSide << qMakePair( p.y(), QgsComposerMapGrid::Top ); +diff --git a/src/core/qgsgeometry.cpp b/src/core/qgsgeometry.cpp +index 81753c4..ab7281a 100644 +--- a/src/core/qgsgeometry.cpp ++++ b/src/core/qgsgeometry.cpp +@@ -4679,7 +4679,7 @@ bool QgsGeometry::convertToMultiType() + + void QgsGeometry::transformVertex( QgsWkbPtr &wkbPtr, const QTransform& trans, bool hasZValue ) + { +- double x, y, rotated_x, rotated_y; ++ qreal x, y, rotated_x, rotated_y; + + QgsWkbPtr tmp = wkbPtr; + tmp >> x >> y; +diff --git a/src/core/qgsgeometry.h b/src/core/qgsgeometry.h +index 46f4a7f..36d23ac 100644 +--- a/src/core/qgsgeometry.h ++++ b/src/core/qgsgeometry.h +@@ -686,12 +686,18 @@ class CORE_EXPORT QgsWkbPtr + inline const QgsWkbPtr &operator>>( unsigned int &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline const QgsWkbPtr &operator>>( char &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline const QgsWkbPtr &operator>>( QGis::WkbType &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; } ++#ifdef QT_ARCH_ARM ++ inline const QgsWkbPtr &operator>>( qreal &v ) const { double d; memcpy( &d, mP, sizeof( d ) ); mP += sizeof( d ); v=d; return *this; } ++#endif + + inline QgsWkbPtr &operator<<( const double &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline QgsWkbPtr &operator<<( const int &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline QgsWkbPtr &operator<<( const unsigned int &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline QgsWkbPtr &operator<<( const char &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline QgsWkbPtr &operator<<( const QGis::WkbType &v ) { memcpy( mP, &v, sizeof( v ) ); mP += sizeof( v ); return *this; } ++#ifdef QT_ARCH_ARM ++ inline QgsWkbPtr &operator<<( const qreal &v ) { double d = v; memcpy( mP, &d, sizeof( d ) ); mP += sizeof( d ); return *this; } ++#endif + + inline void operator+=( int n ) { mP += n; } + +@@ -710,6 +716,9 @@ class CORE_EXPORT QgsConstWkbPtr + inline const QgsConstWkbPtr &operator>>( unsigned int &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline const QgsConstWkbPtr &operator>>( char &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; } + inline const QgsConstWkbPtr &operator>>( QGis::WkbType &v ) const { memcpy( &v, mP, sizeof( v ) ); mP += sizeof( v ); return *this; } ++#ifdef QT_ARCH_ARM ++ inline const QgsConstWkbPtr &operator>>( qreal &v ) const { double d; memcpy( &d, mP, sizeof( d ) ); mP += sizeof( d ); v=d; return *this; } ++#endif + + inline void operator+=( int n ) { mP += n; } + +diff --git a/src/core/qgsmaptopixel.cpp b/src/core/qgsmaptopixel.cpp +index 16ade54..08e06e4 100644 +--- a/src/core/qgsmaptopixel.cpp ++++ b/src/core/qgsmaptopixel.cpp +@@ -114,22 +114,18 @@ void QgsMapToPixel::updateMatrix() + mMatrix = QTransform::fromTranslate( cx, cy ) + .rotate( rotation ) + .scale( 1 / mMapUnitsPerPixel, -1 / mMapUnitsPerPixel ) +- .translate( -xCenter, -yCenter ) +- ; ++ .translate( -xCenter, -yCenter ); + } + +-QgsPoint QgsMapToPixel::toMapPoint( double x, double y ) const ++QgsPoint QgsMapToPixel::toMapPoint( qreal x, qreal y ) const + { + bool invertible; + QTransform matrix = mMatrix.inverted( &invertible ); + assert( invertible ); +- double mx, my; ++ qreal mx, my; + matrix.map( x, y, &mx, &my ); +- QgsPoint ret( mx, my ); +- + //QgsDebugMsg(QString("XXX toMapPoint x:%1 y:%2 -> x:%3 y:%4").arg(x).arg(y).arg(mx).arg(my)); +- +- return ret; ++ return QgsPoint( mx, my ); + } + + QgsPoint QgsMapToPixel::toMapCoordinates( QPoint p ) const +@@ -232,42 +228,34 @@ QString QgsMapToPixel::showParameters() const + << " rotation: " << mRotation + << " size: " << mWidth << "x" << mHeight; + return rep; +- + } + +- +-QgsPoint QgsMapToPixel::transform( double x, double y ) const ++QgsPoint QgsMapToPixel::transform( qreal x, qreal y ) const + { + transformInPlace( x, y ); + return QgsPoint( x, y ); + } + +-QgsPoint QgsMapToPixel::transform( const QgsPoint& p ) const ++QgsPoint QgsMapToPixel::transform( const QgsPoint &p ) const + { +- double dx = p.x(); +- double dy = p.y(); +- transformInPlace( dx, dy ); +- ++ qreal x = p.x(), y = p.y(); ++ transformInPlace( x, y ); + // QgsDebugMsg(QString("Point to pixel...X : %1-->%2, Y: %3 -->%4").arg(p.x()).arg(dx).arg(p.y()).arg(dy)); +- return QgsPoint( dx, dy ); ++ return QgsPoint( x, y ); + } + +-void QgsMapToPixel::transform( QgsPoint* p ) const ++void QgsMapToPixel::transform( QgsPoint *p ) const + { +- double x = p->x(); +- double y = p->y(); ++ qreal x = p->x(), y = p->y(); + transformInPlace( x, y ); +- +-#ifdef QGISDEBUG + // QgsDebugMsg(QString("Point to pixel...X : %1-->%2, Y: %3 -->%4").arg(p->x()).arg(x).arg(p->y()).arg(y)); +-#endif + p->set( x, y ); + } + +-void QgsMapToPixel::transformInPlace( qreal& x, qreal& y ) const ++void QgsMapToPixel::transformInPlace( qreal &x, qreal &y ) const + { + // Map 2 Pixel +- double mx, my; ++ qreal mx, my; + mMatrix.map( x, y, &mx, &my ); + //QgsDebugMsg(QString("XXX transformInPlace X : %1-->%2, Y: %3 -->%4").arg(x).arg(mx).arg(y).arg(my)); + x = mx; y = my; +diff --git a/src/core/qgsmaptopixel.h b/src/core/qgsmaptopixel.h +index c11fb90..081e5d1 100644 +--- a/src/core/qgsmaptopixel.h ++++ b/src/core/qgsmaptopixel.h +@@ -74,7 +74,7 @@ class CORE_EXPORT QgsMapToPixel + * @param y y coordinate of point to transform + * @return QgsPoint in device coordinates + */ +- QgsPoint transform( double x, double y ) const; ++ QgsPoint transform( qreal x, qreal y ) const; + /*! Transform device coordinates to map (world) coordinates + * @param x x coordinate of point to be converted to map cooordinates + * @param y y coordinate of point to be converted to map cooordinates +@@ -110,7 +110,7 @@ class CORE_EXPORT QgsMapToPixel + */ + QgsPoint toMapCoordinates( QPoint p ) const; + +- QgsPoint toMapPoint( double x, double y ) const; ++ QgsPoint toMapPoint( qreal x, qreal y ) const; + + /*! Set map units per pixel + * @param mapUnitsPerPixel Map units per pixel +diff --git a/src/core/qgspallabeling.cpp b/src/core/qgspallabeling.cpp +index 768a511..b5ecc8c 100644 +--- a/src/core/qgspallabeling.cpp ++++ b/src/core/qgspallabeling.cpp +@@ -2105,7 +2105,7 @@ void QgsPalLayerSettings::registerFeature( QgsFeature& f, const QgsRenderContext + QTransform t = QTransform::fromTranslate( center.x(), center.y() ); + t.rotate( -m2p.mapRotation() ); + t.translate( -center.x(), -center.y() ); +- double xPosR, yPosR; ++ qreal xPosR, yPosR; + t.map( xPos, yPos, &xPosR, &yPosR ); + xPos = xPosR; yPos = yPosR; + } +diff --git a/src/core/qgspointlocator.cpp b/src/core/qgspointlocator.cpp +index 534e7da..4bea360 100644 +--- a/src/core/qgspointlocator.cpp ++++ b/src/core/qgspointlocator.cpp +@@ -268,6 +268,8 @@ struct _CohenSutherland + y = y0 + ( y1 - y0 ) * ( mRect.xMinimum() - x0 ) / ( x1 - x0 ); + x = mRect.xMinimum(); + } ++ else ++ break; + + // Now we move outside point to intersection point to clip + // and get ready for next pass. +@@ -536,13 +538,13 @@ class QgsPointLocator_DumpTree : public SpatialIndex::IQueryStrategy + if ( !n ) + return; + +- qDebug( "NODE: %ld", n->getIdentifier() ); ++ QgsDebugMsg( QString( "NODE: %1" ).arg( n->getIdentifier() ) ); + if ( n->getLevel() > 0 ) + { + // inner nodes + for ( uint32_t cChild = 0; cChild < n->getChildrenCount(); cChild++ ) + { +- qDebug( "- CH: %ld", n->getChildIdentifier( cChild ) ); ++ QgsDebugMsg( QString( "- CH: %1" ).arg( n->getChildIdentifier( cChild ) ) ); + ids.push( n->getChildIdentifier( cChild ) ); + } + } +@@ -551,7 +553,7 @@ class QgsPointLocator_DumpTree : public SpatialIndex::IQueryStrategy + // leaves + for ( uint32_t cChild = 0; cChild < n->getChildrenCount(); cChild++ ) + { +- qDebug( "- L: %ld", n->getChildIdentifier( cChild ) ); ++ QgsDebugMsg( QString( "- L: %1" ).arg( n->getChildIdentifier( cChild ) ) ); + } + } + +diff --git a/src/core/symbology-ng/qgsrendererv2.cpp b/src/core/symbology-ng/qgsrendererv2.cpp +index 73b4f22..6e114ca 100644 +--- a/src/core/symbology-ng/qgsrendererv2.cpp ++++ b/src/core/symbology-ng/qgsrendererv2.cpp +@@ -39,10 +39,7 @@ const unsigned char* QgsFeatureRendererV2::_getPoint( QPointF& pt, QgsRenderCont + { + QgsConstWkbPtr wkbPtr( wkb + 1 ); + unsigned int wkbType; +- wkbPtr >> wkbType; +- +- double x, y; +- wkbPtr >> x >> y; ++ wkbPtr >> wkbType >> pt.rx() >> pt.ry(); + + if ( wkbType == QGis::WKBPoint25D ) + wkbPtr += sizeof( double ); +@@ -50,12 +47,11 @@ const unsigned char* QgsFeatureRendererV2::_getPoint( QPointF& pt, QgsRenderCont + if ( context.coordinateTransform() ) + { + double z = 0; // dummy variable for coordiante transform +- context.coordinateTransform()->transformInPlace( x, y, z ); ++ context.coordinateTransform()->transformInPlace( pt.rx(), pt.ry(), z ); + } + +- context.mapToPixel().transformInPlace( x, y ); ++ context.mapToPixel().transformInPlace( pt.rx(), pt.ry() ); + +- pt = QPointF( x, y ); + return wkbPtr; + } + +@@ -65,7 +61,7 @@ const unsigned char* QgsFeatureRendererV2::_getLineString( QPolygonF& pts, QgsRe + unsigned int wkbType, nPoints; + wkbPtr >> wkbType >> nPoints; + +- bool hasZValue = ( wkbType == QGis::WKBLineString25D ); ++ bool hasZValue = wkbType == QGis::WKBLineString25D; + + double x, y; + const QgsCoordinateTransform* ct = context.coordinateTransform(); +diff --git a/src/gui/qgsmapcanvasitem.cpp b/src/gui/qgsmapcanvasitem.cpp +index c0dd3ec..763f340 100644 +--- a/src/gui/qgsmapcanvasitem.cpp ++++ b/src/gui/qgsmapcanvasitem.cpp +@@ -63,7 +63,7 @@ QgsPoint QgsMapCanvasItem::toMapCoordinates( const QPoint& point ) const + + QPointF QgsMapCanvasItem::toCanvasCoordinates( const QgsPoint& point ) const + { +- double x = point.x(), y = point.y(); ++ qreal x = point.x(), y = point.y(); + mMapCanvas->getCoordinateTransform()->transformInPlace( x, y ); + return QPointF( x, y ) + mPanningOffset; + } +diff --git a/src/gui/qgsmaptool.cpp b/src/gui/qgsmaptool.cpp +index 463a07a..4fd0f4c 100644 +--- a/src/gui/qgsmaptool.cpp ++++ b/src/gui/qgsmaptool.cpp +@@ -68,7 +68,7 @@ QgsRectangle QgsMapTool::toLayerCoordinates( QgsMapLayer* layer, const QgsRectan + + QPoint QgsMapTool::toCanvasCoordinates( const QgsPoint& point ) + { +- double x = point.x(), y = point.y(); ++ qreal x = point.x(), y = point.y(); + mCanvas->getCoordinateTransform()->transformInPlace( x, y ); + return QPoint( qRound( x ), qRound( y ) ); + } +diff --git a/src/providers/wcs/qgswcsprovider.cpp b/src/providers/wcs/qgswcsprovider.cpp +index 77022ac..88618ef 100644 +--- a/src/providers/wcs/qgswcsprovider.cpp ++++ b/src/providers/wcs/qgswcsprovider.cpp +@@ -516,7 +516,7 @@ void QgsWcsProvider::readBlock( int bandNo, QgsRectangle const & viewExtent, in + // TODO: set block to null values, move that to function and call only if fails + memset( block, 0, pixelWidth * pixelHeight * QgsRasterBlock::typeSize( dataType( bandNo ) ) ); + +- // Requested extent must at least partialy overlap coverage extent, otherwise ++ // Requested extent must at least partially overlap coverage extent, otherwise + // server gives error. QGIS usually does not request blocks outside raster extent + // (higher level checks) but it is better to do check here as well + if ( !viewExtent.intersects( mCoverageExtent ) ) +diff --git a/tests/src/core/testqgsatlascomposition.cpp b/tests/src/core/testqgsatlascomposition.cpp +index 1a26cc2..4b94bfb 100644 +--- a/tests/src/core/testqgsatlascomposition.cpp ++++ b/tests/src/core/testqgsatlascomposition.cpp +@@ -308,13 +308,13 @@ void TestQgsAtlasComposition::predefinedscales_render() + mAtlasMap->setAtlasDriven( true ); + mAtlasMap->setAtlasScalingMode( QgsComposerMap::Predefined ); + +- QVector scales; +- scales << 1800000; +- scales << 5000000; ++ QVector scales; ++ scales << 1800000.0; ++ scales << 5000000.0; + mAtlas->setPredefinedScales( scales ); + + { +- const QVector& setScales = mAtlas->predefinedScales(); ++ const QVector &setScales = mAtlas->predefinedScales(); + for ( int i = 0; i < setScales.size(); i++ ) + { + QVERIFY( setScales[i] == scales[i] ); diff --git a/qgis.spec b/qgis.spec index aeb863f..a48f2a2 100644 --- a/qgis.spec +++ b/qgis.spec @@ -13,7 +13,7 @@ Name: qgis Version: 2.8.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A user friendly Open Source Geographic Information System Group: Applications/Engineering @@ -36,6 +36,9 @@ Source5: %{name}-mime.xml # Fix detection problem for GRASS libraries Patch0: %{name}-2.4.0-grass.patch +# https://github.com/qgis/QGIS/commit/1aff7335d004bc410eb61e1436ee7648716f9319 +Patch1: %{name}-2.8.1-arm.patch + # Some plug-ins need Pyspatialite (bundled) # The license is not totally clear, see: # http://code.google.com/p/pyspatialite/issues/detail?id=3 @@ -172,6 +175,7 @@ Please refer to %{name}-server-README.fedora for details! %prep %setup -q %patch0 -p1 -b .grass~ +%patch1 -p1 -b .arm~ # Remove executable permissions from source code files find . \( -name "*.cpp" -o -name "*.h" \) -type f -perm /111 -execdir chmod -x {} \+ @@ -394,6 +398,9 @@ update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : %changelog +* Mon Mar 9 2015 Volker Fröhlich - 2.8.1-2 +- Add upstream patch to fix the build on ARM + * Sun Mar 8 2015 Volker Fröhlich - 2.8.1-1 - New upstream release, remove included patch change - Rename mapserver sub-package to server