Rollforward #2 of "AppleBinary and AppleStaticLibrary no longer propagate unwrapped ObjcProvider", after changes made to apple bazel rules to be compatible. RELNOTES: None. PiperOrigin-RevId: 167061765
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java index a65a9a5..8e6c2bd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -167,8 +167,6 @@ objcProviderBuilder.add(MULTI_ARCH_LINKED_BINARIES, outputArtifact); ObjcProvider objcProvider = objcProviderBuilder.build(); - // TODO(cparsons): Stop propagating ObjcProvider directly from this rule. - targetBuilder.addNativeDeclaredProvider(objcProvider); switch (getBinaryType(ruleContext)) { case EXECUTABLE:
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java index 16eef28..ff3e8f9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
@@ -181,8 +181,6 @@ ObjcProvider objcProvider = objcProviderBuilder.build(); targetBuilder - // TODO(cparsons): Remove ObjcProvider as a direct provider. - .addNativeDeclaredProvider(objcProvider) .addNativeDeclaredProvider( new AppleStaticLibraryProvider( ruleIntermediateArtifacts.combinedArchitectureArchive(), objcProvider))
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java index 2c4026e..e9085c8 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java
@@ -1440,7 +1440,7 @@ @Test public void testCustomModuleMap() throws Exception { - checkCustomModuleMap(RULE_TYPE); + checkCustomModuleMap(RULE_TYPE, true); } @Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java index d76970a..ca89f67 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
@@ -149,7 +149,9 @@ " resources = [':avoid.png']", ")"); - ObjcProvider provider = providerForTarget("//package:test"); + ObjcProvider provider = getConfiguredTarget("//package:test") + .get(AppleStaticLibraryProvider.SKYLARK_CONSTRUCTOR) + .getDepsObjcProvider(); // Do not remove SDK_FRAMEWORK values in avoid_deps. assertThat(provider.get(ObjcProvider.SDK_FRAMEWORK)) .containsAllOf(new SdkFramework("AvoidSDK"), new SdkFramework("BaseSDK")); @@ -623,4 +625,4 @@ assertThat(Artifact.toRootRelativePaths(action.getInputs())).doesNotContain( "package/libavoidCcLib.a"); } -} \ No newline at end of file +}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java index 7bb3872..6c31986 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
@@ -1167,7 +1167,22 @@ // Usually, an ios_test would depend on apple_binary through a skylark_ios_application in its // 'binary' attribute. Since we don't have skylark_ios_application here, we use the 'deps' // attribute instead. + scratch.file("skylarkstub/BUILD"); + scratch.file("skylarkstub/skylark_stub.bzl", + "def skylark_ios_application_stub_impl(ctx):", + " bin_provider = ctx.attr.binary[apple_common.AppleExecutableBinary]", + " return struct(objc=bin_provider.objc)", + "skylark_ios_application_stub = rule(", + " skylark_ios_application_stub_impl,", + // Both 'binary' and 'deps' are needed because ObjcProtoAspect is applied transitively + // along attribute 'deps' only. + " attrs = {'binary': attr.label(mandatory=True,", + " providers=[apple_common.AppleExecutableBinary])},", + " fragments = ['apple', 'objc'],", + ")"); + scratch.file("x/BUILD", + "load('//skylarkstub:skylark_stub.bzl', 'skylark_ios_application_stub')", "genrule(", " name = 'gen_hdrs',", " outs = ['generated.h'],", @@ -1179,6 +1194,10 @@ " platform_type = 'ios',", " hdrs = ['generated.h'],", ")", + "skylark_ios_application_stub(", + " name = 'stub_application',", + " binary = ':apple_bin',", + ")", "objc_binary(", " name = 'bin',", " srcs = ['bin.m'],", @@ -1192,7 +1211,7 @@ " srcs = ['test.m'],", " xctest = 1,", " xctest_app = ':testApp',", - " deps = [':apple_bin']", + " deps = [':stub_application']", ")"); CommandAction compileAction = compileAction("//x:test", "test.o"); // The genfiles root for child configurations must be present in the compile action so that
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java index 255841d..591eeac 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java
@@ -928,7 +928,7 @@ @Test public void testCustomModuleMap() throws Exception { - checkCustomModuleMap(RULE_TYPE); + checkCustomModuleMap(RULE_TYPE, false); } @Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java index 056a607..074a556 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
@@ -1564,6 +1564,6 @@ @Test public void testCustomModuleMap() throws Exception { - checkCustomModuleMap(RULE_TYPE); + checkCustomModuleMap(RULE_TYPE, false); } }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java index 043f21b..ca87273 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java
@@ -679,12 +679,12 @@ @Test public void testModulemapCreatedForNonLinkingTargets() throws Exception { - checkOnlyLibModuleMapsArePresentForTarget("//package:opl_protobuf"); + checkOnlyLibModuleMapsArePresentForTarget("//package:opl_protobuf", false); } @Test public void testModulemapNotCreatedForLinkingTargets() throws Exception { - checkOnlyLibModuleMapsArePresentForTarget("//package:opl_binary"); + checkOnlyLibModuleMapsArePresentForTarget("//package:opl_binary", true); } @Test @@ -760,7 +760,8 @@ return Joiner.on('\n').join(Ordering.natural().immutableSortedCopy(elements)); } - private void checkOnlyLibModuleMapsArePresentForTarget(String target) throws Exception { + private void checkOnlyLibModuleMapsArePresentForTarget(String target, + boolean fromBinary) throws Exception { Artifact libModuleMap = getGenfilesArtifact( "opl_protobuf.modulemaps/module.modulemap", @@ -770,7 +771,11 @@ "protobuf_lib.modulemaps/module.modulemap", getConfiguredTarget("//objcproto:protobuf_lib")); - ObjcProvider provider = providerForTarget(target); + ObjcProvider provider = fromBinary + ? getConfiguredTarget(target) + .get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR) + .getDepsObjcProvider() + : providerForTarget(target); assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.MODULE_MAP).toSet())) .containsExactlyElementsIn( Artifact.toRootRelativePaths(ImmutableSet.of(libModuleMap, protolibModuleMap)));
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java index 7baa058..6051f4a 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
@@ -4892,7 +4892,7 @@ .isEqualTo("a.o"); } - protected void checkCustomModuleMap(RuleType ruleType) throws Exception { + protected void checkCustomModuleMap(RuleType ruleType, boolean fromBinary) throws Exception { useConfiguration("--experimental_objc_enable_module_maps"); ruleType.scratchTarget(scratch, "srcs", "['a.m']", "deps", "['//z:testModuleMap']"); scratch.file("x/a.m"); @@ -4920,7 +4920,11 @@ assertThat(Artifact.toExecPaths(provider.get(MODULE_MAP))) .containsExactly("y/module.modulemap"); - provider = providerForTarget("//x:x"); + provider = fromBinary + ? getConfiguredTarget("//x:x") + .get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR) + .getDepsObjcProvider() + : providerForTarget("//x:x"); assertThat(Artifact.toExecPaths(provider.get(MODULE_MAP))).contains("y/module.modulemap"); }