Merge topic 'improve-missing-source-file-error'

a6b5ead Report missing source files with context of target
This commit is contained in:
Brad King 2010-09-14 13:31:10 -04:00 committed by CMake Topic Stage
commit 6580f5de99
5 changed files with 27 additions and 7 deletions

View File

@ -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->FindFullPath())
if(this->FindFullPath(error))
{
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(this->FindFullPathFailed)
@ -199,7 +199,14 @@ bool cmSourceFile::FindFullPath()
{
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;
return false;
}

View File

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

View File

@ -1428,8 +1428,15 @@ bool cmTarget::FindSourceFiles()
si = this->SourceFiles.begin();
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;
}
}

View File

@ -129,6 +129,9 @@ IF(BUILD_TESTING)
ADD_TEST_MACRO(MathTest MathTest)
ADD_TEST_MACRO(Simple Simple)
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(CxxOnly CxxOnly)
ADD_TEST_MACRO(IPO COnly/COnly)

View File

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