* Removed all Id tags.
[cacao.git] / src / cacaoh / cacaoh.c
index 1b04689fb9eacae76b575796b34a1809417ac3ef..105030001449ae9d7cbccf1f207972ad3eebab29 100644 (file)
@@ -1,6 +1,6 @@
 /* src/cacaoh/cacaoh.c - main for header generation (cacaoh)
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Reinhard Grafl
-
-   Changes: Mark Probst
-            Philipp Tomsich
-            Christian Thalinger
-
-   $Id: cacaoh.c 4921 2006-05-15 14:24:36Z twisti $
-
 */
 
 
 #include "vm/types.h"
 
 #include "cacaoh/headers.h"
-#include "mm/boehm.h"
-#include "mm/memory.h"
-#include "native/include/java_lang_Throwable.h"
 
-#if defined(ENABLE_THREADS)
-# include "threads/native/threads.h"
-#endif
+#include "mm/gc-common.h"
+#include "mm/memory.h"
 
+#include "toolbox/hashtable.h"
 #include "toolbox/logging.h"
-#include "vm/classcache.h"
+
 #include "vm/exceptions.h"
 #include "vm/global.h"
-#include "vm/hashtable.h"
-#include "vm/loader.h"
-#include "vm/options.h"
-#include "vm/statistics.h"
 #include "vm/stringlocal.h"
-#include "vm/suck.h"
-
+#include "vm/vm.h"
 
-/* define heap sizes **********************************************************/
-
-#define HEAP_MAXSIZE      2 * 1024 * 1024   /* default 2MB                    */
-#define HEAP_STARTSIZE         100 * 1024   /* default 100kB                  */
+#include "vmcore/classcache.h"
+#include "vmcore/loader.h"
+#include "vmcore/options.h"
+#include "vmcore/statistics.h"
+#include "vmcore/suck.h"
 
 
 /* define cacaoh options ******************************************************/
