Преглед на файлове

ENH: Fixed recursive make call target escaping for Borland to support SubDirSpaces test.

Brad King преди 18 години
родител
ревизия
fd3688fa72
променени са 4 файла, в които са добавени 18 реда и са изтрити 2 реда
  1. 2 2
      Source/CMakeLists.txt
  2. 1 0
      Source/cmGlobalBorlandMakefileGenerator.cxx
  3. 7 0
      Source/cmLocalUnixMakefileGenerator3.cxx
  4. 8 0
      Source/cmLocalUnixMakefileGenerator3.h

+ 2 - 2
Source/CMakeLists.txt

@@ -1012,7 +1012,7 @@ IF(BUILD_TESTING)
   # some old versions of make simply cannot handle spaces in paths
   IF (MAKE_IS_GNU OR 
       "${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR
-      "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode")
+      "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland")
     ADD_TEST(SubDirSpaces ${CMAKE_CTEST_COMMAND}
       --build-and-test
       "${CMake_SOURCE_DIR}/Tests/SubDirSpaces"
@@ -1028,7 +1028,7 @@ IF(BUILD_TESTING)
       )
   ENDIF (MAKE_IS_GNU OR
     "${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR
-    "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode")
+    "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland")
 
   IF (WIN32)
     ADD_TEST(SubDir ${CMAKE_CTEST_COMMAND}

+ 1 - 0
Source/cmGlobalBorlandMakefileGenerator.cxx

@@ -50,6 +50,7 @@ cmLocalGenerator *cmGlobalBorlandMakefileGenerator::CreateLocalGenerator()
   lg->SetPassMakeflags(true);
   lg->SetGlobalGenerator(this);
   lg->SetUnixCD(false);
+  lg->SetMakeCommandEscapeTargetTwice(true);
   return lg;
 }
 

+ 7 - 0
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -53,6 +53,7 @@ cmLocalUnixMakefileGenerator3::cmLocalUnixMakefileGenerator3()
   this->SkipAssemblySourceRules = false;
   this->NativeEchoCommand = "@echo ";
   this->NativeEchoWindows = true;
+  this->MakeCommandEscapeTargetTwice = false;
 }
 
 //----------------------------------------------------------------------------
@@ -1751,6 +1752,12 @@ cmLocalUnixMakefileGenerator3
     // The target may have been written with windows paths.
     cmSystemTools::ConvertToOutputSlashes(tgt2);
 
+    // Escape one extra time if the make tool requires it.
+    if(this->MakeCommandEscapeTargetTwice)
+      {
+      tgt2 = this->EscapeForShell(tgt2.c_str(), true, false);
+      }
+
     // The target name is now a string that should be passed verbatim
     // on the command line.
     cmd += this->EscapeForShell(tgt2.c_str(), true, false);

+ 8 - 0
Source/cmLocalUnixMakefileGenerator3.h

@@ -158,6 +158,13 @@ public:
    */
   void SetIgnoreLibPrefix(bool s) { this->IgnoreLibPrefix = s; }
 
+  /**
+   * Set whether passing a make target on a command line requires an
+   * extra level of escapes.
+   */
+  void SetMakeCommandEscapeTargetTwice(bool b)
+    { this->MakeCommandEscapeTargetTwice = b; }
+
   // used in writing out Cmake files such as WriteDirectoryInformation
   static void WriteCMakeArgument(std::ostream& os, const char* s);
 
@@ -334,6 +341,7 @@ private:
   bool UnixCD;
   bool PassMakeflags;
   bool SilentNoColon;
+  bool MakeCommandEscapeTargetTwice;
   //==========================================================================
 
   std::string HomeRelativeOutputPath;