aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2017-01-06 00:01:22 +0000
committerGravatar John Cater <jcater@google.com>2017-01-06 01:22:40 +0000
commit0dc5db08ae21289aeab7f3bf372910f9fb5a019f (patch)
tree9978e3b18541d49398e28622dc75a53127f75cfd /src/main/java/com/google/devtools/build
parent1ad8a901567b91d3d3d03e945a0fcd85e859621f (diff)
Remove some cases of inferring configuration and platform from ruleContext outside of rule implementation.
-- PiperOrigin-RevId: 143720112 MOS_MIGRATED_REVID=143720112
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java60
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java7
7 files changed, 52 insertions, 82 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java
index e0e5d8a307..b6cfa5528c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java
@@ -68,31 +68,29 @@ final class BundleSupport {
}
}
+ // TODO(cparsons): Take restricted interfaces of RuleContext instead of RuleContext (such as
+ // RuleErrorConsumer).
private final RuleContext ruleContext;
+ private final AppleConfiguration appleConfiguration;
+ private final Platform platform;
private final ExtraActoolArgs extraActoolArgs;
private final Bundling bundling;
private final Attributes attributes;
/**
- * Creates a new bundle support with no special {@code actool} arguments.
- *
- * @param ruleContext context this bundle is constructed in
- * @param bundling bundle information as configured for this rule
- */
- public BundleSupport(RuleContext ruleContext, Bundling bundling) {
- this(ruleContext, bundling, new ExtraActoolArgs());
- }
-
- /**
* Creates a new bundle support.
*
* @param ruleContext context this bundle is constructed in
+ * @param appleConfiguration the configuration this bundle is constructed in
+ * @param platform the platform this bundle is built for
* @param bundling bundle information as configured for this rule
* @param extraActoolArgs any additional parameters to be used for invoking {@code actool}
*/
- public BundleSupport(RuleContext ruleContext,
- Bundling bundling, ExtraActoolArgs extraActoolArgs) {
+ public BundleSupport(RuleContext ruleContext, AppleConfiguration appleConfiguration,
+ Platform platform, Bundling bundling, ExtraActoolArgs extraActoolArgs) {
this.ruleContext = ruleContext;
+ this.appleConfiguration = appleConfiguration;
+ this.platform = platform;
this.extraActoolArgs = extraActoolArgs;
this.bundling = bundling;
this.attributes = new Attributes(ruleContext);
@@ -134,7 +132,6 @@ final class BundleSupport {
}
private void validatePlatform() {
- AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
Platform platform = null;
for (String architecture : appleConfiguration.getIosMultiCpus()) {
if (platform == null) {
@@ -254,7 +251,7 @@ final class BundleSupport {
.compiledStoryboardZip(storyboardInput);
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
.setMnemonic("StoryboardCompile")
.setExecutable(attributes.ibtoolWrapper())
.setCommandLine(ibActionsCommandLine(archiveRoot, zipOutput, storyboardInput))
@@ -302,13 +299,12 @@ final class BundleSupport {
}
private void registerMomczipActions(ObjcProvider objcProvider) {
- AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
Iterable<Xcdatamodel> xcdatamodels = Xcdatamodels.xcdatamodels(
bundling.getIntermediateArtifacts(), objcProvider.get(ObjcProvider.XCDATAMODEL));
for (Xcdatamodel datamodel : xcdatamodels) {
Artifact outputZip = datamodel.getOutputZip();
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
.setMnemonic("MomCompile")
.setExecutable(attributes.momcWrapper())
.addOutput(outputZip)
@@ -335,7 +331,7 @@ final class BundleSupport {
FileSystemUtils.replaceExtension(original.getExecPath(), ".nib"));
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
.setMnemonic("XibCompile")
.setExecutable(attributes.ibtoolWrapper())
.setCommandLine(ibActionsCommandLine(archiveRoot, zipOutput, original))
@@ -350,19 +346,20 @@ final class BundleSupport {
private void registerConvertStringsActions(ObjcProvider objcProvider) {
for (Artifact strings : objcProvider.get(ObjcProvider.STRINGS)) {
Artifact bundled = bundling.getIntermediateArtifacts().convertedStringsFile(strings);
- ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
- .setMnemonic("ConvertStringsPlist")
- .setExecutable(new PathFragment("/usr/bin/plutil"))
- .setCommandLine(CustomCommandLine.builder()
- .add("-convert").add("binary1")
- .addExecPath("-o", bundled)
- .add("--")
- .addPath(strings.getExecPath())
- .build())
- .addInput(strings)
- .addInput(CompilationSupport.xcrunwrapper(ruleContext).getExecutable())
- .addOutput(bundled)
- .build(ruleContext));
+ ruleContext.registerAction(
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ .setMnemonic("ConvertStringsPlist")
+ .setExecutable(new PathFragment("/usr/bin/plutil"))
+ .setCommandLine(CustomCommandLine.builder()
+ .add("-convert").add("binary1")
+ .addExecPath("-o", bundled)
+ .add("--")
+ .addPath(strings.getExecPath())
+ .build())
+ .addInput(strings)
+ .addInput(CompilationSupport.xcrunwrapper(ruleContext).getExecutable())
+ .addOutput(bundled)
+ .build(ruleContext));
}
}
@@ -427,7 +424,7 @@ final class BundleSupport {
// zip file will be rooted at the bundle root, and we have to prepend the bundle root to each
// entry when merging it with the final .ipa file.
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
.setMnemonic("AssetCatalogCompile")
.setExecutable(attributes.actoolWrapper())
.addTransitiveInputs(objcProvider.get(ASSET_CATALOG))
@@ -443,7 +440,6 @@ final class BundleSupport {
private CommandLine actoolzipCommandLine(ObjcProvider provider, Artifact zipOutput,
Artifact partialInfoPlist) {
- AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
PlatformType platformType = PlatformType.IOS;
// watchOS 1 and 2 use different platform arguments. It is likely that versions 2 and later will
// use the watchos platform whereas watchOS 1 uses the iphone platform.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
index 419628da47..f6bb0456d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.Platform;
/**
@@ -40,7 +41,8 @@ public class LipoSupport {
public LipoSupport registerCombineArchitecturesAction(NestedSet<Artifact> inputBinaries,
Artifact outputBinary, Platform platform) {
- ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform)
+ ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ ruleContext.getFragment(AppleConfiguration.class), platform)
.setMnemonic("ObjcCombiningArchitectures")
.addTransitiveInputs(inputBinaries)
.addOutput(outputBinary)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
index b8f691cf94..c7ae890d47 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
@@ -24,14 +24,15 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
+import com.google.devtools.build.lib.rules.objc.BundleSupport.ExtraActoolArgs;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
import com.google.devtools.build.lib.rules.objc.TargetDeviceFamily.InvalidFamilyNameException;
import com.google.devtools.build.lib.rules.objc.TargetDeviceFamily.RepeatedFamilyNameException;
import com.google.devtools.build.lib.syntax.Type;
+
import java.util.List;
/**
@@ -56,7 +57,12 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory {
return null;
}
- new BundleSupport(ruleContext, bundling)
+ AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
+ new BundleSupport(ruleContext,
+ appleConfiguration,
+ appleConfiguration.getMultiArchPlatform(PlatformType.IOS),
+ bundling,
+ new ExtraActoolArgs())
.registerActions(common.getObjcProvider())
.validate(common.getObjcProvider())
.addXcodeSettings(xcodeProviderBuilder);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 14776b30df..c95aa2cf63 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -171,27 +171,6 @@ public class ObjcRuleClasses {
return null;
}
};
-
-
- /**
- * Creates a new spawn action builder with apple environment variables set that are typically
- * needed by the apple toolchain. This should be used to start to build spawn actions that, in
- * order to run, require both a darwin architecture and a collection of environment variables
- * which contain information about the target and host architectures. This implicitly
- * assumes that this action is targeting ios platforms, and that
- * {@link AppleConfiguration#getIosCpu()} is the source of truth for their target architecture.
- *
- * @deprecated use {@link #spawnAppleEnvActionBuilder(RuleContext, Platform)} instead
- */
- // TODO(cparsons): Refactor callers to use the alternate method. Callers should be aware
- // of their effective Platform.
- @Deprecated
- static SpawnAction.Builder spawnAppleEnvActionBuilder(RuleContext ruleContext) {
- AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
-
- return spawnAppleEnvActionBuilder(ruleContext,
- Platform.forTarget(PlatformType.IOS, appleConfiguration.getIosCpu()));
- }
/**
* Creates a new spawn action builder with apple environment variables set that are typically
@@ -199,20 +178,6 @@ public class ObjcRuleClasses {
* order to run, require both a darwin architecture and a collection of environment variables
* which contain information about the target and host architectures.
*/
- // TODO(cparsons): Refactor this method to take the configuration fragment instead of
- // retrieving it from the rule context.
- static SpawnAction.Builder spawnAppleEnvActionBuilder(RuleContext ruleContext,
- Platform targetPlatform) {
- return spawnAppleEnvActionBuilder(
- ruleContext.getFragment(AppleConfiguration.class), targetPlatform);
- }
-
- /**
- * Creates a new spawn action builder with apple environment variables set that are typically
- * needed by the apple toolchain. This should be used to start to build spawn actions that, in
- * order to run, require both a darwin architecture and a collection of environment variables
- * which contain information about the target and host architectures.
- */
static SpawnAction.Builder spawnAppleEnvActionBuilder(AppleConfiguration appleConfiguration,
Platform targetPlatform) {
return spawnOnDarwinActionBuilder()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
index 90944aa2ef..661994ad8d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
@@ -177,7 +177,10 @@ public final class ReleaseBundlingSupport {
this.intermediateArtifacts = releaseBundling.getIntermediateArtifacts();
this.bundling = bundling(ruleContext, objcProvider, bundleDirFormat, bundleName,
bundleMinimumOsVersion);
- bundleSupport = new BundleSupport(ruleContext, bundling, extraActoolArgs());
+ // TODO(cparsons): Take the rule configuration as a param instead of inferring.
+ bundleSupport = new BundleSupport(ruleContext,
+ ruleContext.getFragment(AppleConfiguration.class), platform,
+ bundling, extraActoolArgs());
}
/**
@@ -377,7 +380,7 @@ public final class ReleaseBundlingSupport {
platform.getLowerCaseNameInPlist(),
configuration.getSdkVersionForPlatform(platform));
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(configuration, platform)
.setMnemonic("EnvironmentPlist")
.setExecutable(attributes.environmentPlist())
.addArguments("--platform", platformWithVersion)
@@ -1082,7 +1085,7 @@ public final class ReleaseBundlingSupport {
.addExecPath("--scan-executable", combinedArchBinary);
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
.setMnemonic("SwiftStdlibCopy")
.setExecutable(attributes.swiftStdlibToolWrapper())
.setCommandLine(commandLine.build())
@@ -1114,7 +1117,7 @@ public final class ReleaseBundlingSupport {
.addExecPath("--scan-executable", combinedArchBinary);
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(configuration, platform)
.setMnemonic("SwiftCopySwiftSupport")
.setExecutable(attributes.swiftStdlibToolWrapper())
.setCommandLine(commandLine.build())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
index e6b4ebf15e..9eefef687f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
@@ -282,12 +282,11 @@ final class WatchApplicationSupport {
watchKitStubZip.getFilename(),
Joiner.on(" ").join(ImmutableList.of("_WatchKitStub", bundleName))));
+ AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext,
- ruleContext
- .getFragment(AppleConfiguration.class)
- .getMultiArchPlatform(PlatformType.WATCHOS))
+ appleConfiguration,
+ appleConfiguration.getMultiArchPlatform(PlatformType.WATCHOS))
.setProgressMessage(
"Copying WatchKit binary and stub resource: " + ruleContext.getLabel())
.setShellCommand(ImmutableList.of("/bin/bash", "-c", Joiner.on(" ").join(command)))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java
index f0df7f5ab8..1ef83b2521 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java
@@ -163,12 +163,11 @@ final class WatchUtils {
watchSupportZip.getFilename(),
watchKitSupportDirName));
+ AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext,
- ruleContext
- .getFragment(AppleConfiguration.class)
- .getMultiArchPlatform(PlatformType.WATCHOS))
+ appleConfiguration,
+ appleConfiguration.getMultiArchPlatform(PlatformType.WATCHOS))
.setProgressMessage("Copying Watchkit support to app bundle")
.setShellCommand(ImmutableList.of("/bin/bash", "-c", Joiner.on(" ").join(command)))
.addOutput(watchSupportZip)