From 100dfa86a6388ebed160b8ac290acc9ac55402b6 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 30 Apr 2008 14:34:54 +0000 Subject: [PATCH] Moved Sys.JNI_VERSION to SysImplementation.getRequiredJNIVersion() to enable platform specific native library versions. --- src/java/org/lwjgl/LinuxSysImplementation.java | 6 +++++- src/java/org/lwjgl/MacOSXSysImplementation.java | 6 +++++- src/java/org/lwjgl/Sys.java | 12 +++++------- src/java/org/lwjgl/SysImplementation.java | 5 +++++ src/java/org/lwjgl/WindowsSysImplementation.java | 6 +++++- 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/java/org/lwjgl/LinuxSysImplementation.java b/src/java/org/lwjgl/LinuxSysImplementation.java index 497226f6..543225c2 100644 --- a/src/java/org/lwjgl/LinuxSysImplementation.java +++ b/src/java/org/lwjgl/LinuxSysImplementation.java @@ -38,11 +38,15 @@ package org.lwjgl; * @version $Revision$ * $Id$ */ -class LinuxSysImplementation extends J2SESysImplementation { +final class LinuxSysImplementation extends J2SESysImplementation { static { java.awt.Toolkit.getDefaultToolkit(); // This will make sure libjawt.so is loaded } + public int getRequiredJNIVersion() { + return 16; + } + public boolean openURL(final String url) { // Linux may as well resort to pure Java hackery, as there's no Linux native way of doing it // right anyway. diff --git a/src/java/org/lwjgl/MacOSXSysImplementation.java b/src/java/org/lwjgl/MacOSXSysImplementation.java index cc4587b2..5dd85bd0 100644 --- a/src/java/org/lwjgl/MacOSXSysImplementation.java +++ b/src/java/org/lwjgl/MacOSXSysImplementation.java @@ -44,12 +44,16 @@ import com.apple.eio.FileManager; * @version $Revision$ * $Id$ */ -class MacOSXSysImplementation extends J2SESysImplementation { +final class MacOSXSysImplementation extends J2SESysImplementation { static { // Make sure AWT is properly initialized. This avoids hangs on Mac OS X 10.3 Toolkit.getDefaultToolkit(); } + public int getRequiredJNIVersion() { + return 16; + } + public boolean openURL(String url) { try { FileManager.openURL(url); diff --git a/src/java/org/lwjgl/Sys.java b/src/java/org/lwjgl/Sys.java index 6a0786a0..69f650fd 100644 --- a/src/java/org/lwjgl/Sys.java +++ b/src/java/org/lwjgl/Sys.java @@ -56,9 +56,6 @@ public final class Sys { /** Current version of library */ private static final String VERSION = "2.0b1"; - /** Current version of the JNI library */ - static final int JNI_VERSION = 16; - /** The implementation instance to delegate platform specific behavior to */ private final static SysImplementation implementation; @@ -101,8 +98,9 @@ public final class Sys { loadLibrary(JNI_LIBRARY_NAME); int native_jni_version = implementation.getJNIVersion(); - if (native_jni_version != JNI_VERSION) - throw new LinkageError("Version mismatch: jar version is '" + JNI_VERSION + + int required_version = implementation.getRequiredJNIVersion(); + if (native_jni_version != required_version) + throw new LinkageError("Version mismatch: jar version is '" + required_version + "', native libary version is '" + native_jni_version + "'"); implementation.setDebug(LWJGLUtil.DEBUG); } @@ -112,9 +110,9 @@ public final class Sys { case LWJGLUtil.PLATFORM_LINUX: return new LinuxSysImplementation(); case LWJGLUtil.PLATFORM_WINDOWS: - return new org.lwjgl.WindowsSysImplementation(); + return new WindowsSysImplementation(); case LWJGLUtil.PLATFORM_MACOSX: - return new org.lwjgl.MacOSXSysImplementation(); + return new MacOSXSysImplementation(); default: throw new IllegalStateException("Unsupported platform"); } diff --git a/src/java/org/lwjgl/SysImplementation.java b/src/java/org/lwjgl/SysImplementation.java index 0b08e363..ab255947 100644 --- a/src/java/org/lwjgl/SysImplementation.java +++ b/src/java/org/lwjgl/SysImplementation.java @@ -41,6 +41,11 @@ package org.lwjgl; * $Id$ */ interface SysImplementation { + /** + * Return the required version of the native library + */ + int getRequiredJNIVersion(); + /** * Return the version of the native library */ diff --git a/src/java/org/lwjgl/WindowsSysImplementation.java b/src/java/org/lwjgl/WindowsSysImplementation.java index 5ce5d89e..691ec1f3 100644 --- a/src/java/org/lwjgl/WindowsSysImplementation.java +++ b/src/java/org/lwjgl/WindowsSysImplementation.java @@ -38,11 +38,15 @@ package org.lwjgl; * @version $Revision$ * $Id$ */ -class WindowsSysImplementation extends DefaultSysImplementation { +final class WindowsSysImplementation extends DefaultSysImplementation { static { Sys.initialize(); } + public int getRequiredJNIVersion() { + return 16; + } + public long getTimerResolution() { return 1000; }