[glib] glib-genmarshal: add --output option to write output to a file
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] glib-genmarshal: add --output option to write output to a file
- Date: Wed, 12 Oct 2016 19:57:01 +0000 (UTC)
commit 0fbc98097fac4d3e647684f344e508abae109fdf
Author: Tim-Philipp Müller <tim centricular com>
Date: Mon Aug 22 16:32:25 2016 +0100
glib-genmarshal: add --output option to write output to a file
https://bugzilla.gnome.org/show_bug.cgi?id=770175
gobject/glib-genmarshal.c | 48 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 47 insertions(+), 1 deletions(-)
---
diff --git a/gobject/glib-genmarshal.c b/gobject/glib-genmarshal.c
index ba13e44..2941954 100644
--- a/gobject/glib-genmarshal.c
+++ b/gobject/glib-genmarshal.c
@@ -122,6 +122,9 @@ static const GScannerConfig scanner_config_template =
};
static gchar * const std_marshaller_prefix = "g_cclosure_marshal";
static gchar *marshaller_prefix = "g_cclosure_user_marshal";
+static gchar *output_fn = NULL;
+static gint output_fd = -1;
+static gchar *output_tmpfn = NULL;
static GHashTable *marshallers = NULL;
static FILE *fout = NULL;
static gboolean gen_cheader = FALSE;
@@ -807,9 +810,23 @@ main (int argc,
/* setup auxiliary structs */
scanner = g_scanner_new (&scanner_config_template);
- fout = stdout;
marshallers = g_hash_table_new (g_str_hash, g_str_equal);
+ if (output_fn)
+ {
+ output_tmpfn = g_strconcat (output_fn, ".XXXXXX", NULL);
+ if ((output_fd = g_mkstemp (output_tmpfn)) == -1)
+ {
+ g_printerr ("Failed to create temp file \"%s\": %s\n", output_tmpfn, g_strerror (errno));
+ return EXIT_FAILURE;
+ }
+
+ fout = fdopen (output_fd, "wb");
+ g_assert (fout != NULL);
+ }
+ else
+ fout = stdout;
+
/* add standard marshallers of the GObject library */
if (std_includes)
for (i = 0; i < G_N_ELEMENTS (gobject_marshallers); i++)
@@ -939,6 +956,19 @@ main (int argc,
g_hash_table_foreach_remove (marshallers, string_key_destroy, NULL);
g_hash_table_destroy (marshallers);
+ if (output_fn)
+ {
+ fclose (fout);
+ if (g_rename (output_tmpfn, output_fn) != 0)
+ {
+ g_printerr ("Failed to rename \"%s\" to \"%s\": %s\n", output_tmpfn, output_fn, g_strerror (errno));
+ g_unlink (output_tmpfn);
+ exit_status = EXIT_FAILURE;
+ }
+
+ g_free (output_tmpfn);
+ }
+
return exit_status;
}
@@ -1002,6 +1032,21 @@ parse_args (gint *argc_p,
}
argv[i] = NULL;
}
+ else if ((strcmp ("--output", argv[i]) == 0) ||
+ (strncmp ("--output=", argv[i], 9) == 0))
+ {
+ gchar *equal = argv[i] + 8;
+
+ if (*equal == '=')
+ output_fn = equal + 1;
+ else if (i + 1 < argc)
+ {
+ output_fn = argv[i + 1];
+ argv[i] = NULL;
+ i += 1;
+ }
+ argv[i] = NULL;
+ }
else if (strcmp ("-h", argv[i]) == 0 ||
strcmp ("-?", argv[i]) == 0 ||
strcmp ("--help", argv[i]) == 0)
@@ -1072,6 +1117,7 @@ print_blurb (FILE *bout,
g_fprintf (bout, " --header Generate C headers\n");
g_fprintf (bout, " --body Generate C code\n");
g_fprintf (bout, " --prefix=string Specify marshaller prefix\n");
+ g_fprintf (bout, " --output=file Write output into the specified file\n");
g_fprintf (bout, " --skip-source Skip source location comments\n");
g_fprintf (bout, " --stdinc, --nostdinc Include/use standard marshallers\n");
g_fprintf (bout, " --internal Mark generated functions as internal\n");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]