Browse Source

Ninja: Fix escaping of paths with spaces for Swift tooling

If a path inside a project contains spaces, the generated Ninja
definitions previously contained superfluous quotes.

Fixes: #26404
Winfried Auner 1 year ago
parent
commit
75e4cd8d18

+ 8 - 7
Source/cmNinjaTargetGenerator.cxx

@@ -1289,11 +1289,9 @@ void cmNinjaTargetGenerator::GenerateSwiftOutputFileMap(
     if (cmValue name = target->GetProperty("Swift_DEPENDENCIES_FILE")) {
       return *name;
     }
-    return this->GetLocalGenerator()->ConvertToOutputFormat(
-      this->ConvertToNinjaPath(cmStrCat(target->GetSupportDirectory(), '/',
-                                        config, '/', target->GetName(),
-                                        ".swiftdeps")),
-      cmOutputConverter::SHELL);
+    return this->ConvertToNinjaPath(cmStrCat(target->GetSupportDirectory(),
+                                             '/', config, '/',
+                                             target->GetName(), ".swiftdeps"));
   }();
 
   std::string mapFilePath =
@@ -1311,7 +1309,7 @@ void cmNinjaTargetGenerator::GenerateSwiftOutputFileMap(
 
   // Add flag
   this->LocalGenerator->AppendFlags(flags, "-output-file-map");
-  this->LocalGenerator->AppendFlagEscape(
+  this->LocalGenerator->AppendFlags(
     flags,
     this->GetLocalGenerator()->ConvertToOutputFormat(
       ConvertToNinjaPath(mapFilePath), cmOutputConverter::SHELL));
@@ -2014,7 +2012,10 @@ void cmNinjaTargetGenerator::WriteSwiftObjectBuildStatement(
     std::string const emitModuleFlag = "-emit-module";
     std::string const modulePathFlag = "-emit-module-path";
     this->LocalGenerator->AppendFlags(
-      vars["FLAGS"], { emitModuleFlag, modulePathFlag, moduleFilepath });
+      vars["FLAGS"],
+      { emitModuleFlag, modulePathFlag,
+        this->LocalGenerator->ConvertToOutputFormat(
+          moduleFilepath, cmOutputConverter::SHELL) });
     objBuild.Outputs.push_back(moduleFilepath);
   }
   this->LocalGenerator->AppendFlags(vars["FLAGS"],

+ 2 - 0
Tests/SwiftOnly/CMakeLists.txt

@@ -32,6 +32,8 @@ add_subdirectory(SubC)
 add_subdirectory(SubD)
 add_subdirectory(SubE)
 
+add_subdirectory("Sub Space")
+
 set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift)
 
 add_executable(SwiftOnly main.swift)

+ 1 - 0
Tests/SwiftOnly/Sub Space/CMakeLists.txt

@@ -0,0 +1 @@
+add_library(SubSpace SubSpace.swift)

+ 1 - 0
Tests/SwiftOnly/Sub Space/SubSpace.swift

@@ -0,0 +1 @@
+public func space() { print("space") }