From 6683d645ff3a1f3aedc4b7d559b9fbe4d7bcafc4 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Tue, 17 Mar 2015 19:19:25 +0000 Subject: Split actoolzip and ibtoolzip into separate binaries Have actoolzip abs-ify the partial info plist path because otherwise it picks seemingly random directories to which to output the info plist files. -- MOS_MIGRATED_REVID=88851706 --- .../build/lib/rules/objc/ObjcActionsBuilder.java | 42 +++++++++------------- .../build/lib/rules/objc/ObjcRuleClasses.java | 14 +++++--- .../build/lib/rules/objc/ResourceSupport.java | 32 +++++++++++++++-- 3 files changed, 55 insertions(+), 33 deletions(-) (limited to 'src/main/java/com/google/devtools') diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcActionsBuilder.java index aa9ce3d9b3..ecd2d84837 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcActionsBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcActionsBuilder.java @@ -105,7 +105,7 @@ final class ObjcActionsBuilder { // TODO(bazel-team): Reference a rule target rather than a jar file when Darwin runfiles work // better. - private static SpawnAction.Builder spawnJavaOnDarwinActionBuilder(Artifact deployJarArtifact) { + static SpawnAction.Builder spawnJavaOnDarwinActionBuilder(Artifact deployJarArtifact) { return spawnOnDarwinActionBuilder() .setExecutable(JAVA) .addExecutableArguments("-jar", deployJarArtifact.getExecPathString()) @@ -300,24 +300,6 @@ final class ObjcActionsBuilder { return result.build(); } - private Action[] ibtoolzipAction(ObjcRuleClasses.Tools baseTools, String mnemonic, Artifact input, - Artifact zipOutput, String archiveRoot) { - return spawnJavaOnDarwinActionBuilder(baseTools.actooloribtoolzipDeployJar()) - .setMnemonic(mnemonic) - .setCommandLine(new CustomCommandLine.Builder() - // The next three arguments are positional, i.e. they don't have flags before them. - .addPath(zipOutput.getExecPath()) - .add(archiveRoot) - .addPath(IBTOOL) - - .add("--minimum-deployment-target").add(objcConfiguration.getMinimumOs()) - .addPath(input.getExecPath()) - .build()) - .addOutput(zipOutput) - .addInput(input) - .build(context); - } - /** * Creates actions to convert all files specified by the xibs attribute into nib format. */ @@ -327,7 +309,20 @@ final class ObjcActionsBuilder { Artifact zipOutput = intermediateArtifacts.compiledXibFileZip(original); String archiveRoot = BundleableFile.flatBundlePath( FileSystemUtils.replaceExtension(original.getExecPath(), ".nib")); - result.add(ibtoolzipAction(baseTools, "XibCompile", original, zipOutput, archiveRoot)); + result.add(spawnJavaOnDarwinActionBuilder(baseTools.ibtoolzipDeployJar()) + .setMnemonic("XibCompile") + .setCommandLine(new CustomCommandLine.Builder() + // The next three arguments are positional, i.e. they don't have flags before them. + .addPath(zipOutput.getExecPath()) + .add(archiveRoot) + .addPath(IBTOOL) + + .add("--minimum-deployment-target").add(objcConfiguration.getMinimumOs()) + .addPath(original.getExecPath()) + .build()) + .addOutput(zipOutput) + .addInput(original) + .build(context)); } return result.build(); } @@ -363,7 +358,7 @@ final class ObjcActionsBuilder { // Note that below we set the archive root to the empty string. This means that the generated // 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. - register(spawnJavaOnDarwinActionBuilder(tools.actooloribtoolzipDeployJar()) + register(spawnJavaOnDarwinActionBuilder(tools.actoolzipDeployJar()) .setMnemonic("AssetCatalogCompile") .addTransitiveInputs(provider.get(ASSET_CATALOG)) .addOutput(zipOutput) @@ -408,11 +403,6 @@ final class ObjcActionsBuilder { }; } - void registerIbtoolzipAction(ObjcRuleClasses.Tools tools, Artifact input, Artifact outputZip) { - String archiveRoot = BundleableFile.flatBundlePath(input.getExecPath()) + "c"; - register(ibtoolzipAction(tools, "StoryboardCompile", input, outputZip, archiveRoot)); - } - @VisibleForTesting static Iterable commonMomczipArguments(ObjcConfiguration configuration) { return ImmutableList.of( 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 3aa70e51eb..4bcaf3a077 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 @@ -403,8 +403,10 @@ public class ObjcRuleClasses { return builder .add(attr("$plmerge", LABEL).cfg(HOST).exec() .value(env.getLabel("//tools/objc:plmerge"))) - .add(attr("$actooloribtoolzip_deploy", LABEL).cfg(HOST) - .value(env.getLabel("//tools/objc:actooloribtoolzip_deploy.jar"))) + .add(attr("$actoolzip_deploy", LABEL).cfg(HOST) + .value(env.getLabel("//tools/objc:actoolzip_deploy.jar"))) + .add(attr("$ibtoolzip_deploy", LABEL).cfg(HOST) + .value(env.getLabel("//tools/objc:ibtoolzip_deploy.jar"))) .build(); } } @@ -850,8 +852,12 @@ public class ObjcRuleClasses { this.ruleContext = Preconditions.checkNotNull(ruleContext); } - Artifact actooloribtoolzipDeployJar() { - return ruleContext.getPrerequisiteArtifact("$actooloribtoolzip_deploy", Mode.HOST); + Artifact actoolzipDeployJar() { + return ruleContext.getPrerequisiteArtifact("$actoolzip_deploy", Mode.HOST); + } + + Artifact ibtoolzipDeployJar() { + return ruleContext.getPrerequisiteArtifact("$ibtoolzip_deploy", Mode.HOST); } Artifact momczipDeployJar() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ResourceSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ResourceSupport.java index d1a717c165..4a279d2a72 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ResourceSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ResourceSupport.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; /** * Support for resource processing on Objc rules. @@ -57,11 +58,36 @@ final class ResourceSupport { CompiledResourceFile.fromStringsFiles(intermediateArtifacts, attributes.strings())), new XibFiles(attributes.xibs()), datamodels); + + registerInterfaceBuilderActions(storyboards, tools); + return this; + } + + private void registerInterfaceBuilderActions( + Storyboards storyboards, ObjcRuleClasses.Tools tools) { for (Artifact storyboardInput : storyboards.getInputs()) { - actionsBuilder.registerIbtoolzipAction( - tools, storyboardInput, intermediateArtifacts.compiledStoryboardZip(storyboardInput)); + String archiveRoot = BundleableFile.flatBundlePath(storyboardInput.getExecPath()) + "c"; + Artifact zipOutput = intermediateArtifacts.compiledStoryboardZip(storyboardInput); + + String minimumOs = + ruleContext.getConfiguration().getFragment(ObjcConfiguration.class).getMinimumOs(); + ruleContext.registerAction( + ObjcActionsBuilder.spawnJavaOnDarwinActionBuilder(tools.ibtoolzipDeployJar()) + .setMnemonic("StoryboardCompile") + .setCommandLine(new CustomCommandLine.Builder() + // The next three arguments are positional, + // i.e. they don't have flags before them. + .addPath(zipOutput.getExecPath()) + .add(archiveRoot) + .addPath(ObjcActionsBuilder.IBTOOL) + + .add("--minimum-deployment-target").add(minimumOs) + .addPath(storyboardInput.getExecPath()) + .build()) + .addOutput(zipOutput) + .addInput(storyboardInput) + .build(ruleContext)); } - return this; } /** -- cgit v1.2.3