diff --git a/.gitignore b/.gitignore index dda11fa675..bb2b8e6bed 100644 --- a/.gitignore +++ b/.gitignore @@ -145,6 +145,8 @@ test-*.trs /src/libnm-core-impl/tests/test-need-secrets /src/libnm-core-impl/tests/test-secrets /src/libnm-core-impl/tests/test-setting +/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core +/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml /src/libnm-glib-aux/tests/test-json-aux /src/libnm-glib-aux/tests/test-shared-general /src/libnm-platform/tests/test-nm-platform @@ -176,8 +178,8 @@ test-*.trs /src/nm-cloud-setup/tests/test-cloud-setup-general /src/nmcli/nmcli -/src/nmcli/generate-docs-nm-settings-nmcli -/src/nmcli/generate-docs-nm-settings-nmcli.xml +/src/nmcli/gen-metadata-nm-settings-nmcli +/src/nmcli/gen-metadata-nm-settings-nmcli.xml /src/nm-online/nm-online @@ -341,6 +343,7 @@ test-*.trs /include/ /initscript/*/[Nn]etwork[Mm]anager /initscript/Slackware/rc.networkmanager +/intltool-* /introspection/nmdbus-*.c /introspection/nmdbus-*.h /introspection/nmdbus-*.xml @@ -393,7 +396,9 @@ test-*.trs /libnm/tests/test-nm-client /libnm/tests/test-remote-settings-client /libnm/tests/test-secret-agent +/m4/intltool.m4 /man/nm-settings.xml +/po/.intltool-merge-cache /policy/org.freedesktop.NetworkManager.policy /policy/org.freedesktop.NetworkManager.policy.in /shared/nm-glib-aux/tests/test-json-aux @@ -439,6 +444,8 @@ test-*.trs /src/nm-priv-helper/org.freedesktop.nm-priv-helper.service /src/nm-sudo/nm-sudo /src/nm-sudo/org.freedesktop.nm.sudo.service +/src/nmcli/generate-docs-nm-settings-nmcli +/src/nmcli/generate-docs-nm-settings-nmcli.xml /src/platform/tests/dump /src/platform/tests/monitor /src/platform/tests/platform @@ -482,6 +489,3 @@ test-*.trs /src/tests/test-systemd /src/tests/test-utils /src/tests/test-wired-defname -/intltool-* -/m4/intltool.m4 -/po/.intltool-merge-cache diff --git a/Makefile.am b/Makefile.am index 0172acec1c..8e60a5f5bd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1848,6 +1848,39 @@ EXTRA_DIST += src/libnm-client-public/meson.build ############################################################################### +noinst_PROGRAMS += src/libnm-core-impl/gen-metadata-nm-settings-libnm-core + +src_libnm_core_impl_gen_metadata_nm_settings_libnm_core_SOURCES = \ + src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.c \ + $(NULL) + +src_libnm_core_impl_gen_metadata_nm_settings_libnm_core_CPPFLAGS = \ + $(clients_cppflags) \ + $(NULL) + +src_libnm_core_impl_gen_metadata_nm_settings_libnm_core_LDADD = \ + src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ + $(libnm_crypto_lib) \ + src/libnm-core-aux-intern/libnm-core-aux-intern.la \ + src/libnm-base/libnm-base.la \ + src/libnm-systemd-shared/libnm-systemd-shared.la \ + src/libnm-log-null/libnm-log-null.la \ + src/libnm-glib-aux/libnm-glib-aux.la \ + src/libnm-std-aux/libnm-std-aux.la \ + src/c-siphash/libc-siphash.la \ + $(GLIB_LIBS) \ + $(NULL) + +src_libnm_core_impl_gen_metadata_nm_settings_libnm_core_LDFLAGS = \ + -Wl,--version-script="$(srcdir)/linker-script-binary.ver" \ + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) + +$(src_libnm_core_impl_gen_metadata_nm_settings_libnm_core_OBJECTS): $(src_libnm_core_public_mkenums_h) + +############################################################################### + noinst_LTLIBRARIES += src/libnm-client-impl/libnm-client-impl.la src_libnm_client_impl_libnm_client_impl_la_CPPFLAGS = \ @@ -1982,7 +2015,8 @@ src/libnm-client-impl/libnm.typelib: src/libnm-client-impl/libnm.gir INTROSPECTION_GIRS += src/libnm-client-impl/NM-1.0.gir libnm_noinst_data = \ - src/nmcli/generate-docs-nm-settings-nmcli.xml \ + src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml \ + src/nmcli/gen-metadata-nm-settings-nmcli.xml \ man/nm-settings-docs-dbus.xml \ man/nm-settings-docs-nmcli.xml \ src/libnm-client-impl/nm-property-infos-dbus.xml \ @@ -1995,19 +2029,34 @@ libnm_noinst_data = \ noinst_DATA += $(libnm_noinst_data) -EXTRA_DIST += src/nmcli/generate-docs-nm-settings-nmcli.xml.in +EXTRA_DIST += src/nmcli/gen-metadata-nm-settings-nmcli.xml.in if BUILD_DOCS -src/nmcli/generate-docs-nm-settings-nmcli.xml: src/nmcli/generate-docs-nm-settings-nmcli - $(AM_V_GEN) src/nmcli/generate-docs-nm-settings-nmcli > "$@" -check-local-generate-docs-nm-settings-nmcli: src/nmcli/generate-docs-nm-settings-nmcli.xml - $(srcdir)/tools/check-compare-generated.sh "$(srcdir)" "$(builddir)" "$<" -check_local += check-local-generate-docs-nm-settings-nmcli -DISTCLEANFILES += src/nmcli/generate-docs-nm-settings-nmcli.xml +src/nmcli/gen-metadata-nm-settings-nmcli.xml: src/nmcli/gen-metadata-nm-settings-nmcli + $(AM_V_GEN) src/nmcli/gen-metadata-nm-settings-nmcli > "$@" +check-local-gen-metadata-nm-settings-nmcli: src/nmcli/gen-metadata-nm-settings-nmcli.xml + $(srcdir)/tools/check-compare-generated.sh "$(srcdir)/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in" "$(builddir)/src/nmcli/gen-metadata-nm-settings-nmcli.xml" +check_local += check-local-gen-metadata-nm-settings-nmcli +DISTCLEANFILES += src/nmcli/gen-metadata-nm-settings-nmcli.xml else -src/nmcli/generate-docs-nm-settings-nmcli.xml: src/nmcli/generate-docs-nm-settings-nmcli.xml.in +src/nmcli/gen-metadata-nm-settings-nmcli.xml: src/nmcli/gen-metadata-nm-settings-nmcli.xml.in $(AM_V_GEN) cp $^ $@ -check-local-generate-docs-nm-settings-nmcli: +check-local-gen-metadata-nm-settings-nmcli: +endif + +EXTRA_DIST += src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in + +if BUILD_DOCS +src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml: src/libnm-core-impl/gen-metadata-nm-settings-libnm-core + $(AM_V_GEN) src/libnm-core-impl/gen-metadata-nm-settings-libnm-core > "$@" +check-local-gen-metadata-nm-settings-libnm-core: src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml + $(srcdir)/tools/check-compare-generated.sh "$(srcdir)/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in" "$(builddir)/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml" +check_local += check-local-gen-metadata-nm-settings-libnm-core +DISTCLEANFILES += src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml +else +src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml: src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in + $(AM_V_GEN) cp $^ $@ +check-local-gen-metadata-nm-settings-libnm-core: endif libnm_docs_sources = $(src_libnm_core_impl_lib_c_settings_real) @@ -2030,7 +2079,7 @@ src/libnm-client-impl/nm-settings-docs-gir.xml: tools/generate-docs-nm-settings- --gir $(builddir)/src/libnm-client-impl/NM-1.0.gir \ --output $@ -man/nm-settings-docs-nmcli.xml: src/nmcli/generate-docs-nm-settings-nmcli.xml src/libnm-client-impl/nm-property-infos-nmcli.xml src/libnm-client-impl/nm-settings-docs-gir.xml tools/generate-docs-nm-settings-docs-merge.py man/common.ent +man/nm-settings-docs-nmcli.xml: src/nmcli/gen-metadata-nm-settings-nmcli.xml src/libnm-client-impl/nm-property-infos-nmcli.xml src/libnm-client-impl/nm-settings-docs-gir.xml tools/generate-docs-nm-settings-docs-merge.py man/common.ent $(AM_V_GEN) "$(PYTHON)" $(srcdir)/tools/generate-docs-nm-settings-docs-merge.py --only-from-first $@ $(wordlist 1,3,$^) src/libnmc-setting/settings-docs-input.xml: src/libnm-client-impl/nm-property-infos-nmcli.xml src/libnm-client-impl/nm-settings-docs-gir.xml tools/generate-docs-nm-settings-docs-merge.py @@ -4832,7 +4881,7 @@ $(libnmc_setting_settings_doc_h): src/libnmc-setting/settings-docs-input.xml src $(AM_V_GEN) "$(PYTHON)" $(srcdir)/tools/generate-docs-settings-docs.py --output $@ --xml $< DISTCLEANFILES += $(libnmc_setting_settings_doc_h) check-local-settings-docs: $(libnmc_setting_settings_doc_h) - $(srcdir)/tools/check-compare-generated.sh "$(srcdir)" "$(builddir)" "$(libnmc_setting_settings_doc_h)" + $(srcdir)/tools/check-compare-generated.sh "$(srcdir)/$(libnmc_setting_settings_doc_h).in" "$(builddir)/$(libnmc_setting_settings_doc_h)" check_local += check-local-settings-docs else $(libnmc_setting_settings_doc_h): $(libnmc_setting_settings_doc_h).in src/libnmc-setting/.dirstamp @@ -4973,17 +5022,17 @@ endif ############################################################################### -noinst_PROGRAMS += src/nmcli/generate-docs-nm-settings-nmcli +noinst_PROGRAMS += src/nmcli/gen-metadata-nm-settings-nmcli -src_nmcli_generate_docs_nm_settings_nmcli_SOURCES = \ - src/nmcli/generate-docs-nm-settings-nmcli.c \ +src_nmcli_gen_metadata_nm_settings_nmcli_SOURCES = \ + src/nmcli/gen-metadata-nm-settings-nmcli.c \ $(NULL) -src_nmcli_generate_docs_nm_settings_nmcli_CPPFLAGS = \ +src_nmcli_gen_metadata_nm_settings_nmcli_CPPFLAGS = \ $(clients_cppflags) \ $(NULL) -src_nmcli_generate_docs_nm_settings_nmcli_LDADD = \ +src_nmcli_gen_metadata_nm_settings_nmcli_LDADD = \ src/libnmc-setting/libnmc-setting.la \ src/libnmc-base/libnmc-base.la \ src/libnm-client-aux-extern/libnm-client-aux-extern.la \ @@ -4998,13 +5047,13 @@ src_nmcli_generate_docs_nm_settings_nmcli_LDADD = \ $(GLIB_LIBS) \ $(NULL) -src_nmcli_generate_docs_nm_settings_nmcli_LDFLAGS = \ +src_nmcli_gen_metadata_nm_settings_nmcli_LDFLAGS = \ -Wl,--version-script="$(srcdir)/linker-script-binary.ver" \ $(SANITIZER_EXEC_LDFLAGS) \ $(NULL) -$(src_nmcli_generate_docs_nm_settings_nmcli_OBJECTS): $(src_libnm_core_public_mkenums_h) -$(src_nmcli_generate_docs_nm_settings_nmcli_OBJECTS): $(src_libnm_client_public_mkenums_h) +$(src_nmcli_gen_metadata_nm_settings_nmcli_OBJECTS): $(src_libnm_core_public_mkenums_h) +$(src_nmcli_gen_metadata_nm_settings_nmcli_OBJECTS): $(src_libnm_client_public_mkenums_h) ############################################################################### diff --git a/man/meson.build b/man/meson.build index c814604402..356759bafb 100644 --- a/man/meson.build +++ b/man/meson.build @@ -87,7 +87,7 @@ if enable_introspection join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-merge.py'), '--only-from-first', '@OUTPUT@', - generate_docs_nm_settings_nmcli_xml, + gen_metadata_nm_settings_nmcli_xml, nm_property_infos_xml[name], nm_settings_docs_xml_gir, ], diff --git a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.c b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.c new file mode 100644 index 0000000000..eeadb19c32 --- /dev/null +++ b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.c @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "libnm-core-impl/nm-default-libnm-core.h" + +#include "libnm-core-intern/nm-meta-setting-base.h" +#include "libnm-core-intern/nm-core-internal.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[]) +{ + const NMSettInfoSetting *sett_info_settings = nmtst_sett_info_settings(); + NMMetaSettingType meta_type; + + g_print("\n"); + for (meta_type = 0; meta_type < _NM_META_SETTING_TYPE_NUM; meta_type++) { + const NMSettInfoSetting *sis = &sett_info_settings[meta_type]; + const NMMetaSettingInfo *msi = &nm_meta_setting_infos[meta_type]; + nm_auto_unref_gtypeclass NMSettingClass *klass = NULL; + gs_free char *tmp_s1 = NULL; + gs_free char *tmp_s2 = NULL; + guint prop_idx; + GType gtype; + + gtype = msi->get_setting_gtype(); + klass = g_type_class_ref(gtype); + + g_print("%ssetting_name))); + g_print(" >\n"); + + for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) { + const NMSettInfoProperty *sip = &sis->property_infos[prop_idx]; + gs_free char *tmp2 = NULL; + gs_free char *tmp3 = NULL; + + g_print("%sname))); + if (sip->is_deprecated) + g_print("\n%sis-deprecated=\"1\"", _indent_level(2 * INDENT + 10)); + if (sip->property_type->dbus_type) { + g_print( + "\n%sdbus-type=%s", + _indent_level(2 * INDENT + 10), + (tmp3 = _xml_escape_attribute((const char *) sip->property_type->dbus_type))); + } + if (sip->dbus_deprecated) { + nm_assert(sip->property_type->dbus_type); + g_print("\n%sdbus-deprecated=\"1\"", _indent_level(2 * INDENT + 10)); + } + g_print(" />\n"); + } + + g_print("%s\n", _indent_level(INDENT)); + } + g_print("\n"); + return 0; +} diff --git a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in new file mode 100644 index 0000000000..dfda03ac07 --- /dev/null +++ b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in @@ -0,0 +1,1135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libnm-core-impl/meson.build b/src/libnm-core-impl/meson.build index 83c290857c..2de3ff0849 100644 --- a/src/libnm-core-impl/meson.build +++ b/src/libnm-core-impl/meson.build @@ -88,3 +88,52 @@ libnm_core_impl = static_library( uuid_dep, ], ) + +############################################################################### + +gen_metadata_nm_settings_libnm_core = executable( + 'gen-metadata-nm-settings-libnm-core', + files( + 'gen-metadata-nm-settings-libnm-core.c', + ), + dependencies: [ + libnm_core_public_dep, + ], + link_with: [ + libnm_core_aux_intern, + libnm_core_impl, + libnm_crypto, + libnm_base, + libnm_systemd_shared, + libnm_log_null, + libnm_glib_aux, + libnm_std_aux, + libc_siphash, + ], + link_args: ldflags_linker_script_binary, + link_depends: linker_script_binary, +) + +if enable_docs + gen_metadata_nm_settings_libnm_core_xml = custom_target( + 'gen-metadata-nm-settings-libnm-core.xml', + output: 'gen-metadata-nm-settings-libnm-core.xml', + command: [ gen_metadata_nm_settings_libnm_core ], + capture: true, + ) + + test( + 'check-local-gen-metadata-nm-settings-libnm-core', + find_program(join_paths(source_root, 'tools', 'check-compare-generated.sh')), + args: [ + source_root + '/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in', + gen_metadata_nm_settings_libnm_core_xml, + ], + ) +else + gen_metadata_nm_settings_libnm_core_xml = configure_file( + input: 'gen-metadata-nm-settings-libnm-core.xml.in', + output: '@BASENAME@', + configuration: configuration_data(), + ) +endif diff --git a/src/libnmc-setting/meson.build b/src/libnmc-setting/meson.build index 49314cad2e..cf8a21fc80 100644 --- a/src/libnmc-setting/meson.build +++ b/src/libnmc-setting/meson.build @@ -31,9 +31,8 @@ if enable_docs 'check-settings-docs', find_program(join_paths(source_root, 'tools', 'check-compare-generated.sh')), args: [ - source_root, - build_root, - 'src/libnmc-setting/settings-docs.h', + source_root + '/src/libnmc-setting/settings-docs.h.in', + settings_docs_source, ], ) else diff --git a/src/nmcli/generate-docs-nm-settings-nmcli.c b/src/nmcli/gen-metadata-nm-settings-nmcli.c similarity index 100% rename from src/nmcli/generate-docs-nm-settings-nmcli.c rename to src/nmcli/gen-metadata-nm-settings-nmcli.c diff --git a/src/nmcli/generate-docs-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in similarity index 100% rename from src/nmcli/generate-docs-nm-settings-nmcli.xml.in rename to src/nmcli/gen-metadata-nm-settings-nmcli.xml.in diff --git a/src/nmcli/meson.build b/src/nmcli/meson.build index a122e2af3a..7e3c44bfaa 100644 --- a/src/nmcli/meson.build +++ b/src/nmcli/meson.build @@ -45,10 +45,10 @@ executable( endif -generate_docs_nm_settings_nmcli = executable( - 'generate-docs-nm-settings-nmcli', +gen_metadata_nm_settings_nmcli = executable( + 'gen-metadata-nm-settings-nmcli', files( - 'generate-docs-nm-settings-nmcli.c', + 'gen-metadata-nm-settings-nmcli.c', ), dependencies: [ libnm_dep, @@ -70,25 +70,24 @@ generate_docs_nm_settings_nmcli = executable( ) if enable_docs - 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 ], + gen_metadata_nm_settings_nmcli_xml = custom_target( + 'gen-metadata-nm-settings-nmcli.xml', + output: 'gen-metadata-nm-settings-nmcli.xml', + command: [ gen_metadata_nm_settings_nmcli ], capture: true, ) test( - 'check-local-generate-docs-nm-settings-nmcli', + 'check-local-gen-metadata-nm-settings-nmcli', find_program(join_paths(source_root, 'tools', 'check-compare-generated.sh')), args: [ - source_root, - build_root, - 'src/nmcli/generate-docs-nm-settings-nmcli.xml', + source_root + '/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in', + gen_metadata_nm_settings_nmcli_xml, ], ) else - settings_docs_source = configure_file( - input: 'generate-docs-nm-settings-nmcli.xml.in', + gen_metadata_nm_settings_nmcli_xml = configure_file( + input: 'gen-metadata-nm-settings-nmcli.xml.in', output: '@BASENAME@', configuration: configuration_data(), ) diff --git a/tools/check-compare-generated.sh b/tools/check-compare-generated.sh index 44b70f95c6..b66c5a1031 100755 --- a/tools/check-compare-generated.sh +++ b/tools/check-compare-generated.sh @@ -2,17 +2,16 @@ set -e -srcdir="$1" -builddir="$2" -doc_h="$3" +f_commited="$1" +f_generated="$2" [ -n "$NMTST_NO_CHECK_SETTINGS_DOCS" ] && exit 0 -cmp -s "${srcdir}/${doc_h}.in" "${builddir}/${doc_h}" && exit 0 +cmp -s "$f_commited" "$f_generated" && exit 0 if [ "$NM_TEST_REGENERATE" = 1 ] ; then - cp -f "${builddir}/${doc_h}" "${srcdir}/${doc_h}.in" + cp -f "$f_generated" "$f_commited" else - echo "*** Error: the generated file '${builddir}/${doc_h}' differs from the source file '${srcdir}/${doc_h}.in'. You probably should copy the generated file over to the source file. You can skip this test by setting NMTST_NO_CHECK_SETTINGS_DOCS=yes. You can also automatically copy the file by rerunning the test with NM_TEST_REGENERATE=1" + echo "*** Error: the generated file '$f_generated' differs from the source file '$f_commited'. You probably should copy the generated file over to the source file. You can skip this test by setting NMTST_NO_CHECK_SETTINGS_DOCS=yes. You can also automatically copy the file by rerunning the test with NM_TEST_REGENERATE=1" exit 1 fi