| /* Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "jsvc.h" |
| |
| /* Locations of various JVM files. We have to deal with all this madness since |
| * we're not distributed together (yet!) with an official VM distribution. All |
| * this CRAP needs improvement, and based on the observation of default |
| * distributions of VMs and OSes. If it doesn't work for you, please report |
| * your VM layout (ls -laR) and system details (build/config.guess) so that we |
| * can improve the search algorithms. |
| */ |
| |
| /* If JAVA_HOME is not defined we search this list of paths (OS-dependent) |
| * to find the default location of the JVM. |
| */ |
| char *location_home[] = { |
| #if defined(OS_DARWIN) |
| "/System/Library/Frameworks/JavaVM.framework/Home", |
| "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/", |
| #elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_BSD) || defined(OS_AIX) |
| "/usr/java/default", |
| "/usr/java", |
| "/usr/local/java", |
| "/usr/lib/jvm/default-java", |
| "/usr/lib/jvm/java", |
| "/etc/alternatives/java_sdk", |
| "/etc/alternatives/java_sdk_openjdk", |
| "/etc/alternatives/jre", |
| #if defined(__LP64__) |
| "/lib64/jvm/java", |
| "/lib64/jvm/java-openjdk", |
| #endif |
| "/lib/jvm/java", |
| "/lib/jvm/java-openjdk", |
| #elif defined(OS_CYGWIN) |
| "/cygdrive/c/WINNT/system32/java", |
| #elif defined(OS_SYSV) |
| "/opt/java", |
| "/opt/java/jdk13", |
| #elif defined(OS_TRU64) |
| "/usr/opt/java142", |
| "/usr/opt/java13", |
| #elif defined(OS_HPUX) |
| "/opt/java6", |
| "/opt/java1.5", |
| "/opt/java1.4", |
| "/opt/java1.3", |
| #endif |
| NULL, |
| }; |
| |
| /* The jvm.cfg file defines the VMs available for invocation. So far, on all |
| * all systems I've seen it's in $JAVA_HOME/lib. If this file is not found, |
| * then the "default" VMs (from location_jvm_default) is searched, otherwise, |
| * we're going to look thru the "configured" VMs (from lod_cfgvm) lying |
| * somewhere around JAVA_HOME. (Only two, I'm happy) |
| */ |
| char *location_jvm_cfg[] = { |
| "$JAVA_HOME/jre/lib/jvm.cfg", /* JDK */ |
| "$JAVA_HOME/lib/jvm.cfg", /* JRE */ |
| "$JAVA_HOME/jre/lib/" CPU "/jvm.cfg", /* JDK */ |
| "$JAVA_HOME/lib/" CPU "/jvm.cfg", /* JRE */ |
| #if defined(OS_AIX) |
| "$JAVA_HOME/jre/lib/ppc/jvm.cfg", /* JDK */ |
| "$JAVA_HOME/lib/ppc/jvm.cfg", /* JRE */ |
| #endif |
| NULL, |
| }; |
| |
| /* This is the list of "defaults" VM (searched when jvm.cfg is not found, as |
| * in the case of most JDKs 1.2.2 |
| */ |
| char *location_jvm_default[] = { |
| #if defined(OS_DARWIN) |
| "$JAVA_HOME/../Libraries/libjvm.dylib", |
| "$JAVA_HOME/jre/lib/server/libjvm.dylib", |
| "$JAVA_HOME/jre/lib/client/libjvm.dylib", |
| #elif defined(OS_CYGWIN) |
| "$JAVA_HOME/jre/bin/classic/jvm.dll", /* Sun JDK 1.3 */ |
| "$JAVA_HOME/jre/bin/client/jvm.dll", /* Sun JDK 1.4 */ |
| #elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_BSD) || defined(OS_SYSV) || defined(OS_FREEBSD) || defined(OS_TRU64) || defined(OS_AIX) |
| "$JAVA_HOME/jre/lib/" CPU "/classic/libjvm.so", /* Sun JDK 1.2 */ |
| "$JAVA_HOME/jre/lib/" CPU "/server/libjvm.so", /* Sun JDK 1.4 */ |
| "$JAVA_HOME/jre/lib/" CPU "/client/libjvm.so", /* Sun JDK 1.3 */ |
| "$JAVA_HOME/jre/lib/" CPU "/libjvm.so", /* Sun JDK */ |
| "$JAVA_HOME/lib/" CPU "/classic/libjvm.so", /* Sun JRE 1.2 */ |
| "$JAVA_HOME/lib/" CPU "/server/libjvm.so", /* Sun JRE 1.4 */ |
| "$JAVA_HOME/lib/" CPU "/client/libjvm.so", /* Sun JRE 1.3 */ |
| "$JAVA_HOME/lib/" CPU "/libjvm.so", /* Sun JRE */ |
| "$JAVA_HOME/jre/bin/" CPU "/classic/libjvm.so", /* IBM JDK 1.3 */ |
| "$JAVA_HOME/jre/bin/" CPU "/libjvm.so", /* IBM JDK */ |
| "$JAVA_HOME/bin/" CPU "/classic/libjvm.so", /* IBM JRE 1.3 */ |
| "$JAVA_HOME/bin/" CPU "/libjvm.so", /* IBM JRE */ |
| /* Those are "weirdos: if we got here, we're probably in troubles and |
| * we're not going to find anything, but hope never dies... |
| */ |
| "$JAVA_HOME/jre/lib/" CPU "/classic/green_threads/libjvm.so", |
| #if defined(OSD_POSIX) |
| "$JAVA_HOME/lib/s390/client/green_threads/libjvm.so", |
| "$JAVA_HOME/lib/sparc/client/green_threads/libjvm.so", |
| #endif |
| "$JAVA_HOME/jre/lib/classic/libjvm.so", |
| "$JAVA_HOME/jre/lib/client/libjvm.so", |
| "$JAVA_HOME/jre/lib/libjvm.so", |
| "$JAVA_HOME/lib/classic/libjvm.so", |
| "$JAVA_HOME/lib/server/libjvm.so", |
| "$JAVA_HOME/lib/client/libjvm.so", |
| "$JAVA_HOME/lib/libjvm.so", |
| "$JAVA_HOME/jre/bin/classic/libjvm.so", |
| "$JAVA_HOME/jre/bin/client/libjvm.so", |
| "$JAVA_HOME/jre/bin/libjvm.so", |
| "$JAVA_HOME/bin/classic/libjvm.so", |
| "$JAVA_HOME/bin/client/libjvm.so", |
| "$JAVA_HOME/bin/libjvm.so", |
| "$JAVA_HOME/jre/lib/" CPU "/fast64/libjvm.so", |
| "$JAVA_HOME/jre/lib/" CPU "/fast32/libjvm.so", |
| "$JAVA_HOME/lib/" CPU "/fast64/libjvm.so", |
| "$JAVA_HOME/lib/" CPU "/fast32/libjvm.so", |
| #elif defined(OS_HPUX) |
| "$JAVA_HOME/jre/lib/" CPU "/server/libjvm." SO_EXT, |
| "$JAVA_HOME/jre/lib/" CPU "/client/libjvm." SO_EXT, |
| "$JAVA_HOME/jre/lib/" CPU "/hotspot/libjvm." SO_EXT, |
| "$JAVA_HOME/jre/lib/" CPU "/classic/libjvm." SO_EXT, |
| #endif |
| "/usr/lib/libgcj.so.7", /* gcc java libraries */ |
| "/usr/lib/libgcj.so.6", |
| NULL, |
| }; |
| |
| /* This is the list of "configured" VM (searched when jvm.cfg is found, as |
| * in the case of most JDKs 1.3 (not IBM, for example), way easier than |
| * before, and lovely, indeed... |
| */ |
| char *location_jvm_configured[] = { |
| #if defined(OS_DARWIN) |
| "$JAVA_HOME/lib/$VM_NAME/libjvm.dylib", /* Java 9 */ |
| "$JAVA_HOME/jre/lib/$VM_NAME/libjvm.dylib", |
| "$JAVA_HOME/../Libraries/lib$VM_NAME.dylib", |
| #elif defined(OS_CYGWIN) |
| "$JAVA_HOME/jre/bin/$VM_NAME/jvm.dll", /* Sun JDK 1.3 */ |
| #elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_BSD) || defined(OS_FREEBSD) || defined(OS_TRU64) || defined(OS_AIX) |
| "$JAVA_HOME/lib/$VM_NAME/libjvm.so", /* Java 9 */ |
| "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/libjvm.so", /* Sun JDK 1.3 */ |
| "$JAVA_HOME/lib/" CPU "/$VM_NAME/libjvm.so", /* Sun JRE 1.3 */ |
| #if defined(OS_AIX) |
| "$JAVA_HOME/jre/lib/ppc/$VM_NAME/libjvm.so", /* Sun JDK 1.3 */ |
| "$JAVA_HOME/lib/ppc/$VM_NAME/libjvm.so", /* Sun JRE 1.3 */ |
| #endif |
| #elif defined(OS_HPUX) |
| "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/libjvm." SO_EXT, |
| "$JAVA_HOME/lib/" CPU "/$VM_NAME/libjvm." SO_EXT, |
| #elif defined(OS_SYSV) |
| "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/dce_threads/libjvm.so", |
| "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/green_threads/libjvm.so", |
| "$JAVA_HOME/lib/" CPU "/$VM_NAME/dce_threads/libjvm.so", |
| "$JAVA_HOME/lib/" CPU "/$VM_NAME/green_threads/libjvm.so", |
| #endif |
| NULL, |
| }; |