static void builder_options_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { BuilderOptions *self = BUILDER_OPTIONS (object); gchar **tmp; switch (prop_id) { case PROP_CFLAGS: g_clear_pointer (&self->cflags, g_free); self->cflags = g_value_dup_string (value); break; case PROP_CXXFLAGS: g_clear_pointer (&self->cxxflags, g_free); self->cxxflags = g_value_dup_string (value); break; case PROP_PREFIX: g_clear_pointer (&self->prefix, g_free); self->prefix = g_value_dup_string (value); break; case PROP_ENV: tmp = self->env; self->env = g_strdupv (g_value_get_boxed (value)); g_strfreev (tmp); break; case PROP_ARCH: g_hash_table_destroy (self->arch); /* NOTE: This takes ownership of the hash table! */ self->arch = g_value_dup_boxed (value); break; case PROP_BUILD_ARGS: tmp = self->build_args; self->build_args = g_strdupv (g_value_get_boxed (value)); g_strfreev (tmp); break; case PROP_STRIP: self->strip = g_value_get_boolean (value); break; case PROP_NO_DEBUGINFO: self->no_debuginfo = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } }
static void builder_options_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BuilderOptions *self = BUILDER_OPTIONS (object); switch (prop_id) { case PROP_CFLAGS: g_value_set_string (value, self->cflags); break; case PROP_CXXFLAGS: g_value_set_string (value, self->cxxflags); break; case PROP_PREFIX: g_value_set_string (value, self->prefix); break; case PROP_ENV: g_value_set_boxed (value, self->env); break; case PROP_ARCH: g_value_set_boxed (value, self->arch); break; case PROP_BUILD_ARGS: g_value_set_boxed (value, self->build_args); break; case PROP_CONFIG_OPTS: g_value_set_boxed (value, self->config_opts); break; case PROP_STRIP: g_value_set_boolean (value, self->strip); break; case PROP_NO_DEBUGINFO: g_value_set_boolean (value, self->no_debuginfo); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } }
static JsonNode * builder_options_serialize_property (JsonSerializable *serializable, const gchar *property_name, const GValue *value, GParamSpec *pspec) { if (strcmp (property_name, "arch") == 0) { BuilderOptions *self = BUILDER_OPTIONS (serializable); JsonNode *retval = NULL; if (self->arch && g_hash_table_size (self->arch) > 0) { JsonObject *object; GHashTableIter iter; gpointer key, value; object = json_object_new (); g_hash_table_iter_init (&iter, self->arch); while (g_hash_table_iter_next (&iter, &key, &value)) { JsonNode *child = json_gobject_serialize (value); json_object_set_member (object, (char *)key, child); } retval = json_node_init_object (json_node_alloc (), object); json_object_unref (object); } return retval; } else if (strcmp (property_name, "env") == 0) { BuilderOptions *self = BUILDER_OPTIONS (serializable); JsonNode *retval = NULL; if (self->env && g_strv_length (self->env) > 0) { JsonObject *object; int i; object = json_object_new (); for (i = 0; self->env[i] != NULL; i++) { JsonNode *str = json_node_new (JSON_NODE_VALUE); const char *equal; g_autofree char *member = NULL; equal = strchr (self->env[i], '='); if (equal) { json_node_set_string (str, equal + 1); member = g_strndup (self->env[i], equal - self->env[i]); } else { json_node_set_string (str, ""); member = g_strdup (self->env[i]); } json_object_set_member (object, member, str); } retval = json_node_init_object (json_node_alloc (), object); json_object_unref (object); } return retval; } else return json_serializable_default_serialize_property (serializable, property_name, value, pspec); }