@@ -20,24 +20,34 @@ def _extract_files_from_attr(attr, attr_name):
2020 files .extend (src .files .to_list ())
2121 return files
2222
23- SourceFilesInfo = provider (fields = ["files" ])
23+ SourceFilesInfo = provider (fields = ["files" , "inputs" ])
2424
2525def _cc_sources_aspect_impl (target , ctx ):
26- files = []
26+ direct_srcs = _extract_files_from_attr (ctx .rule .attr , "srcs" )
27+ direct_hdrs = _extract_files_from_attr (ctx .rule .attr , "hdrs" )
28+ direct_textual_hdrs = _extract_files_from_attr (ctx .rule .attr , "textual_hdrs" )
2729
28- files .extend (_extract_files_from_attr (ctx .rule .attr , "srcs" ))
30+ transitive_inputs = []
31+ for dep in getattr (ctx .rule .attr , "deps" , []):
32+ if SourceFilesInfo in dep :
33+ transitive_inputs .append (dep [SourceFilesInfo ].inputs )
2934
30- transitive = []
35+ if direct_srcs :
36+ files = direct_srcs
37+ else :
38+ files = []
39+ files .extend (direct_hdrs )
40+ files .extend (direct_textual_hdrs )
3141
32- if CcInfo in target :
33- cc_info = target [CcInfo ]
34- if hasattr (cc_info , "compilation_context" ):
35- cc_ctx = cc_info .compilation_context
36- transitive = cc_ctx .headers
42+ direct_inputs = []
43+ direct_inputs .extend (direct_srcs )
44+ direct_inputs .extend (direct_hdrs )
45+ direct_inputs .extend (direct_textual_hdrs )
3746
3847 return [
3948 SourceFilesInfo (
40- files = depset (files , transitive = [transitive ]),
49+ files = depset (files ),
50+ inputs = depset (direct_inputs , transitive = transitive_inputs ),
4151 ),
4252 ]
4353
@@ -207,15 +217,17 @@ def _cpp_parser_impl(ctx):
207217 for ea in extra_args :
208218 args += ["--extra-arg" , ea ]
209219
210- target_source_files_list = ctx .attr .target [SourceFilesInfo ].files .to_list ()
220+ target_source_files_info = ctx .attr .target [SourceFilesInfo ]
221+ target_source_files_list = target_source_files_info .files .to_list ()
222+ target_source_inputs_list = target_source_files_info .inputs .to_list ()
211223
212224 # extend args with input sources
213225 if SourceFilesInfo in ctx .attr .target :
214226 args += [file .path for file in target_source_files_list ]
215227
216228 inputs = [
217229 libclang ,
218- ] + target_source_files_list + cxx_builtin_include_files + extra_config_site_files
230+ ] + target_source_inputs_list + cxx_builtin_include_files + extra_config_site_files
219231
220232 ctx .actions .run (
221233 inputs = inputs ,
0 commit comments