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