diff options
author | Googler <noreply@google.com> | 2016-04-05 00:33:31 +0000 |
---|---|---|
committer | Kristina Chodorow <kchodorow@google.com> | 2016-04-05 14:08:58 +0000 |
commit | f07fd407c2b618b4ed0dc05edaa8d38a6918f5c4 (patch) | |
tree | 625b829d8162bae986f3c5edec006a3fbcd31909 /src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java | |
parent | ae8d6873a400393f14ab6ed7bd8d810ebfed5beb (diff) |
Add 'apple_watch1_extension' and 'apple_watch_extension_binary' to support building watch OS 1 apps.
RELNOTES: Support apple_watch1_extension and apple_watch_extension_binary rules for creating watch OS 1 extensions.
--
MOS_MIGRATED_REVID=119000703
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java index 8602a83bbf..b07a36ebb8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java @@ -35,6 +35,10 @@ import java.io.Serializable; */ public class IosExtension extends ReleaseBundlingTargetFactory { + // Apple only accepts extensions starting at 8.0. + @VisibleForTesting + static final DottedVersion EXTENSION_MINIMUM_OS_VERSION = DottedVersion.fromString("8.0"); + /** * Transition that when applied to a target generates a configured target for each value in * {@code --ios_multi_cpus}, such that {@code --ios_cpu} is set to a different one of those values @@ -44,11 +48,8 @@ public class IosExtension extends ReleaseBundlingTargetFactory { * --ios_minimum_os} is at least {@code 8.0} as Apple requires this for extensions. */ static final SplitTransition<BuildOptions> MINIMUM_OS_AND_SPLIT_ARCH_TRANSITION = - new ExtensionSplitArchTransition(); - - // Apple only accepts extensions starting at 8.0. - @VisibleForTesting - static final DottedVersion EXTENSION_MINIMUM_OS_VERSION = DottedVersion.fromString("8.0"); + new ExtensionSplitArchTransition(EXTENSION_MINIMUM_OS_VERSION, + ConfigurationDistinguisher.IOS_EXTENSION); public IosExtension() { super(ReleaseBundlingSupport.EXTENSION_BUNDLE_DIR_FORMAT, XcodeProductType.EXTENSION, @@ -58,7 +59,8 @@ public class IosExtension extends ReleaseBundlingTargetFactory { @Override protected DottedVersion bundleMinimumOsVersion(RuleContext ruleContext) { - return determineMinimumOsVersion(ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs()); + return determineMinimumOsVersion(ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs(), + EXTENSION_MINIMUM_OS_VERSION); } @Override @@ -69,24 +71,43 @@ public class IosExtension extends ReleaseBundlingTargetFactory { .build(); } - private static DottedVersion determineMinimumOsVersion(DottedVersion fromFlag) { - // Extensions are not accepted by Apple below version 8.0. While applications built with a - // minimum iOS version of less than 8.0 may contain extensions in their bundle, the extension - // itself needs to be built with 8.0 or higher. This logic overrides (if necessary) any - // flag-set minimum iOS version for extensions only so that this requirement is not violated. - return Ordering.natural().max(fromFlag, EXTENSION_MINIMUM_OS_VERSION); + + /** + * Overrides (if necessary) any flag-set minimum iOS version for extensions only with given + * minimum OS version. + * + * Extensions are not accepted by Apple below given mininumOSVersion. While applications built + * with a minimum iOS version of less than give version may contain extensions in their bundle, + * the extension itself needs to be built with given version or higher. + * + * @param fromFlag the minimum OS version from command line flag + * @param minimumOSVersion the minumum OS version the extension should be built with + */ + private static DottedVersion determineMinimumOsVersion(DottedVersion fromFlag, + DottedVersion minimumOSVersion) { + return Ordering.natural().max(fromFlag, minimumOSVersion); } /** * Split transition that configures the minimum iOS version in addition to architecture splitting. */ - private static class ExtensionSplitArchTransition extends SplitArchTransition + static class ExtensionSplitArchTransition extends SplitArchTransition implements Serializable { + private final DottedVersion minimumOSVersion; + private final ConfigurationDistinguisher configurationDistinguisher; + + ExtensionSplitArchTransition(DottedVersion minimumOSVersion, + ConfigurationDistinguisher configurationDistinguisher) { + this.minimumOSVersion = minimumOSVersion; + this.configurationDistinguisher = configurationDistinguisher; + } + @Override protected ImmutableList<BuildOptions> defaultOptions(BuildOptions originalOptions) { ObjcCommandLineOptions objcOptions = originalOptions.get(ObjcCommandLineOptions.class); - DottedVersion newMinimumVersion = determineMinimumOsVersion(objcOptions.iosMinimumOs); + DottedVersion newMinimumVersion = determineMinimumOsVersion(objcOptions.iosMinimumOs, + minimumOSVersion); if (newMinimumVersion.equals(objcOptions.iosMinimumOs)) { return ImmutableList.of(); @@ -102,12 +123,12 @@ public class IosExtension extends ReleaseBundlingTargetFactory { @Override protected void setAdditionalOptions(BuildOptions splitOptions, BuildOptions originalOptions) { DottedVersion fromFlag = originalOptions.get(ObjcCommandLineOptions.class).iosMinimumOs; - setMinimumOsVersion(splitOptions, determineMinimumOsVersion(fromFlag)); + setMinimumOsVersion(splitOptions, determineMinimumOsVersion(fromFlag, minimumOSVersion)); } @Override protected ConfigurationDistinguisher getConfigurationDistinguisher() { - return ConfigurationDistinguisher.IOS_EXTENSION; + return configurationDistinguisher; } private void setMinimumOsVersion(BuildOptions splitOptions, DottedVersion newMinimumVersion) { |