docs: generate nm-settings-docs-nmcli.xml based on nmcli meta data

We have the correct meta-data of supported properties for nmcli. It is
in clients/common. Use that for generating the manual page instead of
the properties that are part of libnm (some properties may be in libnm
but not supported by nmcli, or some properties may not be GObject
properties, and not detected as by GObject introspection).
This commit is contained in:
Thomas Haller 2020-06-04 16:53:40 +02:00
parent 87edf2f298
commit 10020a9466
No known key found for this signature in database
GPG Key ID: 29C2366E4DFC5728
6 changed files with 139 additions and 17 deletions

3
.gitignore vendored
View File

@ -157,6 +157,9 @@ test-*.trs
/libnm/tests/test-remote-settings-client
/libnm/tests/test-secret-agent
/clients/cli/generate-docs-nm-settings-nmcli
/clients/cli/generate-docs-nm-settings-nmcli.xml
/m4/codeset.m4
/m4/gettext.m4
/m4/glibc2.m4

View File

@ -1559,6 +1559,7 @@ libnm/libnm.typelib: libnm/libnm.gir
INTROSPECTION_GIRS += libnm/NM-1.0.gir
libnm_noinst_data = \
clients/cli/generate-docs-nm-settings-nmcli.xml \
libnm/nm-property-infos-dbus.xml \
libnm/nm-property-infos-ifcfg-rh.xml \
libnm/nm-property-infos-keyfile.xml \
@ -1570,6 +1571,9 @@ libnm_noinst_data = \
noinst_DATA += $(libnm_noinst_data)
clients/cli/generate-docs-nm-settings-nmcli.xml: clients/cli/generate-docs-nm-settings-nmcli
$(AM_V_GEN) clients/cli/generate-docs-nm-settings-nmcli > $@
libnm_docs_sources = $(libnm_core_lib_c_settings_real)
libnm/nm-property-infos-%.xml: tools/generate-docs-nm-property-infos.pl $(libnm_docs_sources)
@ -1585,6 +1589,9 @@ libnm/nm-settings-docs-gir.xml: tools/generate-docs-nm-settings-docs-gir.py libn
--gir $(builddir)/libnm/NM-1.0.gir \
--output $@
man/nm-settings-docs-nmcli.xml: clients/cli/generate-docs-nm-settings-nmcli.xml libnm/nm-property-infos-nmcli.xml libnm/nm-settings-docs-gir.xml tools/generate-docs-nm-settings-docs-merge.py
$(AM_V_GEN) "$(PYTHON)" $(srcdir)/tools/generate-docs-nm-settings-docs-merge.py $@ $(wordlist 1,3,$^)
man/nm-settings-docs-%.xml: libnm/nm-property-infos-%.xml libnm/nm-settings-docs-gir.xml tools/generate-docs-nm-settings-docs-merge.py
$(AM_V_GEN) "$(PYTHON)" $(srcdir)/tools/generate-docs-nm-settings-docs-merge.py $@ $(wordlist 1,2,$^)
@ -4559,6 +4566,43 @@ uninstall_hook += uninstall-hook-nmcli
endif
###############################################################################
noinst_PROGRAMS += clients/cli/generate-docs-nm-settings-nmcli
clients_cli_generate_docs_nm_settings_nmcli_SOURCES = \
clients/cli/generate-docs-nm-settings-nmcli.c \
$(NULL)
clients_cli_generate_docs_nm_settings_nmcli_CPPFLAGS = \
-I$(srcdir)/clients/common \
$(clients_cppflags) \
-DG_LOG_DOMAIN=\""nmcli"\" \
$(NULL)
clients_cli_generate_docs_nm_settings_nmcli_LDADD = \
clients/common/libnmc.la \
clients/common/libnmc-base.la \
libnm/nm-libnm-aux/libnm-libnm-aux.la \
libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \
libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \
libnm/libnm.la \
shared/nm-glib-aux/libnm-glib-aux.la \
shared/nm-std-aux/libnm-std-aux.la \
shared/libcsiphash.la \
$(GLIB_LIBS) \
$(NULL)
clients_cli_generate_docs_nm_settings_nmcli_LDFLAGS = \
-Wl,--version-script="$(srcdir)/linker-script-binary.ver" \
$(SANITIZER_EXEC_LDFLAGS) \
$(NULL)
$(clients_cli_generate_docs_nm_settings_nmcli_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
$(clients_cli_generate_docs_nm_settings_nmcli_OBJECTS): $(libnm_lib_h_pub_mkenums)
###############################################################################
EXTRA_DIST += \
clients/cli/nmcli-completion \
clients/cli/meson.build \

View File

@ -0,0 +1,57 @@
// SPDX-License-Identifier: LGPL-2.1+
#include "nm-default.h"
#include "nm-meta-setting-desc.h"
#define INDENT 4
static char *
_xml_escape_attribute (const char *value)
{
gs_free char *s = NULL;
s = g_markup_escape_text (value, -1);
return g_strdup_printf ("\"%s\"", s);
}
static const char *
_indent_level (guint num_spaces)
{
static const char spaces[] = " ";
nm_assert (num_spaces < G_N_ELEMENTS (spaces));
return &spaces[G_N_ELEMENTS (spaces) - num_spaces - 1];
}
int
main (int argc, char *argv[])
{
int i_sett_infos;
int i_property;
g_print ("<nm-setting-docs>\n");
for (i_sett_infos = 0; i_sett_infos < G_N_ELEMENTS (nm_meta_setting_infos_editor); i_sett_infos++) {
const NMMetaSettingInfoEditor *sett_info = &nm_meta_setting_infos_editor[i_sett_infos];
gs_free char *tmp1 = NULL;
g_print ("%s<setting", _indent_level (INDENT));
g_print (" name=%s >\n", tmp1 = _xml_escape_attribute (sett_info->general->setting_name));
for (i_property = 0; i_property < sett_info->properties_num; i_property++) {
const NMMetaPropertyInfo *prop_info = sett_info->properties[i_property];
gs_free char *tmp2 = NULL;
gs_free char *tmp3 = NULL;
g_print ("%s<property", _indent_level (2*INDENT));
g_print (" name=%s", tmp2 = _xml_escape_attribute (prop_info->property_name));
if (prop_info->property_alias)
g_print ("\n%salias=%s", _indent_level (2*INDENT + 10), tmp3 = _xml_escape_attribute (prop_info->property_alias));
g_print (" />\n");
}
g_print ("%s</setting>\n", _indent_level (INDENT));
}
g_print ("</nm-setting-docs>\n");
return 0;
}

View File

@ -1,6 +1,6 @@
# SPDX-License-Identifier: LGPL-2.1+
name = 'nmcli'
if enable_nmcli
# FIXME: nmcli-completion should be renamed to nmcli
install_data(
@ -8,15 +8,8 @@ install_data(
install_dir: join_paths(nm_datadir, 'bash-completion', 'completions'),
)
deps = [
libnmc_base_dep,
libnmc_dep,
readline_dep,
libnm_libnm_aux_dep,
]
executable(
name,
'nmcli',
files(
'agent.c',
'common.c',
@ -28,9 +21,38 @@ executable(
'settings.c',
'utils.c',
),
dependencies: deps,
c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format(name)],
dependencies: [
libnmc_base_dep,
libnmc_dep,
readline_dep,
libnm_libnm_aux_dep,
],
c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format('nmcli')],
link_args: ldflags_linker_script_binary,
link_depends: linker_script_binary,
install: true,
)
endif
generate_docs_nm_settings_nmcli = executable(
'generate-docs-nm-settings-nmcli',
files(
'generate-docs-nm-settings-nmcli.c',
),
dependencies: [
libnmc_base_dep,
libnmc_dep,
libnm_libnm_aux_dep,
],
c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format('nmcli')],
link_args: ldflags_linker_script_binary,
link_depends: linker_script_binary,
)
generate_docs_nm_settings_nmcli_xml = custom_target(
'generate-docs-nm-settings-nmcli.xml',
output: 'generate-docs-nm-settings-nmcli.xml',
command: [ generate_docs_nm_settings_nmcli ],
capture: true,
)

View File

@ -19,10 +19,7 @@ executable(
)
subdir('common')
if enable_nmcli
subdir('cli')
endif
subdir('cli')
if enable_nmtui
subdir('tui')

View File

@ -69,7 +69,6 @@ if enable_introspection
nm_property_infos_xml[name],
nm_settings_docs_xml_gir,
],
depends: libnm_gir,
)
name = 'nmcli'
@ -81,10 +80,10 @@ if enable_introspection
python.path(),
join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-merge.py'),
'@OUTPUT@',
generate_docs_nm_settings_nmcli_xml,
nm_property_infos_xml[name],
nm_settings_docs_xml_gir,
],
depends: libnm_gir,
)
nm_settings_docs_xml = {