blob: c283158837c61c103a9bded562ef0dfe0fde47fa [file] [log] [blame]
#!/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))