diff options
author | cparsons <cparsons@google.com> | 2017-12-04 13:50:52 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-04 13:52:30 -0800 |
commit | 8bec8dd9096d090fd16da405e90125ae04da4c9b (patch) | |
tree | d823c412be32689954ddfa27614c5a8e01a1a527 | |
parent | ba66e72295d763e43b92179ce6bd46476084a548 (diff) |
From apple_binary, receive AppleExecutableBinaryProvider from the bundle_loader attribute
Prior to this change, apple_binary relied on bundle_loader targets (which are themselves apple_binary) to propagate an unwrapped ObjcProvider. That is deprecated, is disabled by --noexperimental_objc_provider_from_linked, and will be killed off shortly.
RELNOTES: None.
PiperOrigin-RevId: 177862573
5 files changed, 37 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java index d2b5be83bd..71a8a7fb6f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java @@ -282,13 +282,20 @@ public class MultiArchBinarySupport { private static Iterable<ObjcProvider> getDylibObjcProviders( Iterable<TransitiveInfoCollection> transitiveInfoCollections) { + // Dylibs. Iterable<ObjcProvider> frameworkObjcProviders = Streams.stream(getTypedProviders(transitiveInfoCollections, AppleDynamicFrameworkProvider.SKYLARK_CONSTRUCTOR)) .map(frameworkProvider -> frameworkProvider.getDepsObjcProvider()) .collect(ImmutableList.toImmutableList()); + // Bundle Loaders. + Iterable<ObjcProvider> executableObjcProviders = + Streams.stream(getTypedProviders(transitiveInfoCollections, + AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR)) + .map(frameworkProvider -> frameworkProvider.getDepsObjcProvider()) + .collect(ImmutableList.toImmutableList()); - return Iterables.concat(frameworkObjcProviders, + return Iterables.concat(frameworkObjcProviders, executableObjcProviders, getTypedProviders(transitiveInfoCollections, ObjcProvider.SKYLARK_CONSTRUCTOR)); } 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 63c7abcb3b..8fe598b529 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 @@ -121,7 +121,8 @@ public class AppleStaticLibraryTest extends ObjcRuleTestCase { " 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")); 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 3894f64224..955ce658a7 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 @@ -504,7 +504,8 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase { .addAll(FASTBUILD_COPTS) .addAll( ObjcLibraryTest.iquoteArgs( - binaryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR), getTargetConfiguration())) + providerForTarget("//package:opl_binary"), + getTargetConfiguration())) .add("-I") .add(sourceFile.getExecPath().getParentDirectory().getParentDirectory().toString()) .add("-fno-objc-arc") 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 a51ddb6fc0..38740996f1 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 @@ -352,6 +352,10 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase { .add("--apple_crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL) .add("--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL); + // TODO(b/32411441): This flag will be flipped off by default imminently, at which point + // this can be removed. The flag itself is for safe rollout of a backwards incompatible change. + extraArgsBuilder.add("--noexperimental_objc_provider_from_linked"); + ImmutableList<String> extraArgs = extraArgsBuilder.build(); args = Arrays.copyOf(args, args.length + extraArgs.size()); for (int i = 0; i < extraArgs.size(); i++) { @@ -1045,7 +1049,21 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase { } protected ObjcProvider providerForTarget(String label) throws Exception { - return getConfiguredTarget(label).get(ObjcProvider.SKYLARK_CONSTRUCTOR); + ObjcProvider objcProvider = getConfiguredTarget(label).get(ObjcProvider.SKYLARK_CONSTRUCTOR); + if (objcProvider != null) { + return objcProvider; + } + AppleExecutableBinaryProvider executableProvider = + getConfiguredTarget(label).get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR); + if (executableProvider != null) { + return executableProvider.getDepsObjcProvider(); + } + AppleDylibBinaryProvider dylibProvider = + getConfiguredTarget(label).get(AppleDylibBinaryProvider.SKYLARK_CONSTRUCTOR); + if (dylibProvider != null) { + return dylibProvider.getDepsObjcProvider(); + } + return null; } protected CommandAction archiveAction(String label) throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java index f2b301dcd7..e434456d7e 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java @@ -204,7 +204,9 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase { ")"); ConfiguredTarget binaryTarget = getConfiguredTarget("//examples/apple_skylark:bin"); - ObjcProvider objcProvider = binaryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR); + AppleExecutableBinaryProvider executableProvider = + binaryTarget.get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR); + ObjcProvider objcProvider = executableProvider.getDepsObjcProvider(); assertThat(Artifact.toRootRelativePaths(objcProvider.get(ObjcProvider.LIBRARY))) .contains("examples/apple_skylark/liblib.a"); @@ -242,7 +244,9 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase { ")"); ConfiguredTarget binaryTarget = getConfiguredTarget("//examples/apple_skylark:bin"); - ObjcProvider objcProvider = binaryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR); + AppleExecutableBinaryProvider executableProvider = + binaryTarget.get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR); + ObjcProvider objcProvider = executableProvider.getDepsObjcProvider(); assertThat(objcProvider.get(ObjcProvider.DEFINE)).contains("mock_define"); } |