[Kde-games-devel] Legacy code problem in libkdegames/kgame

Albert Astals Cid aacid at kde.org
Fri Dec 30 17:48:46 UTC 2011


El Dijous, 29 de desembre de 2011, a les 13:13:44, Ian Wadham va escriure:
> In libkdegames/kgame there is a header file kgamepropertyarray.h which
> contains a definition for class KGamePropertyArray.  In this class there is
> a method declaration and definition as follows:
> 
>   void sort()
>   {
>     QByteArray b;
>     QDataStream s(b, QIODevice::WriteOnly);
>     ….
>   }
> 
> This compiles in most environments (apparently) but failed to compile when
> I used Macports to port kdegames 4.7.4 to my Apple Macbook.  The offending
> header is referenced by KFourInLine.  I am still investigating the details,
> so I do not yet know whether KFourInline actually uses
> KGamePropertyArray::sort(), but I thought I should draw this problem to the
> KDE Games group's attention, seeing as we are so close to a KDE SC 4.8
> release and (I think I read somewhere) there might be no more releases on
> the KDE SC 4.7 branch.

Yes, 4.8.0 is close and there will be no more 4.7.x

> What I wonder is whether anyone else has any ideas, fixes or workarounds for
> this?

I have two ideas:
 * Your Qt4 is compiled without Qt3 support (i'd bet this is the issue)
 * Clang does not know how to cast an enum to an int

> I also wonder how this code compiles at all in KDE Games' day-to-day work
> and in KDE SC releases?

Because it's using
	QDataStream ( QByteArray * array, int mode )

> 
> In Qt 4.7, QDataStream can have a constructor with a const QByteArray & and
> no second parameter, so the QByteArray must have read-only mode.  Or it can
> be constructed with a QByteArray * and a second parameter for the mode,
> which can then be ReadOnly, WriteOnly, etc.
> 
> Neither constructor matches the existing code, so whatever compiler Macports
> is using is quite right to flag an error, but why don't other compilers,
> especially the ones KDE releases use?

"KDE releases" use no compiler, we just release tarballs of uncompiled code.

As said the code is fine if your platform supports Qt3 support.

> 
> The code in question seems to be a holdover from Qt 3 days.  See:
> http://doc.qt.nokia.com/3.3/qdatastream.html#QDataStream-3
> The constructor with plain QByteArray and a mode was allowed back then.

It is still allowed if you are compiling with Qt3 support and we are (in the 
platforms that have this library).

Albert

> 
> All the best, Ian W.
> 
> P.S. I have upgraded my Macbook to OS X 10.7.2 Lion and XCode 4.2.1 and
> am currently re-building all my Macports "ports" of Qt-mac, kdelibs (4.7)
> and kdegames (4.7.4), after upgrading Macports to v. 2.0.3.  I think this
> may be bringing in some newer, tougher compilers, but I have not yet
> investigated that.
> 
> _______________________________________________
> kde-games-devel mailing list
> kde-games-devel at kde.org
> https://mail.kde.org/mailman/listinfo/kde-games-devel


More information about the kde-games-devel mailing list