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.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c18dde32e5b6c6f523fb312668c6fb4f87236978;p=thirdparty%2Fsystemd.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 e6724a53f4a..4dc5fabd6de 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 cc851d31f98..af9e247fc4d 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 97622b6d973..3919a4a9b05 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 a113177de12..03ea1b1fd88 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 5a40d09bd51..d78b9176c0c 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 0361358bec2..bc14298653d 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())