OSDN Git Service

* lib/target-libpath.exp: New file defining set_ld_library_path_env_vars
[pf3gnuchains/gcc-fork.git] / libjava / gij.cc
1 /* Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation
2
3    This file is part of libgcj.
4
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8
9 /* Author: Kresten Krab Thorup <krab@gnu.org>  */
10
11 #include <config.h>
12
13 #include <jvm.h>
14 #include <gcj/cni.h>
15 #include <java-props.h>
16
17 #include <stdio.h>
18 #include <string.h>
19 #include <stdlib.h>
20
21 #include <java/lang/System.h>
22 #include <java/util/Properties.h>
23
24 static void
25 help ()
26 {
27   printf ("Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
28   printf ("          to interpret Java bytecodes, or\n");
29   printf ("       gij -jar [OPTION] ... JARFILE [ARGS] ...\n");
30   printf ("          to execute a jar file\n\n");
31   printf ("  --cp LIST         set class path\n");
32   printf ("  --classpath LIST  set class path\n");
33   printf ("  -DVAR=VAL         define property VAR with value VAL\n");
34   printf ("  -?, --help        print this help, then exit\n");
35   printf ("  -X                print help on supported -X options, then exit\n");
36   printf ("  --ms=NUMBER       set initial heap size\n");
37   printf ("  --mx=NUMBER       set maximum heap size\n");
38   printf ("  --showversion     print version number, then keep going\n");
39   printf ("  --version         print version number, then exit\n");
40   printf ("\nOptions can be specified with `-' or `--'.\n");
41   printf ("\nSee http://gcc.gnu.org/java/ for information on reporting bugs\n");
42   exit (0);
43 }
44
45 static void
46 version ()
47 {
48   printf ("gij (GNU libgcj) version %s\n\n", __VERSION__);
49   printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n");
50   printf ("This is free software; see the source for copying conditions.  There is NO\n");
51   printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
52 }
53
54 int
55 main (int argc, const char **argv)
56 {
57   /* We rearrange ARGV so that all the -D options appear near the
58      beginning.  */
59   int last_D_option = 0;
60   bool jar_mode = false;
61
62   int i;
63   for (i = 1; i < argc; ++i)
64     {
65       const char *arg = argv[i];
66
67       /* A non-option stops processing.  */
68       if (arg[0] != '-')
69         break;
70       /* A "--" stops processing.  */
71       if (! strcmp (arg, "--"))
72         {
73           ++i;
74           break;
75         }
76
77       if (! strncmp (arg, "-D", 2))
78         {
79           argv[last_D_option++] = arg + 2;
80           continue;
81         }
82
83       if (! strcmp (arg, "-jar"))
84         {
85           jar_mode = true;
86           continue;
87         }
88
89       /* Allow both single or double hyphen for all remaining
90          options.  */
91       if (arg[1] == '-')
92         ++arg;
93
94       if (! strcmp (arg, "-help") || ! strcmp (arg, "-?"))
95         help ();
96       else if (! strcmp (arg, "-version"))
97         {
98           version ();
99           exit (0);
100         }
101       else if (! strcmp (arg, "-showversion"))
102         version ();
103       /* FIXME: use getopt and avoid the ugliness here.
104          We at least need to handle the argument in a better way.  */
105       else if (! strncmp (arg, "-ms=", 4))
106         _Jv_SetInitialHeapSize (arg + 4);
107       else if (! strcmp (arg, "-ms"))
108         {
109           if (i >= argc - 1)
110             {
111             no_arg:
112               fprintf (stderr, "gij: option requires an argument -- `%s'\n",
113                        argv[i]);
114               fprintf (stderr, "Try `gij --help' for more information.\n");
115               exit (1);
116             }
117           _Jv_SetInitialHeapSize (argv[++i]);
118         }
119       else if (! strncmp (arg, "-mx=", 4))
120         _Jv_SetMaximumHeapSize (arg + 4);
121       else if (! strcmp (arg, "-mx"))
122         {
123           if (i >= argc - 1)
124             goto no_arg;
125           _Jv_SetMaximumHeapSize (argv[++i]);
126         }
127       else if (! strcmp (arg, "-cp") || ! strcmp (arg, "-classpath"))
128         {
129           if (i >= argc - 1)
130             goto no_arg;
131           // We set _Jv_Jar_Class_Path.  If the user specified `-jar'
132           // then the jar code will override this.  This is the
133           // correct behavior.
134           _Jv_Jar_Class_Path = argv[++i];
135         }
136       else if (! strcmp (arg, "-verbose:class"))
137         gcj::verbose_class_flag = true;
138       else if (arg[1] == 'X')
139         {
140           if (arg[2] == '\0')
141             {
142               printf ("gij: currently no -X options are recognized\n");
143               exit (0);
144             }
145           /* Ignore other -X options.  */
146         }
147       else
148         {
149           fprintf (stderr, "gij: unrecognized option -- `%s'\n", argv[i]);
150           fprintf (stderr, "Try `gij --help' for more information.\n");
151           exit (1);
152         }
153     }
154
155   argv[last_D_option] = NULL;
156   _Jv_Compiler_Properties = argv;
157
158   if (argc - i < 1)
159     {
160       fprintf (stderr, "Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
161       fprintf (stderr, "          to invoke CLASS.main, or\n");
162       fprintf (stderr, "       gij -jar [OPTION] ... JARFILE [ARGS] ...\n");
163       fprintf (stderr, "          to execute a jar file\n");
164       fprintf (stderr, "Try `gij --help' for more information.\n");
165       exit (1);
166     }
167
168   _Jv_RunMain (NULL, argv[i], argc - i, argv + i, jar_mode);
169 }