static void *_load_jvm(const char **p_java_home) { #ifdef HAVE_BDJ_J2ME # ifdef _WIN32 static const char *jvm_path[] = {NULL, JDK_HOME}; static const char jvm_dir[] = "bin"; static const char jvm_lib[] = "cvmi"; # else static const char *jvm_path[] = {NULL, JDK_HOME, "/opt/PhoneME"}; static const char jvm_dir[] = "bin"; static const char jvm_lib[] = "libcvm"; # endif #else # ifdef _WIN32 static const char *jvm_path[] = {NULL, JDK_HOME}; static const char jvm_dir[] = "jre/bin/server"; static const char jvm_lib[] = "jvm"; # else static const char *jvm_path[] = {NULL, JDK_HOME, "/usr/lib/jvm/default-java", "/usr/lib/jvm/java-6-openjdk", "/usr/lib/jvm/java-7-openjdk", "/etc/java-config-2/current-system-vm"}; static const char jvm_dir[] = "jre/lib/" JAVA_ARCH "/server"; static const char jvm_lib[] = "libjvm"; # endif #endif const char *java_home = NULL; unsigned path_ind; void *handle = NULL; /* JAVA_HOME set, use it */ java_home = getenv("JAVA_HOME"); if (java_home) { *p_java_home = java_home; return _jvm_dlopen(java_home, jvm_dir, jvm_lib); } #if defined(_WIN32) && !defined(HAVE_BDJ_J2ME) handle = _load_jvm_win32(p_java_home); if (handle) { return handle; } #endif BD_DEBUG(DBG_BDJ, "JAVA_HOME not set, trying default locations\n"); /* try our pre-defined locations */ for (path_ind = 0; !handle && path_ind < sizeof(jvm_path) / sizeof(jvm_path[0]); path_ind++) { *p_java_home = jvm_path[path_ind]; handle = _jvm_dlopen(jvm_path[path_ind], jvm_dir, jvm_lib); } if (!*p_java_home) { *p_java_home = dl_get_path(); } return handle; }
static void *_jvm_dlopen_a(const char *java_home, const char * const *jvm_dir, unsigned num_jvm_dir, const char *jvm_lib) { unsigned ii; void *dll = NULL; for (ii = 0; !dll && ii < num_jvm_dir; ii++) { dll = _jvm_dlopen(java_home, jvm_dir[ii], jvm_lib); } return dll; }
static void *_load_jli_macos() { const char *java_home = NULL; static const char jli_dir[] = "jre/lib/jli"; static const char jli_lib[] = "libjli"; void *handle; /* JAVA_HOME set, use it */ java_home = getenv("JAVA_HOME"); if (java_home) { return _jvm_dlopen(java_home, jli_dir, jli_lib); } java_home = _java_home_macos(); if (java_home) { handle = _jvm_dlopen(java_home, jli_dir, jli_lib); if (handle) { return handle; } } // check if the JRE is installed: return _jvm_dlopen(jre_plugin_path, "lib/jli", jli_lib); }
static void *_load_jvm(const char **p_java_home) { #ifdef HAVE_BDJ_J2ME # ifdef _WIN32 static const char * const jvm_path[] = {NULL, JDK_HOME}; static const char * const jvm_dir[] = {"bin"}; static const char jvm_lib[] = "cvmi"; # else static const char * const jvm_path[] = {NULL, JDK_HOME, "/opt/PhoneME"}; static const char * const jvm_dir[] = {"bin"}; static const char jvm_lib[] = "libcvm"; # endif #else /* HAVE_BDJ_J2ME */ # ifdef _WIN32 static const char * const jvm_path[] = {NULL, JDK_HOME}; static const char * const jvm_dir[] = {"jre\\bin\\server", "bin\\server", "jre\\bin\\client", "bin\\client", }; static const char jvm_lib[] = "jvm"; # else # ifdef __APPLE__ static const char * const jvm_path[] = {NULL, JDK_HOME, MACOS_JRE_HOME}; static const char * const jvm_dir[] = {"jre/lib/server", "lib/server"}; # else static const char * const jvm_path[] = {NULL, JDK_HOME, "/usr/lib/jvm/default-java", "/usr/lib/jvm/default", "/usr/lib/jvm/", "/etc/java-config-2/current-system-vm", "/usr/lib/jvm/java-7-openjdk", "/usr/lib/jvm/java-8-openjdk", "/usr/lib/jvm/java-6-openjdk", }; static const char * const jvm_dir[] = {"jre/lib/" JAVA_ARCH "/server"}; # endif static const char jvm_lib[] = "libjvm"; # endif #endif const unsigned num_jvm_dir = sizeof(jvm_dir) / sizeof(jvm_dir[0]); const unsigned num_jvm_path = sizeof(jvm_path) / sizeof(jvm_path[0]); const char *java_home = NULL; unsigned path_ind; void *handle = NULL; /* JAVA_HOME set, use it */ java_home = getenv("JAVA_HOME"); if (java_home) { *p_java_home = java_home; return _jvm_dlopen_a(java_home, jvm_dir, num_jvm_dir, jvm_lib); } #if defined(_WIN32) && !defined(HAVE_BDJ_J2ME) handle = _load_jvm_win32(p_java_home); if (handle) { return handle; } #endif #if defined(__APPLE__) && !defined(HAVE_BDJ_J2ME) java_home = _java_home_macos(); if (java_home) { handle = _jvm_dlopen_a(java_home, jvm_dir, num_jvm_dir, jvm_lib); if (handle) { *p_java_home = java_home; return handle; } } // check if the JRE is installed: handle = _jvm_dlopen(jre_plugin_path, "lib/server", jvm_lib); if (handle) { *p_java_home = jre_plugin_path; return handle; } #endif BD_DEBUG(DBG_BDJ, "JAVA_HOME not set, trying default locations\n"); /* try our pre-defined locations */ for (path_ind = 0; !handle && path_ind < num_jvm_path; path_ind++) { *p_java_home = jvm_path[path_ind]; handle = _jvm_dlopen_a(jvm_path[path_ind], jvm_dir, num_jvm_dir, jvm_lib); } if (!*p_java_home) { *p_java_home = dl_get_path(); } return handle; }