Remove private headers from modulemaps generated by objc_ targets
--
MOS_MIGRATED_REVID=140498934
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 efa6b1d..3722572 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
@@ -452,15 +452,14 @@
Optional<CompilationArtifacts> compilationArtifacts) {
// TODO(bazel-team): Include textual headers in the module map when Xcode 6 support is
// dropped.
+ // TODO(b/32225593): Include private headers in the module map.
Iterable<Artifact> publicHeaders = attributes.hdrs();
- Iterable<Artifact> privateHeaders = ImmutableList.of();
if (compilationArtifacts.isPresent()) {
CompilationArtifacts artifacts = compilationArtifacts.get();
publicHeaders = Iterables.concat(publicHeaders, artifacts.getAdditionalHdrs());
- privateHeaders = Iterables.concat(privateHeaders, artifacts.getPrivateHdrs());
}
CppModuleMap moduleMap = intermediateArtifacts.moduleMap();
- registerGenerateModuleMapAction(moduleMap, publicHeaders, privateHeaders);
+ registerGenerateModuleMapAction(moduleMap, publicHeaders);
return this;
}
@@ -869,20 +868,17 @@
/**
* Registers an action that will generate a clang module map.
- *
* @param moduleMap the module map to generate
* @param publicHeaders the headers that should be directly accessible by dependers
- * @param privateHeaders the headers that should only be directly accessible by this module
*/
private void registerGenerateModuleMapAction(
- CppModuleMap moduleMap, Iterable<Artifact> publicHeaders, Iterable<Artifact> privateHeaders) {
+ CppModuleMap moduleMap, Iterable<Artifact> publicHeaders) {
publicHeaders = Iterables.filter(publicHeaders, MODULE_MAP_HEADER);
- privateHeaders = Iterables.filter(privateHeaders, MODULE_MAP_HEADER);
ruleContext.registerAction(
new CppModuleMapAction(
ruleContext.getActionOwner(),
moduleMap,
- privateHeaders,
+ ImmutableList.<Artifact>of(),
publicHeaders,
attributes.moduleMapsForDirectDeps(),
ImmutableList.<PathFragment>of(),
diff --git a/src/test/shell/bazel/apple/bazel_apple_test.sh b/src/test/shell/bazel/apple/bazel_apple_test.sh
index 4a9b245..1cabd28 100755
--- a/src/test/shell/bazel/apple/bazel_apple_test.sh
+++ b/src/test/shell/bazel/apple/bazel_apple_test.sh
@@ -809,4 +809,29 @@
expect_log "ios/top.swift:1:1: error: expressions are not allowed at the top level"
}
+# Test that it's possible to import Clang module of a target that contains private headers.
+function test_import_module_with_private_hdrs() {
+ rm -rf ios
+ mkdir -p ios
+ touch ios/Foo.h ios/Foo_Private.h
+
+cat >ios/main.swift <<EOF
+import ios_lib
+EOF
+
+cat >ios/BUILD <<EOF
+load("//tools/build_defs/apple:swift.bzl", "swift_library")
+
+objc_library(name = "lib",
+ srcs = ["Foo_Private.h"],
+ hdrs = ["Foo.h"])
+
+swift_library(name = "swiftmodule",
+ srcs = ["main.swift"],
+ deps = [":lib"])
+EOF
+ bazel build --verbose_failures --xcode_version=$XCODE_VERSION \
+ //ios:swiftmodule >$TEST_log 2>&1 || fail "should build"
+}
+
run_suite "apple_tests"