summaryrefslogtreecommitdiff
path: root/tools/make-man-rules.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/make-man-rules.py')
-rwxr-xr-xtools/make-man-rules.py54
1 files changed, 34 insertions, 20 deletions
diff --git a/tools/make-man-rules.py b/tools/make-man-rules.py
index 1913d44c65..582e0f1132 100755
--- a/tools/make-man-rules.py
+++ b/tools/make-man-rules.py
@@ -30,7 +30,6 @@ sdman.MANPAGES += \\
sdman.MANPAGES_ALIAS += \\
{aliases}
{rules}
-{htmlrules}
'''
CONDITIONAL = '''\
@@ -53,22 +52,23 @@ HEADER = '''\
# to <refentry> element.
'''
-MAN_ALIAS_RULE = '''\
-$(outdir)/{}: $(outdir)/{}
- $(sdman.man-alias)
+RULE_XSLT = '''
+$(outdir)/{refname}.{section}: $(srcdir)/{refname}.xml $(topsrcdir)/man/custom-man.xsl {deps}
+ $(sdman.man-xslt)
+$(outdir)/{refname}.html: $(srcdir)/{refname}.xml $(topsrcdir)/man/custom-html.xsl {deps}
+ $(sdman.html-xslt)
'''
-HTML_ALIAS_RULE = '''\
-$(outdir)/{}.html: $(outdir)/{}.html
+RULE_ALIAS = '''\
+$(outdir)/{refname}.{section}: $(outdir)/{srcrefname}.{srcsection}
+ $(sdman.man-alias)
+$(outdir)/{refname}.html: $(outdir)/{srcrefname}.html
$(sdman.html-alias)
'''
FOOTER = '''\
# Really, do not edit this file.
-
-EXTRA_DIST += \\
- {dist_files}
'''
def man(page, number):
@@ -78,7 +78,7 @@ def xml(file):
return '{}'.format(os.path.basename(file))
def add_rules(rules, name):
- xml = xml_parse(name)
+ xml, deps = xml_parse(name)
# print('parsing {}'.format(name), file=sys.stderr)
if xml.getroot().tag != 'refentry':
return
@@ -95,11 +95,17 @@ def add_rules(rules, name):
assert all(refname not in group
for group in rules.values()), "duplicate page name"
alias = man(refname.text, number)
- rulegroup[alias] = target
+ if alias == target:
+ rulegroup[alias] = deps
+ else:
+ rulegroup[alias] = target
# print('{} => {} [{}]'.format(alias, target, conditional), file=sys.stderr)
def create_rules(xml_files):
- " {conditional => {alias-name => source-name}} "
+ """
+ {conditional => {alias-name => source-name,
+ page-name => [sources...]}}
+ """
rules = collections.defaultdict(dict)
for name in xml_files:
try:
@@ -112,17 +118,25 @@ def create_rules(xml_files):
def mjoin(files):
return ' \\\n\t'.join(sorted(files) or '#')
+def make_makefile_rule(k, v):
+ if isinstance(v, str):
+ return RULE_ALIAS.format(
+ refname=k[:-2],
+ section=k[-1:],
+ srcrefname=v[:-2],
+ srcsection=v[-1:])
+ else:
+ return RULE_XSLT.format(
+ refname=k[:-2],
+ section=k[-1:],
+ deps=' '.join(v))
+
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(MAN_ALIAS_RULE.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),
+ manpages=mjoin(k for k,v in rulegroup.items() if not isinstance(v, str)),
+ aliases=mjoin(k for k,v in rulegroup.items() if isinstance(v, str)),
+ rules='\n'.join(make_makefile_rule(k, v) for k,v in sorted(rulegroup.items())),
conditional=conditional)
for conditional,rulegroup in sorted(rules.items())
) + FOOTER.format(dist_files=mjoin(sorted(dist_files)))