diff --git a/Sources/PackageLoading/ModuleMapGenerator.swift b/Sources/PackageLoading/ModuleMapGenerator.swift index 5f9cb4cb09d..1355a90328f 100644 --- a/Sources/PackageLoading/ModuleMapGenerator.swift +++ b/Sources/PackageLoading/ModuleMapGenerator.swift @@ -18,12 +18,6 @@ import TSCBasic /// Name of the module map file recognized by the Clang and Swift compilers. public let moduleMapFilename = "module.modulemap" -extension Basics.AbsolutePath { - fileprivate var moduleEscapedPathString: String { - return self.pathString.replacing("\\", with: "\\\\") - } -} - /// A protocol for targets which might have a modulemap. protocol ModuleMapProtocol { var moduleMapPath: Basics.AbsolutePath { get } @@ -179,9 +173,9 @@ public struct ModuleMapGenerator { var moduleMap = "module \(moduleName) {\n" switch type { case .umbrellaHeader(let hdr): - moduleMap.append(" umbrella header \"\(hdr.moduleEscapedPathString)\"\n") + moduleMap.append(" umbrella header \"\(hdr.escapedPathString)\"\n") case .umbrellaDirectory(let dir): - moduleMap.append(" umbrella \"\(dir.moduleEscapedPathString)\"\n") + moduleMap.append(" umbrella \"\(dir.escapedPathString)\"\n") } moduleMap.append( """ diff --git a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift index 55d7fe227dc..727562b27dd 100644 --- a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift +++ b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift @@ -14,6 +14,7 @@ import Foundation import TSCUtility import struct Basics.AbsolutePath +import struct Basics.RelativePath import class Basics.ObservabilitySystem import func Basics.resolveSymlinks import struct Basics.SourceControlURL @@ -352,8 +353,8 @@ extension PackagePIFProjectBuilder { // Generate a module map file, if needed. var moduleMapFileContents = "" - var moduleMapFile = "" let generatedModuleMapDir = "$(GENERATED_MODULEMAP_DIR)" + let moduleMapFile = try RelativePath(validating:"\(generatedModuleMapDir)/\(sourceModule.name).modulemap").pathString if sourceModule.usesSwift && desiredModuleType != .macro { // Generate ObjC compatibility header for Swift library targets. @@ -366,8 +367,6 @@ extension PackagePIFProjectBuilder { export * } """ - moduleMapFile = "\(generatedModuleMapDir)/\(sourceModule.name).modulemap" - // We only need to impart this to C clients. impartedSettings[.OTHER_CFLAGS] = ["-fmodule-map-file=\(moduleMapFile)", "$(inherited)"] } else if sourceModule.moduleMapFileRelativePath(fileSystem: self.pifBuilder.fileSystem) == nil { @@ -376,7 +375,7 @@ extension PackagePIFProjectBuilder { log(.debug, "\(package.name).\(sourceModule.name) generated umbrella header") moduleMapFileContents = """ module \(sourceModule.c99name) { - umbrella header "\(path)" + umbrella header "\(path.escapedPathString)" export * } """ @@ -384,14 +383,13 @@ extension PackagePIFProjectBuilder { log(.debug, "\(package.name).\(sourceModule.name) generated umbrella directory") moduleMapFileContents = """ module \(sourceModule.c99name) { - umbrella "\(path)" + umbrella "\(path.escapedPathString)" export * } """ } if moduleMapFileContents.hasContent { // Pass the path of the module map up to all direct and indirect clients. - moduleMapFile = "\(generatedModuleMapDir)/\(sourceModule.name).modulemap" impartedSettings[.OTHER_CFLAGS] = ["-fmodule-map-file=\(moduleMapFile)", "$(inherited)"] impartedSettings[.OTHER_SWIFT_FLAGS] = ["-Xcc", "-fmodule-map-file=\(moduleMapFile)", "$(inherited)"] }