diff --git a/.gitignore b/.gitignore index 704afc3094..5cb43a0374 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/Makefile.am b/Makefile.am index ac40aee84a..d47df9624e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 \ diff --git a/clients/cli/generate-docs-nm-settings-nmcli.c b/clients/cli/generate-docs-nm-settings-nmcli.c new file mode 100644 index 0000000000..8ae5b13e49 --- /dev/null +++ b/clients/cli/generate-docs-nm-settings-nmcli.c @@ -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 ("\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\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 ("%sproperty_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\n", _indent_level (INDENT)); + } + g_print ("\n"); + return 0; +} diff --git a/clients/cli/meson.build b/clients/cli/meson.build index 8dd05affcc..517deffa69 100644 --- a/clients/cli/meson.build +++ b/clients/cli/meson.build @@ -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, +) diff --git a/clients/meson.build b/clients/meson.build index 5e6dd6a4c8..8d0ece7592 100644 --- a/clients/meson.build +++ b/clients/meson.build @@ -19,10 +19,7 @@ executable( ) subdir('common') - -if enable_nmcli - subdir('cli') -endif +subdir('cli') if enable_nmtui subdir('tui') diff --git a/man/meson.build b/man/meson.build index 5e76a9f1be..0be202bae1 100644 --- a/man/meson.build +++ b/man/meson.build @@ -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 = {