From 865c2bc6d657fc79df96b74ca9d1b1eb26f0bbc6 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 23 Jan 2008 13:03:03 -0500 Subject: BUG: Work-around bug in MSVC 6 command line parsing. --- Source/cmLocalGenerator.cxx | 35 ++++++++++++++++++++++++++++++++++- Source/cmLocalGenerator.h | 2 ++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 60a6b72..62245fe 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -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, std::string& linkLibs, cmTarget& tgt, @@ -1554,7 +1587,7 @@ bool cmLocalGenerator::GetLinkerArgs(std::string& rpath, { if(li->IsPath) { - linkLibs += this->Convert(li->Value.c_str(), START_OUTPUT, SHELL); + linkLibs += this->ConvertToLinkReference(li->Value); } else { diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index 9a9be8c..f334163 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -327,6 +327,8 @@ protected: std::string FindRelativePathTopBinary(); void SetupPathConversions(); + std::string ConvertToLinkReference(std::string const& lib); + /** Check whether the native build system supports the given definition. Issues a warning. */ virtual bool CheckDefinition(std::string const& define) const; -- cgit v0.12