Skip to content

Commit a596880

Browse files
committed
[xcodegen] Add --prefer-folder-refs flag
1 parent 84ba92d commit a596880

File tree

4 files changed

+27
-2
lines changed

4 files changed

+27
-2
lines changed

utils/swift-xcodegen/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ PROJECT CONFIGURATION:
8787
on the build arguments of surrounding files. This is mainly useful for
8888
files that aren't built in the default config, but are still useful to
8989
edit (e.g sourcekitdAPI-InProc.cpp). (default: --infer-args)
90+
--prefer-folder-refs/--no-prefer-folder-refs
91+
Whether to prefer folder references for groups containing non-source
92+
files (default: --no-prefer-folder-refs)
9093
9194
MISC:
9295
--project-root-dir <project-root-dir>

utils/swift-xcodegen/Sources/SwiftXcodeGen/Generator/ProjectSpec.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public struct ProjectSpec {
3636
/// on the build arguments of surrounding files.
3737
public var inferArgs: Bool
3838

39+
/// Whether to prefer using folder references for groups containing non-source
40+
/// files.
41+
public var preferFolderRefs: Bool
42+
3943
/// If provided, the paths added will be implicitly appended to this path.
4044
let mainRepoDir: RelativePath?
4145

@@ -50,7 +54,7 @@ public struct ProjectSpec {
5054
_ name: String, for buildDir: RepoBuildDir, runnableBuildDir: RepoBuildDir,
5155
addClangTargets: Bool, addSwiftTargets: Bool,
5256
addSwiftDependencies: Bool, addRunnableTargets: Bool,
53-
addBuildForRunnableTargets: Bool, inferArgs: Bool,
57+
addBuildForRunnableTargets: Bool, inferArgs: Bool, preferFolderRefs: Bool,
5458
mainRepoDir: RelativePath? = nil
5559
) {
5660
self.name = name
@@ -62,6 +66,7 @@ public struct ProjectSpec {
6266
self.addRunnableTargets = addRunnableTargets
6367
self.addBuildForRunnableTargets = addBuildForRunnableTargets
6468
self.inferArgs = inferArgs
69+
self.preferFolderRefs = preferFolderRefs
6570
self.mainRepoDir = mainRepoDir
6671
}
6772

@@ -150,6 +155,10 @@ extension ProjectSpec {
150155

151156
public mutating func addHeaders(in path: RelativePath) {
152157
guard let path = mapPath(path, for: "headers") else { return }
158+
if preferFolderRefs {
159+
referencesToAdd.append(.folder(path))
160+
return
161+
}
153162
do {
154163
for header in try buildDir.getHeaderFilePaths(for: path) {
155164
referencesToAdd.append(.file(header))
@@ -171,6 +180,10 @@ extension ProjectSpec {
171180

172181
public mutating func addDocsGroup(at path: RelativePath) {
173182
guard let path = mapPath(path, for: "docs") else { return }
183+
if preferFolderRefs {
184+
referencesToAdd.append(.folder(path))
185+
return
186+
}
174187
do {
175188
for doc in try buildDir.getAllRepoSubpaths(of: path) where doc.isDocLike {
176189
referencesToAdd.append(.file(doc))

utils/swift-xcodegen/Sources/swift-xcodegen/Options.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,15 @@ struct ProjectOptions: ParsableArguments {
193193
)
194194
var inferArgs: Bool = true
195195

196+
@Flag(
197+
name: .customLong("prefer-folder-refs"), inversion: .prefixedNo,
198+
help: """
199+
Whether to prefer folder references for groups containing non-source
200+
files
201+
"""
202+
)
203+
var preferFolderRefs: Bool = false
204+
196205
@Option(help: .hidden)
197206
var blueFolders: String = ""
198207
}

utils/swift-xcodegen/Sources/swift-xcodegen/SwiftXcodegen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ struct SwiftXcodegen: AsyncParsableCommand, Sendable {
7171
addSwiftDependencies: self.addSwiftDependencies,
7272
addRunnableTargets: false,
7373
addBuildForRunnableTargets: self.addBuildForRunnableTargets,
74-
inferArgs: self.inferArgs,
74+
inferArgs: self.inferArgs, preferFolderRefs: self.preferFolderRefs,
7575
mainRepoDir: mainRepoDir
7676
)
7777
}

0 commit comments

Comments
 (0)