From: Zbigniew Jędrzejewski-Szmek Date: Tue, 30 May 2023 11:02:57 +0000 (+0200) Subject: man: generate link mode list dynamically X-Git-Tag: v254-rc1~215^2~1 X-Git-Url: http://git-history.diyao.me/?a=commitdiff_plain;h=c18dde32e5b6c6f523fb312668c6fb4f87236978;p=systemd%2F.git 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. --- 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"> - + systemd.link systemd @@ -709,49 +710,7 @@ Speed (Mbps) Duplex Mode - - - 10half - - - 10full - - - 100half - - - 100full - - - 1000half - - - 1000full - - - 10000full - - - 2500full - - - 1000full - - - 10000full - - - 10000full - - - 10000full - - - 20000full - - - 20000full - + 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(' ') + + 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'''\ + + {speed}{duplex} + ''') + else: + enum = f'[{enum}]' + print(f' {enum:50} = "{name}",') - print(f' {enum:50} = "{name}",') - count += 1 +if xml: + print(' ') -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())