Add objc strict includes to include paths
This is in prepareation for the ObjcProvider to CcCompilationContext
migration. After the migration, a target must get its strict
dependency includes by inspecting the strict_include fields of its
objc dependencies. This change is also compatible with pre-migration.
PiperOrigin-RevId: 294445068
diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 96969d1..dda397f 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -640,6 +640,16 @@
return depset(transitive = depsets)
return depset()
+def _collect_objc_strict_includes(target, rule_attr):
+ """Returns a depset of strict includes found on the deps of given target."""
+ depsets = []
+ for dep in _collect_dependencies(rule_attr, "deps"):
+ if ObjcInfo in dep:
+ objc = dep[ObjcInfo]
+ if hasattr(objc, "strict_include"):
+ depsets.append(objc.strict_include)
+ return depset(transitive = depsets)
+
def _collect_objc_defines(objc_provider, cc_provider, rule_attr):
"""Returns a depset of C-compiler defines."""
if cc_provider and not objc_provider:
@@ -814,13 +824,20 @@
all_attributes.update(inheritable_attributes)
all_attributes.update(transitive_attributes)
+ objc_strict_includes = _collect_objc_strict_includes(target, rule_attr)
+
objc_provider = _get_opt_provider(target, ObjcInfo)
cc_provider = _get_opt_provider(target, CcInfo)
objc_defines = []
includes_depsets = []
if objc_provider:
- includes_depsets = [objc_provider.include, objc_provider.iquote, objc_provider.include_system]
+ includes_depsets = [
+ objc_strict_includes,
+ objc_provider.include,
+ objc_provider.iquote,
+ objc_provider.include_system,
+ ]
elif cc_provider:
cc_ctx = cc_provider.compilation_context
includes_depsets = [cc_ctx.includes, cc_ctx.quote_includes, cc_ctx.system_includes]