BUG: use ./ infront of the current directory

This commit is contained in:
Bill Hoffman 2003-12-29 14:55:43 -05:00
parent 46aaf2dae8
commit b753a6794b
2 changed files with 26 additions and 3 deletions

View File

@ -65,12 +65,15 @@ void cmLocalGenerator::ConfigureFinalPass()
std::string cmLocalGenerator::ConvertToRelativeOutputPath(const char* p) std::string cmLocalGenerator::ConvertToRelativeOutputPath(const char* p)
{ {
// do not use relative paths for network build trees
// the network paths do not work
const char* outputDirectory = m_Makefile->GetHomeOutputDirectory(); const char* outputDirectory = m_Makefile->GetHomeOutputDirectory();
if ( outputDirectory && *outputDirectory && *(outputDirectory+1) && if ( outputDirectory && *outputDirectory && *(outputDirectory+1) &&
outputDirectory[0] == '/' && outputDirectory[1] == '/' ) outputDirectory[0] == '/' && outputDirectory[1] == '/' )
{ {
return cmSystemTools::ConvertToOutputPath(p); return cmSystemTools::ConvertToOutputPath(p);
} }
// The first time this is called, initialize all // The first time this is called, initialize all
// the path ivars that are used. This can not // the path ivars that are used. This can not
// be moved to the constructor because all the paths are not set yet. // be moved to the constructor because all the paths are not set yet.
@ -103,6 +106,13 @@ std::string cmLocalGenerator::ConvertToRelativeOutputPath(const char* p)
// Do the work of converting to a relative path // Do the work of converting to a relative path
std::string pathIn = p; std::string pathIn = p;
bool ispath = false;
if(pathIn.find('/') == pathIn.npos)
{
return pathIn;
}
std::string ret = pathIn; std::string ret = pathIn;
if(m_CurrentOutputDirectory.size() <= ret.size()) if(m_CurrentOutputDirectory.size() <= ret.size())
{ {
@ -170,6 +180,13 @@ std::string cmLocalGenerator::ConvertToRelativeOutputPath(const char* p)
{ {
ret = relpath; ret = relpath;
} }
if(ret.size() && ret[0] != '/' && ret[0] != '.')
{
if(ret.size() > 1 && ret[1] != ':')
{
ret = std::string("./") + ret;
}
}
ret = cmSystemTools::ConvertToOutputPath(ret.c_str()); ret = cmSystemTools::ConvertToOutputPath(ret.c_str());
return ret; return ret;
} }

View File

@ -1324,7 +1324,7 @@ void cmLocalUnixMakefileGenerator::OutputExecutableRule(std::ostream& fout,
target += cmSystemTools::GetExecutableExtension(); target += cmSystemTools::GetExecutableExtension();
target = this->ConvertToRelativeOutputPath(target.c_str()); target = this->ConvertToRelativeOutputPath(target.c_str());
bool needsLocalTarget = false; bool needsLocalTarget = false;
if(target.find('/') != target.npos) if(target.find('/', 2) != target.npos)
{ {
needsLocalTarget = true; needsLocalTarget = true;
} }
@ -1922,7 +1922,13 @@ BuildInSubDirectoryWindows(std::ostream& fout,
std::string currentDir = dir; std::string currentDir = dir;
cmSystemTools::ConvertToUnixSlashes(currentDir); cmSystemTools::ConvertToUnixSlashes(currentDir);
std::string cdback = ".."; std::string cdback = "..";
for(unsigned int i =0; i < currentDir.size(); ++i) unsigned int i = 0;
if(currentDir.size() > 2 && currentDir[0] == '.' && currentDir[1] == '/')
{
// start past ./ if it starts with ./
i = 2;
}
for(; i < currentDir.size(); ++i)
{ {
if(currentDir[i] == '/') if(currentDir[i] == '/')
{ {