mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-20 07:38:54 +02:00
glib-genmarshal: add --output option to write output to a file
https://bugzilla.gnome.org/show_bug.cgi?id=770175
This commit is contained in:
committed by
Matthias Clasen
parent
10c490cdfe
commit
0fbc98097f
@@ -122,6 +122,9 @@ static const GScannerConfig scanner_config_template =
|
|||||||
};
|
};
|
||||||
static gchar * const std_marshaller_prefix = "g_cclosure_marshal";
|
static gchar * const std_marshaller_prefix = "g_cclosure_marshal";
|
||||||
static gchar *marshaller_prefix = "g_cclosure_user_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 GHashTable *marshallers = NULL;
|
||||||
static FILE *fout = NULL;
|
static FILE *fout = NULL;
|
||||||
static gboolean gen_cheader = FALSE;
|
static gboolean gen_cheader = FALSE;
|
||||||
@@ -807,9 +810,23 @@ main (int argc,
|
|||||||
|
|
||||||
/* setup auxiliary structs */
|
/* setup auxiliary structs */
|
||||||
scanner = g_scanner_new (&scanner_config_template);
|
scanner = g_scanner_new (&scanner_config_template);
|
||||||
fout = stdout;
|
|
||||||
marshallers = g_hash_table_new (g_str_hash, g_str_equal);
|
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 */
|
/* add standard marshallers of the GObject library */
|
||||||
if (std_includes)
|
if (std_includes)
|
||||||
for (i = 0; i < G_N_ELEMENTS (gobject_marshallers); i++)
|
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_foreach_remove (marshallers, string_key_destroy, NULL);
|
||||||
g_hash_table_destroy (marshallers);
|
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;
|
return exit_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1002,6 +1032,21 @@ parse_args (gint *argc_p,
|
|||||||
}
|
}
|
||||||
argv[i] = NULL;
|
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 ||
|
else if (strcmp ("-h", argv[i]) == 0 ||
|
||||||
strcmp ("-?", argv[i]) == 0 ||
|
strcmp ("-?", argv[i]) == 0 ||
|
||||||
strcmp ("--help", 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, " --header Generate C headers\n");
|
||||||
g_fprintf (bout, " --body Generate C code\n");
|
g_fprintf (bout, " --body Generate C code\n");
|
||||||
g_fprintf (bout, " --prefix=string Specify marshaller prefix\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, " --skip-source Skip source location comments\n");
|
||||||
g_fprintf (bout, " --stdinc, --nostdinc Include/use standard marshallers\n");
|
g_fprintf (bout, " --stdinc, --nostdinc Include/use standard marshallers\n");
|
||||||
g_fprintf (bout, " --internal Mark generated functions as internal\n");
|
g_fprintf (bout, " --internal Mark generated functions as internal\n");
|
||||||
|
Reference in New Issue
Block a user