V2 here: [https://listman.redhat.com/archives/libvir-list/2020-September/msg00204.html] Differ from V2: * Add tests for xmlgen to illustrate all the different features we can use and make sure its proper functions in the future. * Add docs/xmlgen.rst to explain the usage of all directives and the tool itself. * Now xmlgen can check whether the first item of enum ends with _NONE, _DEFAULT or _ABSENT and generate proper code. So we no longer need to add extra 'default' item for enum. * Now xmlgen can provide extra [tips] when we execute its command-line to show generated code for preview. * Enable/disable hooks by macros rather than by special directives. * Add virStrToBoolYesNo/virStrToBoolTrueFalse/virStrToBoolOnOff and explicitly check both the true and false values. * Stronger check for python3-clang and libclang.so to make sure it can work. * Add python3-clang to the libvirt.spec.in and the mingw-libvirt.spec.in. Thanks! Shi Lei (25): scripts: Add a tool to generate xml parse/format functions maint: Check python3-clang and libclang maint: Call xmlgen automatically when c-head-files change docs: Add xmlgen.rst to explain how to use it build-aux: Only check *.[ch] for sc_prohibit_useless_translation tests: Add tests for xmlgen util: Add some xml-helper-functions to cooperate with xmlgen util: Add helper aliases and functions for 'bool' and 'time_t' to cooperate with xmlgen util: Add parsexml/formatbuf helper functions for virSocketAddr util: Add virUUID type and parse/format functions conf: Extract error-checking code from virNetworkDNSTxtDefParseXML conf: Replace virNetworkDNSTxtDefParseXML(hardcoded) with namesake(generated) conf: Generate virNetworkDNSTxtDefFormatBuf conf: Extract error-checking code from virNetworkDNSSrvDefParseXML conf: Replace virNetworkDNSSrvDefParseXML(hardcoded) with namesake(generated) conf: Generate virNetworkDNSSrvDefFormatBuf conf: Extract error-checking code from virNetworkDNSHostDefParseXML conf: Replace virNetworkDNSHostDefParseXML(hardcoded) with namesake(generated) conf: Generate virNetworkDNSHostDefFormatBuf conf: Extract virNetworkDNSForwarderParseXML from virNetworkDNSParseXML conf: Replace virNetworkDNSForwarderParseXML(hardcoded) with namesake(generated) conf: Generate virNetworkDNSForwarderFormatBuf conf: Extract error-checking code from virNetworkDNSDefParseXML conf: Replace virNetworkDNSDefParseXML(hardcoded) with namesake(generated) conf: Generate virNetworkDNSDefFormatBuf build-aux/syntax-check.mk | 2 +- docs/meson.build | 1 + docs/xmlgen.rst | 684 +++++++++++++ libvirt.spec.in | 1 + meson.build | 10 + mingw-libvirt.spec.in | 1 + po/POTFILES.in | 2 + scripts/meson.build | 8 + scripts/xmlgen/directive.py | 1192 ++++++++++++++++++++++ scripts/xmlgen/go | 29 + scripts/xmlgen/main.py | 534 ++++++++++ scripts/xmlgen/utils.py | 121 +++ src/conf/meson.build | 37 + src/conf/network_conf.c | 463 ++------- src/conf/network_conf.h | 59 +- src/internal.h | 8 + src/libvirt_private.syms | 13 + src/meson.build | 6 + src/util/meson.build | 36 + src/util/virbuffer.c | 44 + src/util/virbuffer.h | 8 +- src/util/virsocketaddr.c | 42 + src/util/virsocketaddr.h | 23 +- src/util/virstring.c | 102 ++ src/util/virstring.h | 15 + src/util/viruuid.c | 31 + src/util/viruuid.h | 18 + src/util/virxml.c | 120 +++ src/util/virxml.h | 6 + tests/meson.build | 3 + tests/xmlgenin/conf/array.h | 17 + tests/xmlgenin/conf/empty.h | 7 + tests/xmlgenin/conf/enum-first-item.h | 12 + tests/xmlgenin/conf/external.h | 9 + tests/xmlgenin/conf/genformat-separate.h | 11 + tests/xmlgenin/conf/genformat.h | 11 + tests/xmlgenin/conf/genparse.h | 11 + tests/xmlgenin/conf/namespace.h | 12 + tests/xmlgenin/conf/required.h | 9 + tests/xmlgenin/conf/skipparse.h | 10 + tests/xmlgenin/conf/specify.h | 13 + tests/xmlgenin/conf/xmlattr.h | 10 + tests/xmlgenin/conf/xmlelem.h | 10 + tests/xmlgenin/conf/xmlgroup.h | 8 + tests/xmlgenin/conf/xmlswitch.h | 17 + tests/xmlgenin/util/enums.h | 58 ++ tests/xmlgenin/util/structs.h | 67 ++ tests/xmlgenout/array.txt | 364 +++++++ tests/xmlgenout/empty.txt | 181 ++++ tests/xmlgenout/enum-first-item.txt | 297 ++++++ tests/xmlgenout/external.txt | 205 ++++ tests/xmlgenout/genformat-separate.txt | 190 ++++ tests/xmlgenout/genformat.txt | 142 +++ tests/xmlgenout/genparse.txt | 154 +++ tests/xmlgenout/namespace.txt | 222 ++++ tests/xmlgenout/required.txt | 236 +++++ tests/xmlgenout/skipparse.txt | 223 ++++ tests/xmlgenout/specify.txt | 291 ++++++ tests/xmlgenout/xmlattr.txt | 252 +++++ tests/xmlgenout/xmlelem.txt | 243 +++++ tests/xmlgenout/xmlgroup.txt | 204 ++++ tests/xmlgenout/xmlswitch.txt | 470 +++++++++ tests/xmlgentest.c | 107 ++ tools/meson.build | 3 + 64 files changed, 7289 insertions(+), 406 deletions(-) create mode 100644 docs/xmlgen.rst create mode 100644 scripts/xmlgen/directive.py create mode 100755 scripts/xmlgen/go create mode 100755 scripts/xmlgen/main.py create mode 100644 scripts/xmlgen/utils.py create mode 100644 tests/xmlgenin/conf/array.h create mode 100644 tests/xmlgenin/conf/empty.h create mode 100644 tests/xmlgenin/conf/enum-first-item.h create mode 100644 tests/xmlgenin/conf/external.h create mode 100644 tests/xmlgenin/conf/genformat-separate.h create mode 100644 tests/xmlgenin/conf/genformat.h create mode 100644 tests/xmlgenin/conf/genparse.h create mode 100644 tests/xmlgenin/conf/namespace.h create mode 100644 tests/xmlgenin/conf/required.h create mode 100644 tests/xmlgenin/conf/skipparse.h create mode 100644 tests/xmlgenin/conf/specify.h create mode 100644 tests/xmlgenin/conf/xmlattr.h create mode 100644 tests/xmlgenin/conf/xmlelem.h create mode 100644 tests/xmlgenin/conf/xmlgroup.h create mode 100644 tests/xmlgenin/conf/xmlswitch.h create mode 100644 tests/xmlgenin/util/enums.h create mode 100644 tests/xmlgenin/util/structs.h create mode 100644 tests/xmlgenout/array.txt create mode 100644 tests/xmlgenout/empty.txt create mode 100644 tests/xmlgenout/enum-first-item.txt create mode 100644 tests/xmlgenout/external.txt create mode 100644 tests/xmlgenout/genformat-separate.txt create mode 100644 tests/xmlgenout/genformat.txt create mode 100644 tests/xmlgenout/genparse.txt create mode 100644 tests/xmlgenout/namespace.txt create mode 100644 tests/xmlgenout/required.txt create mode 100644 tests/xmlgenout/skipparse.txt create mode 100644 tests/xmlgenout/specify.txt create mode 100644 tests/xmlgenout/xmlattr.txt create mode 100644 tests/xmlgenout/xmlelem.txt create mode 100644 tests/xmlgenout/xmlgroup.txt create mode 100644 tests/xmlgenout/xmlswitch.txt create mode 100644 tests/xmlgentest.c -- 2.25.1