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