Browse Source

ENH: better error reporting, and add NOTFOUND into cache for library and file find

Bill Hoffman 24 years ago
parent
commit
2a7964e310
3 changed files with 43 additions and 9 deletions
  1. 20 4
      Source/cmFindIncludeCommand.cxx
  2. 20 4
      Source/cmFindLibraryCommand.cxx
  3. 3 1
      Source/cmMakefile.cxx

+ 20 - 4
Source/cmFindIncludeCommand.cxx

@@ -28,9 +28,12 @@ bool cmFindIncludeCommand::Invoke(std::vector<std::string>& args)
   // already, if so use that value and don't look for the program
   const char* cacheValue
     = cmCacheManager::GetInstance()->GetCacheValue(args[0].c_str());
-  if(cacheValue)
+  if(cacheValue )
     {
-    m_Makefile->AddDefinition(args[0].c_str(), cacheValue);
+    if(strcmp(cacheValue, "NOTFOUND") != 0)
+      {
+      m_Makefile->AddDefinition(args[0].c_str(), cacheValue);
+      }
     return true;
     }
   std::vector<std::string> path;
@@ -45,8 +48,8 @@ bool cmFindIncludeCommand::Invoke(std::vector<std::string>& args)
 
   // add the standard path
   cmSystemTools::GetPath(path);
-
-  for(unsigned int k=0; k < path.size(); k++)
+  unsigned int k;
+  for(k=0; k < path.size(); k++)
     {
     std::string tryPath = path[k];
     tryPath += "/";
@@ -61,6 +64,19 @@ bool cmFindIncludeCommand::Invoke(std::vector<std::string>& args)
       return true;
       }
     }
+  cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
+                                               "NOTFOUND",
+                                               cmCacheManager::PATH);
+  std::string message = "Include not found: ";
+  message += args[1];
+  message += "\n";
+  message += "looked in ";
+  for(k=0; k < path.size(); k++)
+    {
+    message += path[k];
+    message += "\n";
+    }
+  this->SetError(message.c_str());
   return false;
 }
 

+ 20 - 4
Source/cmFindLibraryCommand.cxx

@@ -29,8 +29,11 @@ bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
   const char* cacheValue
     = cmCacheManager::GetInstance()->GetCacheValue(args[0].c_str());
   if(cacheValue)
-    {
-    m_Makefile->AddDefinition(args[0].c_str(), cacheValue);
+    { 
+    if(strcmp(cacheValue, "NOTFOUND") != 0)
+      {
+      m_Makefile->AddDefinition(args[0].c_str(), cacheValue);
+      }
     return true;
     }
   std::vector<std::string> path;
@@ -45,8 +48,8 @@ bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
 
   // add the standard path
   cmSystemTools::GetPath(path);
-
-  for(unsigned int k=0; k < path.size(); k++)
+  unsigned int k;
+  for(k=0; k < path.size(); k++)
     {
     std::string tryPath = path[k];
     tryPath += "/";
@@ -60,6 +63,19 @@ bool cmFindLibraryCommand::Invoke(std::vector<std::string>& args)
       return true;
       }
     }
+  cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(),
+                                               "NOTFOUND",
+                                               cmCacheManager::PATH);
+  std::string message = "Library not found: ";
+  message += args[1];
+  message += "\n";
+  message += "looked in ";
+  for(k=0; k < path.size(); k++)
+    {
+    message += path[k];
+    message += "\n";
+    }
+  this->SetError(message.c_str());
   return false;
 }
 

+ 3 - 1
Source/cmMakefile.cxx

@@ -190,7 +190,9 @@ bool cmMakefile::ReadListFile(const char* filename)
               {
               if(!usedCommand->Invoke(arguments))
                 {
-                cmSystemTools::Error(usedCommand->GetError());
+                cmSystemTools::Error(usedCommand->GetName(),
+                                     ": Error : \n",
+                                     usedCommand->GetError());
                 }
               else
                 {