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 const char *_find_libbluray_jar(BDJ_STORAGE *storage) { // pre-defined search paths for libbluray.jar static const char * const jar_paths[] = { #ifdef _WIN32 "" BDJ_JARFILE, #else "/usr/share/java/" BDJ_JARFILE, "/usr/share/libbluray/lib/" BDJ_JARFILE, #endif }; unsigned i; if (storage->classpath) { return storage->classpath; } // check if overriding the classpath const char *classpath = getenv("LIBBLURAY_CP"); if (classpath) { size_t cp_len = strlen(classpath); // directory or file ? if (cp_len > 0 && (classpath[cp_len - 1] == '/' || classpath[cp_len - 1] == '\\')) { storage->classpath = str_printf("%s%s", classpath, BDJ_JARFILE); } else { storage->classpath = str_dup(classpath); } if (_can_read_file(storage->classpath)) { return storage->classpath; } X_FREE(storage->classpath); BD_DEBUG(DBG_BDJ | DBG_CRIT, "invalid LIBBLURAY_CP %s\n", classpath); return NULL; } BD_DEBUG(DBG_BDJ, "LIBBLURAY_CP not set, searching for "BDJ_JARFILE" ...\n"); // check directory where libbluray.so was loaded from const char *lib_path = dl_get_path(); if (lib_path) { char *cp = str_printf("%s" BDJ_JARFILE, lib_path); BD_DEBUG(DBG_BDJ, "Checking %s ...\n", cp); if (_can_read_file(cp)) { storage->classpath = cp; BD_DEBUG(DBG_BDJ, "using %s\n", cp); return cp; } X_FREE(cp); } // check pre-defined directories for (i = 0; i < sizeof(jar_paths) / sizeof(jar_paths[0]); i++) { BD_DEBUG(DBG_BDJ, "Checking %s ...\n", jar_paths[i]); if (_can_read_file(jar_paths[i])) { storage->classpath = str_dup(jar_paths[i]); BD_DEBUG(DBG_BDJ, "using %s\n", storage->classpath); return storage->classpath; } } // try from current directory if (_can_read_file(BDJ_JARFILE)) { storage->classpath = str_dup(BDJ_JARFILE); BD_DEBUG(DBG_BDJ, "using %s\n", storage->classpath); return storage->classpath; } BD_DEBUG(DBG_BDJ | DBG_CRIT, BDJ_JARFILE" not found.\n"); return NULL; }
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; }