jvgenmain.c (usage): New function.
authorTom Tromey <tromey@cygnus.com>
Fri, 15 Oct 1999 16:45:31 +0000 (16:45 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Fri, 15 Oct 1999 16:45:31 +0000 (16:45 +0000)
* 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

gcc/java/ChangeLog
gcc/java/jvgenmain.c
gcc/java/jvspec.c

index 983de4d5835bc3d50e611f912766069367cde677..27a36f9e2de242569404441a6fe4fafd0c341a58 100644 (file)
@@ -1,5 +1,10 @@
 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'.
 
 1999-10-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
index 07044848def3e44456d437f890e9467914feb1a6..86040fcba3f72c001a4f328ef40184c55b49bc21 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
@@ -79,39 +79,79 @@ gcc_obstack_init (obstack)
                  (void (*) PROTO((void *))) OBSTACK_CHUNK_FREE);
 }
 
+static void
+usage (const char *name)
+{
+  fprintf (stderr, "Usage: %s [OPTIONS]... CLASSNAME [OUTFILE]\n", name);
+  exit (1);
+}
+
 int
 main (int argc, const char **argv)
 {
   const char *classname;
   FILE *stream;
   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]);
-      exit(-1);
+      if (! strncmp (argv[i], "-D", 2))
+       {
+         /* 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);
   append_gpp_mangled_classtype (&name_obstack, classname);
   obstack_1grow (&name_obstack, '\0');
   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");
       if (stream == NULL)
        {
          fprintf (stderr, "%s: Cannot open output file: %s\n",
                   argv[0], outfile);
-         exit (-1);
+         exit (1);
        }
     }
   else
     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",
           class_mangling_prefix, mangled_classname);
   fprintf (stream, "int main (int argc, const char **argv)\n");
@@ -123,7 +163,7 @@ main (int argc, const char **argv)
     {
       fprintf (stderr, "%s: Failed to close output file %s\n",
               argv[0], argv[2]);
-      exit (-1);
+      exit (1);
     }
   return 0;
 }
index 87d893d9747ffd53438283f7a8fed66eda0a10eb..d4dde5e46358f86ba9463728e81d4f13287aa992 100644 (file)
@@ -50,7 +50,7 @@ int lang_specific_extra_outfiles = 0;
 #define COMBINE_INPUTS 0
 
 const char jvgenmain_spec[] =
-  "jvgenmain %i %{!pipe:%umain.i} |\n\
+  "jvgenmain %{D*} %i %{!pipe:%umain.i} |\n\
    cc1 %{!pipe:%Umain.i} %1 \
                   %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\
                   %{g*} %{O*} \
@@ -163,6 +163,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
   int saw_O = 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
      LANGSPEC, MATHLIB, WITHLIBC, or GCLIB.  */
   int *args;
@@ -247,6 +250,8 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
              library = 0;
              will_link = 0;
            }
+         else if (argv[i][1] == 'D')
+           saw_D = 1;
          else if (argv[i][1] == 'g')
            saw_g = 1;
          else if (argv[i][1] == 'O')
@@ -331,6 +336,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
   if (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;
   if (saw_C)
     {