aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2023-01-23 10:21:05 +0100
committerSven Gothel <[email protected]>2023-01-23 10:21:05 +0100
commit55e0d96bddd01042fb0955d7a3864ac7879b612f (patch)
tree34840f2891fc7e54b9e1835c4da44d88ec218275
parent7e869ec5dde4409bbd3b16253d7c9ad9f3a2d3e7 (diff)
NativeLibrary.enumerateLibraryPaths(): Using addPaths() ensures given 'path' is being resolved as absolute-canonical as required for System.load*()
Further, detailed DEBUG messages are added on -Djogamp.debug.NativeLibrary
-rw-r--r--src/java/com/jogamp/common/os/NativeLibrary.java65
1 files changed, 51 insertions, 14 deletions
diff --git a/src/java/com/jogamp/common/os/NativeLibrary.java b/src/java/com/jogamp/common/os/NativeLibrary.java
index c70c56c..a457211 100644
--- a/src/java/com/jogamp/common/os/NativeLibrary.java
+++ b/src/java/com/jogamp/common/os/NativeLibrary.java
@@ -453,29 +453,44 @@ public final class NativeLibrary implements DynamicLookupHelper {
final List<String> paths = new ArrayList<String>();
final String libName = selectName(windowsLibName, unixLibName, macOSXLibName);
if (libName == null) {
- return paths;
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: empty, no libName selected");
+ }
+ return paths;
+ }
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: libName '"+libName+"'");
}
// Allow user's full path specification to override our building of paths
final File file = new File(libName);
if (file.isAbsolute()) {
paths.add(libName);
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: done, absolute path found '"+libName+"'");
+ }
return paths;
}
final String[] baseNames = buildNames(libName);
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: baseNames: "+Arrays.toString(baseNames));
+ }
if( searchSystemPath && searchSystemPathFirst ) {
// Add just the library names to use the OS's search algorithm
for (int i = 0; i < baseNames.length; i++) {
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: add.ssp_1st: "+baseNames[i]);
+ }
paths.add(baseNames[i]);
}
// Add probable Mac OS X-specific paths
if ( isOSX ) {
// Add historical location
- addPaths("/Library/Frameworks/" + libName + ".framework", baseNames, paths);
+ addPaths("add.ssp_1st_maxos_old", "/Library/Frameworks/" + libName + ".framework", baseNames, paths);
// Add current location
- addPaths("/System/Library/Frameworks/" + libName + ".framework", baseNames, paths);
+ addPaths("add.ssp_1st_maxos_cur", "/System/Library/Frameworks/" + libName + ".framework", baseNames, paths);
}
}
@@ -483,7 +498,10 @@ public final class NativeLibrary implements DynamicLookupHelper {
// from the LWJGL library
final String clPath = findLibrary(libName, loader);
if (clPath != null) {
- paths.add(clPath);
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: add.clp: "+clPath);
+ }
+ paths.add(clPath);
}
// Add entries from java.library.path
@@ -523,7 +541,7 @@ public final class NativeLibrary implements DynamicLookupHelper {
for( int i=0; i < javaLibraryPaths.length; i++ ) {
final StringTokenizer tokenizer = new StringTokenizer(javaLibraryPaths[i], File.pathSeparator);
while (tokenizer.hasMoreTokens()) {
- addPaths(tokenizer.nextToken(), baseNames, paths);
+ addPaths("add.java.library.path", tokenizer.nextToken(), baseNames, paths);
}
}
}
@@ -536,26 +554,31 @@ public final class NativeLibrary implements DynamicLookupHelper {
return System.getProperty("user.dir");
}
});
- addPaths(userDir, baseNames, paths);
+ addPaths("add.user.dir.std", userDir, baseNames, paths);
// Add current working directory + natives/os-arch/ + library names
// to handle Bug 1145 cc1 using an unpacked fat-jar
- addPaths(userDir+File.separator+"natives"+File.separator+PlatformPropsImpl.os_and_arch+File.separator, baseNames, paths);
+ addPaths("add.user.dir.fat", userDir+File.separator+"natives"+File.separator+PlatformPropsImpl.os_and_arch+File.separator, baseNames, paths);
if( searchSystemPath && !searchSystemPathFirst ) {
// Add just the library names to use the OS's search algorithm
for (int i = 0; i < baseNames.length; i++) {
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: add.ssp_lst: "+baseNames[i]);
+ }
paths.add(baseNames[i]);
}
// Add probable Mac OS X-specific paths
if ( isOSX ) {
// Add historical location
- addPaths("/Library/Frameworks/" + libName + ".Framework", baseNames, paths);
+ addPaths("add.ssp_lst_maxos_old", "/Library/Frameworks/" + libName + ".Framework", baseNames, paths);
// Add current location
- addPaths("/System/Library/Frameworks/" + libName + ".Framework", baseNames, paths);
+ addPaths("add.ssp_lst_maxos_cur", "/System/Library/Frameworks/" + libName + ".Framework", baseNames, paths);
}
}
-
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: done: "+paths.toString());
+ }
return paths;
}
@@ -635,10 +658,24 @@ public final class NativeLibrary implements DynamicLookupHelper {
return res;
}
- private static final void addPaths(final String path, final String[] baseNames, final List<String> paths) {
- for (int j = 0; j < baseNames.length; j++) {
- paths.add(path + File.separator + baseNames[j]);
- }
+ private static final void addPaths(final String cause, final String path, final String[] baseNames, final List<String> paths) {
+ final String abs_path;
+ try {
+ final File fpath = new File(path);
+ abs_path = fpath.getCanonicalPath();
+ } catch( final IOException ioe ) {
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: "+cause+": Exception "+ioe.getMessage()+", from path "+path);
+ }
+ return;
+ }
+ for (int j = 0; j < baseNames.length; j++) {
+ final String p = abs_path + File.separator + baseNames[j];
+ if (DEBUG) {
+ System.err.println("NativeLibrary.enumerateLibraryPaths: "+cause+": "+p+", from path "+path);
+ }
+ paths.add(p);
+ }
}
private static boolean initializedFindLibraryMethod = false;