aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java16
3 files changed, 29 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
index d2454a363a..38059443f4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
@@ -46,12 +46,13 @@ public final class BazelIosTestRule implements RuleDefinition {
<ul>
<li><code><var>name</var>.ipa</code>: the test bundle as an
<code>.ipa</code> file
- <li><code><var>name</var>.xcodeproj/project.pbxproj: An Xcode project file which can be
- used to develop or build on a Mac.</li>
+ <li><code><var>name</var>.xcodeproj/project.pbxproj</code>: An Xcode project file which
+ can be used to develop or build on a Mac
+ <li><code><var>name</var>_xctest_app.ipa</code>: ipa for the {@code xctest_app} binary
</ul>
<!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS -->*/
- .setImplicitOutputsFunction(
- ImplicitOutputsFunction.fromFunctions(ReleaseBundlingSupport.IPA, XcodeSupport.PBXPROJ))
+ .setImplicitOutputsFunction(ImplicitOutputsFunction.fromFunctions(
+ ReleaseBundlingSupport.IPA, XcodeSupport.PBXPROJ, ObjcRuleClasses.XCTEST_APP_IPA))
.add(attr(BazelIosTest.IOS_TEST_ON_BAZEL_ATTR, LABEL)
.value(env.getLabel("//tools/objc:ios_test_on_bazel")).exec())
.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index b04dc224c2..9be8102a57 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget;
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.SymlinkAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.Type;
@@ -101,6 +102,13 @@ public abstract class IosTest implements RuleConfiguredTargetFactory {
"-bundle_loader", bundleLoader.getExecPathString());
extraLinkInputs = new ExtraLinkInputs(bundleLoader);
+
+ ruleContext.registerAction(
+ new SymlinkAction(
+ ruleContext.getActionOwner(),
+ /*input=*/xcTestAppProvider(ruleContext).getIpa(),
+ /*output=*/ruleContext.getImplicitOutputArtifact(ObjcRuleClasses.XCTEST_APP_IPA),
+ "Symlink xctest_app .ipa"));
}
if (ruleContext.getConfiguration().isCodeCoverageEnabled()) {
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 fd4caf6b52..d8c9f757c8 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
@@ -38,6 +38,8 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.AttributeMap;
+import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
+import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
@@ -627,6 +629,20 @@ public class ObjcRuleClasses {
}
/**
+ * Output function for the .ipa containing the {@code xctest_app}, also known as the test rig.
+ * This is useful for external-to-Bazel scripts that require the test rig {@code .ipa}.
+ */
+ public static final SafeImplicitOutputsFunction XCTEST_APP_IPA =
+ new SafeImplicitOutputsFunction() {
+ @Override
+ public Iterable<String> getImplicitOutputs(AttributeMap map) {
+ return map.get(IosTest.IS_XCTEST, Type.BOOLEAN)
+ ? ImplicitOutputsFunction.substitutePlaceholderIntoTemplate("%{name}_xctest_app.ipa", map)
+ : ImmutableList.<String>of();
+ }
+ };
+
+ /**
* Base rule definition for iOS test rules.
*/
@BlazeRule(name = "$ios_test_base_rule",