|
|
@ -1,8 +1,9 @@ |
|
|
|
#!/usr/bin/env python3 |
|
|
|
# -*- Mode: python; coding: utf-8; indent-tabs-mode: nil -*- */ |
|
|
|
# |
|
|
|
# This file is part of systemd. |
|
|
|
# |
|
|
|
# Copyright 2013 Zbigniew Jędrzejewski-Szmek |
|
|
|
# Copyright 2013, 2017 Zbigniew Jędrzejewski-Szmek |
|
|
|
# |
|
|
|
# systemd is free software; you can redistribute it and/or modify it |
|
|
|
# under the terms of the GNU Lesser General Public License as published by |
|
|
@ -21,6 +22,7 @@ from __future__ import print_function |
|
|
|
import collections |
|
|
|
import sys |
|
|
|
import os.path |
|
|
|
import pprint |
|
|
|
from xml_helper import * |
|
|
|
|
|
|
|
SECTION = '''\ |
|
|
@ -65,11 +67,13 @@ EXTRA_DIST += \\ |
|
|
|
{dist_files} |
|
|
|
''' |
|
|
|
|
|
|
|
meson = False |
|
|
|
|
|
|
|
def man(page, number): |
|
|
|
return 'man/{}.{}'.format(page, number) |
|
|
|
return ('man/' if not meson else '') + '{}.{}'.format(page, number) |
|
|
|
|
|
|
|
def xml(file): |
|
|
|
return 'man/{}'.format(os.path.basename(file)) |
|
|
|
return ('man/' if not meson else '') + os.path.basename(file) |
|
|
|
|
|
|
|
def add_rules(rules, name): |
|
|
|
xml = xml_parse(name) |
|
|
@ -121,9 +125,40 @@ def make_makefile(rules, dist_files): |
|
|
|
for conditional,rulegroup in sorted(rules.items()) |
|
|
|
) + FOOTER.format(dist_files=mjoin(sorted(dist_files))) |
|
|
|
|
|
|
|
MESON_HEADER = '''\ |
|
|
|
# Do not edit. Generated by make-man-rules.py. |
|
|
|
manpages = [''' |
|
|
|
|
|
|
|
MESON_FOOTER = '''\ |
|
|
|
] |
|
|
|
# Really, do not edit.''' |
|
|
|
|
|
|
|
def make_mesonfile(rules, dist_files): |
|
|
|
# reformat rules as |
|
|
|
# grouped = [ [name, section, [alias...], condition], ...] |
|
|
|
# |
|
|
|
# but first create a dictionary like |
|
|
|
# lists = { (name, condition) => [alias...] |
|
|
|
grouped = collections.defaultdict(list) |
|
|
|
for condition, items in rules.items(): |
|
|
|
for alias, name in items.items(): |
|
|
|
group = grouped[(name, condition)] |
|
|
|
if name != alias: |
|
|
|
group.append(alias) |
|
|
|
|
|
|
|
lines = [ [p[0][:-2], p[0][-1], sorted(a[:-2] for a in aliases), p[1]] |
|
|
|
for p, aliases in sorted(grouped.items()) ] |
|
|
|
return '\n'.join((MESON_HEADER, pprint.pformat(lines)[1:-1], MESON_FOOTER)) |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
rules = create_rules(sys.argv[1:]) |
|
|
|
dist_files = (xml(file) for file in sys.argv[1:] |
|
|
|
meson = sys.argv[1] == '--meson' |
|
|
|
pages = sys.argv[1+meson:] |
|
|
|
|
|
|
|
rules = create_rules(pages) |
|
|
|
dist_files = (xml(file) for file in pages |
|
|
|
if not file.endswith(".directives.xml") and |
|
|
|
not file.endswith(".index.xml")) |
|
|
|
print(make_makefile(rules, dist_files), end='') |
|
|
|
if meson: |
|
|
|
print(make_mesonfile(rules, dist_files)) |
|
|
|
else: |
|
|
|
print(make_makefile(rules, dist_files), end='') |
|
|
|