Commit 7cf41963 by Tom Tromey Committed by Tom Tromey

jvgenmain.c (usage): New function.

	* jvgenmain.c (usage): New function.
	(main): Use it.  Also, handle `-D' options.
	* jvspec.c (lang_specific_driver): Recognize -D.
	(jvgenmain_spec): Added `%{D*}' to jvgenmain invocation.

From-SVN: r30019
parent 3ae21bfc
1999-10-14 Tom Tromey <tromey@cygnus.com> 1999-10-14 Tom Tromey <tromey@cygnus.com>
* jvgenmain.c (usage): New function.
(main): Use it. Also, handle `-D' options.
* jvspec.c (lang_specific_driver): Recognize -D.
(jvgenmain_spec): Added `%{D*}' to jvgenmain invocation.
* jvspec.c (jvgenmain_spec): Use `%umain', not just `%u'. * jvspec.c (jvgenmain_spec): Use `%umain', not just `%u'.
1999-10-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 1999-10-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
......
/* Program to generate "main" a Java(TM) class containing a main method. /* Program to generate "main" a Java(TM) class containing a main method.
Copyright (C) 1998 Free Software Foundation, Inc. Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This file is part of GNU CC. This file is part of GNU CC.
...@@ -79,39 +79,79 @@ gcc_obstack_init (obstack) ...@@ -79,39 +79,79 @@ gcc_obstack_init (obstack)
(void (*) PROTO((void *))) OBSTACK_CHUNK_FREE); (void (*) PROTO((void *))) OBSTACK_CHUNK_FREE);
} }
static void
usage (const char *name)
{
fprintf (stderr, "Usage: %s [OPTIONS]... CLASSNAME [OUTFILE]\n", name);
exit (1);
}
int int
main (int argc, const char **argv) main (int argc, const char **argv)
{ {
const char *classname; const char *classname;
FILE *stream; FILE *stream;
const char *mangled_classname; const char *mangled_classname;
int i, last_arg;
if (argc < 2)
usage (argv[0]);
if (argc < 2 || argc > 3) for (i = 1; i < argc; ++i)
{ {
fprintf (stderr, "Usage: %s CLASSNAME [OUTFILE]\n", argv[0]); if (! strncmp (argv[i], "-D", 2))
exit(-1); {
/* Handled later. */
}
else
break;
} }
classname = argv[1]; if (i < argc - 2 || i == argc)
usage (argv[0]);
last_arg = i;
classname = argv[i];
gcc_obstack_init (&name_obstack); gcc_obstack_init (&name_obstack);
append_gpp_mangled_classtype (&name_obstack, classname); append_gpp_mangled_classtype (&name_obstack, classname);
obstack_1grow (&name_obstack, '\0'); obstack_1grow (&name_obstack, '\0');
mangled_classname = obstack_finish (&name_obstack); mangled_classname = obstack_finish (&name_obstack);
if (argc > 2 && strcmp (argv[2], "-") != 0) if (i < argc - 1 && strcmp (argv[i + 1], "-") != 0)
{ {
const char *outfile = argv[2]; const char *outfile = argv[i + 1];
stream = fopen (outfile, "w"); stream = fopen (outfile, "w");
if (stream == NULL) if (stream == NULL)
{ {
fprintf (stderr, "%s: Cannot open output file: %s\n", fprintf (stderr, "%s: Cannot open output file: %s\n",
argv[0], outfile); argv[0], outfile);
exit (-1); exit (1);
} }
} }
else else
stream = stdout; stream = stdout;
/* At this point every element of ARGV from 1 to LAST_ARG is a `-D'
option. Process them appropriately. */
fprintf (stream, "const char *_Jv_Compiler_Properties[] =\n{\n");
for (i = 1; i < last_arg; ++i)
{
const char *p;
fprintf (stream, " \"");
for (p = &argv[i][2]; *p; ++p)
{
if (! isascii (*p))
fprintf (stream, "\\%o", *p);
else if (*p == '\\' || *p == '"')
fprintf (stream, "\\%c", *p);
else
putc (*p, stream);
}
fprintf (stream, "\",\n");
}
fprintf (stream, " 0\n};\n\n");
fprintf (stream, "extern struct Class %s%s;\n", fprintf (stream, "extern struct Class %s%s;\n",
class_mangling_prefix, mangled_classname); class_mangling_prefix, mangled_classname);
fprintf (stream, "int main (int argc, const char **argv)\n"); fprintf (stream, "int main (int argc, const char **argv)\n");
...@@ -123,7 +163,7 @@ main (int argc, const char **argv) ...@@ -123,7 +163,7 @@ main (int argc, const char **argv)
{ {
fprintf (stderr, "%s: Failed to close output file %s\n", fprintf (stderr, "%s: Failed to close output file %s\n",
argv[0], argv[2]); argv[0], argv[2]);
exit (-1); exit (1);
} }
return 0; return 0;
} }
...@@ -50,7 +50,7 @@ int lang_specific_extra_outfiles = 0; ...@@ -50,7 +50,7 @@ int lang_specific_extra_outfiles = 0;
#define COMBINE_INPUTS 0 #define COMBINE_INPUTS 0
const char jvgenmain_spec[] = const char jvgenmain_spec[] =
"jvgenmain %i %{!pipe:%umain.i} |\n\ "jvgenmain %{D*} %i %{!pipe:%umain.i} |\n\
cc1 %{!pipe:%Umain.i} %1 \ cc1 %{!pipe:%Umain.i} %1 \
%{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\ %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\
%{g*} %{O*} \ %{g*} %{O*} \
...@@ -163,6 +163,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) ...@@ -163,6 +163,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
int saw_O = 0; int saw_O = 0;
int saw_g = 0; int saw_g = 0;
/* Saw a `-D' option. */
int saw_D = 0;
/* An array used to flag each argument that needs a bit set for /* An array used to flag each argument that needs a bit set for
LANGSPEC, MATHLIB, WITHLIBC, or GCLIB. */ LANGSPEC, MATHLIB, WITHLIBC, or GCLIB. */
int *args; int *args;
...@@ -247,6 +250,8 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) ...@@ -247,6 +250,8 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
library = 0; library = 0;
will_link = 0; will_link = 0;
} }
else if (argv[i][1] == 'D')
saw_D = 1;
else if (argv[i][1] == 'g') else if (argv[i][1] == 'g')
saw_g = 1; saw_g = 1;
else if (argv[i][1] == 'O') else if (argv[i][1] == 'O')
...@@ -331,6 +336,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) ...@@ -331,6 +336,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
if (quote) if (quote)
fatal ("argument to `%s' missing\n", quote); fatal ("argument to `%s' missing\n", quote);
if (saw_D && ! main_class_name)
fatal ("can't specify `-D' without `--main'\n");
num_args = argc + added; num_args = argc + added;
if (saw_C) if (saw_C)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment