Automated rollback of commit b9fa276f5cf111fdfc2bc8766b9421cedba1b0a6.
*** Reason for rollback ***
Fixed the underlying issue with modulemap generation.
*** Original change description ***
Automated rollback of commit 9906c5c4cd1124a4291461fb472685ad7d88580e.
*** Reason for rollback ***
b/157557521
*** Original change description ***
Preserve direct fields when merging ARC and non-ARC compilation contexts after Objective-C compilation.
RELNOTES: None.
PiperOrigin-RevId: 314793255
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 8b47165..56bc435 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -450,10 +450,13 @@
CcCompilationContext.Builder ccCompilationContextBuilder =
CcCompilationContext.builder(
ruleContext, ruleContext.getConfiguration(), ruleContext.getLabel());
+ // Do a re-exporting merge of the ARC and non-ARC contexts so that the direct headers are
+ // preserved in the unified context.
ccCompilationContextBuilder.mergeDependentCcCompilationContexts(
Arrays.asList(
objcArcCompilationInfo.getCcCompilationContext(),
- nonObjcArcCompilationInfo.getCcCompilationContext()));
+ nonObjcArcCompilationInfo.getCcCompilationContext()),
+ ImmutableList.of());
ccCompilationContextBuilder.setPurpose(
String.format("%s_merged_arc_non_arc_objc", semantics.getPurpose()));
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 2be2ae1..ea44dc1 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
@@ -49,6 +49,8 @@
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.util.MockObjcSupport;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
+import com.google.devtools.build.lib.rules.cpp.CcCompilationContext;
+import com.google.devtools.build.lib.rules.cpp.CcInfo;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
@@ -1925,6 +1927,19 @@
.containsExactly("bar.m");
assertThat(Artifact.toRootRelativePaths(dependerProvider.getDirect(ObjcProvider.MODULE_MAP)))
.containsExactly("x/bar.modulemaps/module.modulemap");
+
+ ConfiguredTarget target = getConfiguredTarget("//x:bar");
+ CcCompilationContext ccCompilationContext =
+ target.get(CcInfo.PROVIDER).getCcCompilationContext();
+ assertThat(baseArtifactNames(ccCompilationContext.getDirectPublicHdrs()))
+ .containsExactly("bar.h");
+ assertThat(baseArtifactNames(ccCompilationContext.getDirectPrivateHdrs()))
+ .containsExactly("bar_impl.h");
+ assertThat(baseArtifactNames(ccCompilationContext.getTextualHdrs())).containsExactly("bar.inc");
+
+ // Verify that the CppModuleMap objects are not added twice when merging the ARC and non-ARC
+ // contexts.
+ assertThat(ccCompilationContext.getExportingModuleMaps()).hasSize(1);
}
@Test