[PATCH] qmake4 -recursive, root *.pro handling
Andreas Pakulat
apaku at gmx.de
Sat Jul 28 19:53:32 UTC 2007
I'm sending this back to the list, so others may see my answers as
well..
On 28.07.07 17:14:45, Thomas Hasart wrote:
> On Saturday 28 July 2007 14:16:20 you wrote:
> > On 28.07.07 04:52:00, Thomas Hasart wrote:
> > > On Saturday 28 July 2007 02:38:28 Thomas Hasart wrote:
> > > Index: kdevelop-3.5/buildtools/qmake/qmakescopeitem.cpp
> > > ===================================================================
> > > --- kdevelop-3.5/buildtools/qmake/qmakescopeitem.cpp (revision 693442)
> > > +++ kdevelop-3.5/buildtools/qmake/qmakescopeitem.cpp (working copy)
> > > @@ -155,7 +155,7 @@
> > > QPtrListIterator<FileItem> it( files );
> > > while ( it.current() != 0 )
> > > {
> > > - if ( it.current() ->text( 0 ) == file ) //File already
> > > exists in this subproject + if ( it.current() ->fileName == file )
> > > //File already exists in this subproject return ;
> > > ++it;
> > > }
> > > @@ -213,7 +213,7 @@
> > > QPtrListIterator<FileItem> it( files );
> > > while ( it.current() != 0 )
> > > {
> > > - if ( it.current() ->text( 0 ) == filename ) //File already
> > > exists in this subproject + if ( it.current() ->fileName ==
> > > filename ) //File already exists in this subproject {
> > > FileItem * fitem = it.current();
> > > files.remove( it );
> > > @@ -297,6 +297,9 @@
> > > // by default excluded is set to false, thus file is included
> > > // excluded = exclude;
> > > setPixmap( 0, SmallIcon( "document" ) );
> > > + fileName=text;
> > > + QStringList tList=QStringList::split("/",text);
> > > + setText(0,tList.last());
> > > }
> >
> > Unless I'm totally mistaken (didn't look at the code for quite some
> > weeks) this is wrong. It breaks with relative files.
> This is to show the file name, instead the pathFromPro/filename;
I don't want that, it hides from the user where the file is and thats
not good.
> > > void TrollProjectWidget::emitAddedFile( const QString &fileName )
> > > @@ -2289,16 +2294,21 @@
> > >
> > > void TrollProjectWidget::runQMakeRecursive( QMakeScopeItem* proj )
> > > {
> > > - if ( proj->scope->scopeType() == Scope::ProjectScope )
> > > + if(m_part->isQt4Project())
> > > {
> > > - m_part->startQMakeCommand( proj->scope->projectDir() );
> > > + m_part->startQMakeCommand( proj->scope->projectDir(),true);
> > > + }else{
> >
> > Please stick to the existing code style here, i.e. whitespace around
> > else and { on a new line.
> >
> > > Index: kdevelop-3.5/buildtools/qmake/scope.cpp
> > > ===================================================================
> > > --- kdevelop-3.5/buildtools/qmake/scope.cpp (revision 693442)
> > > +++ kdevelop-3.5/buildtools/qmake/scope.cpp (working copy)
> > > @@ -971,6 +971,10 @@
> > >
> > > QString Scope::projectDir() const
> > > {
> > > + if(scopeType()==IncludeScope)
> > > + {
> > > + return parent()->projectDir();
> > > + }
> >
> > This is not correct I think. A include'd file is always evaluated by
> > qmake in its directory, not in the directory of the file that includes
> > it, i.e. if I have
> >
> > src/foo.pro
> > src/f1/f1.pri
> >
> > foo.pro: include(f1/f1.pri)
> >
> > then all stuff inside f1.pri is evaluated with src/f1 as current
> > directory.
> Oh thats new for me, I've tested it without "src/" in pri an it worked.
> The .pro and .pri for an large project i have create for a time for Qt 4.0.x
> and there the files are evaluated in the .pro dir (I had tested it at this
> time, before i changed the pri files in this way). May be that this was
> changed by newer qt versions, but the other way is also working. Have a look
> at the qt-sources, there are all pri file SOURCES with path from from pro
> file.
Hmm, maybe I was wrong. I remembered this from a thread on the
qt-interest mailinglist... However I can't reproduce this with qmake
from Qt4 here, i.e. the include() is always evaluated in the context of
the file where it is written in. So for
src/src.pro
bar/bar.pri
bar/foo/foo.pri
and include(foo/foo.pri) in bar.pri I get the expected result.
> Without the patch pri filese with path inside not handled correct and with the
> patch without path inside not handled correct.
> So it's not easy to correct the handling for both cases because i think the
> entire filepath is also builded outside from the Scope with
> projectDir()+$SOURCES....
Hmm, do you have a testcase for both problems? I can't even reproduce
your original problem here with the above sample, i.e. the
include(../bar/bar.pri) properly finds bar.pri and the
include(foo/foo.pri) in bar.pri is also properly visible in qmake
manager, without any changes from you.
Andreas
--
Live in a world of your own, but always welcome visitors.
More information about the KDevelop-devel
mailing list