Ver Fonte

BUG: borland make treats ./target and target as different also convert to outputpathrelative may get passed a quoted path

Bill Hoffman há 22 anos atrás
pai
commit
ae69928e69
2 ficheiros alterados com 18 adições e 4 exclusões
  1. 7 3
      Source/cmLocalGenerator.cxx
  2. 11 1
      Source/cmLocalUnixMakefileGenerator.cxx

+ 7 - 3
Source/cmLocalGenerator.cxx

@@ -106,13 +106,16 @@ std::string cmLocalGenerator::ConvertToRelativeOutputPath(const char* p)
 
   // Do the work of converting to a relative path 
   std::string pathIn = p;
-  bool ispath = false;
   if(pathIn.find('/') == pathIn.npos)
     {
     return pathIn;
     }
   
-
+  if(pathIn.size() && pathIn[0] == '\"')
+    {
+    pathIn = pathIn.substr(1, pathIn.size()-2);
+    }
+  
   std::string ret = pathIn;
   if(m_CurrentOutputDirectory.size() <= ret.size())
     {
@@ -180,7 +183,8 @@ std::string cmLocalGenerator::ConvertToRelativeOutputPath(const char* p)
     {
     ret = relpath;
     }
-  if(ret.size() && ret[0] != '/' && ret[0] != '.')
+  if(ret.size() 
+     && ret[0] != '\"' && ret[0] != '/' && ret[0] != '.')
     {
     if(ret.size() > 1 && ret[1] != ':')
       {

+ 11 - 1
Source/cmLocalUnixMakefileGenerator.cxx

@@ -1323,11 +1323,21 @@ void cmLocalUnixMakefileGenerator::OutputExecutableRule(std::ostream& fout,
   target += name;
   target += cmSystemTools::GetExecutableExtension();  
   target = this->ConvertToRelativeOutputPath(target.c_str());
+  cmSystemTools::ConvertToUnixSlashes(target);
   bool needsLocalTarget = false;
-  if(target.find('/', 2) != target.npos)
+  unsigned int startPos = 2;
+  if(m_Makefile->GetDefinition("BORLAND"))
+    {
+    // the borland makefiles treat .\target and target as different
+    // targets.  All other makes treat them the same
+    startPos = 0;
+    }
+  if(target.find('/', startPos) != target.npos)
     {
     needsLocalTarget = true;
     }
+  target = cmSystemTools::ConvertToOutputPath(target.c_str());
+
 
   std::string objs = "$(" + this->CreateMakeVariable(name, "_SRC_OBJS") + ") ";
   std::string depend = "$(";