1 /* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "jsvc.h" 18 19 /* Locations of various JVM files. We have to deal with all this madness since 20 * we're not distributed together (yet!) with an official VM distribution. All 21 * this CRAP needs improvement, and based on the observation of default 22 * distributions of VMs and OSes. If it doesn't work for you, please report 23 * your VM layout (ls -laR) and system details (build/config.guess) so that we 24 * can improve the search algorithms. 25 */ 26 27 /* If JAVA_HOME is not defined we search this list of paths (OS-dependent) 28 * to find the default location of the JVM. 29 */ 30 char *location_home[] = { 31 #if defined(OS_DARWIN) 32 "/System/Library/Frameworks/JavaVM.framework/Home", 33 "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/", 34 #elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_BSD) || defined(OS_AIX) 35 "/usr/java/default", 36 "/usr/java", 37 "/usr/local/java", 38 "/usr/lib/jvm/default-java", 39 "/usr/lib/jvm/java", 40 "/etc/alternatives/java_sdk", 41 "/etc/alternatives/java_sdk_openjdk", 42 "/etc/alternatives/jre", 43 #if defined(__LP64__) 44 "/lib64/jvm/java", 45 "/lib64/jvm/java-openjdk", 46 #endif 47 "/lib/jvm/java", 48 "/lib/jvm/java-openjdk", 49 #elif defined(OS_CYGWIN) 50 "/cygdrive/c/WINNT/system32/java", 51 #elif defined(OS_SYSV) 52 "/opt/java", 53 "/opt/java/jdk13", 54 #elif defined(OS_TRU64) 55 "/usr/opt/java142", 56 "/usr/opt/java13", 57 #elif defined(OS_HPUX) 58 "/opt/java6", 59 "/opt/java1.5", 60 "/opt/java1.4", 61 "/opt/java1.3", 62 #endif 63 NULL, 64 }; 65 66 /* The jvm.cfg file defines the VMs available for invocation. So far, on all 67 * all systems I've seen it's in $JAVA_HOME/lib. If this file is not found, 68 * then the "default" VMs (from location_jvm_default) is searched, otherwise, 69 * we're going to look thru the "configured" VMs (from lod_cfgvm) lying 70 * somewhere around JAVA_HOME. (Only two, I'm happy) 71 */ 72 char *location_jvm_cfg[] = { 73 "$JAVA_HOME/jre/lib/jvm.cfg", /* JDK */ 74 "$JAVA_HOME/lib/jvm.cfg", /* JRE */ 75 "$JAVA_HOME/jre/lib/" CPU "/jvm.cfg", /* JDK */ 76 "$JAVA_HOME/lib/" CPU "/jvm.cfg", /* JRE */ 77 #if defined(OS_AIX) 78 "$JAVA_HOME/jre/lib/ppc/jvm.cfg", /* JDK */ 79 "$JAVA_HOME/lib/ppc/jvm.cfg", /* JRE */ 80 #endif 81 NULL, 82 }; 83 84 /* This is the list of "defaults" VM (searched when jvm.cfg is not found, as 85 * in the case of most JDKs 1.2.2 86 */ 87 char *location_jvm_default[] = { 88 #if defined(OS_DARWIN) 89 "$JAVA_HOME/../Libraries/libjvm.dylib", 90 "$JAVA_HOME/jre/lib/server/libjvm.dylib", 91 "$JAVA_HOME/jre/lib/client/libjvm.dylib", 92 #elif defined(OS_CYGWIN) 93 "$JAVA_HOME/jre/bin/classic/jvm.dll", /* Sun JDK 1.3 */ 94 "$JAVA_HOME/jre/bin/client/jvm.dll", /* Sun JDK 1.4 */ 95 #elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_BSD) || defined(OS_SYSV) || defined(OS_FREEBSD) || defined(OS_TRU64) || defined(OS_AIX) 96 "$JAVA_HOME/jre/lib/" CPU "/classic/libjvm.so", /* Sun JDK 1.2 */ 97 "$JAVA_HOME/jre/lib/" CPU "/server/libjvm.so", /* Sun JDK 1.4 */ 98 "$JAVA_HOME/jre/lib/" CPU "/client/libjvm.so", /* Sun JDK 1.3 */ 99 "$JAVA_HOME/jre/lib/" CPU "/libjvm.so", /* Sun JDK */ 100 "$JAVA_HOME/lib/" CPU "/classic/libjvm.so", /* Sun JRE 1.2 */ 101 "$JAVA_HOME/lib/" CPU "/server/libjvm.so", /* Sun JRE 1.4 */ 102 "$JAVA_HOME/lib/" CPU "/client/libjvm.so", /* Sun JRE 1.3 */ 103 "$JAVA_HOME/lib/" CPU "/libjvm.so", /* Sun JRE */ 104 "$JAVA_HOME/jre/bin/" CPU "/classic/libjvm.so", /* IBM JDK 1.3 */ 105 "$JAVA_HOME/jre/bin/" CPU "/libjvm.so", /* IBM JDK */ 106 "$JAVA_HOME/bin/" CPU "/classic/libjvm.so", /* IBM JRE 1.3 */ 107 "$JAVA_HOME/bin/" CPU "/libjvm.so", /* IBM JRE */ 108 /* Those are "weirdos: if we got here, we're probably in troubles and 109 * we're not going to find anything, but hope never dies... 110 */ 111 "$JAVA_HOME/jre/lib/" CPU "/classic/green_threads/libjvm.so", 112 #if defined(OSD_POSIX) 113 "$JAVA_HOME/lib/s390/client/green_threads/libjvm.so", 114 "$JAVA_HOME/lib/sparc/client/green_threads/libjvm.so", 115 #endif 116 "$JAVA_HOME/jre/lib/classic/libjvm.so", 117 "$JAVA_HOME/jre/lib/client/libjvm.so", 118 "$JAVA_HOME/jre/lib/libjvm.so", 119 "$JAVA_HOME/lib/classic/libjvm.so", 120 "$JAVA_HOME/lib/server/libjvm.so", 121 "$JAVA_HOME/lib/client/libjvm.so", 122 "$JAVA_HOME/lib/libjvm.so", 123 "$JAVA_HOME/jre/bin/classic/libjvm.so", 124 "$JAVA_HOME/jre/bin/client/libjvm.so", 125 "$JAVA_HOME/jre/bin/libjvm.so", 126 "$JAVA_HOME/bin/classic/libjvm.so", 127 "$JAVA_HOME/bin/client/libjvm.so", 128 "$JAVA_HOME/bin/libjvm.so", 129 "$JAVA_HOME/jre/lib/" CPU "/fast64/libjvm.so", 130 "$JAVA_HOME/jre/lib/" CPU "/fast32/libjvm.so", 131 "$JAVA_HOME/lib/" CPU "/fast64/libjvm.so", 132 "$JAVA_HOME/lib/" CPU "/fast32/libjvm.so", 133 #elif defined(OS_HPUX) 134 "$JAVA_HOME/jre/lib/" CPU "/server/libjvm." SO_EXT, 135 "$JAVA_HOME/jre/lib/" CPU "/client/libjvm." SO_EXT, 136 "$JAVA_HOME/jre/lib/" CPU "/hotspot/libjvm." SO_EXT, 137 "$JAVA_HOME/jre/lib/" CPU "/classic/libjvm." SO_EXT, 138 #endif 139 "/usr/lib/libgcj.so.7", /* gcc java libraries */ 140 "/usr/lib/libgcj.so.6", 141 NULL, 142 }; 143 144 /* This is the list of "configured" VM (searched when jvm.cfg is found, as 145 * in the case of most JDKs 1.3 (not IBM, for example), way easier than 146 * before, and lovely, indeed... 147 */ 148 char *location_jvm_configured[] = { 149 #if defined(OS_DARWIN) 150 "$JAVA_HOME/lib/$VM_NAME/libjvm.dylib", /* Java 9 */ 151 "$JAVA_HOME/jre/lib/$VM_NAME/libjvm.dylib", 152 "$JAVA_HOME/../Libraries/lib$VM_NAME.dylib", 153 #elif defined(OS_CYGWIN) 154 "$JAVA_HOME/jre/bin/$VM_NAME/jvm.dll", /* Sun JDK 1.3 */ 155 #elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_BSD) || defined(OS_FREEBSD) || defined(OS_TRU64) || defined(OS_AIX) 156 "$JAVA_HOME/lib/$VM_NAME/libjvm.so", /* Java 9 */ 157 "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/libjvm.so", /* Sun JDK 1.3 */ 158 "$JAVA_HOME/lib/" CPU "/$VM_NAME/libjvm.so", /* Sun JRE 1.3 */ 159 #if defined(OS_AIX) 160 "$JAVA_HOME/jre/lib/ppc/$VM_NAME/libjvm.so", /* Sun JDK 1.3 */ 161 "$JAVA_HOME/lib/ppc/$VM_NAME/libjvm.so", /* Sun JRE 1.3 */ 162 #endif 163 #elif defined(OS_HPUX) 164 "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/libjvm." SO_EXT, 165 "$JAVA_HOME/lib/" CPU "/$VM_NAME/libjvm." SO_EXT, 166 #elif defined(OS_SYSV) 167 "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/dce_threads/libjvm.so", 168 "$JAVA_HOME/jre/lib/" CPU "/$VM_NAME/green_threads/libjvm.so", 169 "$JAVA_HOME/lib/" CPU "/$VM_NAME/dce_threads/libjvm.so", 170 "$JAVA_HOME/lib/" CPU "/$VM_NAME/green_threads/libjvm.so", 171 #endif 172 NULL, 173 }; 174