From ab64afc109e80871f5512d744f1c3b6491fbabf4 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Wed, 17 Jan 2024 12:00:23 -0800 Subject: [PATCH] freedreno/registers: Generate copyright comment blurb Similar to headergen2, the output matches as closely as is reasonable. The time format and file listing ends up being slightly different but those would be part of the diffstat when we next update kernel headers regardless. Signed-off-by: Rob Clark Part-of: --- src/freedreno/registers/gen_header.py | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) 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()