diff --git a/src/freedreno/registers/gen_header.py b/src/freedreno/registers/gen_header.py index 54bfe27c963..995b6e6e8ef 100644 --- a/src/freedreno/registers/gen_header.py +++ b/src/freedreno/registers/gen_header.py @@ -5,6 +5,8 @@ import sys import os import collections import argparse +import time +import datetime class Error(Exception): def __init__(self, message): @@ -336,6 +338,9 @@ class Parser(object): self.variants = set() self.file = [] self.xml_files = [] + self.copyright_year = None + self.authors = [] + self.license = None def error(self, message): parser, filename = self.stack[-1] @@ -470,6 +475,8 @@ class Parser(object): self.stack.append((parser, filename)) parser.StartElementHandler = self.start_element parser.EndElementHandler = self.end_element + parser.CharacterDataHandler = self.character_data + parser.buffer_text = True parser.ParseFile(file) self.stack.pop() file.close() @@ -516,6 +523,7 @@ class Parser(object): self.add_all_usages(self.current_reg, usages) def start_element(self, name, attrs): + self.cdata = "" if name == "import": filename = attrs["file"] self.do_parse(os.path.join(self.path, filename)) @@ -564,6 +572,10 @@ class Parser(object): self.parse_field(attrs["name"], attrs) elif name == "database": self.do_validate(attrs["xsi:schemaLocation"]) + elif name == "copyright": + self.copyright_year = attrs["year"] + elif name == "author": + self.authors.append(attrs["name"] + " <" + attrs["email"] + "> " + attrs["name"]) def end_element(self, name): if name == "domain": @@ -580,6 +592,11 @@ class Parser(object): self.current_array = None elif name == "enum": self.current_enum = None + elif name == "license": + self.license = self.cdata + + def character_data(self, data): + self.cdata += data def dump_reg_usages(self): d = collections.defaultdict(list) @@ -737,6 +754,33 @@ def dump_c(args, guard, func): print("#ifndef %s\n#define %s\n" % (guard, guard)) + print("""/* Autogenerated file, DO NOT EDIT manually! + +This file was generated by the rules-ng-ng gen_header.py tool in this git repository: +http://gitlab.freedesktop.org/mesa/mesa/ +git clone https://gitlab.freedesktop.org/mesa/mesa.git + +The rules-ng-ng source files this header was generated from are: +""") + maxlen = 0 + for filepath in p.xml_files: + maxlen = max(maxlen, len(filepath)) + for filepath in p.xml_files: + pad = " " * (maxlen - len(filepath)) + filesize = str(os.path.getsize(filepath)) + filesize = " " * (7 - len(filesize)) + filesize + filetime = time.ctime(os.path.getmtime(filepath)) + print("- " + filepath + pad + " (" + filesize + " bytes, from " + filetime + ")") + if p.copyright_year: + current_year = str(datetime.date.today().year) + print() + print("Copyright (C) %s-%s by the following authors:" % (p.copyright_year, current_year)) + for author in p.authors: + print("- " + author) + if p.license: + print(p.license) + print("*/") + print() print("#include ") print()