mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2026-03-18 20:02:25 +00:00
Merge pull request #345 from brentleyjones/modulemap
Add support for Copy Files build phase
This commit is contained in:
@@ -590,9 +590,8 @@ public class PBXProjGenerator {
|
||||
let fileReference = targetFileReferences[target.name]
|
||||
var buildPhases: [String] = []
|
||||
|
||||
func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [String] {
|
||||
func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [String] {
|
||||
let files = sourceFiles
|
||||
.filter { $0.buildPhase == buildPhase }
|
||||
.reduce(into: [SourceFile]()) { output, sourceFile in
|
||||
if !output.contains(where: { $0.fileReference == sourceFile.fileReference }) {
|
||||
output.append(sourceFile)
|
||||
@@ -602,6 +601,21 @@ public class PBXProjGenerator {
|
||||
return files.map { createObject(id: $0.fileReference + target.name, $0.buildFile) }
|
||||
.map { $0.reference }
|
||||
}
|
||||
|
||||
func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [String] {
|
||||
let filteredSourceFiles = sourceFiles
|
||||
.filter { $0.buildPhase?.buildPhase == buildPhase }
|
||||
return getBuildFilesForSourceFiles(filteredSourceFiles)
|
||||
}
|
||||
|
||||
func getBuildFilesForCopyFilesPhases() -> [TargetSource.BuildPhase.CopyFilesSettings: [String]] {
|
||||
var sourceFilesByCopyFiles: [TargetSource.BuildPhase.CopyFilesSettings: [SourceFile]] = [:]
|
||||
for sourceFile in sourceFiles {
|
||||
guard case let .copyFiles(copyFilesSettings)? = sourceFile.buildPhase else { continue }
|
||||
sourceFilesByCopyFiles[copyFilesSettings, default: []].append(sourceFile)
|
||||
}
|
||||
return sourceFilesByCopyFiles.mapValues { getBuildFilesForSourceFiles($0) }
|
||||
}
|
||||
|
||||
buildPhases += try target.prebuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }
|
||||
|
||||
@@ -614,6 +628,22 @@ public class PBXProjGenerator {
|
||||
let resourcesBuildPhase = createObject(id: target.name, PBXResourcesBuildPhase(files: resourcesBuildPhaseFiles))
|
||||
buildPhases.append(resourcesBuildPhase.reference)
|
||||
}
|
||||
|
||||
let copyFilesBuildPhasesFiles = getBuildFilesForCopyFilesPhases()
|
||||
if !copyFilesBuildPhasesFiles.isEmpty {
|
||||
for (copyFiles, buildPhaseFiles) in copyFilesBuildPhasesFiles {
|
||||
let copyFilesBuildPhase = createObject(
|
||||
id: "copy files" + copyFiles.destination.rawValue + copyFiles.subpath + target.name,
|
||||
PBXCopyFilesBuildPhase(
|
||||
dstPath: copyFiles.subpath,
|
||||
dstSubfolderSpec: copyFiles.destination.destination,
|
||||
files: buildPhaseFiles
|
||||
)
|
||||
)
|
||||
|
||||
buildPhases.append(copyFilesBuildPhase.reference)
|
||||
}
|
||||
}
|
||||
|
||||
let headersBuildPhaseFiles = getBuildFilesForPhase(.headers)
|
||||
if !headersBuildPhaseFiles.isEmpty && (target.type == .framework || target.type == .dynamicLibrary) {
|
||||
|
||||
@@ -7,7 +7,7 @@ struct SourceFile {
|
||||
let path: Path
|
||||
let fileReference: String
|
||||
let buildFile: PBXBuildFile
|
||||
let buildPhase: BuildPhase?
|
||||
let buildPhase: TargetSource.BuildPhase?
|
||||
}
|
||||
|
||||
class SourceGenerator {
|
||||
@@ -52,15 +52,15 @@ class SourceGenerator {
|
||||
_ = try getSourceFiles(targetSource: TargetSource(path: path), path: fullPath)
|
||||
}
|
||||
|
||||
func generateSourceFile(targetSource: TargetSource, path: Path, buildPhase: BuildPhase? = nil) -> SourceFile {
|
||||
func generateSourceFile(targetSource: TargetSource, path: Path, buildPhase: TargetSource.BuildPhase? = nil) -> SourceFile {
|
||||
let fileReference = fileReferencesByPath[path.string.lowercased()]!
|
||||
var settings: [String: Any] = [:]
|
||||
let chosenBuildPhase: BuildPhase?
|
||||
let chosenBuildPhase: TargetSource.BuildPhase?
|
||||
|
||||
if let buildPhase = buildPhase {
|
||||
chosenBuildPhase = buildPhase
|
||||
} else if let buildPhase = targetSource.buildPhase {
|
||||
chosenBuildPhase = buildPhase.buildPhase
|
||||
chosenBuildPhase = buildPhase
|
||||
} else {
|
||||
chosenBuildPhase = getDefaultBuildPhase(for: path)
|
||||
}
|
||||
@@ -156,7 +156,7 @@ class SourceGenerator {
|
||||
}
|
||||
|
||||
/// returns a default build phase for a given path. This is based off the filename
|
||||
private func getDefaultBuildPhase(for path: Path) -> BuildPhase? {
|
||||
private func getDefaultBuildPhase(for path: Path) -> TargetSource.BuildPhase? {
|
||||
if path.lastComponent == "Info.plist" {
|
||||
return nil
|
||||
}
|
||||
@@ -424,9 +424,9 @@ class SourceGenerator {
|
||||
rootGroups.insert(fileReference)
|
||||
}
|
||||
|
||||
let buildPhase: BuildPhase?
|
||||
let buildPhase: TargetSource.BuildPhase?
|
||||
if let targetBuildPhase = targetSource.buildPhase {
|
||||
buildPhase = targetBuildPhase.buildPhase
|
||||
buildPhase = targetBuildPhase
|
||||
} else {
|
||||
buildPhase = .resources
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user