Blob Blame History Raw
Index: vrpn-version_07.33/java_vrpn/CMakeLists.txt
===================================================================
--- vrpn-version_07.33.orig/java_vrpn/CMakeLists.txt
+++ vrpn-version_07.33/java_vrpn/CMakeLists.txt
@@ -6,6 +6,29 @@
 
 if(JAVA_FOUND AND JNI_FOUND AND JAVAH_EXECUTABLE AND VRPN_BUILD_JAVA)
 
+	set(JAVA_INSTALL_LIBDIR
+		lib
+		CACHE PATH
+		"Where to install java shared objects")
+	set(JAVA_INSTALL_JNIDIR
+		share/java
+		CACHE PATH
+		"Where to install JNI jar files")
+
+	if("${JAVA_INSTALL_LIBDIR}" STREQUAL lib)
+		set(JAVA_LOAD_VRPN
+			"System.loadLibrary(\"java_vrpn\")")
+	else()
+		if(IS_ABSOLUTE "${JAVA_INSTALL_LIBDIR}")
+			set(JAVA_LOAD_VRPN
+				"System.load(\"${JAVA_INSTALL_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}java_vrpn${CMAKE_SHARED_LIBRARY_SUFFIX}\")")
+		else()
+			set(JAVA_LOAD_VRPN
+				"System.load(\"${CMAKE_INSTALL_PREFIX}/${JAVA_INSTALL_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}java_vrpn${CMAKE_SHARED_LIBRARY_SUFFIX}\")")
+		endif()
+	endif()
+	configure_file("vrpn/VRPN.java.in" "vrpn/VRPN.java")
+
 	# Set up file lists
 	set(JAVA_CLASSES
 		AnalogOutputRemote
@@ -22,7 +45,6 @@ if(JAVA_FOUND AND JNI_FOUND AND JAVAH_EX
 		TextSender
 		TrackerRemote
 		TrackerRemoteListener
-		VRPN
 		VRPNDevice)
 	set(JAVAC_OUTPUT)
 	set(JAVAC_INPUT)
@@ -38,6 +60,15 @@ if(JAVA_FOUND AND JNI_FOUND AND JAVAH_EX
 			JAVA_JNI_HEADERS
 			"${CMAKE_CURRENT_BINARY_DIR}/vrpn_${class}.h")
 	endforeach()
+	list(APPEND
+		JAVAC_OUTPUT
+		"${CMAKE_CURRENT_BINARY_DIR}/vrpn/VRPN.class")
+	list(APPEND
+		JAVAC_INPUT
+		"${CMAKE_CURRENT_BINARY_DIR}/vrpn/VRPN.java")
+	list(APPEND
+		JAVA_JNI_HEADERS
+		"${CMAKE_CURRENT_BINARY_DIR}/vrpn_VRPN.h")
 
 	# *.java -> *.class
 	add_custom_command(OUTPUT
@@ -87,6 +118,20 @@ if(JAVA_FOUND AND JNI_FOUND AND JAVAH_EX
 			COMMENT
 			"Generating JNI header file for vrpn.${in}")
 	endforeach()
+	add_custom_command(OUTPUT
+		"${CMAKE_CURRENT_BINARY_DIR}/vrpn_VRPN.h"
+		DEPENDS
+		"${CMAKE_CURRENT_BINARY_DIR}/vrpn/VRPN.class"
+		COMMAND
+		"${JAVAH_EXECUTABLE}"
+		-d
+		"${CMAKE_CURRENT_BINARY_DIR}"
+		-jni
+		-classpath
+		"${CMAKE_CURRENT_BINARY_DIR}"
+		vrpn.VRPN
+		COMMENT
+		"Generating JNI header file for vrpn.${in}")
 
 	# target for vrpn.jar
 	add_custom_target(java_vrpn_jar
@@ -120,12 +165,15 @@ if(JAVA_FOUND AND JNI_FOUND AND JAVAH_EX
 
 	if(VRPN_INSTALL)
 		install(TARGETS java_vrpn
-			ARCHIVE DESTINATION lib COMPONENT java
-			LIBRARY DESTINATION lib COMPONENT java
-			RUNTIME DESTINATION lib COMPONENT java)
+			ARCHIVE DESTINATION "${JAVA_INSTALL_LIBDIR}"
+			COMPONENT java
+			LIBRARY DESTINATION "${JAVA_INSTALL_LIBDIR}"
+			COMPONENT java
+			RUNTIME DESTINATION "${JAVA_INSTALL_LIBDIR}"
+			COMPONENT java)
 
 		install(FILES "${CMAKE_CURRENT_BINARY_DIR}/vrpn.jar"
-			DESTINATION share/java
+			DESTINATION "${JAVA_INSTALL_JNIDIR}"
 			COMPONENT java
 			RENAME vrpn-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.jar)
 	endif()
Index: vrpn-version_07.33/java_vrpn/vrpn/VRPN.java
===================================================================
--- vrpn-version_07.33.orig/java_vrpn/vrpn/VRPN.java
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-package vrpn;
-
-public class VRPN
-{
-	
-	/**
-	 * All VRPN objects must assert this lock before making any calls
-	 * into native code.  A corollary of this is that no native methods
-	 * may be public; all native methods must be wrapped by other methods
-	 * that first synchronize on this lock before calling the native
-	 * method.
-	 */
-	protected final static Object downInVrpnLock = new Object( );
-	
-	static
-	{
-		try { System.loadLibrary( "java_vrpn" ); }
-		catch( UnsatisfiedLinkError e )
-		{
-			System.out.println( e.getMessage( ) );
-			System.out.println( "Error initializing java_vrpn." );
-			System.out.println( " -- Unable to find native library." );
-		}
-		catch( SecurityException e )
-		{
-			System.out.println( e.getMessage( ) );
-			System.out.println( "Security exception:  you couldn't load the native vrpn dll." );
-		}
-	} // end static initializer block
-	
-	
-} // end class VRPN
Index: vrpn-version_07.33/java_vrpn/vrpn/VRPN.java.in
===================================================================
--- /dev/null
+++ vrpn-version_07.33/java_vrpn/vrpn/VRPN.java.in
@@ -0,0 +1,34 @@
+
+
+package vrpn;
+
+public class VRPN
+{
+	
+	/**
+	 * All VRPN objects must assert this lock before making any calls
+	 * into native code.  A corollary of this is that no native methods
+	 * may be public; all native methods must be wrapped by other methods
+	 * that first synchronize on this lock before calling the native
+	 * method.
+	 */
+	protected final static Object downInVrpnLock = new Object( );
+	
+	static
+	{
+		try { @JAVA_LOAD_VRPN@; }
+		catch( UnsatisfiedLinkError e )
+		{
+			System.out.println( e.getMessage( ) );
+			System.out.println( "Error initializing java_vrpn." );
+			System.out.println( " -- Unable to find native library." );
+		}
+		catch( SecurityException e )
+		{
+			System.out.println( e.getMessage( ) );
+			System.out.println( "Security exception:  you couldn't load the native vrpn dll." );
+		}
+	} // end static initializer block
+	
+	
+} // end class VRPN