< prev index next >

src/java.base/macosx/native/libjli/java_md_macosx.c

Print this page
rev 12879 : 8136556: Add the ability to perform static builds of MacOSX x64 binaries
Reviewed-by: ihse, bdelsart, gadams, lfoltan, rriggs, hseigel, twisti

*** 243,252 **** --- 243,254 ---- } return sExportedJNIFunctions = fxns; } + #ifndef STATIC_BUILD + JNIEXPORT jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args) { InvocationFunctions *ifn = GetExportedJNIFunctions(); if (ifn == NULL) return JNI_ERR; return ifn->GetDefaultJavaVMInitArgs(args);
*** 263,272 **** --- 265,275 ---- JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs) { InvocationFunctions *ifn = GetExportedJNIFunctions(); if (ifn == NULL) return JNI_ERR; return ifn->GetCreatedJavaVMs(vmBuf, bufLen, nVMs); } + #endif /* * Allow JLI-aware launchers to specify a client/server preference */ JNIEXPORT void JNICALL
*** 301,311 **** --- 304,319 ---- static void *apple_main (void *arg) { objc_registerThreadWithCollector(); if (main_fptr == NULL) { + #ifdef STATIC_BUILD + extern int main(int argc, char **argv); + main_fptr = &main; + #else main_fptr = (int (*)())dlsym(RTLD_DEFAULT, "main"); + #endif if (main_fptr == NULL) { JLI_ReportErrorMessageSys("error locating main entrypoint\n"); exit(1); } }
*** 586,602 **** --- 594,614 ---- JLI_Snprintf(jvmpath, jvmpathsize, "%s/lib/%s/" JVM_DLL, jrepath, jvmtypeUsed); } JLI_TraceLauncher("Does `%s' exist ... ", jvmpath); + #ifdef STATIC_BUILD + return JNI_TRUE; + #else if (stat(jvmpath, &s) == 0) { JLI_TraceLauncher("yes.\n"); return JNI_TRUE; } else { JLI_TraceLauncher("no.\n"); return JNI_FALSE; } + #endif } /* * Find path to JRE based on .exe's location or registry settings. */
*** 605,618 **** --- 617,638 ---- { char libjava[MAXPATHLEN]; if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ + #ifdef STATIC_BUILD + char jvm_cfg[MAXPATHLEN]; + JLI_Snprintf(jvm_cfg, sizeof(jvm_cfg), "%s/lib/jvm.cfg", path); + if (access(jvm_cfg, F_OK) == 0) { + return JNI_TRUE; + } + #else JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/" JAVA_DLL, path); if (access(libjava, F_OK) == 0) { return JNI_TRUE; } + #endif /* ensure storage for path + /jre + NULL */ if ((JLI_StrLen(path) + 4 + 1) > (size_t) pathsize) { JLI_TraceLauncher("Insufficient space to store JRE path\n"); return JNI_FALSE; }
*** 627,636 **** --- 647,674 ---- /* try to find ourselves instead */ Dl_info selfInfo; dladdr(&GetJREPath, &selfInfo); + #ifdef STATIC_BUILD + char jvm_cfg[MAXPATHLEN]; + char *p = NULL; + strncpy(jvm_cfg, selfInfo.dli_fname, MAXPATHLEN); + p = strrchr(jvm_cfg, '/'); *p = '\0'; + p = strrchr(jvm_cfg, '/'); + if (strcmp(p, "/.") == 0) { + *p = '\0'; + p = strrchr(jvm_cfg, '/'); *p = '\0'; + } + else *p = '\0'; + strncpy(path, jvm_cfg, pathsize); + strncat(jvm_cfg, "/lib/jvm.cfg", MAXPATHLEN); + if (access(jvm_cfg, F_OK) == 0) { + return JNI_TRUE; + } + #endif + char *realPathToSelf = realpath(selfInfo.dli_fname, path); if (realPathToSelf != path) { return JNI_FALSE; }
*** 662,672 **** --- 700,714 ---- Dl_info dlinfo; void *libjvm; JLI_TraceLauncher("JVM path is %s\n", jvmpath); + #ifndef STATIC_BUILD libjvm = dlopen(jvmpath, RTLD_NOW + RTLD_GLOBAL); + #else + libjvm = dlopen(NULL, RTLD_FIRST); + #endif if (libjvm == NULL) { JLI_ReportErrorMessage(DLL_ERROR1, __LINE__); JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); return JNI_FALSE; }
*** 712,724 **** SetExecname(char **argv) { char* exec_path = NULL; { Dl_info dlinfo; - int (*fptr)(); fptr = (int (*)())dlsym(RTLD_DEFAULT, "main"); if (fptr == NULL) { JLI_ReportErrorMessage(DLL_ERROR3, dlerror()); return JNI_FALSE; } --- 754,771 ---- SetExecname(char **argv) { char* exec_path = NULL; { Dl_info dlinfo; + #ifdef STATIC_BUILD + void *fptr; + fptr = (void *)&SetExecname; + #else + int (*fptr)(); fptr = (int (*)())dlsym(RTLD_DEFAULT, "main"); + #endif if (fptr == NULL) { JLI_ReportErrorMessage(DLL_ERROR3, dlerror()); return JNI_FALSE; }
< prev index next >