This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] in pluign mode, send gengtype output to a user specified file
- From: Rafael Espindola <espindola at google dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Diego Novillo <dnovillo at google dot com>, Basile STARYNKEVITCH <basile at starynkevitch dot net>
- Date: Thu, 24 Sep 2009 10:17:42 -0400
- Subject: [patch] in pluign mode, send gengtype output to a user specified file
This patch changes gengtype to output all plugin information to a single file
specified in the command line.
2009-09-24 Basile Starynkevitch <basile@starynkevitch.net>
Rafael Avila de Espindola <espindola@google.com>
* gengtype.c (plugin_output): New.
(get_output_file_with_visibility): Return plugin_output for plugins.
(main): Parse and use the -P option.
* gty.texi: Update the command line format.
Cheers,
--
Rafael Ãvila de EspÃndola
diff --git a/gcc/doc/gty.texi b/gcc/doc/gty.texi
index b59d5f3..56da9b5 100644
--- a/gcc/doc/gty.texi
+++ b/gcc/doc/gty.texi
@@ -451,11 +451,10 @@ somewhere. It will be called @file{gtype-@var{lang}.h}, where
@var{lang} is the name of the subdirectory the language is contained in.
Plugins can add additional root tables. Run the @code{gengtype}
-utility in plugin mode as @code{gengtype -p @var{source-dir}
+utility in plugin mode as @code{gengtype -P pluginout.h @var{source-dir}
@var{file-list} @var{plugin*.c}} with your plugin files
-@var{plugin*.c} using @code{GTY} to generate the corresponding
-@var{gt-plugin*.h} files. The GCC build tree is needed to be present in
-that mode.
+@var{plugin*.c} using @code{GTY} to generate the @var{pluginout.h} file.
+The GCC build tree is needed to be present in that mode.
@node Invoking the garbage collector
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index 26c7958..f93e427 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -145,6 +145,8 @@ static outf_p output_files;
directory. */
static char** plugin_files;
static size_t nb_plugin_files;
+/* the generated plugin output name & file */
+static outf_p plugin_output;
/* The output header file that is included into pretty much every
source file. */
@@ -1714,15 +1716,14 @@ get_output_file_with_visibility (const char *input_file)
/* In plugin mode, return NULL unless the input_file is one of the
plugin_files. */
- if (plugin_files && nb_plugin_files > 0)
- {
- int ix= -1;
+ if (plugin_files)
+ {
size_t i;
- for (i = 0; i < nb_plugin_files && ix < 0; i++)
- if (strcmp (input_file, plugin_files[i]) == 0)
- ix = i;
- if (ix < 0)
- return NULL;
+ for (i = 0; i < nb_plugin_files; i++)
+ if (strcmp (input_file, plugin_files[i]) == 0)
+ return plugin_output;
+
+ return NULL;
}
/* Determine the output file name. */
@@ -3651,20 +3652,24 @@ main (int argc, char **argv)
size_t i;
static struct fileloc pos = { this_file, 0 };
char* inputlist = 0;
+ outf_p output_header;
+ char* plugin_output_filename = NULL;
/* fatal uses this */
progname = "gengtype";
- if (argc >= 5 && !strcmp (argv[1], "-p"))
+ if (argc >= 6 && !strcmp (argv[1], "-P"))
{
- srcdir = argv[2];
- inputlist = argv[3];
- nb_plugin_files = argc-4;
+ plugin_output_filename = argv[2];
+ plugin_output = create_file ("GCC", plugin_output_filename);
+ srcdir = argv[3];
+ inputlist = argv[4];
+ nb_plugin_files = argc - 5;
plugin_files = XCNEWVEC (char *, nb_plugin_files);
for (i = 0; i < nb_plugin_files; i++)
{
/* Place an all zero lang_bitmap before the plugin file
name. */
- char *name = argv[i + 4];
+ char *name = argv[i + 5];
int len = strlen(name) + 1 + sizeof (lang_bitmap);
plugin_files[i] = XCNEWVEC (char, len) + sizeof (lang_bitmap);
strcpy (plugin_files[i], name);
@@ -3676,7 +3681,8 @@ main (int argc, char **argv)
inputlist = argv[2];
}
else
- fatal ("usage: gengtype [-p] srcdir input-list [file1 file2 ... fileN]");
+ fatal ("usage: gengtype [-P pluginout.h] srcdir input-list "
+ "[file1 file2 ... fileN]");
srcdir_len = strlen (srcdir);
@@ -3712,9 +3718,10 @@ main (int argc, char **argv)
open_base_files ();
write_enum_defn (structures, param_structs);
- write_types (header_file, structures, param_structs, &ggc_wtd);
- write_types (header_file, structures, param_structs, &pch_wtd);
- write_local (header_file, structures, param_structs);
+ output_header = plugin_output ? plugin_output : header_file;
+ write_types (output_header, structures, param_structs, &ggc_wtd);
+ write_types (output_header, structures, param_structs, &pch_wtd);
+ write_local (output_header, structures, param_structs);
write_roots (variables);
write_rtx_next ();
close_output_files ();