Fix ARM build
This commit is contained in:
parent
ec2e05494a
commit
a5f997a9c9
227
qgis-2.2.0-arm-build.patch
Normal file
227
qgis-2.2.0-arm-build.patch
Normal file
@ -0,0 +1,227 @@
|
||||
From 03b028dbf7c66949a1365cb6a927874c1318840e Mon Sep 17 00:00:00 2001
|
||||
From: Bas Couwenberg <sebastic@xs4all.nl>
|
||||
Date: Fri, 28 Mar 2014 10:37:13 +0100
|
||||
Subject: [PATCH 1/3] On armel/armhf qreal is typedef'ed to float not double.
|
||||
|
||||
This patch adds qreal versions of some functions on arm. It was originally
|
||||
writen by Konstantinos Margaritis and later fixed by Peter Michael Green.
|
||||
|
||||
Bug-Debian: http://bugs.debian.org/691333
|
||||
---
|
||||
src/core/qgscoordinatetransform.cpp | 11 +++++++++++
|
||||
src/core/qgscoordinatetransform.h | 3 +++
|
||||
src/core/qgsmaptopixel.cpp | 9 +++++++++
|
||||
src/core/qgsmaptopixel.h | 3 +++
|
||||
4 files changed, 26 insertions(+)
|
||||
|
||||
diff --git a/src/core/qgscoordinatetransform.cpp b/src/core/qgscoordinatetransform.cpp
|
||||
index 42427f9..58fb557 100644
|
||||
--- a/src/core/qgscoordinatetransform.cpp
|
||||
+++ b/src/core/qgscoordinatetransform.cpp
|
||||
@@ -434,6 +434,17 @@ void QgsCoordinateTransform::transformInPlace(
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef QT_ARCH_ARM
|
||||
+void QgsCoordinateTransform::transformInPlace( qreal& x, qreal& y, double& z,
|
||||
+ TransformDirection direction ) const
|
||||
+{
|
||||
+ double xd = (double) x, yd = (double) y;
|
||||
+ transformInPlace(xd, yd, z, direction);
|
||||
+ x=xd;
|
||||
+ y=yd;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
#ifdef ANDROID
|
||||
void QgsCoordinateTransform::transformInPlace( float& x, float& y, float& z,
|
||||
TransformDirection direction ) const
|
||||
diff --git a/src/core/qgscoordinatetransform.h b/src/core/qgscoordinatetransform.h
|
||||
index df9c314..20bb04a 100644
|
||||
--- a/src/core/qgscoordinatetransform.h
|
||||
+++ b/src/core/qgscoordinatetransform.h
|
||||
@@ -156,6 +156,9 @@ class CORE_EXPORT QgsCoordinateTransform : public QObject
|
||||
// and y variables in place. The second one works with good old-fashioned
|
||||
// C style arrays.
|
||||
void transformInPlace( double& x, double& y, double &z, TransformDirection direction = ForwardTransform ) const;
|
||||
+#ifdef QT_ARCH_ARM
|
||||
+ void transformInPlace( qreal& x, qreal& y, double &z, TransformDirection direction = ForwardTransform ) const;
|
||||
+#endif
|
||||
|
||||
//! @note not available in python bindings
|
||||
void transformInPlace( QVector<double>& x, QVector<double>& y, QVector<double>& z,
|
||||
diff --git a/src/core/qgsmaptopixel.cpp b/src/core/qgsmaptopixel.cpp
|
||||
index 6dff6f1..fab4848 100644
|
||||
--- a/src/core/qgsmaptopixel.cpp
|
||||
+++ b/src/core/qgsmaptopixel.cpp
|
||||
@@ -138,6 +138,14 @@ void QgsMapToPixel::transformInPlace( double& x, double& y ) const
|
||||
y = yMax - ( y - yMin ) / mMapUnitsPerPixel;
|
||||
}
|
||||
|
||||
+#ifdef QT_ARCH_ARM
|
||||
+void QgsMapToPixel::transformInPlace( qreal& x, qreal& y ) const
|
||||
+{
|
||||
+ x = ( x - xMin ) / mMapUnitsPerPixel;
|
||||
+ y = yMax - ( y - yMin ) / mMapUnitsPerPixel;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
void QgsMapToPixel::transformInPlace( QVector<double>& x,
|
||||
QVector<double>& y ) const
|
||||
{
|
||||
@@ -161,3 +169,4 @@ void QgsMapToPixel::transformInPlace( QVector<float>& x,
|
||||
transformInPlace( x[i], y[i] );
|
||||
}
|
||||
#endif
|
||||
+
|
||||
diff --git a/src/core/qgsmaptopixel.h b/src/core/qgsmaptopixel.h
|
||||
index fb3c317..8377282 100644
|
||||
--- a/src/core/qgsmaptopixel.h
|
||||
+++ b/src/core/qgsmaptopixel.h
|
||||
@@ -66,6 +66,9 @@ class CORE_EXPORT QgsMapToPixel
|
||||
given coordinates in place. Intended as a fast way to do the
|
||||
transform. */
|
||||
void transformInPlace( double& x, double& y ) const;
|
||||
+#ifdef QT_ARCH_ARM
|
||||
+ void transformInPlace( qreal& x, qreal& y ) const;
|
||||
+#endif
|
||||
|
||||
/* Transform device coordinates to map coordinates. Modifies the
|
||||
given coordinates in place. Intended as a fast way to do the
|
||||
--
|
||||
1.8.5.5
|
||||
|
||||
|
||||
From 7db6ae54124a2f2213c0609490904653c6c798af Mon Sep 17 00:00:00 2001
|
||||
From: Bas Couwenberg <sebastic@xs4all.nl>
|
||||
Date: Fri, 28 Mar 2014 10:39:35 +0100
|
||||
Subject: [PATCH 2/3] Fix qreal vs double.
|
||||
|
||||
In qt4 on arm architectures qreal is defined as float while on other
|
||||
architectures it is defined as double. This can cause problems if qreal
|
||||
and double are carelessly mixed.
|
||||
|
||||
In this particular case the problem is that qMin/qMax are templates defined
|
||||
to take two parameters of the same type. If two different types are passed
|
||||
in then C++ can't resolve what type the template parameter should be and
|
||||
bails out. The fix is simple, typecast one of the parameters so they
|
||||
match.
|
||||
|
||||
Author: Peter Michael Green <plugwash@debian.org>
|
||||
Bug-Debian: http://bugs.debian.org/737814
|
||||
---
|
||||
src/app/gps/qwtpolar-1.0/qwt_polar_curve.cpp | 2 +-
|
||||
src/app/gps/qwtpolar-1.0/qwt_polar_layout.cpp | 4 ++--
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/app/gps/qwtpolar-1.0/qwt_polar_curve.cpp b/src/app/gps/qwtpolar-1.0/qwt_polar_curve.cpp
|
||||
index d63206a..7c18777 100644
|
||||
--- a/src/app/gps/qwtpolar-1.0/qwt_polar_curve.cpp
|
||||
+++ b/src/app/gps/qwtpolar-1.0/qwt_polar_curve.cpp
|
||||
@@ -433,7 +433,7 @@ void QwtPolarCurve::drawLines( QPainter *painter,
|
||||
|
||||
if ( !clipRect.isEmpty() )
|
||||
{
|
||||
- double off = qCeil( qMax( 1.0, painter->pen().widthF() ) );
|
||||
+ double off = qCeil( qMax((qreal)1.0,painter->pen().widthF() ) );
|
||||
clipRect = clipRect.toRect().adjusted( -off, -off, off, off );
|
||||
polyline = QwtClipper::clipPolygonF( clipRect, polyline );
|
||||
}
|
||||
diff --git a/src/app/gps/qwtpolar-1.0/qwt_polar_layout.cpp b/src/app/gps/qwtpolar-1.0/qwt_polar_layout.cpp
|
||||
index 1db2379..b4a43b0 100644
|
||||
--- a/src/app/gps/qwtpolar-1.0/qwt_polar_layout.cpp
|
||||
+++ b/src/app/gps/qwtpolar-1.0/qwt_polar_layout.cpp
|
||||
@@ -278,7 +278,7 @@ QRectF QwtPolarLayout::layoutLegend( Options options, QRectF &rect ) const
|
||||
// We don't allow vertical legends to take more than
|
||||
// half of the available space.
|
||||
|
||||
- dim = qMin( hint.width(), rect.width() * d_data->legendRatio );
|
||||
+ dim = qMin( hint.width(), (qreal)(rect.width() * d_data->legendRatio) );
|
||||
|
||||
if ( !( options & IgnoreScrollbars ) )
|
||||
{
|
||||
@@ -293,7 +293,7 @@ QRectF QwtPolarLayout::layoutLegend( Options options, QRectF &rect ) const
|
||||
}
|
||||
else
|
||||
{
|
||||
- dim = qMin( hint.height(), rect.height() * d_data->legendRatio );
|
||||
+ dim = qMin( hint.height(), (qreal)(rect.height() * d_data->legendRatio) );
|
||||
dim = qMax( dim, d_data->layoutData.legend.hScrollBarHeight );
|
||||
}
|
||||
|
||||
--
|
||||
1.8.5.5
|
||||
|
||||
|
||||
From 3d44c5934aba0c4a1e0919549f50f1650140de57 Mon Sep 17 00:00:00 2001
|
||||
From: Bas Couwenberg <sebastic@xs4all.nl>
|
||||
Date: Fri, 28 Mar 2014 10:41:22 +0100
|
||||
Subject: [PATCH 3/3] Disable features on ARM.
|
||||
|
||||
Building QGIS on ARM produces the error:
|
||||
|
||||
sip: qgis/python/core/qgsclipper.sip:44: \
|
||||
QgsClipper::trimFeature() unsupported function argument type - provide %MethodCode and a C++ signature
|
||||
|
||||
For the Android builds this was fixed in commit 2cc684793ceb29d8600d71564fb38f92c998f588.
|
||||
|
||||
This patch adapts the Android fix, by disabling the SIP features on all ARM systems.
|
||||
|
||||
Bug-Debian: http://bugs.debian.org/737814
|
||||
---
|
||||
python/CMakeLists.txt | 5 +++++
|
||||
python/core/composer/qgscomposerscalebar.sip | 2 +-
|
||||
python/core/qgsclipper.sip | 4 +++-
|
||||
3 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
|
||||
index 044f65e..158e4fa 100644
|
||||
--- a/python/CMakeLists.txt
|
||||
+++ b/python/CMakeLists.txt
|
||||
@@ -55,6 +55,11 @@ IF(NOT ANDROID)
|
||||
SET(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} ANDROID)
|
||||
ENDIF(NOT ANDROID)
|
||||
|
||||
+IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
+ELSE(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
+ SET(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} ARM)
|
||||
+ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
||||
+
|
||||
IF(NOT WITH_TOUCH)
|
||||
SET(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_TOUCH)
|
||||
ENDIF(NOT WITH_TOUCH)
|
||||
diff --git a/python/core/composer/qgscomposerscalebar.sip b/python/core/composer/qgscomposerscalebar.sip
|
||||
index 727c10f..9a0e034 100644
|
||||
--- a/python/core/composer/qgscomposerscalebar.sip
|
||||
+++ b/python/core/composer/qgscomposerscalebar.sip
|
||||
@@ -109,7 +109,7 @@ class QgsComposerScaleBar: QgsComposerItem
|
||||
of the segment
|
||||
@note python bindings not available on android
|
||||
*/
|
||||
-%If (!ANDROID)
|
||||
+%If (!ARM)
|
||||
void segmentPositions( QList<QPair<double, double> >& posWidthList ) const;
|
||||
%End
|
||||
|
||||
diff --git a/python/core/qgsclipper.sip b/python/core/qgsclipper.sip
|
||||
index 847123c..90c920b 100644
|
||||
--- a/python/core/qgsclipper.sip
|
||||
+++ b/python/core/qgsclipper.sip
|
||||
@@ -1,3 +1,5 @@
|
||||
+%Feature ARM
|
||||
+
|
||||
class QgsClipper
|
||||
{
|
||||
%TypeHeaderCode
|
||||
@@ -34,7 +36,7 @@ class QgsClipper
|
||||
// A handy way to refer to the four boundaries
|
||||
enum Boundary {XMax, XMin, YMax, YMin};
|
||||
|
||||
-%If (!ANDROID)
|
||||
+%If (!ARM)
|
||||
// Trims the given feature to a rectangular box. Returns the trimmed
|
||||
// feature in x and y. The shapeOpen parameter determines whether
|
||||
// the function treats the points as a closed shape (polygon), or as
|
||||
--
|
||||
1.8.5.5
|
||||
|
12
qgis.spec
12
qgis.spec
@ -19,7 +19,7 @@
|
||||
|
||||
Name: qgis
|
||||
Version: 2.2.0
|
||||
Release: 2%{?dist}
|
||||
Release: 3%{?dist}
|
||||
Summary: A user friendly Open Source Geographic Information System
|
||||
Group: Applications/Engineering
|
||||
|
||||
@ -27,9 +27,6 @@ Group: Applications/Engineering
|
||||
License: GPLv3+ with exceptions
|
||||
URL: http://www.qgis.org
|
||||
|
||||
#TODO: There are build issues at the moment
|
||||
ExcludeArch: armv7hl
|
||||
|
||||
Source0: http://qgis.org/downloads/%{name}-%{version}.tar.bz2
|
||||
# The used sources were released as a tarball, the below is only for work in progress
|
||||
#git archive --format=tar --prefix=qgis-1.8.0/ master | bzip2 >../qgis-1.8.0.tar.gz
|
||||
@ -56,6 +53,9 @@ Patch3: %{name}-2.2.0-sip.patch
|
||||
# https://github.com/qgis/QGIS/commit/afd667420a42cb257c6c4524290091663e21f3d6
|
||||
Patch4: %{name}-2.2.0-show-license.patch
|
||||
|
||||
# https://github.com/qgis/QGIS/pull/1275.patch
|
||||
Patch5: %{name}-2.2.0-arm-build.patch
|
||||
|
||||
# Some plug-ins need Pyspatialite (bundled)
|
||||
# The license is not totally clear, see:
|
||||
# http://code.google.com/p/pyspatialite/issues/detail?id=3
|
||||
@ -188,6 +188,7 @@ Please refer to %{name}-mapserver-README.fedora for details!
|
||||
%patch2 -p1 -b .httplib2~
|
||||
%patch3 -p1 -b .sip~
|
||||
%patch4 -p1 -b .license~
|
||||
%patch5 -p1 -b .arm-build~
|
||||
|
||||
# Readme file for QGIS mapserver configuration and Lighttpd example
|
||||
install -pm0644 %{SOURCE4} .
|
||||
@ -396,6 +397,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Mar 28 2014 Volker Fröhlich <volker27@gmx.at> - 2.2.0-3
|
||||
- ARM build fix
|
||||
|
||||
* Sun Mar 16 2014 Rex Dieter <rdieter@fedoraproject.org> 2.2.0-2
|
||||
- rebuild (sip)
|
||||
|
||||
|
Reference in New Issue
Block a user