Skip to content

Commit b3b538e

Browse files
committed
[xcodegen] Generalize target naming deduplication
1 parent 52a2638 commit b3b538e

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,18 @@ fileprivate final class ProjectGenerator {
213213
_ name: String, at parentPath: RelativePath?, canUseBuildableFolder: Bool,
214214
productType: Xcode.Target.ProductType?, includeInAllTarget: Bool
215215
) -> Xcode.Target? {
216-
guard targets[name] == nil else {
217-
log.warning("Duplicate target '\(name)', skipping")
218-
return nil
219-
}
216+
let name = {
217+
// If we have a same-named target, disambiguate.
218+
if targets[name] == nil {
219+
return name
220+
}
221+
var i = 2
222+
var newName: String { "\(name)\(i)" }
223+
while targets[newName] != nil {
224+
i += 1
225+
}
226+
return newName
227+
}()
220228
var buildableFolder: Xcode.FileReference?
221229
if let parentPath, !parentPath.components.isEmpty {
222230
// If we've been asked to use buildable folders, see if we can create
@@ -747,12 +755,7 @@ fileprivate final class ProjectGenerator {
747755
let target = try buildDir.getClangTarget(
748756
for: targetSource, knownUnbuildables: spec.knownUnbuildables
749757
)
750-
guard var target else { continue }
751-
// We may have a Swift target with the same name, disambiguate.
752-
// FIXME: We ought to be able to support mixed-source targets.
753-
if targets[target.name] != nil {
754-
target.name = "\(target.name)-clang"
755-
}
758+
guard let target else { continue }
756759
try generateClangTarget(target)
757760
}
758761

0 commit comments

Comments
 (0)