summaryrefslogtreecommitdiff
path: root/tools/make-man-rules.py
diff options
context:
space:
mode:
authorSven Eden <yamakuzure@gmx.net>2017-07-31 08:28:21 +0200
committerSven Eden <yamakuzure@gmx.net>2017-08-04 14:34:53 +0200
commitf3dca9e3c3373a5817582d4b583077b8f9358604 (patch)
treeea76ef30c91cf194ec7b47f59df44d452f26e10b /tools/make-man-rules.py
parentf3061b4c6efa8275466c56f291eca43d36178213 (diff)
General: Update build system to upstream support of meson+ninja.
Upstream thinks, that the auto tools are too 'legacy', or that they are at least no longer fitting. We follow, as the classic auto tools files have been removed, so no other choice here...
Diffstat (limited to 'tools/make-man-rules.py')
-rwxr-xr-xtools/make-man-rules.py98
1 files changed, 35 insertions, 63 deletions
diff --git a/tools/make-man-rules.py b/tools/make-man-rules.py
index 5e61917d6..e0f18d6fb 100755
--- a/tools/make-man-rules.py
+++ b/tools/make-man-rules.py
@@ -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,55 +22,14 @@ from __future__ import print_function
import collections
import sys
import os.path
-from xml_helper import *
-
-SECTION = '''\
-MANPAGES += \\
- {manpages}
-MANPAGES_ALIAS += \\
- {aliases}
-{rules}
-{htmlrules}
-'''
-
-CONDITIONAL = '''\
-if {conditional}
-''' \
-+ SECTION + \
-'''\
-endif
-'''
-
-HEADER = '''\
-# Do not edit. Generated by make-man-rules.py.
-# To regenerate:
-# 1. Create, update, or remove source .xml files in man/
-# 2. Run 'make update-man-list'
-# 3. Run 'make man' to generate manpages
-#
-# To make a man page conditional on a configure switch add
-# attribute conditional="ENABLE_WHAT" or conditional="WITH_WHAT"
-# to <refentry> element.
-'''
-
-HTML_ALIAS_RULE = '''\
-{}.html: {}.html
- $(html-alias)
-'''
-
-FOOTER = '''\
-
-# Really, do not edit this file.
-
-EXTRA_DIST += \\
- {dist_files}
-'''
+import pprint
+from xml_helper import xml_parse
def man(page, number):
- return 'man/{}.{}'.format(page, number)
+ return '{}.{}'.format(page, number)
def xml(file):
- return 'man/{}'.format(os.path.basename(file))
+ return os.path.basename(file)
def add_rules(rules, name):
xml = xml_parse(name)
@@ -106,24 +66,36 @@ def create_rules(xml_files):
def mjoin(files):
return ' \\\n\t'.join(sorted(files) or '#')
-def make_makefile(rules, dist_files):
- return HEADER + '\n'.join(
- (CONDITIONAL if conditional else SECTION).format(
- manpages=mjoin(set(rulegroup.values())),
- aliases=mjoin(k for k,v in rulegroup.items() if k != v),
- rules='\n'.join('{}: {}'.format(k,v)
- for k,v in sorted(rulegroup.items())
- if k != v),
- htmlrules='\n'.join(HTML_ALIAS_RULE.format(k[:-2],v[:-2])
- for k,v in sorted(rulegroup.items())
- if k != v),
- conditional=conditional)
- 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:]
+ pages = sys.argv[1:]
+
+ 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='')
+ print(make_mesonfile(rules, dist_files))