Bladeren bron

Now adds dependency if the file doesn't exist but will be created during the compilation

Franck Bettinger 24 jaren geleden
bovenliggende
commit
8c7b9cbf10
1 gewijzigde bestanden met toevoegingen van 41 en 4 verwijderingen
  1. 41 4
      Source/cmMakeDepend.cxx

+ 41 - 4
Source/cmMakeDepend.cxx

@@ -121,7 +121,6 @@ void cmMakeDepend::GenerateDependInformation(cmDependInformation* info)
     // Make sure we don't visit the same file more than once.
     info->m_DependDone = true;
     }
-  
   const char* path = info->m_FullPath.c_str();
   if(!path)
     {
@@ -130,7 +129,7 @@ void cmMakeDepend::GenerateDependInformation(cmDependInformation* info)
     }
 
   bool found = false;
-  
+
   // If the file exists, use it to find dependency information.
   if(cmSystemTools::FileExists(path))
     {
@@ -138,11 +137,13 @@ void cmMakeDepend::GenerateDependInformation(cmDependInformation* info)
     this->DependWalk(info);
     found = true;
     }
-  
+
+ 
   // See if the cmSourceFile for it has any files specified as
   // dependency hints.
   if(info->m_cmSourceFile != 0)
     {
+
     // Get the cmSourceFile corresponding to this.
     const cmSourceFile& cFile = *(info->m_cmSourceFile);
     // See if there are any hints for finding dependencies for the missing
@@ -162,7 +163,43 @@ void cmMakeDepend::GenerateDependInformation(cmDependInformation* info)
       found = true;
       }
     }
-  
+
+  if(!found)
+    {
+    // Try to find the file amongst the sources
+    cmMakefile::SourceMap srcmap = m_Makefile->GetSources();
+    cmMakefile::SourceMap::iterator l;
+    for (l= srcmap.begin() ; l!=srcmap.end() ; l++)
+      {
+      for(std::vector<cmSourceFile>::iterator i = l->second.begin();
+          i != l->second.end(); i++)
+        {
+        if (i->GetFullPath() == path)
+          {
+          found=true;
+          }
+        else
+          {
+          //try to guess which include path to use
+          for(std::vector<std::string>::iterator t = 
+              m_IncludeDirectories.begin();
+              t != m_IncludeDirectories.end(); ++t)
+            {
+            std::string incpath = *t;
+            incpath = incpath + "/";
+            incpath = incpath + path;
+            if (i->GetFullPath() == incpath)
+              {
+              // set the path to the guessed path
+              info->m_FullPath = incpath; 
+              found=true;
+              }
+            }
+          }
+        }
+      }
+    }
+
   if(!found)
     {
     // Couldn't find any dependency information.