Adds an include primitive to the syntax of QAPI schema files, allowing these to be modularized into multiple per-topic files in the future.
Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> --- Changes in v10: * Various argument/variable name changes (Markus Armbruster). * Fix path replacement command in error files when executing tests (Markus Armbruster). * Catch IOError and translate it to QAPIExprError (Markus Armbruster). Changes in v9: * Do not catch unknown exceptions in "tests/qapi-schema/test-qapi.py". * Show primitive syntax in commit message. * Do not pre-initialize 'input_file' in "scripts/qapi-commands.py". * Use a one-liner for test error message checking. Changes in v8: * Do not show absolute paths in error messages. Changes in v7: * Add tests for relative path inclusion. * Print inclusion path on all errors. * Add test to ensure errors after an include have the correct context. * Squash "qapi.py" changes and tests into a single patch. * Add test for 'include' directive format. * s/file path/file name/. * s/included/include/. * Move "-i" to the end of the command. * Fix GNUism when using sed. Changes in v6: * Split changes for long-line breaking in makefiles. * Put documentation on a separate section; reference recursiveness. * Check (and test) for non-string include arguments (tanks to Benoît Canet). Changes in v5: * Rebase on b3706fa. * Remove 'error_base' argument in 'parse_schema'; fix test checks instead. * Implement include directive using JSON syntax. Changes in v4: * Rebase on 3e890c7. * Minor cosmetic changes. * Fix recording of included files in case of a cycle error. * Add a more complex include cycle test. Changes in v3: * Fix documentation examples regarding how the input file is passed to the scripts. * Add documentation for the 'include' directive. * Detect inclusion loops. * Fix "tests/qapi-schema/test-qapi.py" and "tests/Makefile" to use an explicit input file when running tests. * Fix QAPI tests to cope with an explicit input file. * Add tests for the "include" directive. Changes in v2: * Change the scripts to use an explicit input file instead of standard input. * Fix "tests/Makefile" to use the new argument. * Get the input directory for the "include" directive from the input file dirname. Lluís Vilanova (4): qapi: [trivial] Break long command lines qapi: [trivial] Do not catch unknown exceptions in "test-qapi.py" qapi: Use an explicit input file qapi: Add a primitive to include other files from a QAPI schema file Makefile | 24 +++++-- docs/qapi-code-gen.txt | 15 ++++ scripts/qapi-commands.py | 9 ++- scripts/qapi-types.py | 9 ++- scripts/qapi-visit.py | 9 ++- scripts/qapi.py | 70 ++++++++++++++++---- tests/Makefile | 28 ++++++-- tests/qapi-schema/duplicate-key.err | 2 - .../qapi-schema/flat-union-invalid-branch-key.err | 2 - .../flat-union-invalid-discriminator.err | 2 - tests/qapi-schema/flat-union-no-base.err | 2 - .../flat-union-string-discriminator.err | 2 - tests/qapi-schema/funny-char.err | 2 - tests/qapi-schema/include-after-err.err | 1 tests/qapi-schema/include-after-err.exit | 1 tests/qapi-schema/include-after-err.json | 2 + tests/qapi-schema/include-after-err.out | 0 tests/qapi-schema/include-cycle-b.json | 1 tests/qapi-schema/include-cycle-c.json | 1 tests/qapi-schema/include-cycle.err | 3 + tests/qapi-schema/include-cycle.exit | 1 tests/qapi-schema/include-cycle.json | 1 tests/qapi-schema/include-cycle.out | 0 tests/qapi-schema/include-format-err.err | 1 tests/qapi-schema/include-format-err.exit | 1 tests/qapi-schema/include-format-err.json | 2 + tests/qapi-schema/include-format-err.out | 0 tests/qapi-schema/include-nested-err.err | 2 + tests/qapi-schema/include-nested-err.exit | 1 tests/qapi-schema/include-nested-err.json | 1 tests/qapi-schema/include-nested-err.out | 0 tests/qapi-schema/include-no-file.err | 1 tests/qapi-schema/include-no-file.exit | 1 tests/qapi-schema/include-no-file.json | 1 tests/qapi-schema/include-no-file.out | 0 tests/qapi-schema/include-non-file.err | 1 tests/qapi-schema/include-non-file.exit | 1 tests/qapi-schema/include-non-file.json | 1 tests/qapi-schema/include-non-file.out | 0 tests/qapi-schema/include-relpath-sub.json | 2 + tests/qapi-schema/include-relpath.err | 0 tests/qapi-schema/include-relpath.exit | 1 tests/qapi-schema/include-relpath.json | 1 tests/qapi-schema/include-relpath.out | 3 + tests/qapi-schema/include-self-cycle.err | 1 tests/qapi-schema/include-self-cycle.exit | 1 tests/qapi-schema/include-self-cycle.json | 1 tests/qapi-schema/include-self-cycle.out | 0 tests/qapi-schema/include-simple-sub.json | 2 + tests/qapi-schema/include-simple.err | 0 tests/qapi-schema/include-simple.exit | 1 tests/qapi-schema/include-simple.json | 1 tests/qapi-schema/include-simple.out | 3 + tests/qapi-schema/include/relpath.json | 1 tests/qapi-schema/missing-colon.err | 2 - tests/qapi-schema/missing-comma-list.err | 2 - tests/qapi-schema/missing-comma-object.err | 2 - tests/qapi-schema/non-objects.err | 2 - tests/qapi-schema/quoted-structural-chars.err | 2 - tests/qapi-schema/test-qapi.py | 6 +- tests/qapi-schema/trailing-comma-list.err | 2 - tests/qapi-schema/trailing-comma-object.err | 2 - tests/qapi-schema/unclosed-list.err | 2 - tests/qapi-schema/unclosed-object.err | 2 - tests/qapi-schema/unclosed-string.err | 2 - tests/qapi-schema/union-invalid-base.err | 2 - 66 files changed, 189 insertions(+), 58 deletions(-) create mode 100644 tests/qapi-schema/include-after-err.err create mode 100644 tests/qapi-schema/include-after-err.exit create mode 100644 tests/qapi-schema/include-after-err.json create mode 100644 tests/qapi-schema/include-after-err.out create mode 100644 tests/qapi-schema/include-cycle-b.json create mode 100644 tests/qapi-schema/include-cycle-c.json create mode 100644 tests/qapi-schema/include-cycle.err create mode 100644 tests/qapi-schema/include-cycle.exit create mode 100644 tests/qapi-schema/include-cycle.json create mode 100644 tests/qapi-schema/include-cycle.out create mode 100644 tests/qapi-schema/include-format-err.err create mode 100644 tests/qapi-schema/include-format-err.exit create mode 100644 tests/qapi-schema/include-format-err.json create mode 100644 tests/qapi-schema/include-format-err.out create mode 100644 tests/qapi-schema/include-nested-err.err create mode 100644 tests/qapi-schema/include-nested-err.exit create mode 100644 tests/qapi-schema/include-nested-err.json create mode 100644 tests/qapi-schema/include-nested-err.out create mode 100644 tests/qapi-schema/include-no-file.err create mode 100644 tests/qapi-schema/include-no-file.exit create mode 100644 tests/qapi-schema/include-no-file.json create mode 100644 tests/qapi-schema/include-no-file.out create mode 100644 tests/qapi-schema/include-non-file.err create mode 100644 tests/qapi-schema/include-non-file.exit create mode 100644 tests/qapi-schema/include-non-file.json create mode 100644 tests/qapi-schema/include-non-file.out create mode 100644 tests/qapi-schema/include-relpath-sub.json create mode 100644 tests/qapi-schema/include-relpath.err create mode 100644 tests/qapi-schema/include-relpath.exit create mode 100644 tests/qapi-schema/include-relpath.json create mode 100644 tests/qapi-schema/include-relpath.out create mode 100644 tests/qapi-schema/include-self-cycle.err create mode 100644 tests/qapi-schema/include-self-cycle.exit create mode 100644 tests/qapi-schema/include-self-cycle.json create mode 100644 tests/qapi-schema/include-self-cycle.out create mode 100644 tests/qapi-schema/include-simple-sub.json create mode 100644 tests/qapi-schema/include-simple.err create mode 100644 tests/qapi-schema/include-simple.exit create mode 100644 tests/qapi-schema/include-simple.json create mode 100644 tests/qapi-schema/include-simple.out create mode 100644 tests/qapi-schema/include/relpath.json To: qemu-devel@nongnu.org Cc: Luiz Capitulino <lcapitul...@redhat.com> Cc: Markus Armbruster <arm...@redhat.com> Cc: Eric Blake <ebl...@redhat.com> Cc: Benoît Canet <benoit.ca...@irqsave.net>