Markus Armbruster <arm...@redhat.com> writes: > This policy suppresses deprecated bits in output, and thus permits > "testing the future". Implement it for QMP command results. Example: > when QEMU is run with -compat deprecated-output=hide, then > > {"execute": "query-cpus-fast"} > > yields > > {"return": [{"thread-id": 9805, "props": {"core-id": 0, "thread-id": 0, > "socket-id": 0}, "qom-path": "/machine/unattached/device[0]", "cpu-index": 0, > "target": "x86_64"}]} > > instead of > > {"return": [{"arch": "x86", "thread-id": 22436, "props": {"core-id": 0, > "thread-id": 0, "socket-id": 0}, "qom-path": "/machine/unattached/device[0]", > "cpu-index": 0, "target": "x86_64"}]} > > Note the suppression of deprecated member "arch". > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > Reviewed-by: Eric Blake <ebl...@redhat.com> > --- [...] > diff --git a/qapi/qobject-output-visitor.c b/qapi/qobject-output-visitor.c > index ba6f6ac8a7..5c4aa0f64d 100644 > --- a/qapi/qobject-output-visitor.c > +++ b/qapi/qobject-output-visitor.c [...] > @@ -264,3 +275,11 @@ Visitor *qobject_output_visitor_new(QObject **result) > > return &v->visitor; > } > + > +Visitor *qobject_output_visitor_new_qmp(QObject **result) > +{ > + QObjectOutputVisitor *v = to_qov(qobject_output_visitor_new(result)); > + > + v->deprecated_policy = compat_policy.deprecated_output; > + return &v->visitor; > +}
Linking fail when we link qapi/qobject-output-visitor.o (which uses @compat_policy), but not qapi/qmp-dispatch.o (which defines it). Fails for me when I configure --disable-system --disable-tools. Minimally invasive fix: move the function to qmp-dispatch.c. Same for qobject_input_visitor_new_qmp() in PATCH 09. [...]