diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java index 8879e8367b119d..aa7689cf4e6c86 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java @@ -36,7 +36,7 @@ * {@code 5.0.1beta2}. Components must start with a non-negative integer and at least one component * must be present. * - *

Specifically, the format of a component is {@code \d+([a-z]+\d*)?}. + *

Specifically, the format of a component is {@code \d+([a-z0-9]*?)?(\d+)?}. * *

Dotted versions are ordered using natural integer sorting on components in order from first to * last where any missing element is considered to have the value 0 if they don't contain any @@ -122,9 +122,10 @@ public static Option option(DottedVersion version) { return version == null ? null : new Option(version); } private static final Splitter DOT_SPLITTER = Splitter.on('.'); - private static final Pattern COMPONENT_PATTERN = Pattern.compile("(\\d+)(?:([a-z]+)(\\d*))?"); + private static final Pattern COMPONENT_PATTERN = + Pattern.compile("(\\d+)([a-z0-9]*?)?(\\d+)?", Pattern.CASE_INSENSITIVE); private static final String ILLEGAL_VERSION = - "Dotted version components must all be of the form \\d+([a-z]+\\d*)? but got %s"; + "Dotted version components must all be of the form \\d+([a-z0-9]*?)?(\\d+)? but got %s"; private static final String NO_ALPHA_SEQUENCE = null; private static final Component ZERO_COMPONENT = new Component(0, NO_ALPHA_SEQUENCE, 0, "0"); @@ -165,7 +166,7 @@ private static Component toComponent(String component, String version) { int secondNumber = 0; firstNumber = parseNumber(parsedComponent, 1, version); - if (parsedComponent.group(2) != null) { + if (!Strings.isNullOrEmpty(parsedComponent.group(2))) { alphaSequence = parsedComponent.group(2); } diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/DottedVersionTest.java b/src/test/java/com/google/devtools/build/lib/rules/apple/DottedVersionTest.java index 285dc2fc9dfb5b..4dca4849054b1b 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/apple/DottedVersionTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/apple/DottedVersionTest.java @@ -42,6 +42,7 @@ public void testCompareTo() throws Exception { .addEqualityGroup(DottedVersion.fromString("1.2beta12.1")) .addEqualityGroup(DottedVersion.fromString("1.2.0"), DottedVersion.fromString("1.2")) .addEqualityGroup(DottedVersion.fromString("1.20")) + .addEqualityGroup(DottedVersion.fromString("10.2.0.10P99q")) .testCompare(); } @@ -52,6 +53,8 @@ public void testEquals() throws Exception { .addEqualityGroup(DottedVersion.fromString("0.1"), DottedVersion.fromString("0.01")) .addEqualityGroup(DottedVersion.fromString("0.2"), DottedVersion.fromString("0.2.0")) .addEqualityGroup(DottedVersion.fromString("1.2xy2"), DottedVersion.fromString("1.2xy2")) + .addEqualityGroup( + DottedVersion.fromString("10.2.0.10P99q"), DottedVersion.fromString("10.2.0.10P99q0")) .addEqualityGroup( DottedVersion.fromString("1.2x"), DottedVersion.fromString("1.2x0"), diff --git a/tools/osx/xcode_locator.m b/tools/osx/xcode_locator.m index 6e318d7e56636b..71b0b1427bf2be 100644 --- a/tools/osx/xcode_locator.m +++ b/tools/osx/xcode_locator.m @@ -176,6 +176,14 @@ static void AddEntryToDictionary( NSLog(@"Version strings for %@: short=%@, expanded=%@", url, version, expandedVersion); + NSURL *versionPlistUrl = [url URLByAppendingPathComponent:@"Contents/version.plist"]; + NSDictionary *versionPlistContents = [[NSDictionary alloc] initWithContentsOfURL:versionPlistUrl + error:nil]; + NSString *productVersion = [versionPlistContents objectForKey:@"ProductBuildVersion"]; + if (productVersion) { + expandedVersion = [expandedVersion stringByAppendingFormat:@".%@", productVersion]; + } + NSURL *developerDir = [url URLByAppendingPathComponent:@"Contents/Developer"]; XcodeVersionEntry *entry = @@ -259,12 +267,6 @@ int main(int argc, const char * argv[]) { versionArg = @""; } else { versionArg = firstArg; - NSCharacterSet *versSet = - [NSCharacterSet characterSetWithCharactersInString:@"0123456789."]; - if ([versionArg rangeOfCharacterFromSet:versSet.invertedSet].length - != 0) { - versionArg = nil; - } } } if (versionArg == nil) {