Move compat properties API definitions to their own file
unit, compile it only when system emulation is configured.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
qom/compat-properties.c | 116 ++++++++++++++++++++++++++++++++++++++++
qom/object.c | 100 ----------------------------------
qom/meson.build | 3 ++
3 files changed, 119 insertions(+), 100 deletions(-)
create mode 100644 qom/compat-properties.c
diff --git a/qom/compat-properties.c b/qom/compat-properties.c
new file mode 100644
index 00000000000..f8d9b0036ae
--- /dev/null
+++ b/qom/compat-properties.c
@@ -0,0 +1,116 @@
+/*
+ * QEMU Object Model
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * Authors:
+ * Anthony Liguori <aliguori@us.ibm.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "qom/compat-properties.h"
+#include "qom/qom-qobject.h"
+#include "hw/core/qdev.h"
+
+bool object_apply_global_props(Object *obj, const GPtrArray *props,
+ Error **errp)
+{
+ int i;
+
+ if (!props) {
+ return true;
+ }
+
+ for (i = 0; i < props->len; i++) {
+ GlobalProperty *p = g_ptr_array_index(props, i);
+ Error *err = NULL;
+
+ if (object_dynamic_cast(obj, p->driver) == NULL) {
+ continue;
+ }
+ if (p->optional && !object_property_find(obj, p->property)) {
+ continue;
+ }
+ p->used = true;
+ if (!object_property_parse(obj, p->property, p->value, &err)) {
+ error_prepend(&err, "can't apply global %s.%s=%s: ",
+ p->driver, p->property, p->value);
+ /*
+ * If errp != NULL, propagate error and return.
+ * If errp == NULL, report a warning, but keep going
+ * with the remaining globals.
+ */
+ if (errp) {
+ error_propagate(errp, err);
+ return false;
+ } else {
+ warn_report_err(err);
+ }
+ }
+ }
+
+ return true;
+}
+
+/*
+ * Global property defaults
+ * Slot 0: accelerator's global property defaults
+ * Slot 1: machine's global property defaults
+ * Slot 2: global properties from legacy command line option
+ * Each is a GPtrArray of GlobalProperty.
+ * Applied in order, later entries override earlier ones.
+ */
+static GPtrArray *object_compat_props[3];
+
+/*
+ * Retrieve @GPtrArray for global property defined with options
+ * other than "-global". These are generally used for syntactic
+ * sugar and legacy command line options.
+ */
+void object_register_sugar_prop(const char *driver, const char *prop,
+ const char *value, bool optional)
+{
+ GlobalProperty *g;
+ if (!object_compat_props[2]) {
+ object_compat_props[2] = g_ptr_array_new();
+ }
+ g = g_new0(GlobalProperty, 1);
+ g->driver = g_strdup(driver);
+ g->property = g_strdup(prop);
+ g->value = g_strdup(value);
+ g->optional = optional;
+ g_ptr_array_add(object_compat_props[2], g);
+}
+
+/*
+ * Set machine's global property defaults to @compat_props.
+ * May be called at most once.
+ */
+void object_set_machine_compat_props(GPtrArray *compat_props)
+{
+ assert(!object_compat_props[1]);
+ object_compat_props[1] = compat_props;
+}
+
+/*
+ * Set accelerator's global property defaults to @compat_props.
+ * May be called at most once.
+ */
+void object_set_accelerator_compat_props(GPtrArray *compat_props)
+{
+ assert(!object_compat_props[0]);
+ object_compat_props[0] = compat_props;
+}
+
+void object_apply_compat_props(Object *obj)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(object_compat_props); i++) {
+ object_apply_global_props(obj, object_compat_props[i],
+ i == 2 ? &error_fatal : &error_abort);
+ }
+}
diff --git a/qom/object.c b/qom/object.c
index 838b1d2b225..f00d659ef0f 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -440,106 +440,6 @@ static void object_post_init_with_type(Object *obj, TypeImpl *ti)
}
}
-bool object_apply_global_props(Object *obj, const GPtrArray *props,
- Error **errp)
-{
- int i;
-
- if (!props) {
- return true;
- }
-
- for (i = 0; i < props->len; i++) {
- GlobalProperty *p = g_ptr_array_index(props, i);
- Error *err = NULL;
-
- if (object_dynamic_cast(obj, p->driver) == NULL) {
- continue;
- }
- if (p->optional && !object_property_find(obj, p->property)) {
- continue;
- }
- p->used = true;
- if (!object_property_parse(obj, p->property, p->value, &err)) {
- error_prepend(&err, "can't apply global %s.%s=%s: ",
- p->driver, p->property, p->value);
- /*
- * If errp != NULL, propagate error and return.
- * If errp == NULL, report a warning, but keep going
- * with the remaining globals.
- */
- if (errp) {
- error_propagate(errp, err);
- return false;
- } else {
- warn_report_err(err);
- }
- }
- }
-
- return true;
-}
-
-/*
- * Global property defaults
- * Slot 0: accelerator's global property defaults
- * Slot 1: machine's global property defaults
- * Slot 2: global properties from legacy command line option
- * Each is a GPtrArray of GlobalProperty.
- * Applied in order, later entries override earlier ones.
- */
-static GPtrArray *object_compat_props[3];
-
-/*
- * Retrieve @GPtrArray for global property defined with options
- * other than "-global". These are generally used for syntactic
- * sugar and legacy command line options.
- */
-void object_register_sugar_prop(const char *driver, const char *prop,
- const char *value, bool optional)
-{
- GlobalProperty *g;
- if (!object_compat_props[2]) {
- object_compat_props[2] = g_ptr_array_new();
- }
- g = g_new0(GlobalProperty, 1);
- g->driver = g_strdup(driver);
- g->property = g_strdup(prop);
- g->value = g_strdup(value);
- g->optional = optional;
- g_ptr_array_add(object_compat_props[2], g);
-}
-
-/*
- * Set machine's global property defaults to @compat_props.
- * May be called at most once.
- */
-void object_set_machine_compat_props(GPtrArray *compat_props)
-{
- assert(!object_compat_props[1]);
- object_compat_props[1] = compat_props;
-}
-
-/*
- * Set accelerator's global property defaults to @compat_props.
- * May be called at most once.
- */
-void object_set_accelerator_compat_props(GPtrArray *compat_props)
-{
- assert(!object_compat_props[0]);
- object_compat_props[0] = compat_props;
-}
-
-void object_apply_compat_props(Object *obj)
-{
- int i;
-
- for (i = 0; i < ARRAY_SIZE(object_compat_props); i++) {
- object_apply_global_props(obj, object_compat_props[i],
- i == 2 ? &error_fatal : &error_abort);
- }
-}
-
static void object_class_property_init_all(Object *obj)
{
ObjectPropertyIterator iter;
diff --git a/qom/meson.build b/qom/meson.build
index 81922434309..bd6f4aadd78 100644
--- a/qom/meson.build
+++ b/qom/meson.build
@@ -5,6 +5,9 @@ qom_ss.add(files(
'object_interfaces.c',
'qom-qobject.c',
))
+if have_system
+ qom_ss.add(files('compat-properties.c'))
+endif
qmp_ss.add(files('qom-qmp-cmds.c'))
system_ss.add(files('qom-hmp-cmds.c'))
--
2.53.0