18fa3ebc45
This new adaptor visitor takes a single field of the adaptee, and exposes it with a different name. This will be used for QOM alias properties. Alias targets can of course have a different name than the alias property itself (e.g. a machine's pflash0 might be an alias of a property named 'drive'). When the target's getter or setter invokes the visitor, it will use a different name than what the caller expects, and the visitor will not be able to find it (or will consume erroneously). The solution is for alias getters and setters to wrap the incoming visitor, and forward the sole field that the target is expecting while renaming it appropriately. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
148 lines
3.1 KiB
Meson
148 lines
3.1 KiB
Meson
util_ss.add(files(
|
|
'opts-visitor.c',
|
|
'qapi-clone-visitor.c',
|
|
'qapi-dealloc-visitor.c',
|
|
'qapi-forward-visitor.c',
|
|
'qapi-util.c',
|
|
'qapi-visit-core.c',
|
|
'qobject-input-visitor.c',
|
|
'qobject-output-visitor.c',
|
|
'string-input-visitor.c',
|
|
'string-output-visitor.c',
|
|
))
|
|
if have_system or have_tools
|
|
util_ss.add(files(
|
|
'qmp-dispatch.c',
|
|
'qmp-event.c',
|
|
'qmp-registry.c',
|
|
))
|
|
endif
|
|
|
|
qapi_all_modules = [
|
|
'authz',
|
|
'block',
|
|
'block-core',
|
|
'block-export',
|
|
'char',
|
|
'common',
|
|
'compat',
|
|
'control',
|
|
'crypto',
|
|
'dump',
|
|
'error',
|
|
'introspect',
|
|
'job',
|
|
'machine',
|
|
'machine-target',
|
|
'migration',
|
|
'misc',
|
|
'misc-target',
|
|
'net',
|
|
'pragma',
|
|
'qom',
|
|
'replay',
|
|
'run-state',
|
|
'sockets',
|
|
'trace',
|
|
'transaction',
|
|
'yank',
|
|
]
|
|
if have_system
|
|
qapi_all_modules += [
|
|
'acpi',
|
|
'audio',
|
|
'qdev',
|
|
'pci',
|
|
'rdma',
|
|
'rocker',
|
|
'tpm',
|
|
]
|
|
endif
|
|
if have_system or have_tools
|
|
qapi_all_modules += [
|
|
'ui',
|
|
]
|
|
endif
|
|
|
|
qapi_storage_daemon_modules = [
|
|
'block-core',
|
|
'block-export',
|
|
'char',
|
|
'common',
|
|
'control',
|
|
'crypto',
|
|
'introspect',
|
|
'job',
|
|
'qom',
|
|
'sockets',
|
|
'pragma',
|
|
'transaction',
|
|
]
|
|
|
|
qapi_nonmodule_outputs = [
|
|
'qapi-introspect.c', 'qapi-introspect.h',
|
|
'qapi-types.c', 'qapi-types.h',
|
|
'qapi-visit.h', 'qapi-visit.c',
|
|
'qapi-commands.h', 'qapi-commands.c',
|
|
'qapi-init-commands.h', 'qapi-init-commands.c',
|
|
'qapi-events.h', 'qapi-events.c',
|
|
'qapi-emit-events.c', 'qapi-emit-events.h',
|
|
]
|
|
|
|
# First build all sources
|
|
qapi_util_outputs = [
|
|
'qapi-builtin-types.c', 'qapi-builtin-visit.c',
|
|
'qapi-builtin-types.h', 'qapi-builtin-visit.h',
|
|
]
|
|
|
|
qapi_inputs = []
|
|
qapi_specific_outputs = []
|
|
foreach module : qapi_all_modules
|
|
qapi_inputs += [ files(module + '.json') ]
|
|
qapi_module_outputs = [
|
|
'qapi-types-@0@.c'.format(module),
|
|
'qapi-types-@0@.h'.format(module),
|
|
'qapi-visit-@0@.c'.format(module),
|
|
'qapi-visit-@0@.h'.format(module),
|
|
]
|
|
if have_system or have_tools
|
|
qapi_module_outputs += [
|
|
'qapi-events-@0@.c'.format(module),
|
|
'qapi-events-@0@.h'.format(module),
|
|
'qapi-commands-@0@.c'.format(module),
|
|
'qapi-commands-@0@.h'.format(module),
|
|
]
|
|
endif
|
|
if module.endswith('-target')
|
|
qapi_specific_outputs += qapi_module_outputs
|
|
else
|
|
qapi_util_outputs += qapi_module_outputs
|
|
endif
|
|
endforeach
|
|
|
|
qapi_files = custom_target('shared QAPI source files',
|
|
output: qapi_util_outputs + qapi_specific_outputs + qapi_nonmodule_outputs,
|
|
input: [ files('qapi-schema.json') ],
|
|
command: [ qapi_gen, '-o', 'qapi', '-b', '@INPUT0@' ],
|
|
depend_files: [ qapi_inputs, qapi_gen_depends ])
|
|
|
|
# Now go through all the outputs and add them to the right sourceset.
|
|
# These loops must be synchronized with the output of the above custom target.
|
|
|
|
i = 0
|
|
foreach output : qapi_util_outputs
|
|
if output.endswith('.h')
|
|
genh += qapi_files[i]
|
|
endif
|
|
util_ss.add(qapi_files[i])
|
|
i = i + 1
|
|
endforeach
|
|
|
|
foreach output : qapi_specific_outputs + qapi_nonmodule_outputs
|
|
if output.endswith('.h')
|
|
genh += qapi_files[i]
|
|
endif
|
|
specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: qapi_files[i])
|
|
i = i + 1
|
|
endforeach
|