1919
2020from flatdata .generator .engine import Engine
2121from flatdata .generator .tree .errors import FlatdataSyntaxError
22+ from flatdata .generator .tree .syntax_tree import SyntaxTree
2223
2324
2425def _parse_command_line () -> argparse .Namespace :
@@ -32,6 +33,8 @@ def _parse_command_line() -> argparse.Namespace:
3233 parser .add_argument ("-O" , "--output-file" , type = str , required = True ,
3334 default = None ,
3435 help = "Destination file. Forces all output to be stored in one file" )
36+ parser .add_argument ("-d" , "--depfile" , type = str , default = None ,
37+ help = "Write a Makefile-style dependency file listing all imported schemas" )
3538 parser .add_argument ("-v" , "--verbose" , action = "store_true" ,
3639 help = "Enable verbose mode" )
3740 parser .add_argument ("--debug" , action = "store_true" ,
@@ -83,6 +86,26 @@ def _run(args: argparse.Namespace) -> None:
8386 output .write (output_content )
8487 logging .info ("Code for %s is written to %s" , args .gen , args .output_file )
8588
89+ if args .depfile :
90+ _write_depfile (args .depfile , args .output_file , args .schema , engine .tree )
91+
92+
93+ def _write_depfile (depfile_path : str , output_file : str , schema_file : str ,
94+ tree : 'SyntaxTree' ) -> None :
95+ """Write a Makefile-style depfile listing all schema dependencies."""
96+ deps = [os .path .abspath (schema_file )]
97+ # source_file_map keys are absolute paths of all imported files
98+ deps .extend (sorted (tree .source_file_map .keys ()))
99+
100+ # Escape spaces in paths for Make syntax
101+ def escape (p : str ) -> str :
102+ return p .replace (" " , "\\ " )
103+
104+ dep_str = " " .join (escape (d ) for d in deps )
105+ with open (depfile_path , "w" ) as f :
106+ f .write (f"{ escape (output_file )} : { dep_str } \n " )
107+ logging .info ("Depfile written to %s" , depfile_path )
108+
86109
87110def main () -> None :
88111 """Entrypoint"""
0 commit comments