diff options
author | Sven Gothel <[email protected]> | 2019-06-21 18:48:37 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2019-06-21 18:48:37 +0200 |
commit | e44b9364353a6173598eb98d276795d77cc4456c (patch) | |
tree | 6fec026bef8865fe49d7e9bce7fbecc59d824cb0 | |
parent | 8ce56955f989f0d8ac21335ea563f9c7eb111154 (diff) |
iOS: NativeLibrary: Refine iOS, use proper alt system path for iOS+OSX, relax closeLibrary(..)
4 files changed, 48 insertions, 36 deletions
diff --git a/src/java/com/jogamp/common/os/DynamicLibraryBundle.java b/src/java/com/jogamp/common/os/DynamicLibraryBundle.java index a3d6198..fee3c01 100644 --- a/src/java/com/jogamp/common/os/DynamicLibraryBundle.java +++ b/src/java/com/jogamp/common/os/DynamicLibraryBundle.java @@ -282,7 +282,7 @@ public class DynamicLibraryBundle implements DynamicLookupHelper { } } else { if( null == dynLinkGlobal ) { - dynLinkGlobal = lib.getDynamicLinker(); + dynLinkGlobal = lib.dynamicLinker(); } nativeLibraries.add(lib); toolLibLoaded[i]=true; diff --git a/src/java/com/jogamp/common/os/NativeLibrary.java b/src/java/com/jogamp/common/os/NativeLibrary.java index 39d1475..1b05700 100644 --- a/src/java/com/jogamp/common/os/NativeLibrary.java +++ b/src/java/com/jogamp/common/os/NativeLibrary.java @@ -89,12 +89,17 @@ public final class NativeLibrary implements DynamicLookupHelper { break; case MACOS: - case IOS: prefixes = new String[] { "lib" }; suffixes = new String[] { ".dylib", ".jnilib" }; isOSX = true; break; + case IOS: + prefixes = new String[] { "lib" }; + suffixes = new String[] { ".dylib" }; + isOSX = true; + break; + /* case ANDROID: case FREEBSD: @@ -211,29 +216,7 @@ public final class NativeLibrary implements DynamicLookupHelper { loader); Platform.initSingleton(); // loads native gluegen-rt library - final DynamicLinker dynLink; - switch (PlatformPropsImpl.OS_TYPE) { - case WINDOWS: - dynLink = new WindowsDynamicLinkerImpl(); - break; - - case MACOS: - case IOS: - dynLink = new MacOSXDynamicLinkerImpl(); - break; - - case ANDROID: - if( PlatformPropsImpl.CPU_ARCH.is32Bit ) { - dynLink = new BionicDynamicLinker32bitImpl(); - } else { - dynLink = new BionicDynamicLinker64BitImpl(); - } - break; - - default: - dynLink = new PosixDynamicLinkerImpl(); - break; - } + final DynamicLinker dynLink = getDynamicLinker(); // Iterate down these and see which one if any we can actually find. for (final Iterator<String> iter = possiblePaths.iterator(); iter.hasNext(); ) { @@ -312,7 +295,34 @@ public final class NativeLibrary implements DynamicLookupHelper { return dynLink.lookupSymbolGlobal(funcName); } - /* pp */ final DynamicLinker getDynamicLinker() { return dynLink; } + /* pp */ final DynamicLinker dynamicLinker() { return dynLink; } + + /* pp */ static DynamicLinker getDynamicLinker() { + final DynamicLinker dynLink; + switch (PlatformPropsImpl.OS_TYPE) { + case WINDOWS: + dynLink = new WindowsDynamicLinkerImpl(); + break; + + case MACOS: + case IOS: + dynLink = new MacOSXDynamicLinkerImpl(); + break; + + case ANDROID: + if( PlatformPropsImpl.CPU_ARCH.is32Bit ) { + dynLink = new BionicDynamicLinker32bitImpl(); + } else { + dynLink = new BionicDynamicLinker64BitImpl(); + } + break; + + default: + dynLink = new PosixDynamicLinkerImpl(); + break; + } + return dynLink; + } /** Retrieves the low-level library handle from this NativeLibrary object. On the Windows platform this is an HMODULE, and on Unix @@ -433,9 +443,9 @@ public final class NativeLibrary implements DynamicLookupHelper { // Add probable Mac OS X-specific paths if ( isOSX ) { // Add historical location - addPaths("/Library/Frameworks/" + libName + ".Framework", baseNames, paths); + addPaths("/Library/Frameworks/" + libName + ".framework", baseNames, paths); // Add current location - addPaths("/System/Library/Frameworks/" + libName + ".Framework", baseNames, paths); + addPaths("/System/Library/Frameworks/" + libName + ".framework", baseNames, paths); } } diff --git a/src/java/jogamp/common/os/DynamicLinkerImpl.java b/src/java/jogamp/common/os/DynamicLinkerImpl.java index 56a909e..5ce94c1 100644 --- a/src/java/jogamp/common/os/DynamicLinkerImpl.java +++ b/src/java/jogamp/common/os/DynamicLinkerImpl.java @@ -144,14 +144,15 @@ import com.jogamp.common.util.SecurityUtil; @Override public final void closeLibrary(final long libraryHandle, final boolean debug) throws SecurityException, IllegalArgumentException { final LibRef libRef = decrLibRefCount( libraryHandle ); - if( null == libRef ) { - throw new IllegalArgumentException("Library handle 0x"+Long.toHexString(libraryHandle)+" unknown."); - } - checkLinkPermission(libRef.getName()); + if( null != libRef ) { + checkLinkPermission(libRef.getName()); + } // else null libRef is OK for global lookup if( DEBUG || debug ) { System.err.println("DynamicLinkerImpl.closeLibrary(0x"+Long.toHexString(libraryHandle)+" -> "+libRef+")"); } - closeLibraryImpl(libraryHandle); + if( 0 != libraryHandle ) { + closeLibraryImpl(libraryHandle); + } } protected abstract void closeLibraryImpl(final long libraryHandle) throws SecurityException; diff --git a/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java b/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java index 5e8ba9d..ddaeea2 100644 --- a/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java +++ b/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java @@ -49,15 +49,16 @@ package jogamp.common.os; @Override protected final long lookupSymbolLocalImpl(final long libraryHandle, final String symbolName) throws SecurityException { - return dlsym(libraryHandle, symbolName); + return 0 != libraryHandle ? dlsym(libraryHandle, symbolName) : 0; } @Override protected final void closeLibraryImpl(final long libraryHandle) throws SecurityException { - dlclose(libraryHandle); + if( 0 != libraryHandle ) { + dlclose(libraryHandle); + } } - @Override public final String getLastError() { return dlerror(); |