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

Erik Joelsson erik.joelsson at oracle.com
Wed Nov 28 22:57:31 UTC 2018


Looks good.

/Erik

On 2018-11-28 13:02, Jakub Vaněk wrote:

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 @@

  • --with-jvm-
  • features=[,...] - Use the specified JVM features when building Hotspot. The list of features will be enabled on top of the default list. For the custom JVM variant, this default list is empty. A complete list of available JVM features can be found using bash configure --help.
  • --with-target-bits= - Create a target
  • binary suitable for running on a 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 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= - Use the specified
    • path as a default when searching for runtime libraries. +

      Configure

      Arguments for Native Compilation
      • --with-devkit= - Use this devkit for
      • compilers, tools and resources 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 @@ COPYRIGHTYEAR=$DATE +'%Y' fi ACSUBST(COPYRIGHTYEAR) + + # Override default library path + ACARGWITH([jni-libpath], [ASHELPSTRING([--with-jni-libpath], + [override default JNI library search path])]) + ACMSGCHECKING([for jni library path]) + if test "x${withjnilibpath}" = "x" || test "x${withjnilibpath}" = "xno"; then + ACMSGRESULT([default]) + elif test "x${withjnilibpath}" = "xyes"; then + ACMSGRESULT([invalid]) + ACMSGERROR([The --with-jni-libpath option requires an argument.]) + else + HOTSPOTOVERRIDELIBPATH=${withjnilibpath} + if test "x$OPENJDKTARGETOS" != "xlinux" && + test "x$OPENJDKTARGETOS" != "xbsd" && + test "x$OPENJDKTARGETOS" != "xaix"; then + ACMSGRESULT([fail]) + ACMSGERROR([Overriding JNI library path is supported only on Linux, BSD and AIX.]) + fi + ACMSGRESULT(${HOTSPOTOVERRIDELIBPATH}) + fi + ACSUBST(HOTSPOTOVERRIDELIBPATH) + ]) ###################################################################### ######### 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 BUILDGTEST := @BUILDGTEST@ +# Allow overriding the default hotspot library path +HOTSPOTOVERRIDELIBPATH := @HOTSPOTOVERRIDELIBPATH@ + # Control use of precompiled header in hotspot libjvm build USEPRECOMPILEDHEADER := @USEPRECOMPILEDHEADER@ 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 ($(USEPRECOMPILEDHEADER), false) JVMCFLAGS += -DDONTUSEPRECOMPILEDHEADER endif + +ifneq ($(HOTSPOTOVERRIDELIBPATH), ) + JVMCFLAGS += -DOVERRIDELIBPATH='"$(HOTSPOTOVERRIDELIBPATH)"' +endif diff --git a/src/hotspot/os/aix/osaix.cpp b/src/hotspot/os/aix/osaix.cpp --- a/src/hotspot/os/aix/osaix.cpp +++ b/src/hotspot/os/aix/osaix.cpp @@ -541,7 +541,11 @@ void os::initsystempropertiesvalues() { -#define DEFAULTLIBPATH "/lib:/usr/lib" +#ifndef OVERRIDELIBPATH + #define DEFAULTLIBPATH "/lib:/usr/lib" +#else + #define DEFAULTLIBPATH OVERRIDELIBPATH +#endif #define EXTENSIONSDIR "/lib/ext" // Buffer that fits several sprintfs. diff --git a/src/hotspot/os/bsd/osbsd.cpp b/src/hotspot/os/bsd/osbsd.cpp --- a/src/hotspot/os/bsd/osbsd.cpp +++ b/src/hotspot/os/bsd/osbsd.cpp @@ -316,7 +316,11 @@ // ... // 7: The default directories, normally /lib and /usr/lib. #ifndef DEFAULTLIBPATH - #define DEFAULTLIBPATH "/lib:/usr/lib" + #ifndef OVERRIDELIBPATH + #define DEFAULTLIBPATH "/lib:/usr/lib" + #else + #define DEFAULTLIBPATH OVERRIDELIBPATH + #endif #endif // Base path of extensions installed on the system. diff --git a/src/hotspot/os/linux/oslinux.cpp b/src/hotspot/os/linux/oslinux.cpp --- a/src/hotspot/os/linux/oslinux.cpp +++ b/src/hotspot/os/linux/oslinux.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 DEFAULTLIBPATH "/usr/lib64:/lib64:/lib:/usr/lib" +#ifndef OVERRIDELIBPATH + #if defined(AMD64) || (defined(LP64) && defined(SPARC)) || defined(PPC64) || defined(S390) + #define DEFAULTLIBPATH "/usr/lib64:/lib64:/lib:/usr/lib" + #else + #define DEFAULTLIBPATH "/lib:/usr/lib" + #endif #else - #define DEFAULTLIBPATH "/lib:/usr/lib" + #define DEFAULTLIBPATH OVERRIDELIBPATH #endif // Base path of extensions installed on the system.



        More information about the build-dev mailing list