Propagate includes and defines attributes from cc_library to dependent objc_libraries.

--
MOS_MIGRATED_REVID=102775222
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 05eaa44..6c2f99c 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
@@ -25,6 +25,7 @@
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.HEADER;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.IMPORTED_LIBRARY;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE;
+import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE_SYSTEM;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.LIBRARY;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.SDK_DYLIB;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.SDK_FRAMEWORK;
@@ -235,6 +236,7 @@
             "-iquote", ObjcCommon.userHeaderSearchPaths(ruleContext.getConfiguration()))
         .addBeforeEachExecPath("-include", compilationArtifacts.getPchFile().asSet())
         .addBeforeEachPath("-I", objcProvider.get(INCLUDE))
+        .addBeforeEachPath("-isystem", objcProvider.get(INCLUDE_SYSTEM))
         .add(otherFlags)
         .addFormatEach("-D%s", objcProvider.get(DEFINE))
         .add(coverageFlags.build())
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 7c2c1d9..657062b 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
@@ -33,6 +33,7 @@
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.HEADER;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.IMPORTED_LIBRARY;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE;
+import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE_SYSTEM;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INSTRUMENTED_SOURCE;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.LIBRARY;
 import static com.google.devtools.build.lib.rules.objc.ObjcProvider.LINKED_BINARY;
@@ -399,8 +400,12 @@
           .addTransitiveWithoutPropagating(directDepObjcProviders);
 
       for (CppCompilationContext headerProvider : depCcHeaderProviders) {
-        // TODO(bazel-team): Also account for custom include settings to go into header search paths
         objcProvider.addTransitiveAndPropagate(HEADER, headerProvider.getDeclaredIncludeSrcs());
+        objcProvider.addAll(INCLUDE, headerProvider.getIncludeDirs());
+        // TODO(bazel-team): This pulls in stl via CppHelper.mergeToolchainDependentContext but
+        // probably shouldn't.
+        objcProvider.addAll(INCLUDE_SYSTEM, headerProvider.getSystemIncludeDirs());
+        objcProvider.addAll(DEFINE, headerProvider.getDefines());
       }
       for (CcLinkParamsProvider linkProvider : depCcLinkProviders) {
         objcProvider.addTransitiveAndPropagate(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index 24f33e4..e8be368 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -105,6 +105,11 @@
   public static final Key<PathFragment> INCLUDE = new Key<>(LINK_ORDER);
 
   /**
+   * Include search paths specified with {@code -isystem} on the command line.
+   */
+  public static final Key<PathFragment> INCLUDE_SYSTEM = new Key<>(LINK_ORDER);
+
+  /**
    * Key for values in {@code defines} attributes. These are passed as {@code -D} flags to all
    * invocations of the compiler for this target and all depending targets.
    */