python-systemd/update-constants.py

51 lines
1.6 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1-or-later
import sys
def defines(file):
lines = iter(open(file).read().splitlines())
for line in lines:
if line.startswith('#define SD_MESSAGE') and '_STR ' not in line:
if line.endswith('\\'):
line = line[:-1] + next(lines)
_, name, value = line.split()
assert 'SD_' in name
assert 'SD_ID128_MAKE' in value
yield name, value
def process(includefile, docfile, *headers):
# Collects all messages from all headers and saves the sorted list back to
# headers[0]. Writes includefile (C) and docfile (rst).
# Collect all messages into a single sorted, deduplicated list
defs = sum((list(defines(file)) for file in headers), start=[])
defs = sorted(set(defs))
with open(includefile, 'wt') as out:
print(f'Writing {out.name}')
for name, value in defs:
print(f'add_id(m, "{name}", {name}) JOINER', file=out)
with open(headers[0], 'wt') as out:
print(f'Writing {out.name}')
for name, value in defs:
print(f'#define {name} {value}', file=out)
old = open(docfile).read().splitlines()
with open(docfile, 'wt') as out:
print(f'Writing {out.name}')
for line in old:
print(line, file=out)
if 'autogenerated' in line:
break
for name, value in defs:
print(f' .. autoattribute:: systemd.id128.{name}', file=out)
if __name__ == '__main__':
includefile = sys.argv[1]
docfile = sys.argv[2]
headers = sys.argv[3:]
process(includefile, docfile, *headers)