BUG: fix problem when a target name is the same as the output of a custom command
This commit is contained in:
parent
3ad6f7e880
commit
9baa760315
|
@ -1857,6 +1857,22 @@ std::string cmLocalGenerator::GetRealDependency(const char* inName,
|
||||||
// Look for a CMake target with the given name.
|
// Look for a CMake target with the given name.
|
||||||
if(cmTarget* target = this->GlobalGenerator->FindTarget(0, name.c_str()))
|
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())
|
switch (target->GetType())
|
||||||
{
|
{
|
||||||
case cmTarget::EXECUTABLE:
|
case cmTarget::EXECUTABLE:
|
||||||
|
|
|
@ -236,9 +236,35 @@ void cmTarget::TraceVSDependencies(std::string projFile,
|
||||||
{
|
{
|
||||||
dep = cmSystemTools::GetFilenameWithoutLastExtension(dep);
|
dep = cmSystemTools::GetFilenameWithoutLastExtension(dep);
|
||||||
}
|
}
|
||||||
// watch for target dependencies,
|
bool isUtility = false;
|
||||||
if(this->Makefile->GetLocalGenerator()->
|
// see if we can find a target with this name
|
||||||
GetGlobalGenerator()->FindTarget(0, dep.c_str()))
|
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
|
// add the depend as a utility on the target
|
||||||
this->AddUtility(dep.c_str());
|
this->AddUtility(dep.c_str());
|
||||||
|
|
Loading…
Reference in New Issue