| #!/usr/bin/python3 | |
| import os | |
| import sys | |
| from lxml import etree | |
| from pathlib import Path as P | |
| import argparse | |
| PARSER = argparse.ArgumentParser() | |
| PARSER.add_argument('builddir') | |
| PARSER.add_argument('girs', nargs="+") | |
| def make_rel(elem, gir_relpath): | |
| filepath = P(elem.attrib["filename"]) | |
| filedir = filepath.parent | |
| girdir = gir_relpath.parent | |
| while filedir.name != girdir.name: | |
| filedir = filedir.parent | |
| while filedir.name == girdir.name: | |
| filedir = filedir.parent | |
| girdir = girdir.parent | |
| elem.attrib["filename"] = str('..' / girdir / filepath) | |
| if __name__ == "__main__": | |
| opts = PARSER.parse_args() | |
| girdir = P(__file__).parent.parent / 'girs' | |
| for girfile in opts.girs: | |
| gir_relpath = P(os.path.relpath(girfile, opts.builddir)) | |
| et = etree.parse(girfile) | |
| # Remove line numbers from the girs as those would change all the time. | |
| for n in et.iter("{http://www.gtk.org/introspection/core/1.0}source-position"): | |
| del n.attrib["line"] | |
| make_rel(n, gir_relpath) | |
| for n in et.iter("{http://www.gtk.org/introspection/core/1.0}doc"): | |
| del n.attrib["line"] | |
| make_rel(n, gir_relpath) | |
| et.write(str(girdir / os.path.basename(girfile)), pretty_print=True) |