@@ -101,7 +84,7 @@ opt_struct opts[] = {
 
 *******************************************************************************/
 
-static void usage(void)
+void usage(void)
 {
        printf("Usage: cacaoh [options] <classes>\n"
                   "\n"
@@ -128,7 +111,7 @@ static void usage(void)
 static void version(void)
 {
        printf("cacaoh version "VERSION"\n");
-       printf("Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,\n");
+       printf("Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,\n");
        printf("C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,\n");
        printf("E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,\n");
        printf("J. Wenninger, Institut f. Computersprachen - TU Wien\n\n");
@@ -147,6 +130,11 @@ static void version(void)
 }
 
 
+/* forward declarations *******************************************************/
+
+static JavaVMInitArgs *cacaoh_options_prepare(int argc, char **argv);
+
+
 /* main ************************************************************************
 
    Main program.
@@ -167,17 +155,10 @@ int main(int argc, char **argv)
        char *classpath;
        char *cp;
        s4    cplen;
-       u4    heapmaxsize;
-       u4    heapstartsize;
 
        if (argc < 2)
                usage();
 
-
-#if defined(DISABLE_GC)
-       nogc_init(HEAP_MAXSIZE, HEAP_STARTSIZE);
-#endif
-
        /* set the bootclasspath */
 
        cp = getenv("BOOTCLASSPATH");
@@ -185,17 +166,22 @@ int main(int argc, char **argv)
        if (cp) {
                bootclasspath = MNEW(char, strlen(cp) + strlen("0"));
                strcpy(bootclasspath, cp);
-
-       } else {
-               cplen = strlen(CACAO_VM_ZIP_PATH) +
+       }
+       else {
+               cplen =
+#if defined(WITH_CLASSPATH_GNU)
+                       strlen(CACAO_VM_ZIP) +
                        strlen(":") +
-                       strlen(CLASSPATH_GLIBJ_ZIP_PATH) +
+#endif
+                       strlen(CLASSPATH_CLASSES) +
                        strlen("0");
 
                bootclasspath = MNEW(char, cplen);
-               strcat(bootclasspath, CACAO_VM_ZIP_PATH);
+#if defined(WITH_CLASSPATH_GNU)
+               strcat(bootclasspath, CACAO_VM_ZIP);
                strcat(bootclasspath, ":");
-               strcat(bootclasspath, CLASSPATH_GLIBJ_ZIP_PATH);
+#endif
+               strcat(bootclasspath, CLASSPATH_CLASSES);
        }
 
 
@@ -203,11 +189,11 @@ int main(int argc, char **argv)
 
        cp = getenv("CLASSPATH");
 
-       if (cp) {
+       if (cp != NULL) {
                classpath = MNEW(char, strlen(cp) + strlen("0"));
                strcat(classpath, cp);
-
-       else {
+       }
+       else {
                classpath = MNEW(char, strlen(".") + strlen("0"));
                strcpy(classpath, ".");
        }
@@ -218,13 +204,10 @@ int main(int argc, char **argv)
        opt_verbose = false;
        opt_directory = NULL;
 
-       heapmaxsize = HEAP_MAXSIZE;
-       heapstartsize = HEAP_STARTSIZE;
-
 
        /* parse the options ******************************************************/
 
-       vm_args = options_prepare(argc, argv);
+       vm_args = cacaoh_options_prepare(argc, argv);
 
        while ((opt = options_get(opts, vm_args)) != OPT_DONE) {
                switch (opt) {
@@ -276,40 +259,26 @@ int main(int argc, char **argv)
 
        if (opt_verbose) {
                log_init(NULL);
-               log_text("Java - header-generator started"); 
+               log_println("Java - header-generator started"); 
        }
-       
-       /* initialize the garbage collector */
-
-       gc_init(heapmaxsize, heapstartsize);
-
-#if defined(ENABLE_THREADS)
-       threads_preinit();
-#endif
-
-       /* initialize the string hashtable stuff: lock (must be done
-          _after_ threads_preinit) */
-
-       if (!string_init())
-               throw_main_exception_exit();
 
        /* initialize the utf8 hashtable stuff: lock, often used utf8 strings
           (must be done _after_ threads_preinit) */
 
        if (!utf8_init())
-               throw_main_exception_exit();
+               vm_abort("utf8_init failed\n");
 
        /* initialize the classcache hashtable stuff: lock, hashtable
           (must be done _after_ threads_preinit) */
 
        if (!classcache_init())
-               throw_main_exception_exit();
+               vm_abort("classcache_init failed\n");
 
        /* initialize the loader with bootclasspath (must be done _after_
           thread_preinit) */
 
        if (!suck_init())
-               throw_main_exception_exit();
+               vm_abort("suck_init failed\n");
 
        suck_add(bootclasspath);
 
@@ -322,7 +291,7 @@ int main(int argc, char **argv)
        classcache_init) */
 
        if (!loader_init())
-               throw_main_exception_exit();
+               vm_abort("loader_init failed\n");
 
 
        /* load Java classes ******************************************************/
@@ -346,12 +315,10 @@ int main(int argc, char **argv)
                /* exceptions are catched with new_exception call */
 
                if (!(c = load_class_bootstrap(utf_new_char(cp))))
-                       throw_cacao_exception_exit(string_java_lang_NoClassDefFoundError,
-                                                                          cp);
+                       vm_abort("java.lang.NoClassDefFoundError: %s\n", cp);
 
                if (!link_class(c))
-                       throw_cacao_exception_exit(string_java_lang_LinkageError,
-                                                                          cp);
+                       vm_abort("java.lang.LinkageError: %s\n", cp);
 
                headerfile_generate(c, opt_directory);
        }
@@ -361,9 +328,9 @@ int main(int argc, char **argv)
        loader_close();
 
        if (opt_verbose) {
-               log_text("Java - header-generator stopped");
+               log_println("Java - header-generator stopped");
 #if defined(ENABLE_STATISTICS)
-               mem_usagelog(true);
+               statistics_print_memory_usage();
 #endif
        }
        
@@ -371,6 +338,29 @@ int main(int argc, char **argv)
 }
 
 
+/* cacaoh_options_prepare ******************************************************
+
+   Prepare the JavaVMInitArgs.
+
+*******************************************************************************/
+
+static JavaVMInitArgs *cacaoh_options_prepare(int argc, char **argv)
+{
+       JavaVMInitArgs *vm_args;
+       s4              i;
+
+       vm_args = NEW(JavaVMInitArgs);
+
+       vm_args->nOptions = argc - 1;
+       vm_args->options  = MNEW(JavaVMOption, argc);
+
+       for (i = 1; i < argc; i++)
+               vm_args->options[i - 1].optionString = argv[i];
+
+       return vm_args;
+}
+
+
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where