aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-08-31 17:55:26 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-08-31 18:28:42 +0200
commit82f71f56c221f81dcb08dadde831f98ad663b7d2 (patch)
treeb45bdaf10126806b9aaf8635e57a0b41a7d49ebe /src/main/java/com/google/devtools/build
parentc480f4325b96db3e2b8dcdf4226812bc09c56de3 (diff)
Allow non-dottedversion aliases for --xcode_version
RELNOTES: None. PiperOrigin-RevId: 167143657
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java24
4 files changed, 22 insertions, 25 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index 8cb4cace93..b6309d6866 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -67,16 +67,13 @@ public class AppleCommandLineOptions extends FragmentOptions {
name = "xcode_version",
defaultValue = "null",
category = "build",
- converter = DottedVersionConverter.class,
documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
effectTags = {OptionEffectTag.LOSES_INCREMENTAL_STATE},
help =
"If specified, uses Xcode of the given version for relevant build actions. "
+ "If unspecified, uses the executor default version of Xcode."
)
- // TODO(bazel-team): This should be of String type, to allow referencing an alias based
- // on an xcode_config target.
- public DottedVersion xcodeVersion;
+ public String xcodeVersion;
@Option(
name = "ios_sdk_version",
@@ -507,7 +504,7 @@ public class AppleCommandLineOptions extends FragmentOptions {
void serialize(CodedOutputStream out) throws IOException, SerializationException {
out.writeBoolNoTag(mandatoryMinimumVersion);
- serializeNullable(xcodeVersion, out, DottedVersion.CODEC);
+ serializeNullable(xcodeVersion, out, FastStringCodec.INSTANCE);
serializeNullable(iosSdkVersion, out, DottedVersion.CODEC);
serializeNullable(watchOsSdkVersion, out, DottedVersion.CODEC);
serializeNullable(tvOsSdkVersion, out, DottedVersion.CODEC);
@@ -537,7 +534,7 @@ public class AppleCommandLineOptions extends FragmentOptions {
throws IOException, SerializationException {
AppleCommandLineOptions result = new AppleCommandLineOptions();
result.mandatoryMinimumVersion = in.readBool();
- result.xcodeVersion = deserializeNullable(in, DottedVersion.CODEC);
+ result.xcodeVersion = deserializeNullable(in, FastStringCodec.INSTANCE);
result.iosSdkVersion = deserializeNullable(in, DottedVersion.CODEC);
result.watchOsSdkVersion = deserializeNullable(in, DottedVersion.CODEC);
result.tvOsSdkVersion = deserializeNullable(in, DottedVersion.CODEC);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index 45e23dc058..8d5ed3fdf4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -102,7 +102,6 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
private final ImmutableList<String> macosCpus;
private final AppleBitcodeMode bitcodeMode;
private final Label xcodeConfigLabel;
- private final DottedVersion xcodeVersionCommandLineFlag;
private final boolean enableAppleCrosstool;
private final AppleCommandLineOptions options;
@Nullable private final String xcodeToolchain;
@@ -157,7 +156,6 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
this.bitcodeMode = options.appleBitcodeMode;
this.xcodeConfigLabel =
Preconditions.checkNotNull(options.xcodeVersionConfig, "xcodeConfigLabel");
- this.xcodeVersionCommandLineFlag = options.xcodeVersion;
this.enableAppleCrosstool = options.enableAppleCrosstoolTransition;
this.defaultProvisioningProfileLabel = options.defaultProvisioningProfile;
this.xcodeToolchain = options.xcodeToolchain;
@@ -601,13 +599,6 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
}
/**
- * Returns the explicit Xcode version specified on the command line.
- */
- public DottedVersion getXcodeVersionCommandLineFlag() {
- return xcodeVersionCommandLineFlag;
- }
-
- /**
* Returns the unique identifier distinguishing configurations that are otherwise the same.
*
* <p>Use this value for situations in which two configurations create two outputs that are the
@@ -676,7 +667,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
ImmutableMap.Builder<String, Object> mapBuilder = ImmutableMap.builder();
if (xcodeVersion != null) {
- mapBuilder.put("xcode_version", xcodeVersion);
+ mapBuilder.put("xcode_version", xcodeVersion.toString());
}
return mapBuilder
.put("ios_sdk_version", iosSdkVersion)
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 b0b98c5380..dbe80f1568 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
@@ -97,6 +97,9 @@ public final class DottedVersion implements Comparable<DottedVersion>, SkylarkVa
* @throws IllegalArgumentException if the passed string is not a valid dotted version
*/
public static DottedVersion fromString(String version) {
+ if (Strings.isNullOrEmpty(version)) {
+ throw new IllegalArgumentException(String.format(ILLEGAL_VERSION, version));
+ }
ArrayList<Component> components = new ArrayList<>();
for (String component : DOT_SPLITTER.split(version)) {
components.add(toComponent(component, version));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
index d2b5859ef9..fed295e6fc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.rules.apple;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -171,7 +172,7 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
*/
static XcodeVersionProperties resolveXcodeVersion(
boolean requireDefinedVersions,
- DottedVersion xcodeVersionOverrideFlag,
+ String xcodeVersionOverrideFlag,
Iterable<XcodeVersionRuleData> xcodeVersions,
@Nullable XcodeVersionRuleData defaultVersion)
throws XcodeConfigException {
@@ -180,11 +181,16 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
if (xcodeVersion != null) {
return xcodeVersion.getXcodeVersionProperties();
- } else if (xcodeVersionOverrideFlag != null) {
- return new XcodeVersionProperties(xcodeVersionOverrideFlag);
- } else {
- return XcodeVersionProperties.unknownXcodeVersionProperties();
}
+ // TODO(b/64576392): Remove this fallback logic. An xcode_version target should be explicitly
+ // matched in all cases where --xcode_version is specified.
+ try {
+ DottedVersion dottedVersion = DottedVersion.fromString(xcodeVersionOverrideFlag);
+ return new XcodeVersionProperties(dottedVersion);
+ } catch (IllegalArgumentException e) {
+ // The --xcode_version flag is not a valid DottedVersion, so there is nothing to go on.
+ }
+ return XcodeVersionProperties.unknownXcodeVersionProperties();
}
/**
@@ -200,16 +206,16 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
boolean requireDefinedVersions,
Iterable<XcodeVersionRuleData> xcodeVersionRules,
@Nullable XcodeVersionRuleData defaultVersion,
- DottedVersion versionOverrideFlag)
+ String versionOverrideFlag)
throws XcodeConfigException {
Map<String, XcodeVersionRuleData> aliasesToVersionMap = aliasesToVersionMap(xcodeVersionRules);
- if (versionOverrideFlag != null) {
+ if (!Strings.isNullOrEmpty(versionOverrideFlag)) {
// The version override flag is not necessarily an actual version - it may be a version
// alias.
XcodeVersionRuleData explicitVersion =
- aliasesToVersionMap.get(versionOverrideFlag.toString());
+ aliasesToVersionMap.get(versionOverrideFlag);
if (explicitVersion != null) {
return explicitVersion;
}
@@ -217,7 +223,7 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
// No override specified. Use default.
return defaultVersion;
}
-
+
if (requireDefinedVersions) {
throw new XcodeConfigException(
"xcode version config required an explicitly defined version, but none was available");