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