aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2017-02-03 18:14:36 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-02-06 19:35:41 +0000
commit92c8e43cfd697f16af58d992fd5974166face509 (patch)
treebf87de816c1fa4e93f60338760104b1f98623db4
parent1f42581891cc5f463edc94f8e96502f1b3aff033 (diff)
Directory headers are filtered out of header inputs to objc compilation.
-- PiperOrigin-RevId: 146487282 MOS_MIGRATED_REVID=146487282
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java20
1 files changed, 18 insertions, 2 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 2da5511875..fbef6c4256 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
@@ -72,6 +72,7 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
+import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs;
import com.google.devtools.build.lib.syntax.Type;
@@ -158,6 +159,21 @@ public final class ObjcCommon {
private Iterable<CppCompilationContext> depCcHeaderProviders = ImmutableList.of();
private Iterable<CcLinkParamsProvider> depCcLinkProviders = ImmutableList.of();
+ /** Filters directory artifacts (and other non-headers) out of a group of artifacts. */
+ private static Iterable<Artifact> filterHeaders(Iterable<Artifact> headers) {
+ ImmutableList.Builder<Artifact> inputs = ImmutableList.<Artifact>builder();
+ for (Artifact headerArtifact : headers) {
+ if (CppFileTypes.OBJC_HEADER.matches(headerArtifact.getFilename())
+ || CppFileTypes.C_SOURCE.matches(headerArtifact.getFilename())
+ || CppFileTypes.CPP_SOURCE.matches(headerArtifact.getFilename())
+ || CppFileTypes.OBJC_SOURCE.matches(headerArtifact.getFilename())
+ || CppFileTypes.OBJCPP_SOURCE.matches(headerArtifact.getFilename())) {
+ inputs.add(headerArtifact);
+ }
+ }
+ return inputs.build();
+ }
+
/**
* Builder for {@link ObjcCommon} obtaining both attribute data and configuration data from
* the given rule context.
@@ -463,8 +479,8 @@ public final class ObjcCommon {
PathFragment.safePathStrings(attributes.sdkIncludes())),
TO_PATH_FRAGMENT);
objcProvider
- .addAll(HEADER, attributes.hdrs())
- .addAll(HEADER, attributes.textualHdrs())
+ .addAll(HEADER, filterHeaders(attributes.hdrs()))
+ .addAll(HEADER, filterHeaders(attributes.textualHdrs()))
.addAll(INCLUDE, attributes.headerSearchPaths(buildConfiguration.getGenfilesFragment()))
.addAll(INCLUDE, sdkIncludes)
.addAll(SDK_FRAMEWORK, attributes.sdkFrameworks())