[PyQt] PyQt_qreal_double (Was: Re: PyQt5 5.7.1 Bug: debug build on Windows broken)

Dmitry Shachnev mitya57 at ubuntu.com
Thu Jan 19 11:47:36 GMT 2017

Hi all,

On Tue, Jan 17, 2017 at 06:33:31PM +0100, Hans-Peter Jansen wrote:
> > We now have this patch in Debian too (thanks Pete!).
> Hehe. Funnily, the fix_qreal_check.diff mentioned below in "openSUSE patches
> of PyQt" is yours. Thank you, Dmitry. The world "feels" small sometimes.
> You might want to comment on this, why Phil should consider your approach.

We no longer have this patch in Debian because we switched to qreal = double
on all architectures, however having this patch applied to mainstream PyQt
would still make sense in my opinion.

While qreal = double by default, it is still possible (and supported) to do
a custom Qt build with qreal = float. As far as I know, Sailfish still has
qreal = float, so it would be useful at least for them.

I would also update the patch because the sizeof-based check can be applied
always, not only for old Qt versions.

However there are some inconsistencies in PyQt code. It seems quite naturally
that PyQt_qreal_double tells that qreal *is* double. The code in qglobal.sip
seems to agree with that definition:

  %If (PyQt_qreal_double)
  typedef double qreal;
  %If (!PyQt_qreal_double)
  typedef float qreal;

However, the code in (unpatched) configure.py and qpygui_qvector.sip seems to
be using the opposite logic. Here is a fragment from qpygui_qvector.sip:

  %If (PyQt_qreal_double)

  %MappedType QVector<qreal>
          /TypeHintIn="Iterable[float]", TypeHintOut="List[float]",

I hope Phil can clarify what is correct and what is not.

A potential updated patch for configure.py that would agree with qglobal.sip
code is below (note the '==' instead of '!=' which was in the initial patch).
When applying this, the code in qpygui_qvector.sip should be either fixed or
dropped altogether.

To test the changes with qreal = float, qtbase should be configured with
'-qreal float' option.

--- a/configure.py
+++ b/configure.py
@@ -687,13 +687,8 @@ int main(int argc, char **argv)
     out << "PyQt_Desktop_OpenGL\\n";
-#if QT_VERSION < 0x050200
-// This is the test used in qglobal.h in Qt prior to v5.2.  In v5.2 and later
-// qreal is always double.
-#if defined(QT_NO_FPU) || defined(Q_PROCESSOR_ARM) || defined(Q_OS_WINCE)
-    out << "PyQt_qreal_double\\n";
+    if (sizeof (qreal) == sizeof (double))
+        out << "PyQt_qreal_double\\n";
 #if defined(QT_NO_PROCESS)
     out << "PyQt_Process\\n";

Dmitry Shachnev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20170119/13be2f50/attachment.sig>

More information about the PyQt mailing list