manpages build fails on Arch with new lxml:
Traceback (most recent call last):
File "/work/src/tools/make-directive-index.py", line 169, in make_page
_extract_directives(directive_groups, formatting, page)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/work/src/tools/make-directive-index.py", line 18, in _extract_directives
t = xml_parse(page)
File "/work/src/tools/xml_helper.py", line 25, in xml_parse
doc = tree.parse(page, _parser)
File "src/lxml/etree.pyx", line 3717, in lxml.etree.parse
File "src/lxml/parser.pxi", line 2045, in lxml.etree._parseDocument
File "src/lxml/parser.pxi", line 2071, in lxml.etree._parseDocumentFromURL
File "src/lxml/parser.pxi", line 1962, in lxml.etree._parseDocFromFile
File "src/lxml/parser.pxi", line 1231, in lxml.etree._BaseParser._parseDocFromFile
File "src/lxml/parser.pxi", line 647, in lxml.etree._ParserContext._handleParseResultDoc
File "src/lxml/parser.pxi", line 765, in lxml.etree._handleParseResult
File "src/lxml/parser.pxi", line 689, in lxml.etree._raiseParseError
File "../src/man/hostname.xml", line 5
lxml.etree.XMLSyntaxError: Entity 'entities' not defined, line 5, column 11
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/work/src/tools/make-directive-index.py", line 180, in <module>
_xml = make_page(_template_path, _xml_files)
File "/work/src/tools/make-directive-index.py", line 171, in make_page
raise ValueError('failed to process ' + page) from e
ValueError: failed to process ../src/man/hostname.xml
Relying on XMLParser() defaults leaves the external parameter entity
used to load custom-entities.ent unresolved. Request entity resolution explicitly.
Follow-up for 1a13e31d27
32 lines
858 B
Python
Executable File
32 lines
858 B
Python
Executable File
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
from lxml import etree as tree
|
|
|
|
|
|
class CustomResolver(tree.Resolver):
|
|
def resolve(self, url, _id, context):
|
|
if 'custom-entities.ent' in url:
|
|
return self.resolve_filename('man/custom-entities.ent', context)
|
|
if 'ethtool-link-mode' in url:
|
|
return self.resolve_filename('src/shared/ethtool-link-mode.xml', context)
|
|
if 'bpf-delegate' in url:
|
|
return self.resolve_filename('src/core/bpf-delegate.xml', context)
|
|
|
|
return None
|
|
|
|
|
|
_parser = tree.XMLParser(resolve_entities=True)
|
|
# pylint: disable=no-member
|
|
_parser.resolvers.add(CustomResolver())
|
|
|
|
|
|
def xml_parse(page):
|
|
doc = tree.parse(page, _parser)
|
|
doc.xinclude()
|
|
return doc
|
|
|
|
|
|
def xml_print(xml):
|
|
return tree.tostring(xml, pretty_print=True, encoding='utf-8')
|