You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/02/02 23:54:26 UTC
svn commit: r905828 - in /subversion/trunk: ./
subversion/bindings/javahl/native/
subversion/bindings/javahl/src/org/apache/subversion/javahl/
subversion/bindings/javahl/src/org/tigris/subversion/javahl/
Author: hwright
Date: Tue Feb 2 22:54:25 2010
New Revision: 905828
URL: http://svn.apache.org/viewvc?rev=905828&view=rev
Log:
Revert r905689 and r905805, in preparation for a different, but more correct,
method of wrapping the new javahl packages.
As it turns out, in programming, as in life, the quick-and-easy fix is rarely
the optimal long-term solution.
Added:
subversion/trunk/subversion/bindings/javahl/native/org_tigris_subversion_javahl_NativeResources.cpp
- copied unchanged from r905688, subversion/trunk/subversion/bindings/javahl/native/org_tigris_subversion_javahl_NativeResources.cpp
subversion/trunk/subversion/bindings/javahl/native/org_tigris_subversion_javahl_Version.cpp
- copied unchanged from r905688, subversion/trunk/subversion/bindings/javahl/native/org_tigris_subversion_javahl_Version.cpp
Removed:
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_Version.cpp
Modified:
subversion/trunk/build.conf
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NativeResources.java
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Version.java
Modified: subversion/trunk/build.conf
URL: http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=905828&r1=905827&r2=905828&view=diff
==============================================================================
--- subversion/trunk/build.conf (original)
+++ subversion/trunk/build.conf Tue Feb 2 22:54:25 2010
@@ -59,7 +59,7 @@
subversion/bindings/javahl/include/org_tigris_subversion_javahl_NodeKind.h
subversion/bindings/javahl/include/org_tigris_subversion_javahl_NotifyAction.h
subversion/bindings/javahl/include/org_tigris_subversion_javahl_NotifyStatus.h
- subversion/bindings/javahl/include/org_apache_subversion_javahl_NativeResources.h
+ subversion/bindings/javahl/include/org_tigris_subversion_javahl_NativeResources.h
subversion/bindings/javahl/include/org_tigris_subversion_javahl_Operation.h
subversion/bindings/javahl/include/org_tigris_subversion_javahl_Path.h
subversion/bindings/javahl/include/org_tigris_subversion_javahl_PromptUserPassword2.h
@@ -70,7 +70,7 @@
subversion/bindings/javahl/include/org_tigris_subversion_javahl_SVNClientLogLevel.h
subversion/bindings/javahl/include/org_tigris_subversion_javahl_ScheduleKind.h
subversion/bindings/javahl/include/org_tigris_subversion_javahl_StatusKind.h
- subversion/bindings/javahl/include/org_apache_subversion_javahl_Version.h
+ subversion/bindings/javahl/include/org_tigris_subversion_javahl_Version.h
test-scripts =
Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java?rev=905828&r1=905827&r2=905828&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java Tue Feb 2 22:54:25 2010
@@ -27,7 +27,7 @@
* Handles activities related to management of native resouces
* (e.g. loading of native libraries).
*/
-public class NativeResources
+class NativeResources
{
/**
* Version information about the underlying native libraries.
Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NativeResources.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NativeResources.java?rev=905828&r1=905827&r2=905828&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NativeResources.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NativeResources.java Tue Feb 2 22:54:25 2010
@@ -23,13 +23,110 @@
package org.tigris.subversion.javahl;
-import org.apache.subversion.javahl.*;
-
/**
* Handles activities related to management of native resouces
* (e.g. loading of native libraries).
*/
-class NativeResources extends org.apache.subversion.javahl.NativeResources
+class NativeResources
{
- static Version version = new Version();
+ /**
+ * Version information about the underlying native libraries.
+ */
+ static Version version;
+
+ /**
+ * Load the required native library whose path is specified by the
+ * system property <code>subversion.native.library</code> (which
+ * can be passed to the JVM on start-up using an argument like
+ * <code>-Dsubversion.native.library=/usr/local/lib/libsvnjavahl-1.so</code>).
+ * If the system property is not specified or cannot be loaded,
+ * attempt to load the library using its expected name, and the
+ * platform-dependent loading mechanism.
+ *
+ * @throws UnsatisfiedLinkError If the native library cannot be
+ * loaded.
+ * @throws LinkageError If the version of the loaded native
+ * library is not compatible with this version of JavaHL's Java
+ * APIs.
+ * @since 1.3.0
+ */
+ public static synchronized void loadNativeLibrary()
+ {
+ UnsatisfiedLinkError loadException = null;
+
+ // If the user specified the fully qualified path to the
+ // native library, try loading that first.
+ try
+ {
+ String specifiedLibraryName =
+ System.getProperty("subversion.native.library");
+ if (specifiedLibraryName != null)
+ {
+ System.load(specifiedLibraryName);
+ init();
+ return;
+ }
+ }
+ catch (UnsatisfiedLinkError ex)
+ {
+ // Since the user explicitly specified this path, this is
+ // the best error to return if no other method succeeds.
+ loadException = ex;
+ }
+
+ // Try to load the library by its name. Failing that, try to
+ // load it by its old name.
+ String[] libraryNames = {"svnjavahl-1", "libsvnjavahl-1", "svnjavahl"};
+ for (int i = 0; i < libraryNames.length; i++)
+ {
+ try
+ {
+ System.loadLibrary(libraryNames[i]);
+ init();
+ return;
+ }
+ catch (UnsatisfiedLinkError ex)
+ {
+ if (loadException == null)
+ {
+ loadException = ex;
+ }
+ }
+ }
+
+ // Re-throw the most relevant exception.
+ if (loadException == null)
+ {
+ // This could only happen as the result of a programming error.
+ loadException = new UnsatisfiedLinkError("Unable to load JavaHL " +
+ "native library");
+ }
+ throw loadException;
+ }
+
+ /**
+ * Initializer for native resources to be invoked <em>after</em>
+ * the native library has been loaded. Sets library version
+ * information, and initializes the re-entrance hack for native
+ * code.
+ * @throws LinkageError If the version of the loaded native
+ * library is not compatible with this version of JavaHL's Java
+ * APIs.
+ */
+ private static final void init()
+ {
+ initNativeLibrary();
+ version = new Version();
+ if (!version.isAtLeast(1, 5, 0))
+ {
+ throw new LinkageError("Native library version must be at least " +
+ "1.5.0, but is only " + version);
+ }
+ }
+
+ /**
+ * Initialize the native library layer.
+ * @since 1.5.0
+ */
+ private static native void initNativeLibrary();
}
Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Version.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Version.java?rev=905828&r1=905827&r2=905828&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Version.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Version.java Tue Feb 2 22:54:25 2010
@@ -23,8 +23,6 @@
package org.tigris.subversion.javahl;
-import org.apache.subversion.javahl.*;
-
/**
* Encapsulates version information about the underlying native
* libraries. Basically a wrapper for <a
@@ -32,4 +30,68 @@
*/
public class Version
{
+ /**
+ * @return The full version string for the loaded JavaHL library,
+ * as defined by <code>MAJOR.MINOR.PATCH INFO</code>.
+ * @since 1.4.0
+ */
+ public String toString()
+ {
+ StringBuffer version = new StringBuffer();
+ version.append(getMajor())
+ .append('.').append(getMinor())
+ .append('.').append(getPatch())
+ .append(getNumberTag())
+ .append(getTag());
+ return version.toString();
+ }
+
+ /**
+ * @return The major version number for the loaded JavaHL library.
+ * @since 1.4.0
+ */
+ public native int getMajor();
+
+ /**
+ * @return The minor version number for the loaded JavaHL library.
+ * @since 1.4.0
+ */
+ public native int getMinor();
+
+ /**
+ * @return The patch-level version number for the loaded JavaHL
+ * library.
+ * @since 1.4.0
+ */
+ public native int getPatch();
+
+ /**
+ * @return Whether the JavaHL native library version is at least
+ * of <code>major.minor.patch</code> level.
+ * @since 1.5.0
+ */
+ public boolean isAtLeast(int major, int minor, int patch)
+ {
+ int actualMajor = getMajor();
+ int actualMinor = getMinor();
+ return ((major < actualMajor)
+ || (major == actualMajor && minor < actualMinor)
+ || (major == actualMajor && minor == actualMinor &&
+ patch <= getPatch()));
+ }
+
+ /**
+ * @return Some text further describing the library version
+ * (e.g. <code>" (r1234)"</code>, <code>" (Alpha 1)"</code>,
+ * <code>" (dev build)"</code>, etc.).
+ * @since 1.4.0
+ */
+ private native String getTag();
+
+ /**
+ * @return Some text further describing the library version
+ * (e.g. "r1234", "Alpha 1", "dev build", etc.).
+ * @since 1.4.0
+ */
+ private native String getNumberTag();
}