Hi all, I'm attaching a properly formatted patch, the last one was broken by word-wrapping in my mail client.
Thanks, Jakub # HG changeset patch # User Jakub Vaněk <[email protected]> # Date 1543266969 -3600 # Mon Nov 26 22:16:09 2018 +0100 # Node ID 0e938f324f9601d7d86f8acbb6a3f7c65cfc852e # Parent e017d2f176d0119cdc70c9f2ee98e78c0c13f0c7 Add an option for overriding default JNI library search path diff --git a/doc/building.html b/doc/building.html --- a/doc/building.html +++ b/doc/building.html @@ -464,6 +464,10 @@ <li><code>--with-jvm-features=<feature>[,<feature>...]</code> - Use the specified JVM features when building Hotspot. The list of features will be enabled on top of the default list. For the <code>custom</code> JVM variant, this default list is empty. A complete list of available JVM features can be found using <code>bash configure --help</code>.</li> <li><code>--with-target-bits=<bits></code> - Create a target binary suitable for running on a <code><bits></code> platform. Use this to create 32-bit output on a 64-bit build platform, instead of doing a full cross-compile. (This is known as a <em>reduced</em> build.)</li> </ul> +<p>On Linux, BSD and AIX, it is possible to override where Java by default searches for runtime/JNI libraries. This can be useful in situations where there is a special shared directory for system JNI libraries. This setting can in turn be overriden at runtime by setting the <code>java.library.path</code> property.</p> +<ul> +<li><code>--with-jni-libpath=<path></code> - Use the specified path as a default when searching for runtime libraries.</li> +</ul> <h4 id="configure-arguments-for-native-compilation">Configure Arguments for Native Compilation</h4> <ul> <li><code>--with-devkit=<path></code> - Use this devkit for compilers, tools and resources</li> diff --git a/doc/building.md b/doc/building.md --- a/doc/building.md +++ b/doc/building.md @@ -662,6 +662,14 @@ platform, instead of doing a full cross-compile. (This is known as a *reduced* build.) +On Linux, BSD and AIX, it is possible to override where Java by default +searches for runtime/JNI libraries. This can be useful in situations where +there is a special shared directory for system JNI libraries. This setting +can in turn be overriden at runtime by setting the `java.library.path` property. + + * `--with-jni-libpath=<path>` - Use the specified path as a default + when searching for runtime libraries. + #### Configure Arguments for Native Compilation * `--with-devkit=<path>` - Use this devkit for compilers, tools and resources diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-options.m4 --- a/make/autoconf/jdk-options.m4 +++ b/make/autoconf/jdk-options.m4 @@ -244,6 +244,28 @@ COPYRIGHT_YEAR=`$DATE +'%Y'` fi AC_SUBST(COPYRIGHT_YEAR) + + # Override default library path + AC_ARG_WITH([jni-libpath], [AS_HELP_STRING([--with-jni-libpath], + [override default JNI library search path])]) + AC_MSG_CHECKING([for jni library path]) + if test "x${with_jni_libpath}" = "x" || test "x${with_jni_libpath}" = "xno"; then + AC_MSG_RESULT([default]) + elif test "x${with_jni_libpath}" = "xyes"; then + AC_MSG_RESULT([invalid]) + AC_MSG_ERROR([The --with-jni-libpath option requires an argument.]) + else + HOTSPOT_OVERRIDE_LIBPATH=${with_jni_libpath} + if test "x$OPENJDK_TARGET_OS" != "xlinux" && + test "x$OPENJDK_TARGET_OS" != "xbsd" && + test "x$OPENJDK_TARGET_OS" != "xaix"; then + AC_MSG_RESULT([fail]) + AC_MSG_ERROR([Overriding JNI library path is supported only on Linux, BSD and AIX.]) + fi + AC_MSG_RESULT(${HOTSPOT_OVERRIDE_LIBPATH}) + fi + AC_SUBST(HOTSPOT_OVERRIDE_LIBPATH) + ]) ############################################################################### diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in @@ -274,6 +274,9 @@ # Control wether Hotspot builds gtest tests BUILD_GTEST := @BUILD_GTEST@ +# Allow overriding the default hotspot library path +HOTSPOT_OVERRIDE_LIBPATH := @HOTSPOT_OVERRIDE_LIBPATH@ + # Control use of precompiled header in hotspot libjvm build USE_PRECOMPILED_HEADER := @USE_PRECOMPILED_HEADER@ diff --git a/make/hotspot/lib/JvmFlags.gmk b/make/hotspot/lib/JvmFlags.gmk --- a/make/hotspot/lib/JvmFlags.gmk +++ b/make/hotspot/lib/JvmFlags.gmk @@ -95,3 +95,7 @@ ifeq ($(USE_PRECOMPILED_HEADER), false) JVM_CFLAGS += -DDONT_USE_PRECOMPILED_HEADER endif + +ifneq ($(HOTSPOT_OVERRIDE_LIBPATH), ) + JVM_CFLAGS += -DOVERRIDE_LIBPATH='"$(HOTSPOT_OVERRIDE_LIBPATH)"' +endif diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp --- a/src/hotspot/os/aix/os_aix.cpp +++ b/src/hotspot/os/aix/os_aix.cpp @@ -541,7 +541,11 @@ void os::init_system_properties_values() { -#define DEFAULT_LIBPATH "/lib:/usr/lib" +#ifndef OVERRIDE_LIBPATH + #define DEFAULT_LIBPATH "/lib:/usr/lib" +#else + #define DEFAULT_LIBPATH OVERRIDE_LIBPATH +#endif #define EXTENSIONS_DIR "/lib/ext" // Buffer that fits several sprintfs. diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -316,7 +316,11 @@ // ... // 7: The default directories, normally /lib and /usr/lib. #ifndef DEFAULT_LIBPATH - #define DEFAULT_LIBPATH "/lib:/usr/lib" + #ifndef OVERRIDE_LIBPATH + #define DEFAULT_LIBPATH "/lib:/usr/lib" + #else + #define DEFAULT_LIBPATH OVERRIDE_LIBPATH + #endif #endif // Base path of extensions installed on the system. diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -323,10 +323,14 @@ // 1: ... // ... // 7: The default directories, normally /lib and /usr/lib. -#if defined(AMD64) || (defined(_LP64) && defined(SPARC)) || defined(PPC64) || defined(S390) - #define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib" +#ifndef OVERRIDE_LIBPATH + #if defined(AMD64) || (defined(_LP64) && defined(SPARC)) || defined(PPC64) || defined(S390) + #define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib" + #else + #define DEFAULT_LIBPATH "/lib:/usr/lib" + #endif #else - #define DEFAULT_LIBPATH "/lib:/usr/lib" + #define DEFAULT_LIBPATH OVERRIDE_LIBPATH #endif // Base path of extensions installed on the system.
