[prev in list] [next in list] [prev in thread] [next in thread]
List: kdevelop-devel
Subject: KDE/kdevelop/buildtools/managers/cmake
From: Aleix Pol Gonzalez <aleixpol () gmail ! com>
Date: 2008-09-02 23:17:54
Message-ID: 1220397474.760258.17498.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 856474 by apol:
Let CMake work with subprojects.
This is a very usual use case and a place where many people found "buggy" the way to \
work because when importing a subproject made KDevelop to mess up because of the \
non-parsed CMakeLists.txt files placed in parent directories. Now KDevelop looks if \
there are and it parses them too.
**Warning** it will always look for it, it is not yet configurable in the project \
file (it is configurable in the .kdev4/project.kdev4 file, should be moved)
Now it is possible to parse a cmake subproject without parsing the other \
subdirectories below or in the same level. It can be useful when you are working on \
a large project and you don't need the whole to be supported by KDevelop (for \
instance, when I'm working on KAlgebra in KDE-Edu, I don't need, let's say, the \
Marble buildtool information).
CCMAIL: kdevelop-devel@kdevelop.org
M +1 -0 cmakeconfig.kcfg
M +36 -13 cmakemanager.cpp
M +1 -0 cmakemanager.h
M +4 -2 cmakepreferences.cpp
--- trunk/KDE/kdevelop/buildtools/managers/cmake/cmakeconfig.kcfg #856473:856474
@@ -3,6 +3,7 @@
<kcfg>
<kcfgfile arg="true"/>
<group name="CMake">
+ <entry name="projectRoot" key="ProjectRoot" type="Url" />
<entry name="buildDirs" key="BuildDirs" type="PathList" />
<entry name="currentBuildDir" key="CurrentBuildDir" type="Url" />
<entry name="currentInstallDir" key="CurrentInstallDir" type="Url" />
--- trunk/KDE/kdevelop/buildtools/managers/cmake/cmakemanager.cpp #856473:856474
@@ -175,7 +175,7 @@
KSharedConfig::Ptr cfg = item->project()->projectConfiguration();
KConfigGroup group(cfg.data(), "CMake");
KUrl path = group.readEntry("CurrentBuildDir");
- KUrl projectPath = item->project()->folder();
+ KUrl projectPath = m_realRoot[item->project()];
ProjectFolderItem *fi=dynamic_cast<ProjectFolderItem*>(item);
for(; !fi && item; )
@@ -244,6 +244,25 @@
}
else
{
+ KSharedConfig::Ptr cfg = project->projectConfiguration();
+ KConfigGroup group(cfg.data(), "CMake");
+ m_subprojectRoot[project] = folderUrl;
+
+ if(group.hasKey("ProjectRoot"))
+ {
+ folderUrl=group.readEntry("ProjectRoot");
+ }
+ else
+ {
+ KUrl aux=folderUrl;
+ for(; QFile::exists(aux.toLocalFile()+"/CMakeLists.txt"); \
aux=aux.upUrl()) + {
+ kDebug() << "checking" << aux;
+ folderUrl=aux;
+ }
+ group.writeEntry("ProjectRoot", folderUrl);
+ }
+
m_realRoot[project] = folderUrl;
m_watchers[project] = new KDirWatch(project);
m_modulePathPerProject[project]=m_modulePathDef;
@@ -375,21 +394,25 @@
folder->setText(v.projectName());
}
- foreach (const QString& subf, v.subdirectories() )
+ KUrl subroot=m_subprojectRoot[item->project()];
+ foreach (const QString& subf, v.subdirectories())
{
- if( entries.contains( subf ) )
+ KUrl path(folder->url());
+ path.addPath(subf);
+
+ kDebug(9042) << "Found subdir " << path << "which should be into" << \
subroot; + if(subroot.isParentOf(path) || path.isParentOf(subroot))
{
- entries.removeAll( subf );
+ if(entries.contains(subf))
+ {
+ entries.removeAll(subf);
+ }
+
+ CMakeFolderItem* a = new CMakeFolderItem( item->project(), subf, \
folder ); + a->setUrl(path);
+ a->setDefinitions(v.definitions());
+ folderList.append( a );
}
-
-
- KUrl path(folder->url());
- path.addPath(subf);
-
- CMakeFolderItem* a = new CMakeFolderItem( item->project(), subf, folder \
);
- a->setUrl(path);
- a->setDefinitions(v.definitions());
- folderList.append( a );
}
QString folderUrl= folder->url().toLocalFile(KUrl::RemoveTrailingSlash);
--- trunk/KDE/kdevelop/buildtools/managers/cmake/cmakemanager.h #856473:856474
@@ -141,6 +141,7 @@
QMap<KDevelop::IProject*, KDirWatch*> m_watchers;
QMap<KDevelop::IProject*, CacheValues> m_projectCache;
QMap<KDevelop::IProject*, KUrl> m_realRoot;
+ QMap<KDevelop::IProject*, KUrl> m_subprojectRoot;
QMap<KUrl, CMakeFolderItem*> m_folderPerUrl;
--- trunk/KDE/kdevelop/buildtools/managers/cmake/cmakepreferences.cpp #856473:856474
@@ -68,8 +68,8 @@
connect(m_prefsUi->showAdvanced, SIGNAL(toggled(bool)), this, \
SLOT(showAdvanced(bool)));
showInternal(m_prefsUi->showInternal->checkState());
- m_srcFolder=KUrl(args[1].toString());
- m_srcFolder=m_srcFolder.upUrl();
+// m_srcFolder=KUrl(args[1].toString()).upUrl();
+
kDebug(9042) << "Source folder: " << m_srcFolder << args[1].toString();
// foreach(const QVariant &v, args)
// {
@@ -93,6 +93,8 @@
m_prefsUi->buildDirs->clear();
m_prefsUi->buildDirs->addItems(CMakeSettings::buildDirs());
m_prefsUi->buildDirs->setCurrentIndex( m_prefsUi->buildDirs->findText( \
CMakeSettings::currentBuildDir().toLocalFile() ) ); +
+ m_srcFolder=CMakeSettings::projectRoot();
if(m_prefsUi->buildDirs->count()==0)
{
_______________________________________________
KDevelop-devel mailing list
KDevelop-devel@kdevelop.org
https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic