mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
qapi: add 'if' to top-level expressions
Accept 'if' key in top-level elements, accepted as string or list of string type. The following patches will modify the test visitor to check the value is correctly saved, and generate #if/#endif code (as a single #if/endif line or a series for a list). Example of 'if' key: { 'struct': 'TestIfStruct', 'data': { 'foo': 'int' }, 'if': 'defined(TEST_IF_STRUCT)' } The generated code is for now *unconditional*. Later patches generate the conditionals. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180703155648.11933-2-marcandre.lureau@redhat.com> [Commit message and Documentation improved] Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
b07cd3e748
commit
967c885108
22 changed files with 146 additions and 6 deletions
|
@ -744,6 +744,35 @@ Example: Red Hat, Inc. controls redhat.com, and may therefore add a
|
|||
downstream command __com.redhat_drive-mirror.
|
||||
|
||||
|
||||
=== Configuring the schema ===
|
||||
|
||||
The 'struct', 'enum', 'union', 'alternate', 'command' and 'event'
|
||||
top-level expressions can take an 'if' key. Its value must be a string
|
||||
or a list of strings. A string is shorthand for a list containing just
|
||||
that string. The code generated for the top-level expression will then
|
||||
be guarded by #if COND for each COND in the list.
|
||||
|
||||
Example: a conditional struct
|
||||
|
||||
{ 'struct': 'IfStruct', 'data': { 'foo': 'int' },
|
||||
'if': ['defined(CONFIG_FOO)', 'defined(HAVE_BAR)'] }
|
||||
|
||||
gets its generated code guarded like this:
|
||||
|
||||
#if defined(CONFIG_FOO)
|
||||
#if defined(HAVE_BAR)
|
||||
... generated code ...
|
||||
#endif /* defined(HAVE_BAR) */
|
||||
#endif /* defined(CONFIG_FOO) */
|
||||
|
||||
Please note that you are responsible to ensure that the C code will
|
||||
compile with an arbitrary combination of conditions, since the
|
||||
generators are unable to check it at this point.
|
||||
|
||||
The presence of 'if' keys in the schema is reflected through to the
|
||||
introspection output depending on the build configuration.
|
||||
|
||||
|
||||
== Client JSON Protocol introspection ==
|
||||
|
||||
Clients of a Client JSON Protocol commonly need to figure out what
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue