| #include <sys/utsname.h> |
| |
| extern "C" { |
| |
| void setProperty(Jnjvm* vm, JavaObject* prop, const char* key, |
| const char* val) { |
| |
| JavaString* Val = 0; |
| JavaString* Key = 0; |
| llvm_gcroot(prop, 0); |
| llvm_gcroot(Val, 0); |
| llvm_gcroot(Key, 0); |
| |
| Val = vm->asciizToStr(val); |
| Key = vm->asciizToStr(key); |
| |
| vm->upcalls->setProperty->invokeIntSpecial( |
| vm, (UserClass*)JavaObject::getClass(prop), prop, &Key, &Val); |
| } |
| |
| void setUnameProp(Jnjvm* vm, JavaObject* prop) { |
| |
| llvm_gcroot(prop, 0); |
| |
| struct utsname infos; |
| uname(&infos); |
| setProperty(vm, prop, "os.name", infos.sysname); |
| setProperty(vm, prop, "os.arch", infos.machine); |
| setProperty(vm, prop, "os.version", infos.release); |
| if (!strcmp(infos.machine, "ppc")) { |
| setProperty(vm, prop, "gnu.cpu.endian","big"); |
| } else { |
| setProperty(vm, prop, "gnu.cpu.endian","little"); |
| } |
| } |
| void setProperties(JavaObject * prop) { |
| llvm_gcroot(prop, 0); |
| Jnjvm* vm = JavaThread::get()->getJVM(); |
| const char* tmp; |
| setProperty(vm, prop, "java.vm.specification.version", "1.0"); |
| setProperty(vm, prop, "java.vm.specification.vendor", |
| "Sun Microsystems, Inc"); |
| setProperty(vm, prop, "java.vm.specification.name", |
| "Java Virtual Machine Specification"); |
| setProperty(vm, prop, "java.specification.version", "1.5"); |
| setProperty(vm, prop, "java.specification.vendor", "Sun Microsystems, Inc"); |
| setProperty(vm, prop, "java.specification.name", |
| "Java Platform API Specification"); |
| setProperty(vm, prop, "java.version", "1.5"); |
| setProperty(vm, prop, "java.runtime.version", "1.5"); |
| setProperty(vm, prop, "java.vendor", "The VMKit Project"); |
| setProperty(vm, prop, "java.vendor.url", "http://vmkit.llvm.org"); |
| |
| tmp = getenv("JAVA_HOME"); |
| if (!tmp) tmp = ""; |
| setProperty(vm, prop, "java.home", tmp); |
| |
| JnjvmBootstrapLoader* JCL = vm->bootstrapLoader; |
| setProperty(vm, prop, "java.class.version", "49.0"); |
| setProperty(vm, prop, "java.class.path", vm->classpath); |
| setProperty(vm, prop, "java.boot.class.path", JCL->bootClasspathEnv); |
| setProperty(vm, prop, "sun.boot.class.path", JCL->bootClasspathEnv); |
| setProperty(vm, prop, "java.vm.version", "0.28"); |
| setProperty(vm, prop, "java.vm.vendor", "The VMKit Project"); |
| setProperty(vm, prop, "java.vm.name", "J3"); |
| setProperty(vm, prop, "java.specification.version", "1.5"); |
| setProperty(vm, prop, "java.io.tmpdir", "/tmp"); |
| |
| |
| setProperty(vm, prop, "build.compiler", "gcj"); |
| setProperty(vm, prop, "gcj.class.path", JCL->bootClasspathEnv); |
| setProperty(vm, prop, "gnu.classpath.boot.library.path", |
| JCL->libClasspathEnv); |
| //setProperty(vm, prop, "java.library.path", TODO: getenv("LD_LIBRARY_PATH")) |
| setProperty(vm, prop, "sun.boot.library.path", JCL->libClasspathEnv); |
| |
| // Align behavior with GNU Classpath for now, to pass mauve test |
| setProperty(vm, prop, "sun.lang.ClassLoader.allowArraySyntax", "true"); |
| |
| setUnameProp(vm, prop); |
| |
| setProperty(vm, prop, "file.separator", vm->dirSeparator); |
| setProperty(vm, prop, "path.separator", vm->envSeparator); |
| setProperty(vm, prop, "line.separator", "\n"); |
| |
| tmp = getenv("USERNAME"); |
| if (!tmp) tmp = getenv("LOGNAME"); |
| if (!tmp) tmp = getenv("NAME"); |
| if (!tmp) tmp = ""; |
| setProperty(vm, prop, "user.name", tmp); |
| |
| tmp = getenv("HOME"); |
| if (!tmp) tmp = ""; |
| setProperty(vm, prop, "user.home", tmp); |
| |
| tmp = getenv("PWD"); |
| if (!tmp) tmp = ""; |
| setProperty(vm, prop, "user.dir", tmp); |
| |
| // Disable this property. The Classpath iconv implementation is really |
| // not optimized (it over-abuses JNI calls). |
| //setProperty(vm, prop, "gnu.classpath.nio.charset.provider.iconv", "true"); |
| setProperty(vm, prop, "file.encoding", "ISO8859_1"); |
| setProperty(vm, prop, "gnu.java.util.zoneinfo.dir", "/usr/share/zoneinfo"); |
| } |
| |
| void setCommandLineProperties(JavaObject * prop) { |
| llvm_gcroot(prop, 0); |
| Jnjvm* vm = JavaThread::get()->getJVM(); |
| for (std::vector<std::pair<char*, char*> >::iterator i = |
| vm->postProperties.begin(), e = vm->postProperties.end(); i!= e; i++) { |
| setProperty(vm, prop, i->first, i->second); |
| } |
| |
| } |
| } |