|  | #!/usr/bin/env python3 | 
|  | """ | 
|  | Generate a Makefile .d fragment for the XML includes. | 
|  | """ | 
|  |  | 
|  | import argparse | 
|  | import os | 
|  | import sys | 
|  |  | 
|  | from io import StringIO | 
|  | import xml.etree.ElementTree as ET | 
|  |  | 
|  | from lib.deps import add_dependency | 
|  | from lib.deps import write_deps | 
|  |  | 
|  | parser = argparse.ArgumentParser() | 
|  | parser.add_argument( | 
|  | "inputfile", type=argparse.FileType('r'), help="Input XML file" | 
|  | ) | 
|  | parser.add_argument( | 
|  | "--file_per_line", | 
|  | action='store_true', | 
|  | help="Output dependencies file per line, rather than Make .d format." | 
|  | ) | 
|  |  | 
|  |  | 
|  | def read_dependencies(inputfile): | 
|  | inputpath = os.path.abspath(inputfile.name) | 
|  | inputdir = os.path.dirname(inputpath) | 
|  |  | 
|  | try: | 
|  | tree = ET.parse(inputfile) | 
|  | except ET.ParseError: | 
|  | sys.stderr.write("XML parse error '{}'\n".format(inputfile)) | 
|  | raise | 
|  |  | 
|  | for el in tree.iter(): | 
|  | if str(el.tag).endswith('XInclude}include'): | 
|  | yield os.path.abspath(os.path.join(inputdir, el.get('href'))) | 
|  |  | 
|  |  | 
|  | def main(argv): | 
|  | args = parser.parse_args(argv[1:]) | 
|  |  | 
|  | if args.file_per_line: | 
|  | for dep in read_dependencies(args.inputfile): | 
|  | print(dep) | 
|  | else: | 
|  | data = StringIO() | 
|  | inputpath = os.path.abspath(args.inputfile.name) | 
|  | for includefile in read_dependencies(args.inputfile): | 
|  | add_dependency(data, inputpath, includefile) | 
|  |  | 
|  | write_deps(args.inputfile.name, data) | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | sys.exit(main(sys.argv)) |