In the process of updating rkward to 0.6.3 (against R 3.1.3) in Fedora, it was discovered that 0.6.3 failed to compile on ARM. The specific failure was:
/builddir/build/BUILD/rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp: In constructor 'RKPluginSpinBox::RKPluginSpinBox(const QDomElement&, RKComponent*, QWidget*)':
/builddir/build/BUILD/rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp:53:97: error: no matching function for call to 'qMax(double&, qreal)'
double initial = xml->getDoubleAttribute (element, "initial", qMin (max, qMax (min, qreal(0.0))), DL_INFO);
^
/builddir/build/BUILD/rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp:53:97: note: candidate is:
In file included from /usr/include/QtCore/qatomic.h:45:0,
from /usr/include/QtCore/qhash.h:45,
from /usr/include/QtCore/QHash:1,
from /builddir/build/BUILD/rkward-0.6.3/rkward/plugin/rkcomponent.h:21,
from /builddir/build/BUILD/rkward-0.6.3/rkward/plugin/rkpluginspinbox.h:20,
from /builddir/build/BUILD/rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp:17:
/usr/include/QtCore/qglobal.h:1217:34: note: template<class T> const T& qMax(const T&, const T&)
Q_DECL_CONSTEXPR inline const T &qMax(const T &a, const T &b) { return (a < b) ? b : a; }
^
/usr/include/QtCore/qglobal.h:1217:34: note: template argument deduction/substitution failed:
/builddir/build/BUILD/rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp:53:97: note: deduced conflicting types for parameter 'const T' ('double' and 'qreal {aka float}')
double initial = xml->getDoubleAttribute (element, "initial", qMin (max, qMax (min, qreal(0.0))), DL_INFO);
This failure has been noted in other QT apps, specifically, it is the same issue noted in Debian Bug 638813: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=638813
The fix is the same, to cast the necessary parameters of qMax to a double:
diff -up rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp.armfix rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp
--- rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp.armfix 2015-03-10 19:37:12.501771989 -0400
+++ rkward-0.6.3/rkward/plugin/rkpluginspinbox.cpp 2015-03-10 19:37:45.131562327 -0400
@@ -50,7 +50,7 @@ RKPluginSpinBox::RKPluginSpinBox (const
if (!intmode) {
double min = xml->getDoubleAttribute (element, "min", -FLT_MAX, DL_INFO);
double max = xml->getDoubleAttribute (element, "max", FLT_MAX, DL_INFO);
- double initial = xml->getDoubleAttribute (element, "initial", qMin (max, qMax (min, qreal(0.0))), DL_INFO);
+ double initial = xml->getDoubleAttribute (element, "initial", qMin (max, qMax (min, double(qreal(0.0)))), DL_INFO);
int default_precision = xml->getIntAttribute (element, "default_precision", 2, DL_INFO);
int max_precision = xml->getIntAttribute (element, "max_precision", 8, DL_INFO);
diff -up rkward-0.6.3/rkward/rbackend/rkwarddevice/rkgraphicsdevice_frontendtransmitter.cpp.armfix rkward-0.6.3/rkward/rbackend/rkwarddevice/rkgraphicsdevice_frontendtransmitter.cpp
--- rkward-0.6.3/rkward/rbackend/rkwarddevice/rkgraphicsdevice_frontendtransmitter.cpp.armfix 2015-03-10 20:11:02.363493214 -0400
+++ rkward-0.6.3/rkward/rbackend/rkwarddevice/rkgraphicsdevice_frontendtransmitter.cpp 2015-03-10 20:11:13.903466769 -0400
@@ -105,7 +105,7 @@ static QPen readSimplePen (QDataStream &
instream >> lwd >> lty;
if (!col.isValid () || (lty == -1L)) return QPen (Qt::NoPen);
- lwd = qMax (qreal(1.0), lwd); // minimum 1 px as in X11 device
+ lwd = qMax (double(qreal(1.0)), lwd); // minimum 1 px as in X11 device
QPen ret;
if (lty != 0) { // solid
QVector<qreal> dashes;
I waive any copyright on this patch, and when that is not possible, grant permission for it to be used under the same license as the rest of RKWard.
Applied in 0.6.4. Thanks!