123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- /* Copyright (C) 1999-2007 Free Software Foundation
- This file is part of libgcj.
- This software is copyrighted work licensed under the terms of the
- Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
- details. */
- #include <config.h>
- #include <jvm.h>
- #include <gcj/cni.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- static void
- help ()
- {
- printf ("Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
- printf (" to interpret Java bytecodes, or\n");
- printf (" gij -jar [OPTION] ... JARFILE [ARGS] ...\n");
- printf (" to execute a jar file\n\n");
- printf (" --cp LIST set class path\n");
- printf (" --classpath LIST set class path\n");
- printf (" -DVAR=VAL define property VAR with value VAL\n");
- printf (" -?, --help print this help, then exit\n");
- printf (" -X print help on supported -X options, then exit\n");
- printf (" --ms=NUMBER set initial heap size\n");
- printf (" --mx=NUMBER set maximum heap size\n");
- printf (" --verbose[:class] print information about class loading\n");
- printf (" --showversion print version number, then keep going\n");
- printf (" --version print version number, then exit\n");
- printf ("\nOptions can be specified with `-' or `--'.\n");
- printf ("\nSee http://gcc.gnu.org/java/ for information on reporting bugs\n");
- exit (0);
- }
- static void
- version ()
- {
- printf ("java version \"" JV_VERSION "\"\n");
- printf ("gij (GNU libgcj) version %s\n\n", __VERSION__);
- printf ("Copyright (C) 2007 Free Software Foundation, Inc.\n");
- printf ("This is free software; see the source for copying conditions. There is NO\n");
- printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
- }
- static void
- nonstandard_opts_help ()
- {
- printf (" -Xms<size> set initial heap size\n");
- printf (" -Xmx<size> set maximum heap size\n");
- printf (" -Xss<size> set thread stack size\n");
- exit (0);
- }
- static void
- add_option (JvVMInitArgs& vm_args, char const* option, void const* extra)
- {
- vm_args.options =
- (JvVMOption*) JvRealloc (vm_args.options,
- (vm_args.nOptions + 1) * sizeof (JvVMOption));
- vm_args.options[vm_args.nOptions].optionString = const_cast<char*> (option);
- vm_args.options[vm_args.nOptions].extraInfo = const_cast<void*> (extra);
- ++vm_args.nOptions;
- }
- int
- main (int argc, char const** argv)
- {
- JvVMInitArgs vm_args;
- bool jar_mode = false;
- vm_args.options = NULL;
- vm_args.nOptions = 0;
- vm_args.ignoreUnrecognized = true;
- // Command-line options always override the CLASSPATH environment
- // variable.
- char *classpath = getenv("CLASSPATH");
- if (classpath)
- {
- char* darg = (char*) JvMalloc (strlen (classpath)
- + sizeof ("-Djava.class.path="));
- sprintf (darg, "-Djava.class.path=%s", classpath);
- add_option (vm_args, darg, NULL);
- }
- // Handle arguments to the java command. Store in vm_args arguments
- // handled by the invocation API.
- int i;
- for (i = 1; i < argc; ++i)
- {
- char* arg = const_cast<char*> (argv[i]);
- // A non-option stops processing.
- if (arg[0] != '-')
- break;
- // A "--" stops processing.
- if (! strcmp (arg, "--"))
- {
- ++i;
- break;
- }
- // Allow both single or double hyphen for all options.
- if (arg[1] == '-')
- ++arg;
- // Ignore JIT options
- if (! strcmp (arg, "-client"))
- continue;
- else if (! strcmp (arg, "-server"))
- continue;
- else if (! strcmp (arg, "-hotspot"))
- continue;
- else if (! strcmp (arg, "-jrockit"))
- continue;
- // JVM Tool Interface options.
- else if (! strncmp (arg, "-agentlib:", sizeof ("-agentlib:") - 1))
- add_option (vm_args, arg, NULL);
- else if (! strncmp (arg, "-agentpath:", sizeof ("-agentpath:") - 1))
- add_option (vm_args, arg, NULL);
- else if (! strcmp (arg, "-classpath") || ! strcmp (arg, "-cp"))
- {
- if (i >= argc - 1)
- {
- no_arg:
- fprintf (stderr, "gij: option requires an argument -- `%s'\n",
- argv[i]);
- fprintf (stderr, "Try `gij --help' for more information.\n");
- exit (1);
- }
- // Sun seems to translate the -classpath option into
- // -Djava.class.path because if both -classpath and
- // -Djava.class.path are specified on the java command line,
- // the last one always wins.
- char* darg = (char*) JvMalloc (strlen (argv[++i])
- + sizeof ("-Djava.class.path="));
- sprintf (darg, "-Djava.class.path=%s", argv[i]);
- add_option (vm_args, darg, NULL);
- }
- else if (! strcmp (arg, "-debug"))
- {
- char* xarg = strdup ("-Xdebug");
- add_option (vm_args, xarg, NULL);
- }
- else if (! strncmp (arg, "-D", sizeof ("-D") - 1))
- add_option (vm_args, arg, NULL);
- // Ignore 32/64-bit JIT options
- else if (! strcmp (arg, "-d32") || ! strcmp (arg, "-d64"))
- continue;
- else if (! strncmp (arg, "-enableassertions", sizeof ("-enableassertions") - 1)
- || ! strncmp (arg, "-ea", sizeof ("-ea") - 1))
- {
- // FIXME: hook up assertion support
- continue;
- }
- else if (! strncmp (arg, "-disableassertions", sizeof ("-disableassertions") - 1)
- || ! strncmp (arg, "-da", sizeof ("-da") - 1))
- {
- // FIXME: hook up assertion support
- continue;
- }
- else if (! strcmp (arg, "-enablesystemassertions")
- || ! strcmp (arg, "-esa"))
- {
- // FIXME: hook up system assertion support
- continue;
- }
- else if (! strcmp (arg, "-disablesystemassertions")
- || ! strcmp (arg, "-dsa"))
- {
- // FIXME
- continue;
- }
- else if (! strcmp (arg, "-jar"))
- {
- jar_mode = true;
- continue;
- }
- // Ignore java.lang.instrument option
- else if (! strncmp (arg, "-javaagent:", sizeof ("-javaagent:") - 1))
- continue;
- else if (! strcmp (arg, "-noclassgc"))
- {
- char* xarg = strdup ("-Xnoclassgc");
- add_option (vm_args, xarg, NULL);
- }
- // -ms=n
- else if (! strncmp (arg, "-ms=", sizeof ("-ms=") - 1))
- {
- arg[1] = 'X';
- arg[2] = 'm';
- arg[3] = 's';
- add_option (vm_args, arg, NULL);
- }
- // -ms n
- else if (! strcmp (arg, "-ms"))
- {
- if (i >= argc - 1)
- goto no_arg;
- char* xarg = (char*) JvMalloc (strlen (argv[++i])
- + sizeof ("-Xms"));
- sprintf (xarg, "-Xms%s", argv[i]);
- add_option (vm_args, xarg, NULL);
- }
- // -msn
- else if (! strncmp (arg, "-ms", sizeof ("-ms") - 1))
- {
- char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
- sprintf (xarg, "-Xms%s", arg + sizeof ("-Xms") - 1);
- add_option (vm_args, xarg, NULL);
- }
- // -mx=n
- else if (! strncmp (arg, "-mx=", sizeof ("-mx=") - 1))
- {
- arg[1] = 'X';
- arg[2] = 'm';
- arg[3] = 'x';
- add_option (vm_args, arg, NULL);
- }
- // -mx n
- else if (! strcmp (arg, "-mx"))
- {
- if (i >= argc - 1)
- goto no_arg;
- char* xarg = (char*) JvMalloc (strlen (argv[++i])
- + sizeof ("-Xmx"));
- sprintf (xarg, "-Xmx%s", argv[i]);
- add_option (vm_args, xarg, NULL);
- }
- // -mxn
- else if (! strncmp (arg, "-mx", sizeof ("-mx") - 1))
- {
- char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
- sprintf (xarg, "-Xmx%s", arg + sizeof ("-Xmx") - 1);
- add_option (vm_args, xarg, NULL);
- }
- // -ss=n
- else if (! strncmp (arg, "-ss=", sizeof ("-ss=") - 1))
- {
- arg[1] = 'X';
- arg[2] = 's';
- arg[3] = 's';
- add_option (vm_args, arg, NULL);
- }
- // -ss n
- else if (! strcmp (arg, "-ss"))
- {
- if (i >= argc - 1)
- goto no_arg;
- char* xarg = (char*) JvMalloc (strlen (argv[++i])
- + sizeof ("-Xss"));
- sprintf (xarg, "-Xss%s", argv[i]);
- add_option (vm_args, xarg, NULL);
- }
- // -ssn
- else if (! strncmp (arg, "-ss", sizeof ("-ss") - 1))
- {
- char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
- sprintf (xarg, "-Xss%s", arg + sizeof ("-Xss") - 1);
- add_option (vm_args, xarg, NULL);
- }
- // This handles all the option variants that begin with
- // -verbose.
- else if (! strncmp (arg, "-verbose", 8))
- add_option (vm_args, arg, NULL);
- else if (! strcmp (arg, "-version"))
- {
- version ();
- exit (0);
- }
- else if (! strcmp (arg, "-fullversion"))
- {
- printf ("java full version \"gcj-" JV_VERSION "\"\n");
- exit (0);
- }
- else if (! strcmp (arg, "-showversion"))
- version ();
- else if (! strcmp (arg, "-help") || ! strcmp (arg, "-?"))
- help ();
- else if (! strcmp (arg, "-X"))
- nonstandard_opts_help ();
- else if (! strncmp (arg, "-X", 2))
- add_option (vm_args, arg, NULL);
- // Obsolete options recognized for backwards-compatibility.
- else if (! strcmp (arg, "-verify")
- || ! strcmp (arg, "-verifyremote"))
- continue;
- else if (! strcmp (arg, "-noverify"))
- {
- gcj::verifyClasses = false;
- }
- else
- {
- fprintf (stderr, "gij: unrecognized option -- `%s'\n", argv[i]);
- fprintf (stderr, "Try `gij --help' for more information.\n");
- exit (1);
- }
- }
- if (argc - i < 1)
- {
- fprintf (stderr, "Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
- fprintf (stderr, " to invoke CLASS.main, or\n");
- fprintf (stderr, " gij -jar [OPTION] ... JARFILE [ARGS] ...\n");
- fprintf (stderr, " to execute a jar file\n");
- fprintf (stderr, "Try `gij --help' for more information.\n");
- exit (1);
- }
- // -jar mode overrides all other modes of specifying class path:
- // CLASSPATH, -Djava.class.path, -classpath and -cp.
- if (jar_mode)
- {
- char* darg = (char*) JvMalloc (strlen (argv[i])
- + sizeof ("-Djava.class.path="));
- sprintf (darg, "-Djava.class.path=%s", argv[i]);
- add_option (vm_args, darg, NULL);
- }
- _Jv_RunMain (&vm_args, NULL, argv[i], argc - i,
- (char const**) (argv + i), jar_mode);
- }
|