[scribus] compiling Scribus 1.4.3 on an ARM CPU (Debian Wheezy)

William Bell whbell at btinternet.com
Tue Aug 20 15:36:19 UTC 2013


Hi,

I am trying to build Scribus 1.4.3 on an ARM CPU that runs Debian Wheezy (Raspbian).  Following the installation of all of the dependencies, the compilation goes well until 

[ 66%] Building CXX object scribus/CMakeFiles/scribus.dir/scpainter.cpp.o
/home/pi/Scribus/scribus/scpainter.cpp: In member function ‘void ScPainter::drawVPath(int)’:
/home/pi/Scribus/scribus/scpainter.cpp:1119:31:
 error: no matching function for call to 
‘QPen::setDashPattern(QVector<double>&)’
/home/pi/Scribus/scribus/scpainter.cpp:1119:31: note: candidate is:
/usr/include/qt4/QtGui/qpen.h:87:10: note: void QPen::setDashPattern(const QVector<float>&)
/usr/include/qt4/QtGui/qpen.h:87:10:
 note:   no known conversion for argument 1 from ‘QVector<double>’
 to ‘const QVector<float>&’
make[2]: *** [scribus/CMakeFiles/scribus.dir/scpainter.cpp.o] Error 1
make[1]: *** [scribus/CMakeFiles/scribus.dir/all] Error 2
make: *** [all]
 Error 2

It is very clear why this fails.  In Qt4 there is

/usr/include/qt4/Qt/qglobal.h

typedef QT_COORD_TYPE qreal;
#elif defined(QT_NO_FPU) || defined(QT_ARCH_ARM) || defined(QT_ARCH_WINDOWSCE) || defined(QT_ARCH_SYMBIAN)
typedef float qreal;
#else
typedef double qreal;
#endif

The Qt functions use qreal, rather than double of float.  In the Scribus source code there are lots of 

QList<double> and QVector<double>

While I could use sed to switch these to qreal, there are other pieces of code such as

Scribus/scribus/util.cpp

void getDashArray(int dashtype, double linewidth, QVector<float> &m_array) {
   QVector<double> tmp;
   getDashArray(dashtype, linewidth, tmp);
   m_array.clear();
   for (int i = 0; i < tmp.count(); ++i) {
   m_array << static_cast<float>(tmp[i]);
  }
}

void getDashArray(int dashtype, double linewidth, QVector<double> &m_array)
{
        m_array.clear();
        if ((dashtype == 1) || (dashtype == 0))
                return;
        double Dt = qMax(1.0*linewidth, 0.1);
        double Sp = qMax(2.0*linewidth,
 0.1);
        double Da = qMax(4.0*linewidth, 0.1);
        switch (dashtype)
        {


Why is QVector<double> used instead of QVector<qreal> etc?  If I use sed, I will have to remove overloaded functions that include <float>.  Is this safe?

Thanks and best regards,

Will
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scribus.net/pipermail/scribus/attachments/20130820/7f6c7e4c/attachment.html>


More information about the scribus mailing list