commit 87a0635b69b5d8880e0b5f3e394ed4cfc8248dae Author: František Dvořák Date: Wed Jan 1 19:01:31 2014 +0100 JNI library files have different locations on Fedora/EPEL and Debian: - support different locations without patching the upstream code - update packaging according to the guidelines (http://fedoraproject.org/wiki/Packaging:Java#Packaging_JAR_files_that_use_JNI, http://www.debian.org/doc/packaging-manuals/java-policy/x104.html), new Debian subpackage libglite-lb-client-jni - ldconfig command not needed anymore diff --git a/org.glite.lb.client-java/Makefile b/org.glite.lb.client-java/Makefile index dd0fc34..228c3f0 100644 --- a/org.glite.lb.client-java/Makefile +++ b/org.glite.lb.client-java/Makefile @@ -13,10 +13,11 @@ docdir?=${prefix}/share/doc/${package}-${version} # broken # SimpleLLTest.class ProducerTestLL.class ProducerTestIL.class +LOADER_SOURCES:=JNIDefaultLoader.java FULL_EXAMPLES := $(addprefix ${top_srcdir}/examples/,SSLClient.java SSLServer.java QueryDemo.java NotificationExample.java CreamTest.java) SSL_EXAMPLES := $(addprefix ${top_srcdir}/examples/simple-ssl/,MyX509KeyManager.java MyX509TrustManager.java ExampleSSLSocketFactory.java LBClientSSL.java) TM_EXAMPLES := $(addprefix ${top_srcdir}/examples/simple-trustmanager/,LBClientTM.java) -CORE_SOURCES:=Context.java ContextIL.java Escape.java Event.java ILFileWriter.java ILProto.java LBException.java Level.java Timeval.java Sources.java SeqCode.java +CORE_SOURCES:=Context.java ContextIL.java Escape.java Event.java ILFileWriter.java ILProto.java JNIHelper.java LBException.java Level.java Timeval.java Sources.java SeqCode.java AXIS_SOURCES:=ContextDirect.java ContextLL.java EventConvertor.java Job.java LBCredentials.java NotifParser.java Notification.java SSL.java SSLSend.java ServerConnection.java CORE_CLASSES=$(CORE_SOURCES:.java=.class) @@ -88,7 +89,7 @@ build/classes/axis: build/axis build/classes/core: compile-java-lb compile-java-gen -compile-java-lb: $(CORE_SOURCES) +compile-java-lb: $(CORE_SOURCES) build/JNILoader.java -mkdir -p build/classes/core ${JAVAC} \ -classpath ${jobid_classpath} \ @@ -140,6 +141,10 @@ glite-lb-client-java-examples.jar: build/classes/examples cd build/classes/examples && ${jdk_prefix}/bin/jar cf ../../$@ src org $(addsuffix .class,$(basename $(notdir ${FULL_EXAMPLES}))) cd build && ${jdk_prefix}/bin/jar i $@ +build/JNILoader.java: $(LOADER_SOURCES) + -mkdir -p build + cp -p $+ $@ + build/gen: -mkdir -p build/gen ${GEN} build/gen diff --git a/org.glite.lb.client-java/src/org/glite/lb/ContextIL.java b/org.glite.lb.client-java/src/org/glite/lb/ContextIL.java index 9329e24..1b7498f 100644 --- a/org.glite.lb.client-java/src/org/glite/lb/ContextIL.java +++ b/org.glite.lb.client-java/src/org/glite/lb/ContextIL.java @@ -63,7 +63,7 @@ public class ContextIL extends Context { this.prefix = prefix; this.socket = socket; - if (lib != null) System.loadLibrary(lib); + if (lib != null) org.glite.lb.JNILoader.loadLibrary(lib); } diff --git a/org.glite.lb.client-java/src/org/glite/lb/JNIDebianLoader.java b/org.glite.lb.client-java/src/org/glite/lb/JNIDebianLoader.java new file mode 100644 index 0000000..67298e7 --- /dev/null +++ b/org.glite.lb.client-java/src/org/glite/lb/JNIDebianLoader.java @@ -0,0 +1,27 @@ +package org.glite.lb; + + +/** + * JNI library loader for Debian. + */ +public class JNILoader { + + +/** + * JNI library load for Debian. It loads from /usr/lib/jni, see http://www.debian.org/doc/packaging-manuals/java-policy/x104.html. + */ +public static boolean loadLibrary(String libname) { + String os; + + os = System.getProperty("os.name"); + if (os.equals("Linux")) { + System.load("/usr/lib/jni/lib" + libname); + return true; + } else { + System.loadLibrary(libname); + return true; + } +} + + +} diff --git a/org.glite.lb.client-java/src/org/glite/lb/JNIDefaultLoader.java b/org.glite.lb.client-java/src/org/glite/lb/JNIDefaultLoader.java new file mode 100644 index 0000000..a9bc04d --- /dev/null +++ b/org.glite.lb.client-java/src/org/glite/lb/JNIDefaultLoader.java @@ -0,0 +1,16 @@ +package org.glite.lb; + + +public class JNILoader { + + +/** + * Simple JNI library load. + */ +public static boolean loadLibrary(String libname) { + System.loadLibrary(libname); + return true; +} + + +} diff --git a/org.glite.lb.client-java/src/org/glite/lb/JNIFedoraLoader.java b/org.glite.lb.client-java/src/org/glite/lb/JNIFedoraLoader.java new file mode 100644 index 0000000..83249aa --- /dev/null +++ b/org.glite.lb.client-java/src/org/glite/lb/JNIFedoraLoader.java @@ -0,0 +1,27 @@ +package org.glite.lb; + + +/** + * JNI library loader for Fedora/EPEL. + */ +public class JNILoader extends JNIHelper { + + +/** + * JNI library load for Fedora/EPEL. It tries to load from /usr/lib64/%{name} and /usr/lib/%{name}, see http://fedoraproject.org/wiki/Packaging:Java#Packaging_JAR_files_that_use_JNI. + */ +public static boolean loadLibrary(String libname) { + String[] dirs = {"/usr/lib64/glite-lb-client-java", "/usr/lib/glite-lb-client-java"}; + String os; + + os = System.getProperty("os.name"); + if (os.equals("Linux")) { + return JNIHelper.loadHelper(dirs, "lib" + libname); + } else { + System.loadLibrary(libname); + return true; + } +} + + +} diff --git a/org.glite.lb.client-java/src/org/glite/lb/JNIHelper.java b/org.glite.lb.client-java/src/org/glite/lb/JNIHelper.java new file mode 100644 index 0000000..45670f1 --- /dev/null +++ b/org.glite.lb.client-java/src/org/glite/lb/JNIHelper.java @@ -0,0 +1,29 @@ +package org.glite.lb; + + +/** + * JNI library helper loader. + **/ +public class JNIHelper { + + +/** + * Helper function to try load from several locations. + */ +protected static boolean loadHelper(String[] dirs, String filename) { + int i; + + for (i = 0; i < dirs.length; i++) { + try { + System.load(dirs[i] + "/" + filename); + return true; + } catch (UnsatisfiedLinkError e) { + } catch (Exception e) { + } + } + + return false; +} + + +}