BUG: Make sure all source files are found before generating.
- Previously this was done implicitly by the check for a target link language which checked all source full paths. - The recent change to support computing a link language without finding all the source files skipped the implicit check. - This change adds an explicit check to find all source files.
This commit is contained in:
parent
96525cf3c3
commit
771bdb7ef8
|
@ -764,6 +764,12 @@ void cmGlobalGenerator::Generate()
|
|||
return;
|
||||
}
|
||||
|
||||
// Check that all targets are valid.
|
||||
if(!this->CheckTargets())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// For each existing cmLocalGenerator
|
||||
unsigned int i;
|
||||
|
||||
|
@ -850,6 +856,34 @@ void cmGlobalGenerator::Generate()
|
|||
this->CMakeInstance->UpdateProgress("Generating done", -1);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmGlobalGenerator::CheckTargets()
|
||||
{
|
||||
// Make sure all targets can find their source files.
|
||||
for(unsigned int i=0; i < this->LocalGenerators.size(); ++i)
|
||||
{
|
||||
cmTargets& targets =
|
||||
this->LocalGenerators[i]->GetMakefile()->GetTargets();
|
||||
for(cmTargets::iterator ti = targets.begin();
|
||||
ti != targets.end(); ++ti)
|
||||
{
|
||||
cmTarget& target = ti->second;
|
||||
if(target.GetType() == cmTarget::EXECUTABLE ||
|
||||
target.GetType() == cmTarget::STATIC_LIBRARY ||
|
||||
target.GetType() == cmTarget::SHARED_LIBRARY ||
|
||||
target.GetType() == cmTarget::MODULE_LIBRARY ||
|
||||
target.GetType() == cmTarget::UTILITY)
|
||||
{
|
||||
if(!target.FindSourceFiles())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void cmGlobalGenerator::CheckLocalGenerators()
|
||||
{
|
||||
std::map<cmStdString, cmStdString> notFoundMap;
|
||||
|
|
|
@ -260,6 +260,8 @@ protected:
|
|||
|
||||
virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS();
|
||||
|
||||
bool CheckTargets();
|
||||
|
||||
// Fill the ProjectMap, this must be called after LocalGenerators
|
||||
// has been populated.
|
||||
void FillProjectMap();
|
||||
|
|
|
@ -1005,6 +1005,21 @@ void cmTarget::TraceDependencies(const char* vsProjectFile)
|
|||
tracer.Trace();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmTarget::FindSourceFiles()
|
||||
{
|
||||
for(std::vector<cmSourceFile*>::const_iterator
|
||||
si = this->SourceFiles.begin();
|
||||
si != this->SourceFiles.end(); ++si)
|
||||
{
|
||||
if((*si)->GetFullPath().empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmTarget::AddSources(std::vector<std::string> const& srcs)
|
||||
{
|
||||
|
|
|
@ -271,6 +271,11 @@ public:
|
|||
*/
|
||||
void TraceDependencies(const char* vsProjectFile);
|
||||
|
||||
/**
|
||||
* Make sure the full path to all source files is known.
|
||||
*/
|
||||
bool FindSourceFiles();
|
||||
|
||||
///! Return the prefered linker language for this target
|
||||
const char* GetLinkerLanguage(cmGlobalGenerator*);
|
||||
|
||||
|
|
Loading…
Reference in New Issue