diff options
author | cpeyser <cpeyser@google.com> | 2018-02-12 06:41:54 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-12 06:44:02 -0800 |
commit | db61b316458685344d3aa4b6a784f09001a90892 (patch) | |
tree | 0a3bdca0bcda9df1a2282de3c51e042aeb6d79d0 /src | |
parent | a92cde101f774c7731fbf16abc099dad311b5216 (diff) |
Changes cc_library to consume headers specified in the "hdrs" attribute of an
objc_library that it depends on.
See https://github.com/bazelbuild/bazel/issues/3352
PiperOrigin-RevId: 185371993
Diffstat (limited to 'src')
3 files changed, 20 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index ea55f9adbc..5c9292969e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -90,7 +90,7 @@ import java.util.Set; public final class ObjcCommon { /** Filters fileset artifacts out of a group of artifacts. */ - public static Iterable<Artifact> filterFileset(Iterable<Artifact> artifacts) { + public static ImmutableList<Artifact> filterFileset(Iterable<Artifact> artifacts) { ImmutableList.Builder<Artifact> inputs = ImmutableList.<Artifact>builder(); for (Artifact artifact : artifacts) { if (!artifact.isFileset()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 7ad60f0c46..7785f22ee1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; +import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes; import com.google.devtools.build.lib.syntax.Type; import java.util.Map; @@ -87,9 +88,15 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { J2ObjcEntryClassProvider j2ObjcEntryClassProvider = new J2ObjcEntryClassProvider.Builder() .addTransitive(ruleContext.getPrerequisites("deps", Mode.TARGET, J2ObjcEntryClassProvider.class)).build(); + CppCompilationContext cppCompilationContext = + new CppCompilationContext.Builder(ruleContext) + .addDeclaredIncludeSrcs(CompilationAttributes.Builder + .fromRuleContext(ruleContext).build().hdrs().toCollection()) + .build(); return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) .addNativeDeclaredProvider(common.getObjcProvider()) + .addProvider(CppCompilationContext.class, cppCompilationContext) .addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider) .addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider) .addProvider( 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 b477492ed4..ec3dea8d41 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 @@ -1971,4 +1971,16 @@ public class ObjcLibraryTest extends ObjcRuleTestCase { public void testObjcSourcesFeatureObjcPlusPlus() throws Exception { assertThat(containsObjcFeature("c.mm")).isTrue(); } + + @Test + public void testHeaderPassedToCcLib() throws Exception { + createLibraryTargetWriter("//objc:lib").setList("hdrs", "objc_hdr.h").write(); + ScratchAttributeWriter.fromLabelString(this, "cc_library", "//cc:lib") + .setList("srcs", "a.cc") + .setList("deps", "//objc:lib") + .write(); + CommandAction compileAction = compileAction("//cc:lib", "a.o"); + assertThat(Artifact.toRootRelativePaths(compileAction.getPossibleInputsForTesting())) + .contains("objc/objc_hdr.h"); + } } |