diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2023-05-30 13:02:57 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2023-05-30 13:05:33 +0200 |
commit | c18dde32e5b6c6f523fb312668c6fb4f87236978 (patch) | |
tree | b0bed1428181884c810079bb9b958c117eb02943 | |
parent | shared/ethtool-util: autogenerate table of link mode names (diff) | |
download | systemd-c18dde32e5b6c6f523fb312668c6fb4f87236978.tar.xz systemd-c18dde32e5b6c6f523fb312668c6fb4f87236978.zip |
man: generate link mode list dynamically
The entries are sorted by speed. Some fields are left empty when there is no
clear value to use. The table is much longer now, but I think it's better to
document the allowed values, even if some are not terribly useful.
Fixes #26256.
Diffstat (limited to '')
-rw-r--r-- | man/meson.build | 16 | ||||
-rw-r--r-- | man/systemd.link.xml | 47 | ||||
-rw-r--r-- | meson.build | 2 | ||||
-rw-r--r-- | src/shared/ethtool-link-mode.py | 38 | ||||
-rw-r--r-- | src/shared/meson.build | 10 | ||||
-rwxr-xr-x | tools/xml_helper.py | 2 |
6 files changed, 57 insertions, 58 deletions
diff --git a/man/meson.build b/man/meson.build index e6724a53f4..4dc5fabd6d 100644 --- a/man/meson.build +++ b/man/meson.build @@ -20,7 +20,9 @@ xsltproc_flags = [ '--stringparam', 'man.copyright.section.enabled', '0', '--stringparam', 'systemd.version', '@0@'.format(meson.project_version()), '--path', - '@0@:@1@'.format(meson.current_build_dir(), meson.current_source_dir())] + '@0@:@1@:@2@'.format(meson.current_build_dir(), + meson.current_source_dir(), + libshared_build_dir)] custom_man_xsl = files('custom-man.xsl') custom_html_xsl = files('custom-html.xsl') @@ -32,6 +34,8 @@ custom_entities_ent = custom_target( output : 'custom-entities.ent', command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@']) +man_page_depends += custom_entities_ent + man_pages = [] html_pages = [] source_xml_files = [] @@ -68,7 +72,7 @@ foreach tuple : manpages input : xml, output : [man] + manaliases, command : xslt_cmd + [custom_man_xsl, '@INPUT@'], - depends : custom_entities_ent, + depends : man_page_depends, install : want_man, install_dir : mandirn) man_pages += p1 @@ -93,7 +97,7 @@ foreach tuple : manpages input : xml, output : html, command : xslt_cmd + [custom_html_xsl, '@INPUT@'], - depends : [custom_entities_ent, p2], + depends : [man_page_depends, p2], install : want_html, install_dir : docdir / 'html') html_pages += p3 @@ -114,7 +118,7 @@ systemd_directives_xml = custom_target( 'systemd.directives.xml', input : ['directives-template.xml', source_xml_files], output : 'systemd.directives.xml', - depends : custom_entities_ent, + depends : man_page_depends, command : [make_directive_index_py, '@OUTPUT@', '@INPUT@']) nonindex_xml_files = source_xml_files + [systemd_directives_xml] @@ -166,7 +170,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv input : xml, output : html, command : xslt_cmd + [custom_html_xsl, '@INPUT@'], - depends : [custom_entities_ent, p2], + depends : [man_page_depends, p2], install : want_html and have_lxml, install_dir : docdir / 'html') html_pages += p3 @@ -237,4 +241,4 @@ update_man_rules = custom_target( command : [update_man_rules_py, '@0@/man/*.xml'.format(project_source_root), '@0@/rules/meson.build'.format(meson.current_source_dir())], - depends : custom_entities_ent) + depends : man_page_depends) diff --git a/man/systemd.link.xml b/man/systemd.link.xml index cc851d31f9..af9e247fc4 100644 --- a/man/systemd.link.xml +++ b/man/systemd.link.xml @@ -3,7 +3,8 @@ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> <!-- SPDX-License-Identifier: LGPL-2.1-or-later --> -<refentry id="systemd.link"> +<refentry id="systemd.link" + xmlns:xi="http://www.w3.org/2001/XInclude"> <refentryinfo> <title>systemd.link</title> <productname>systemd</productname> @@ -709,49 +710,7 @@ <entry>Speed (Mbps)</entry> <entry>Duplex Mode</entry> </row></thead> - <tbody> - <row><entry><option>10baset-half</option></entry> - <entry>10</entry><entry>half</entry></row> - - <row><entry><option>10baset-full</option></entry> - <entry>10</entry><entry>full</entry></row> - - <row><entry><option>100baset-half</option></entry> - <entry>100</entry><entry>half</entry></row> - - <row><entry><option>100baset-full</option></entry> - <entry>100</entry><entry>full</entry></row> - - <row><entry><option>1000baset-half</option></entry> - <entry>1000</entry><entry>half</entry></row> - - <row><entry><option>1000baset-full</option></entry> - <entry>1000</entry><entry>full</entry></row> - - <row><entry><option>10000baset-full</option></entry> - <entry>10000</entry><entry>full</entry></row> - - <row><entry><option>2500basex-full</option></entry> - <entry>2500</entry><entry>full</entry></row> - - <row><entry><option>1000basekx-full</option></entry> - <entry>1000</entry><entry>full</entry></row> - - <row><entry><option>10000basekx4-full</option></entry> - <entry>10000</entry><entry>full</entry></row> - - <row><entry><option>10000basekr-full</option></entry> - <entry>10000</entry><entry>full</entry></row> - - <row><entry><option>10000baser-fec</option></entry> - <entry>10000</entry><entry>full</entry></row> - - <row><entry><option>20000basemld2-full</option></entry> - <entry>20000</entry><entry>full</entry></row> - - <row><entry><option>20000basekr2-full</option></entry> - <entry>20000</entry><entry>full</entry></row> - </tbody> + <xi:include href="ethtool-link-mode.xml" /> </tgroup> </table> diff --git a/meson.build b/meson.build index 97622b6d97..3919a4a9b0 100644 --- a/meson.build +++ b/meson.build @@ -2172,6 +2172,8 @@ userspace = declare_dependency( link_args : userspace_c_ld_args, ) +man_page_depends = [] + ############################################################ # binaries that have --help and are intended for use by humans, diff --git a/src/shared/ethtool-link-mode.py b/src/shared/ethtool-link-mode.py index a113177de1..03ea1b1fd8 100644 --- a/src/shared/ethtool-link-mode.py +++ b/src/shared/ethtool-link-mode.py @@ -7,27 +7,49 @@ import sys OVERRIDES = { 'autoneg' : 'autonegotiation', } -count = 0 -f = open(sys.argv[1]) +xml = sys.argv[1] == '--xml' + +f = open(sys.argv[-1]) for line in f: if line.startswith('enum ethtool_link_mode_bit_indices {'): break + +entries = [] for line in f: if line.startswith('}'): break # ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0, - m = re.match(r'^\s*(ETHTOOL_LINK_MODE_(.*)_BIT)\s*=\s*(\d+),', line) + m = re.match(r'^\s*(ETHTOOL_LINK_MODE_((\d*).*)_BIT)\s*=\s*(\d+),', line) if not m: continue - enum, name, value = m.groups() + enum, name, speed, value = m.groups() name = name.lower().replace('_', '-') name = OVERRIDES.get(name, name) - enum = f'[{enum}]' + duplex = name.split('-')[-1].lower() + if duplex not in {'half', 'full'}: + duplex = '' + + entries += [(enum, name, speed, value, duplex)] + +if xml: + print(' <tbody>') + + entries.sort(key=lambda entry: (int(entry[2]) if entry[2] else 1e20, entry[4], entry[1], entry[3])) + +for enum, name, speed, value, duplex in entries: + if xml: + print(f'''\ + <row><entry><option>{name}</option></entry> + <entry>{speed}</entry><entry>{duplex}</entry></row> + ''') + else: + enum = f'[{enum}]' + print(f' {enum:50} = "{name}",') - print(f' {enum:50} = "{name}",') - count += 1 +if xml: + print(' </tbody>') -assert count >= 99 +assert len(entries) >= 99 diff --git a/src/shared/meson.build b/src/shared/meson.build index 5a40d09bd5..d78b9176c0 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -279,6 +279,15 @@ ethtool_link_mode_h = custom_target( capture : true) shared_sources += ethtool_link_mode_h +fname = 'ethtool-link-mode.xml' +ethtool_link_mode_xml = custom_target( + fname, + input : ['ethtool-link-mode.py', 'linux/ethtool.h'], + output : fname, + command : [python, '@INPUT0@', '--xml', '@INPUT1@'], + capture : true) +man_page_depends += ethtool_link_mode_xml + libshared_name = 'systemd-shared-@0@'.format(shared_lib_tag) libshared_deps = [threads, @@ -304,6 +313,7 @@ libshared_deps = [threads, versiondep] libshared_sym_path = '@0@/libshared.sym'.format(meson.current_source_dir()) +libshared_build_dir = meson.current_build_dir() libshared_static = static_library( libshared_name, diff --git a/tools/xml_helper.py b/tools/xml_helper.py index 0361358bec..bc14298653 100755 --- a/tools/xml_helper.py +++ b/tools/xml_helper.py @@ -7,6 +7,8 @@ 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) _parser = tree.XMLParser() _parser.resolvers.add(CustomResolver()) |