/* native/vm/VMRuntime.c - java/lang/VMRuntime
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
- M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
- P. Tomsich, J. Wenninger
+ Copyright (C) 1996-2005 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
This file is part of CACAO.
Changes: Joseph Wenninger
Christian Thalinger
- $Id: VMRuntime.c 1621 2004-11-30 13:06:55Z twisti $
+ $Id: VMRuntime.c 1863 2005-01-05 20:14:08Z motse $
*/
+#include "config.h"
+
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/utsname.h>
+#if defined(__DARWIN__)
+# include <mach/mach.h>
+#endif
+
#if !defined(STATIC_CLASSPATH)
-#include <dlfcn.h>
+# include <dlfcn.h>
#endif
-#include "config.h"
#include "cacao/cacao.h"
#include "mm/boehm.h"
#include "mm/memory.h"
{
int retVal=0;
+#ifdef JOWENN_DEBUG
char *buffer;
int buffer_len;
+#endif
utf *data;
#ifdef JOWENN_DEBUG
#ifndef STATIC_CLASSPATH
/*here it could be interesting to store the references in a list eg for nicely cleaning up or for certain platforms*/
if (dlopen(data->text,RTLD_NOW | RTLD_GLOBAL)) {
- log_text("LIBLOADED");
+ /*log_text("LIBLOADED");*/
retVal=1;
}
#else
char *java_home;
char *user;
char *home;
+ char *locale;
+ char *lang;
+ char *region;
+
struct utsname utsnamebuf;
+#if !defined(STATIC_CLASSPATH)
+ char *libpath;
+ s4 libpathlen;
+#endif
if (!p) {
- *exceptionptr = new_exception(string_java_lang_NullPointerException);
+ *exceptionptr = new_nullpointerexception();
return;
}
insert_property(m, p, "java.version", VERSION);
insert_property(m, p, "java.vendor", "CACAO Team");
- insert_property(m, p, "java.vendor.url", "http://www.complang.tuwien.ac.at/java/cacao/");
- insert_property(m, p, "java.home", java_home ? java_home : "null");
+ insert_property(m, p, "java.vendor.url", "http://www.cacaojvm.org/");
+ insert_property(m, p, "java.home", java_home ? java_home : CACAO_INSTALL_PREFIX);
insert_property(m, p, "java.vm.specification.version", "1.0");
insert_property(m, p, "java.vm.specification.vendor", "Sun Microsystems Inc.");
insert_property(m, p, "java.vm.specification.name", "Java Virtual Machine Specification");
insert_property(m, p, "java.specification.name", "Java Platform API Specification");
insert_property(m, p, "java.class.version", "48.0");
insert_property(m, p, "java.class.path", classpath);
+
+ /* Set bootclasspath properties. One for GNU classpath and the other for */
+ /* compatibility with Sun (required by most applications). */
+ insert_property(m, p, "java.boot.class.path", bootclasspath);
+ insert_property(m, p, "sun.boot.class.path", bootclasspath);
+
#if defined(STATIC_CLASSPATH)
insert_property(m, p, "java.library.path" , ".");
#else
- insert_property(m, p, "java.library.path" , getenv("LD_LIBRARY_PATH"));
+ libpathlen = strlen(CACAO_INSTALL_PREFIX) + strlen(CACAO_LIBRARY_PATH) + 1;
+
+ if (getenv("CACAO_LIB_OVERRIDE"))
+ libpathlen += strlen(getenv("CACAO_LIB_OVERRIDE")) + 1;
+
+ if (getenv("LD_LIBRARY_PATH"))
+ libpathlen += strlen(getenv("LD_LIBRARY_PATH")) + 1;
+
+ libpath = MNEW(char, libpathlen);
+
+ if (getenv("CACAO_LIB_OVERRIDE")) {
+ strcat(libpath, getenv("CACAO_LIB_OVERRIDE"));
+ strcat(libpath, ":");
+ }
+
+ strcat(libpath, CACAO_INSTALL_PREFIX);
+ strcat(libpath, CACAO_LIBRARY_PATH);
+
+ if (getenv("LD_LIBRARY_PATH")) {
+ strcat(libpath, ":");
+ strcat(libpath, getenv("LD_LIBRARY_PATH"));
+ }
+ insert_property(m, p, "java.library.path", libpath);
+
+ MFREE(libpath, char, libpathlen);
#endif
+
insert_property(m, p, "java.io.tmpdir", "/tmp");
- insert_property(m, p, "java.compiler", "cacao.jit");
- insert_property(m, p, "java.ext.dirs", "");
+
+ /* XXX We don't support java.lang.Compiler */
+/* insert_property(m, p, "java.compiler", "cacao.jit"); */
+
+ insert_property(m, p, "java.ext.dirs", CACAO_INSTALL_PREFIX""CACAO_EXT_DIR);
insert_property(m, p, "os.name", utsnamebuf.sysname);
insert_property(m, p, "os.arch", utsnamebuf.machine);
insert_property(m, p, "os.version", utsnamebuf.release);
insert_property(m, p, "user.home", home ? home : "null");
insert_property(m, p, "user.dir", cwd ? cwd : "null");
+#ifdef USE_GTK
+ /* disable gthread-jni's portable native sync due to yet unresolved
+ threading issues */
+ insert_property(m, p, "gnu.classpath.awt.gtk.portable.native.sync", "false");
+#endif
+
+
+ /* get locales */
+ locale = getenv("LANG");
+ if (locale != NULL) { /* gnu classpath is going to set en as language */
+ if (strlen(locale) <= 2) {
+ insert_property(m, p, "user.language", locale);
+ } else {
+ if ((locale[2]=='_')&&(strlen(locale)>=5)) {
+ lang = MNEW(char, 3);
+ strncpy(lang, (char*)&locale[0], 2);
+ lang[2]='\0';
+ region = MNEW(char, 3);
+ strncpy(region, (char*)&locale[3], 2);
+ region[2]='\0';
+ insert_property(m, p, "user.language", lang);
+ insert_property(m, p, "user.region", region);
+ }
+ }
+ }
+
+
#if 0
/* how do we get them? */
- { "user.language", "en" },
- { "user.region", "US" },
{ "user.country", "US" },
{ "user.timezone", "Europe/Vienna" },
/* XXX do we need this one? */
{ "java.protocol.handler.pkgs", "gnu.java.net.protocol"}
#endif
- insert_property(m,p,"java.protocol.handler.pkgs","gnu.java.net.protocol");
+ insert_property(m, p, "java.protocol.handler.pkgs", "gnu.java.net.protocol");
/* insert properties defined on commandline */