Bug#731261: transition: Qt5 switching qreal == double for all platforms
Note: people receiving this mail through the arm/ports/pkg-kde-talk mailing list:
please reply to the bug.
Hi everyone! First of all please bare with me and try to read the whole mail
before replying. This might look like a hairy thing, but we Qt maintainers think
that there is a chance of making things better and easier for all of us in the
As you may know Qt has a typedef [DISCLAIMER] named qreal which is defined as
double for almost all archs except arm* (and specifically for Debian, sh4),
where is it bound to float.
While in Qt4 this will still be valid, in Qt5 (not yet shipped in any Debian
stable release nor available as a backport) upstream changed qreal to be double
on all platforms by default, adding a compile-time switch to be able to change
it's value if needed. That sounds really good, except for the fact that this
will happen in 5.2.0... without a SONAME bump.
We could easily just use the switch in the appropiate archs and be done. Yes,
this could simply work but we think there is a chance to make things better with
some little effort from us. But first let's try to enumerate what are the
benefits and downsides of doing this.
Suppose for a moment we set qreal to double for all archs. This would mean:
- And ABI change (either with/without SONAME bump, see later)
- Less porting problems like [PORT], thus easier code/transitions.
- Possibly better real handling in all archs, even if that might mean a slow
down for some things. I can push rc1 to experimental with qreal=double for all
archs if you want to test (or some other place if someone can provide the
- No slow down for OpenGL stuff: this part of the Qt5 API has been written
explicitely with float.
- We already have ARM hardware with hard float support and it wouldn't
surprise me this will get more common and faster in the following years, and
this is a decisition which would expland all over Qt5's life span, which we
could expect to be at least 10 years from now judging from Qt3/Qt4 experience.
Now let's analyse Qt5's current situation on Debian:
- It currently has, appart from the ~14 source packages that make the Qt5 stack
and needs a sourcefull upload, 4 reverse dependencies, one being the python
Qt5 bindings and three apps.
- It has never been shipped on a Debian stable release nor in backports.
So we are left with the SONAME bump thing. We Qt maintainers consider that
trying to be somehow binary compatible with other distros is a worthwhile goal.
Of course, this includes not bumping the SONAME.
I've called other distro's maintainers in Qt's devel ML [QTMSG] with little
feedback and over IRC to Fedora and OpenSuse people. Over Fedora lands, one
Qt maintainer told me they where going to push the ABI change without SONAME
bump while an ARM maintainer cried for a SONAME bump. I had no reply from
I have also asked to the Ubuntu guys, but I sincerely forgot if they are waiting
to see what we are going to do, switch without soname bump or doing more tests,
and I left my logs at my other PC :-(
So we think the best thing we could do is, for this very exceptional case, set
qreal to double on all archs and break ABI on arm* and sh4, which could be fixed
by [bin]NMUing the three apps that currently build-depend against it (I think
python's bindings will need a sourcefull upload too).
Now I want to be *clear* that if not bumping the SONAME is not a solution then
I'll simply keep armel, armhf and sh4 with qreal=float and be done.
So I would like what the RT and arm* porters thinks.
As a complementary note, Qt 5.2.0's release is expected around christmas.
Thanks a lot for reading, Lisandro.
[DISCLAIMER] I'm clerly not in the position of making this typedef go away,
so please don't insist with this.
-- System Information:
Debian Release: jessie/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.10-3-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash