Fix a bug in which the XcodeGen generates two Xcode target with the same name (case-insensitive). RELNOTES:None -- MOS_MIGRATED_REVID=101587647
diff --git a/src/objc_tools/xcodegen/java/com/google/devtools/build/xcode/xcodegen/XcodeprojGeneration.java b/src/objc_tools/xcodegen/java/com/google/devtools/build/xcode/xcodegen/XcodeprojGeneration.java index 9108913..4334498 100644 --- a/src/objc_tools/xcodegen/java/com/google/devtools/build/xcode/xcodegen/XcodeprojGeneration.java +++ b/src/objc_tools/xcodegen/java/com/google/devtools/build/xcode/xcodegen/XcodeprojGeneration.java
@@ -497,15 +497,20 @@ targetBuildConfigMap.put(name, value); } + // Note that HFS+ (the Mac filesystem) is usually case insensitive, so we cast all target + // names to lower case before checking for duplication because otherwise users may end up + // having duplicated intermediate build directories that can interfere with the build. String targetName = targetControl.getName(); - if (usedTargetNames.contains(targetName)) { + String targetNameInLowerCase = targetName.toLowerCase(); + if (usedTargetNames.contains(targetNameInLowerCase)) { // Use the label in the odd case where we have two targets with the same name. targetName = targetControl.getLabel(); + targetNameInLowerCase = targetName.toLowerCase(); } - checkState(!usedTargetNames.contains(targetName), - "Name already exists for target with label/name %s/%s in list: %s", + checkState(!usedTargetNames.contains(targetNameInLowerCase), + "Name (case-insensitive) already exists for target with label/name %s/%s in list: %s", targetControl.getLabel(), targetControl.getName(), usedTargetNames); - usedTargetNames.add(targetName); + usedTargetNames.add(targetNameInLowerCase); PBXNativeTarget target = new PBXNativeTarget(targetName, productType); try { target