From f5c48efcf546ba4e08e197ccced6df83b57e1755 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Fri, 11 Jul 2014 03:05:41 +0200 Subject: Bug 1024: Add fallback for native-jar-file location via classpath In situations, where the native-jar file is not located within the same parent URI as it's java-jar file, our location mechanism fails. This patch adds a classloader based native-jar file location mechanism as a fallback, requiring the native jar file to be included in the users CLASSPATH. Classloader based location algorithm in JNILibLoaderBase.addNativeJarLibsImpl(..): - Extract the 'module-name' from the given classFromJavaJar's package name, i.e. the last package-part: 'jogamp.common.Debug' -> 'common' Hence it is important to pass a 'classFromJavaJar', which last package segment reflects the module-name! - -> , e.g. linux-amd64 -> linux.amd64 (linux/amd64) - Locate class 'jogamp.nativetag...TAG', e.g. 'jogamp.nativetag.common.linux.amd64.TAG' - Use located class's JarFile URI .. continue as usual Injection of above mentioned TAG class via gluegen-cpptasks-base.xml macro 'native.tag.jar': - Creates dummy TAG.java code - Compiles TAG.java - Creates the native-jar file Example: Note that the manifest file uses a matching Extension-Name: Extension-Name: jogamp.nativetag.common --- src/java/com/jogamp/common/os/Platform.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/java/com/jogamp/common/os/Platform.java') diff --git a/src/java/com/jogamp/common/os/Platform.java b/src/java/com/jogamp/common/os/Platform.java index b8e3385..12122a2 100644 --- a/src/java/com/jogamp/common/os/Platform.java +++ b/src/java/com/jogamp/common/os/Platform.java @@ -200,7 +200,7 @@ public class Platform extends PlatformPropsImpl { // load GluegenRT native library if(_USE_TEMP_JAR_CACHE[0] && TempJarCache.initSingleton()) { try { - JNILibLoaderBase.addNativeJarLibs(new Class[] { Platform.class }, null); + JNILibLoaderBase.addNativeJarLibs(new Class[] { jogamp.common.Debug.class }, null); } catch (final Exception e0) { // IllegalArgumentException, IOException System.err.println("Caught "+e0.getClass().getSimpleName()+": "+e0.getMessage()+", while JNILibLoaderBase.addNativeJarLibs(..)"); -- cgit v1.2.3