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