BUG: Work-around bug in MSVC 6 command line parsing.

This commit is contained in:
Brad King 2008-01-23 13:03:03 -05:00
parent 3d63c85f75
commit 865c2bc6d6
2 changed files with 36 additions and 1 deletions

View File

@ -1451,6 +1451,39 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
} }
} }
std::string cmLocalGenerator::ConvertToLinkReference(std::string const& lib)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
// Work-ardound MSVC 6 command line bug. This block is only needed
// on windows when we are really using the MSVC 6.0 compiler command
// line.
if(this->Makefile->IsOn("MSVC60"))
{
// Search for the last space.
std::string::size_type pos = lib.rfind(' ');
if(pos != lib.npos)
{
// Find the slash after the last space, if any.
pos = lib.find('/', pos);
// Convert the portion of the path with a space to a short path.
std::string sp;
if(cmSystemTools::GetShortPath(lib.substr(0, pos).c_str(), sp))
{
// Append the rest of the path with no space.
sp += lib.substr(pos);
// Convert to an output path.
return this->Convert(sp.c_str(), NONE, SHELL);
}
}
}
#endif
// Normal behavior.
return this->Convert(lib.c_str(), START_OUTPUT, SHELL);
}
bool cmLocalGenerator::GetLinkerArgs(std::string& rpath, bool cmLocalGenerator::GetLinkerArgs(std::string& rpath,
std::string& linkLibs, std::string& linkLibs,
cmTarget& tgt, cmTarget& tgt,
@ -1554,7 +1587,7 @@ bool cmLocalGenerator::GetLinkerArgs(std::string& rpath,
{ {
if(li->IsPath) if(li->IsPath)
{ {
linkLibs += this->Convert(li->Value.c_str(), START_OUTPUT, SHELL); linkLibs += this->ConvertToLinkReference(li->Value);
} }
else else
{ {

View File

@ -327,6 +327,8 @@ protected:
std::string FindRelativePathTopBinary(); std::string FindRelativePathTopBinary();
void SetupPathConversions(); void SetupPathConversions();
std::string ConvertToLinkReference(std::string const& lib);
/** Check whether the native build system supports the given /** Check whether the native build system supports the given
definition. Issues a warning. */ definition. Issues a warning. */
virtual bool CheckDefinition(std::string const& define) const; virtual bool CheckDefinition(std::string const& define) const;