summaryrefslogtreecommitdiff
path: root/src/eggdbus/eggdbusbindingtool.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eggdbus/eggdbusbindingtool.c')
-rw-r--r--src/eggdbus/eggdbusbindingtool.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/eggdbus/eggdbusbindingtool.c b/src/eggdbus/eggdbusbindingtool.c
index cca1edc..47a999b 100644
--- a/src/eggdbus/eggdbusbindingtool.c
+++ b/src/eggdbus/eggdbusbindingtool.c
@@ -41,6 +41,8 @@ static char **opt_extra_header_files = NULL;
static char *dbus_name_space;
static char *name_space;
+static char *opt_stamp_file;
+
static GOptionEntry entries [] = {
{ "dbus-namespace", 'd', 0, G_OPTION_ARG_STRING, &dbus_name_space, "Namespace to strip from D-Bus interface names", NULL},
{ "namespace", 'n', 0, G_OPTION_ARG_STRING, &name_space, "Namespace for generated code", NULL},
@@ -48,6 +50,7 @@ static GOptionEntry entries [] = {
{ "interfaces-only", 'i', 0, G_OPTION_ARG_NONE, &opt_iface_only, "Only generate interfaces and marshallers", NULL},
{ "no-types-header", 't', 0, G_OPTION_ARG_NONE, &opt_no_types_header, "Don't generate types header file", NULL},
{ "include-header", 'h', 0, G_OPTION_ARG_STRING_ARRAY, &opt_extra_header_files, "Extra header files to includes", NULL},
+ { "stamp-file", 's', 0, G_OPTION_ARG_STRING, &opt_stamp_file, "Generate stamp file with generated files", NULL},
{ NULL }
};
@@ -55,6 +58,9 @@ static GOptionEntry entries [] = {
/* per invocation data structures */
+/* List of the names of generated files */
+static GSList *generated_files;
+
/* hash from GType name used (e.g. TestTweak) to a const EggDBusInterfaceInfo pointer */
static GHashTable *all_dbus_interfaces;
@@ -802,6 +808,7 @@ generate_main_files (GError **error)
goto out;
}
g_printerr ("Wrote %s\n", h_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (h_file_name));
g_free (h_file_name);
}
@@ -866,6 +873,7 @@ generate_main_files (GError **error)
goto out;
}
g_printerr ("Wrote %s\n", h_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (h_file_name));
g_free (h_file_name);
/* generate the <namespace>-bindings.c file */
@@ -941,6 +949,7 @@ generate_main_files (GError **error)
goto out;
}
g_printerr ("Wrote %s\n", c_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (c_file_name));
g_free (c_file_name);
ret = TRUE;
@@ -988,6 +997,7 @@ generate_marshallers (GError **error)
goto out;
}
g_printerr ("Wrote %s\n", list_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (list_file_name));
for (n = 0; n < 2; n++)
@@ -1061,6 +1071,7 @@ generate_marshallers (GError **error)
goto out;
}
g_printerr ("Wrote %s\n", file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (file_name));
g_free (file_name);
g_free (standard_output);
@@ -1153,6 +1164,7 @@ generate_enums (GSList *nodes,
goto out;
}
g_printerr ("Wrote %s\n", h_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (h_file_name));
/* generate c file */
c_file_name = compute_file_name (name_space, enum_data->name, ".c");
@@ -1177,6 +1189,7 @@ generate_enums (GSList *nodes,
goto out;
}
g_printerr ("Wrote %s\n", c_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (c_file_name));
g_free (h_file_name);
g_free (c_file_name);
@@ -1267,6 +1280,7 @@ generate_struct_interfaces (GSList *nodes,
goto out;
}
g_printerr ("Wrote %s\n", h_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (h_file_name));
/* generate c file */
c_file_name = compute_file_name (name_space, struct_data->name, ".c");
@@ -1291,6 +1305,7 @@ generate_struct_interfaces (GSList *nodes,
goto out;
}
g_printerr ("Wrote %s\n", c_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (c_file_name));
g_free (h_file_name);
g_free (c_file_name);
@@ -1401,6 +1416,7 @@ generate_dbus_interfaces (GSList *nodes,
goto out;
}
g_printerr ("Wrote %s\n", h_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (h_file_name));
c_file_name = compute_file_name (name_space, iface_name, ".c");
file_print_func_begin (c_file_name);
@@ -1423,6 +1439,7 @@ generate_dbus_interfaces (GSList *nodes,
goto out;
}
g_printerr ("Wrote %s\n", c_file_name);
+ generated_files = g_slist_prepend (generated_files, g_strdup (c_file_name));
g_free (c_file_name);
g_free (h_file_name);
@@ -1504,6 +1521,23 @@ parse (char **xml_files,
if (!generate_marshallers (error))
goto out;
+ /* finally generate a stamp file if requested */
+ if (opt_stamp_file != NULL)
+ {
+ GSList *l;
+
+ file_print_func_begin (opt_stamp_file);
+ for (l = generated_files; l != NULL; l = l->next)
+ {
+ const gchar *file_name = l->data;
+ g_print ("%s\n", file_name);
+ }
+ if (!file_print_func_end (TRUE, error))
+ {
+ goto out;
+ }
+ }
+
/* and we're done... */
ret = TRUE;
@@ -1524,6 +1558,9 @@ parse (char **xml_files,
g_slist_foreach (nodes, (GFunc) egg_dbus_interface_node_info_free, NULL);
g_slist_free (nodes);
+ g_slist_foreach (generated_files, (GFunc) g_free, NULL);
+ g_slist_free (generated_files);
+
return ret;
}