[PATCH v3] 8214332: Add a flag for overriding default JNI library search path

Jakub Vaněk linuxtardis at gmail.com
Wed Nov 28 21:02:24 UTC 2018


On 2018-11-29 at 06:54 +1000, David Holmes wrote:
> Hi Jakub,
> 
> Are you ready to have this pushed? I can sponsor it if so.
> 
> David
> 

Hi David,

thanks for your reply, I wasn't responding yesterday and today. I added
one more change to handle the situation when the --with flag is used
without its argument.

I'd want to settle on this version of the patch, because it maintains
compatibility with current status of things and is the easiest to
implement.

Thanks,

Jakub

# HG changeset patch
# User Jakub Vaněk <linuxtardis at gmail.com>
# 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.



More information about the build-dev mailing list