Browse Source

Report missing source files with context of target

Previously we reported only the CMakeLists.txt file in the directory
that adds the target.
Brad King 15 years ago
parent
commit
a6b5ead62f

+ 11 - 4
Source/cmSourceFile.cxx

@@ -101,11 +101,11 @@ cmSourceFileLocation const& cmSourceFile::GetLocation() const
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-std::string const& cmSourceFile::GetFullPath()
+std::string const& cmSourceFile::GetFullPath(std::string* error)
 {
 {
   if(this->FullPath.empty())
   if(this->FullPath.empty())
     {
     {
-    if(this->FindFullPath())
+    if(this->FindFullPath(error))
       {
       {
       this->CheckExtension();
       this->CheckExtension();
       }
       }
@@ -120,7 +120,7 @@ std::string const& cmSourceFile::GetFullPath() const
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-bool cmSourceFile::FindFullPath()
+bool cmSourceFile::FindFullPath(std::string* error)
 {
 {
   // If thie method has already failed once do not try again.
   // If thie method has already failed once do not try again.
   if(this->FindFullPathFailed)
   if(this->FindFullPathFailed)
@@ -199,7 +199,14 @@ bool cmSourceFile::FindFullPath()
     {
     {
     e << " ." << *ext;
     e << " ." << *ext;
     }
     }
-  this->Location.GetMakefile()->IssueMessage(cmake::FATAL_ERROR, e.str());
+  if(error)
+    {
+    *error = e.str();
+    }
+  else
+    {
+    this->Location.GetMakefile()->IssueMessage(cmake::FATAL_ERROR, e.str());
+    }
   this->FindFullPathFailed = true;
   this->FindFullPathFailed = true;
   return false;
   return false;
 }
 }

+ 2 - 2
Source/cmSourceFile.h

@@ -60,7 +60,7 @@ public:
    * horrible interface, but is necessary for backwards
    * horrible interface, but is necessary for backwards
    * compatibility).
    * compatibility).
    */
    */
-  std::string const& GetFullPath();
+  std::string const& GetFullPath(std::string* error = 0);
   std::string const& GetFullPath() const;
   std::string const& GetFullPath() const;
 
 
   /**
   /**
@@ -108,7 +108,7 @@ private:
   std::string FullPath;
   std::string FullPath;
   bool FindFullPathFailed;
   bool FindFullPathFailed;
 
 
-  bool FindFullPath();
+  bool FindFullPath(std::string* error);
   bool TryFullPath(const char* tryPath, const char* ext);
   bool TryFullPath(const char* tryPath, const char* ext);
   void CheckExtension();
   void CheckExtension();
   void CheckLanguage(std::string const& ext);
   void CheckLanguage(std::string const& ext);

+ 8 - 1
Source/cmTarget.cxx

@@ -1439,8 +1439,15 @@ bool cmTarget::FindSourceFiles()
         si = this->SourceFiles.begin();
         si = this->SourceFiles.begin();
       si != this->SourceFiles.end(); ++si)
       si != this->SourceFiles.end(); ++si)
     {
     {
-    if((*si)->GetFullPath().empty())
+    std::string e;
+    if((*si)->GetFullPath(&e).empty())
       {
       {
+      if(!e.empty())
+        {
+        cmake* cm = this->Makefile->GetCMakeInstance();
+        cm->IssueMessage(cmake::FATAL_ERROR, e,
+                         this->GetBacktrace());
+        }
       return false;
       return false;
       }
       }
     }
     }

+ 3 - 0
Tests/CMakeLists.txt

@@ -129,6 +129,9 @@ IF(BUILD_TESTING)
   ADD_TEST_MACRO(MathTest MathTest)
   ADD_TEST_MACRO(MathTest MathTest)
   ADD_TEST_MACRO(Simple Simple)
   ADD_TEST_MACRO(Simple Simple)
   ADD_TEST_MACRO(PreOrder PreOrder)
   ADD_TEST_MACRO(PreOrder PreOrder)
+  ADD_TEST_MACRO(MissingSourceFile MissingSourceFile)
+  SET_TESTS_PROPERTIES(MissingSourceFile PROPERTIES
+    PASS_REGULAR_EXPRESSION "CMake Error at CMakeLists.txt:3 \\(add_executable\\):[ \r\n]*Cannot find source file \"MissingSourceFile.c\"")
   ADD_TEST_MACRO(COnly COnly)
   ADD_TEST_MACRO(COnly COnly)
   ADD_TEST_MACRO(CxxOnly CxxOnly)
   ADD_TEST_MACRO(CxxOnly CxxOnly)
   ADD_TEST_MACRO(IPO COnly/COnly)
   ADD_TEST_MACRO(IPO COnly/COnly)

+ 3 - 0
Tests/MissingSourceFile/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(MissingSourceFile C)
+add_executable(MissingSourceFile MissingSourceFile.c)