SVN commit 600843 by apaku: Fix handling of "SUBDIRS = foobar.pro", also allow to add foobar.pro via the gui M +51 -34 scope.cpp M +14 -11 trollprojectwidget.cpp M +1 -1 trollprojectwidget.h --- branches/kdevelop/3.4/buildtools/qmake/scope.cpp #600842:600843 @@ -95,7 +95,7 @@ Scope::Scope( Scope* parent, const QString& filename, TrollProjectPart* part, bool isEnabled ) : m_root( 0 ), m_incast( 0 ), m_parent( parent ), m_isEnabled( isEnabled ), m_part(part) { -if ( !loadFromFile( filename ) ) + if ( !loadFromFile( filename ) ) { if( !QFileInfo( filename ).exists() ) { @@ -132,7 +132,7 @@ bool Scope::loadFromFile( const QString& filename ) { - if ( QMake::Driver::parseFile( filename, &m_root ) != 0 ) + if ( !QFileInfo(filename).exists() || QMake::Driver::parseFile( filename, &m_root ) != 0 ) { kdDebug( 9024 ) << "Couldn't parse project: " << filename << endl; m_root = 0; @@ -389,9 +389,12 @@ return m_root->scopedID; else if ( m_root->isProject() ) { - if( m_parent ) + if( m_parent && QDir::cleanDirPath( m_parent->projectDir() ) != QDir::cleanDirPath( projectDir() ) ) { return getRelativePath( m_parent->projectDir(), projectDir() ); + }else if ( m_parent && QDir::cleanDirPath( m_parent->projectDir() ) == QDir::cleanDirPath( projectDir() ) ) + { + return fileName(); }else return QFileInfo( projectDir() ).fileName() ; } @@ -478,29 +481,33 @@ } -Scope* Scope::createSubProject( const QString& dir ) +Scope* Scope::createSubProject( const QString& projname ) { if( !m_root ) return 0; - if( variableValuesForOp( "SUBDIRS", "-=").contains( dir ) ) - removeFromMinusOp( "SUBDIRS", dir ); + if( variableValuesForOp( "SUBDIRS", "-=").contains( projname ) ) + removeFromMinusOp( "SUBDIRS", projname ); QDir curdir( projectDir() ); if ( variableValues("TEMPLATE").contains( "subdirs" ) ) { - if ( !curdir.exists( dir ) ) - if ( !curdir.mkdir( dir ) ) - return 0; - curdir.cd(dir); QString filename; - QStringList entries = curdir.entryList("*.pro", QDir::Files); + if( !projname.endsWith(".pro") ) + { + if ( !curdir.exists( projname ) ) + if ( !curdir.mkdir( projname ) ) + return 0; + curdir.cd( projname ); + QStringList entries = curdir.entryList("*.pro", QDir::Files); - if ( !entries.isEmpty() && !entries.contains( curdir.dirName()+".pro" ) ) - filename = curdir.absPath() + QString(QChar(QDir::separator()))+entries.first(); - else - filename = curdir.absPath() + QString(QChar(QDir::separator()))+curdir.dirName()+".pro"; + if ( !entries.isEmpty() && !entries.contains( curdir.dirName()+".pro" ) ) + filename = curdir.absPath() + QString(QChar(QDir::separator()))+entries.first(); + else + filename = curdir.absPath() + QString(QChar(QDir::separator()))+curdir.dirName()+".pro"; + }else + filename = curdir.absPath() + QString(QChar(QDir::separator())) + projname; kdDebug( 9024 ) << "Creating subproject with filename:" << filename << endl; @@ -510,8 +517,8 @@ if( s->variableValues("TEMPLATE").isEmpty() ) s->setEqualOp("TEMPLATE", QStringList("app")); s->saveToFile(); - addToPlusOp( "SUBDIRS", QStringList( dir ) ); - m_subProjects.insert( dir, s ); + addToPlusOp( "SUBDIRS", QStringList( projname ) ); + m_subProjects.insert( projname, s ); return s; } else { @@ -607,19 +614,22 @@ if ( deleteSubdir ) { QDir projdir = QDir( projectDir() ); - QDir subdir = QDir( projectDir() + QString( QChar( QDir::separator() ) ) + dir ); - if ( subdir.exists() ) + if( !dir.endsWith(".pro") ) { - QStringList entries = subdir.entryList(); - for ( QStringList::iterator eit = entries.begin() ; eit != entries.end() ; ++eit ) + QDir subdir = QDir( projectDir() + QString( QChar( QDir::separator() ) ) + dir ); + if ( subdir.exists() ) { - if( *eit == "." || *eit == ".." ) - continue; - if( !subdir.remove( *eit ) ) - kdDebug( 9024 ) << "Couldn't delete " << *eit << " from " << subdir.absPath() << endl; + QStringList entries = subdir.entryList(); + for ( QStringList::iterator eit = entries.begin() ; eit != entries.end() ; ++eit ) + { + if( *eit == "." || *eit == ".." ) + continue; + if( !subdir.remove( *eit ) ) + kdDebug( 9024 ) << "Couldn't delete " << *eit << " from " << subdir.absPath() << endl; + } + if( !projdir.rmdir( dir ) ) + kdDebug( 9024 ) << "Couldn't delete " << dir << " from " << projdir.absPath() << endl; } - if( !projdir.rmdir( dir ) ) - kdDebug( 9024 ) << "Couldn't delete " << dir << " from " << projdir.absPath() << endl; } } Scope* project = m_subProjects[ dir ]; @@ -837,16 +847,23 @@ for ( QStringList::const_iterator sit = m->values.begin() ; sit != m->values.end(); ++sit ) { QString str = *sit; - if ( *sit == "\\\n" || *sit == "\n" || *sit == "." || *sit == "./" || (*sit).stripWhiteSpace() == "" ) + if ( str == "\\\n" || str == "\n" || str == "." || str == "./" || (str).stripWhiteSpace() == "" ) continue; - QDir subproject = QDir( projectDir() + QString( QChar( QDir::separator() ) ) + *sit, "*.pro", QDir::Name | QDir::IgnoreCase, QDir::Files ); + QDir subproject; QString projectfile; - if ( subproject.entryList().isEmpty() || subproject.entryList().contains( *sit + ".pro" ) ) - projectfile = (*sit) + ".pro"; - else - projectfile = subproject.entryList().first(); + if( str.endsWith(".pro") ) + { + subproject = QDir( projectDir(), "*.pro", QDir::Name | QDir::IgnoreCase, QDir::Files ); + projectfile = str; + }else + { subproject = QDir( projectDir() + QString( QChar( QDir::separator() ) ) + str, "*.pro", QDir::Name | QDir::IgnoreCase, QDir::Files ); + if ( subproject.entryList().isEmpty() || subproject.entryList().contains( *sit + ".pro" ) ) + projectfile = (*sit) + ".pro"; + else + projectfile = subproject.entryList().first(); + } kdDebug( 9024 ) << "Parsing subproject: " << projectfile << endl; - m_subProjects.insert( *sit, new Scope( this, subproject.absFilePath( projectfile ), m_part, ( m->op != "-=" )) ); + m_subProjects.insert( str, new Scope( this, subproject.absFilePath( projectfile ), m_part, ( m->op != "-=" )) ); } } else --- branches/kdevelop/3.4/buildtools/qmake/trollprojectwidget.cpp #600842:600843 @@ -154,7 +154,7 @@ "external libraries,
build order,
intermediate files locations,
compiler options." ) ); // Project button connections - connect ( addSubdirButton, SIGNAL ( clicked () ), this, SLOT ( slotAddSubdir () ) ); + connect ( addSubdirButton, SIGNAL ( clicked () ), this, SLOT ( slotAddSubproject () ) ); connect ( createScopeButton, SIGNAL ( clicked () ), this, SLOT ( slotCreateScope () ) ); @@ -772,7 +772,7 @@ return ; } -void TrollProjectWidget::slotAddSubdir( QMakeScopeItem *spitem ) +void TrollProjectWidget::slotAddSubproject( QMakeScopeItem *spitem ) { if ( spitem == 0 && m_shownSubproject == 0 ) return ; @@ -781,8 +781,8 @@ QString projectdir = spitem->scope->projectDir(); - KURLRequesterDlg dialog( i18n( "Add Subdirectory" ), i18n( "Please enter a name for the subdirectory: " ), this, 0 ); - dialog.urlRequester() ->setMode( KFile::Directory | KFile::LocalOnly ); + KURLRequesterDlg dialog( i18n( "Add Subproject" ), i18n( "Please enter a name for the subproject: " ), this, 0 ); + dialog.urlRequester() ->setMode( KFile::Directory | KFile::Files | KFile::LocalOnly ); dialog.urlRequester() ->setURL( QString::null ); dialog.urlRequester() ->completionObject() ->setDir( projectdir ); @@ -796,16 +796,19 @@ while( subdirname.endsWith( QString(QChar(QDir::separator())) ) ) subdirname = subdirname.left(subdirname.length()-1); - kdDebug(9024) << "Cleaned subdirname: " << subdirname << endl; - QDir dir( projectdir ); - if ( !dir.exists( subdirname ) ) + if( !subdirname.endsWith(".pro") ) { - if ( !dir.mkdir( subdirname ) ) + kdDebug(9024) << "Cleaned subdirname: " << subdirname << endl; + QDir dir( projectdir ); + if ( !dir.exists( subdirname ) ) { - KMessageBox::error( this, i18n( "Failed to create subdirectory. " + if ( !dir.mkdir( subdirname ) ) + { + KMessageBox::error( this, i18n( "Failed to create subdirectory. " "Do you have write permission " "in the project folder?" ) ); - return ; + return ; + } } } @@ -958,7 +961,7 @@ QString relpath = spitem->relativePath(); if ( r == idAddSubproject ) { - slotAddSubdir( spitem ); + slotAddSubproject( spitem ); } if ( r == idRemoveSubproject ) { --- branches/kdevelop/3.4/buildtools/qmake/trollprojectwidget.h #600842:600843 @@ -123,7 +123,7 @@ void slotDetailsExecuted( QListViewItem *item ); void slotDetailsContextMenu( KListView *, QListViewItem *item, const QPoint &p ); void slotExcludeFileFromScopeButton(); - void slotAddSubdir( QMakeScopeItem *spitem = 0 ); + void slotAddSubproject( QMakeScopeItem *spitem = 0 ); void slotRemoveSubproject( QMakeScopeItem *spitem = 0 ); void slotCreateScope( QMakeScopeItem *spitem = 0 ); void slotRemoveScope( QMakeScopeItem *spitem = 0 );