BUG: fix problem when a target name is the same as the output of a custom command

This commit is contained in:
Bill Hoffman 2006-11-25 10:59:26 -05:00
parent 3ad6f7e880
commit 9baa760315
2 changed files with 46 additions and 4 deletions

View File

@ -1857,6 +1857,22 @@ std::string cmLocalGenerator::GetRealDependency(const char* inName,
// Look for a CMake target with the given name.
if(cmTarget* target = this->GlobalGenerator->FindTarget(0, name.c_str()))
{
// make sure it is not just a coincidence that the target name
// found is part of the inName
if(cmSystemTools::FileIsFullPath(inName))
{
std::string tLocation = target->GetLocation(config);
tLocation = cmSystemTools::GetFilenamePath(tLocation);
std::string depLocation = cmSystemTools::GetFilenamePath(
std::string(inName));
if(depLocation != tLocation)
{
// it is a full path to a depend that has the same name
// as a target but is in a different location so do not use
// the target as the depend
return inName;
}
}
switch (target->GetType())
{
case cmTarget::EXECUTABLE:

View File

@ -236,9 +236,35 @@ void cmTarget::TraceVSDependencies(std::string projFile,
{
dep = cmSystemTools::GetFilenameWithoutLastExtension(dep);
}
// watch for target dependencies,
if(this->Makefile->GetLocalGenerator()->
GetGlobalGenerator()->FindTarget(0, dep.c_str()))
bool isUtility = false;
// see if we can find a target with this name
cmTarget* t = this->Makefile->GetLocalGenerator()->
GetGlobalGenerator()->FindTarget(0, dep.c_str());
if(t)
{
// if we find the target and the dep was given as a full
// path, then make sure it was not a full path to something
// else, and the fact that the name matched a target was
// just a coincident
if(cmSystemTools::FileIsFullPath(
outsf->GetCustomCommand()->GetDepends()[i].c_str()))
{
std::string tLocation = t->GetLocation(0);
tLocation = cmSystemTools::GetFilenamePath(tLocation);
std::string depLocation = cmSystemTools::GetFilenamePath(
std::string(outsf->GetCustomCommand()->GetDepends()[i].c_str()));
if(depLocation == tLocation)
{
isUtility = true;
}
}
// if it was not a full path then it must be a target
else
{
isUtility = true;
}
}
if(isUtility)
{
// add the depend as a utility on the target
this->AddUtility(dep.c_str());