Problem building 3.3.94
Nick Savoiu
savoiu at yahoo.com
Wed Dec 20 23:01:03 UTC 2006
Hmm, if the code can be wrangled to compile with --enable-final then why not make it the default mode afterwards? Then any checkin that breaks it can be more easily identified?
Nick
----- Original Message ----
From: Andras Mantia <amantia at kde.org>
To: kdevelop-devel at kdevelop.org
Sent: Wednesday, December 20, 2006 2:43:34 PM
Subject: Re: Problem building 3.3.94
On Wednesday 20 December 2006 23:43, Andreas Pakulat wrote:
> Hmm, all I heard of it until now was that it breaks completely fine
> code.
It breaks more often, but helps to create cleaner code. ;-)
> And the file has a proper
>
> #include "codemodel.h"
>
> at the top. The -I switches of the OP look a bit lacking, i.e.
> ../../lib/cppparser is missing where codemodel.h resides. And the
> Makefile.am does add the include to INCLUDES.
>
> I really see no error in the code or the build-system files, from
> that I conclude (for myself, until someone proofs otherwise) that
> --enable-final breaks compilation.
I don't have too much time to spend on this issue right now, but from
what I saw there seems to be some conflict between the headers.
enable-final creates a .cpp file with a bunch of #include "...cpp" (for
all .cpp files for the target). This also means that all #inclusions
from the .cpp and the .h files will be in one single file. This will
catch problems like using the same #ifdef SOMEFILE_H in two header
files (usually a copy/paste error), which otherwise could go unnoticed
unless somebody tries to use the two header files together. I checked,
and here this isn't the problem. But it is still some conflicting
issue, because if you just move around the #include statements in
the "big" .cpp file (e.g always move the problematic file to the
beginning) you will see that it compiles what did not compile before
indicating that things go wrong because the files that were before
include headers or contain codes which are conflicting with the
codemodel.h.
And if you ask me, I think I have found the problem. ;-)
simpletype.h has an enum:
enum Repository {
CodeModel,
Catalog,
StringList,
Both,
Undefined
};
CodeModel and Catalog are the same symbols as the CodeModel and Catalog
class defined in the interface. This means everywhere you would use
#include "codemodel.h" (or "catalog.h")
#include "simpletype.h"
referring to CodeModel or Catalog classes will not work!
The fact that this not happened yet is pure luck (try to add a
CodeModel test();
line to simpletype.cpp and you will see).
I keep my opinion that if a software build with --enable-final as well
it is generally more cleaner.
And while looking at this issue I also found strange things like:
#include "codemodel.h"
in simpletype.h, when the CodeModel *class* is not used
or in codemodel.h
using namespace std; (in a header file!)
class CodeModel; (when this is not needed as the class is defined some
lines below and it is not used before).
I think an inclusion review would not hurt. ;-)
Andras
--
Quanta Plus developer - http://quanta.kdewebdev.org
K Desktop Environment - http://www.kde.org
_______________________________________________
KDevelop-devel mailing list
KDevelop-devel at barney.cs.uni-potsdam.de
https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel
More information about the KDevelop-devel
mailing list