[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