ENH: fix for relative paths
This commit is contained in:
parent
82ec50f83f
commit
b1c5f1a7ba
|
@ -1884,7 +1884,8 @@ cmSourceFile* cmMakefile::GetSource(const char* sourceName) const
|
||||||
for(std::vector<cmSourceFile*>::const_iterator i = m_SourceFiles.begin();
|
for(std::vector<cmSourceFile*>::const_iterator i = m_SourceFiles.begin();
|
||||||
i != m_SourceFiles.end(); ++i)
|
i != m_SourceFiles.end(); ++i)
|
||||||
{
|
{
|
||||||
if ((*i)->GetSourceName() == sname &&
|
if (cmSystemTools::GetFilenameWithoutLastExtension((*i)->GetFullPath())
|
||||||
|
== sname &&
|
||||||
cmSystemTools::GetFilenamePath((*i)->GetFullPath()) == path &&
|
cmSystemTools::GetFilenamePath((*i)->GetFullPath()) == path &&
|
||||||
(ext.size() == 0 || (ext == (*i)->GetSourceExtension())))
|
(ext.size() == 0 || (ext == (*i)->GetSourceExtension())))
|
||||||
{
|
{
|
||||||
|
@ -2000,10 +2001,30 @@ cmSourceFile* cmMakefile::GetOrCreateSource(const char* sourceName,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
file.SetName(cmSystemTools::GetFilenameName(src.c_str()).c_str(),
|
std::string relPath = cmSystemTools::GetFilenamePath(sourceName);
|
||||||
path.c_str(),
|
if (relative && relPath.size())
|
||||||
this->GetSourceExtensions(),
|
{
|
||||||
this->GetHeaderExtensions());
|
// we need to keep the relative part of the filename
|
||||||
|
std::string fullPathLessRel = path;
|
||||||
|
std::string::size_type pos = fullPathLessRel.rfind(relPath);
|
||||||
|
if (pos == std::string::npos)
|
||||||
|
{
|
||||||
|
cmSystemTools::Error(
|
||||||
|
"CMake failed to properly look up relative cmSourceFile: ",
|
||||||
|
sourceName);
|
||||||
|
}
|
||||||
|
fullPathLessRel.erase(pos-1);
|
||||||
|
file.SetName(sourceName, fullPathLessRel.c_str(),
|
||||||
|
this->GetSourceExtensions(),
|
||||||
|
this->GetHeaderExtensions());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
file.SetName(cmSystemTools::GetFilenameName(src.c_str()).c_str(),
|
||||||
|
path.c_str(),
|
||||||
|
this->GetSourceExtensions(),
|
||||||
|
this->GetHeaderExtensions());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// add the source file to the makefile
|
// add the source file to the makefile
|
||||||
this->AddSource(file);
|
this->AddSource(file);
|
||||||
|
|
Loading…
Reference in New Issue