Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Further simplify the full.jar generation (the hard portability way)
authorMartin Quinson <martin.quinson@loria.fr>
Mon, 21 Sep 2015 23:54:22 +0000 (01:54 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Tue, 22 Sep 2015 00:10:41 +0000 (02:10 +0200)
Don't run the jar at build time to ensure that the java searches the
libs where the cmake puts them. It was nice but it's hard to get that
script running on windows.

Instead, manually determine in both systems (java and cmake) where the
libs should be. Of course both definitions should match.

 - Allows to remove the java_bundle.sh pimple (that breaks on windows)
 - Users compiling simgrid will use the installed libs instead
 - None of the solutions will work for users using a faulty jar
 - Our testing infrastructure will catch the glitches:
   Each system displays the libs location in the build logs.

src/bindings/java/org/simgrid/NativeLib.java
tools/cmake/DefinePackages.cmake
tools/cmake/MakeJava.cmake
tools/cmake/scripts/java_bundle.sh [deleted file]

index 226c3fb..0fdf5fc 100644 (file)
@@ -118,11 +118,7 @@ public final class NativeLib {
 
 
        public static void main(String[] args) {
-               if (args.length >= 1 && args[0].equals("--quiet"))
-                       /* be careful, this execution path is used in tools/cmake/scripts/java_bundle.sh to determine where to put the libs */
-                       System.out.println(getPath());
-               else 
-                       System.out.println("This java library will try to load the native code under the following name:\n" +getPath());
+               System.out.println("This jarfile searches the native code under: " +getPath());
        }
 }
 
index 5397b2e..6e3f670 100644 (file)
@@ -1210,7 +1210,6 @@ set(CMAKE_SOURCE_FILES
   tools/cmake/scripts/Makefile.default
   tools/cmake/scripts/SimGrid.packproj
   tools/cmake/scripts/generate_memcheck_tests.pl
-  tools/cmake/scripts/java_bundle.sh
   tools/cmake/scripts/my_valgrind.pl
   tools/cmake/scripts/postinstall.sh
   tools/cmake/scripts/preinstall.sh
index 899907a..3a7b5ee 100644 (file)
@@ -56,7 +56,6 @@ set(SIMGRID_FULL_JAR "${CMAKE_BINARY_DIR}/simgrid_full.jar")
 set(MANIFEST_IN_FILE "${CMAKE_HOME_DIRECTORY}/src/bindings/java/MANIFEST.MF.in")
 set(MANIFEST_FILE "${CMAKE_BINARY_DIR}/src/bindings/java/MANIFEST.MF")
 
-
 set(LIBSIMGRID_SO
   libsimgrid${CMAKE_SHARED_LIBRARY_SUFFIX})
 set(LIBSIMGRID_JAVA_SO
@@ -73,18 +72,15 @@ else()
   add_jar(simgrid-java_pre_jar ${JMSG_JAVA_SRC} OUTPUT_NAME simgrid)
 endif()
 
-set(JAVA_BUNDLE "${CMAKE_HOME_DIRECTORY}/tools/cmake/scripts/java_bundle.sh")
-set(JAVA_BUNDLE_SO_FILES
-  ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO}
-  ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_JAVA_SO}
-  ${CMAKE_BINARY_DIR}/lib/${LIBSURF_JAVA_SO}
-  )
 add_custom_command(
   COMMENT "Finalize simgrid.jar..."
   OUTPUT ${SIMGRID_JAR}_finalized
   DEPENDS simgrid simgrid-java simgrid-java_pre_jar
-          ${SIMGRID_JAR} ${MANIFEST_IN_FILE}
-          ${JAVA_BUNDLE_SO_FILES}
+          ${SIMGRID_JAR} 
+         ${MANIFEST_IN_FILE}
+         ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO}
+         ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_JAVA_SO}
+         ${CMAKE_BINARY_DIR}/lib/${LIBSURF_JAVA_SO}
          ${CMAKE_HOME_DIRECTORY}/COPYING
          ${CMAKE_HOME_DIRECTORY}/ChangeLog
          ${CMAKE_HOME_DIRECTORY}/ChangeLog.SimGrid-java
@@ -98,11 +94,18 @@ add_custom_command(
   COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} ${SIMGRID_JAR}
 
   COMMAND ${CMAKE_COMMAND} -E copy ${SIMGRID_JAR} ${SIMGRID_FULL_JAR}
-  COMMAND sh ${JAVA_BUNDLE} "${Java_JAVA_EXECUTABLE}" "${SIMGRID_JAR}" ${JAVA_BUNDLE_SO_FILES}
-  COMMAND ${JAVA_ARCHIVE} -uvf ${SIMGRID_FULL_JAR} "NATIVE"
+  COMMAND ${CMAKE_COMMAND} -E make_directory                                     NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO}      NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_JAVA_SO} NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/lib/${LIBSURF_JAVA_SO}    NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}
+
+  COMMAND ${JAVA_ARCHIVE} -uvf ${SIMGRID_FULL_JAR}  NATIVE
   COMMAND ${Java_JAVADOC_EXECUTABLE} -quiet -d doc/javadoc ${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/*.java ${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/*/*.java
   COMMAND ${JAVA_ARCHIVE} -uvf ${SIMGRID_FULL_JAR} doc/javadoc
   
+  COMMAND ${CMAKE_COMMAND} -E echo "-- Cmake put the native code in NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}"
+  COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${SIMGRID_JAR}" org.simgrid.NativeLib
+  
   COMMAND ${CMAKE_COMMAND} -E remove ${SIMGRID_JAR}_finalized
   COMMAND ${CMAKE_COMMAND} -E touch ${SIMGRID_JAR}_finalized
   )
diff --git a/tools/cmake/scripts/java_bundle.sh b/tools/cmake/scripts/java_bundle.sh
deleted file mode 100755 (executable)
index d531058..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-set -e
-set -x
-
-if [ $# -lt 2 ]; then
-    cat >&2 <<EOF
-Usage: $0 simgrid.jar java_command strip_command [file.so...]
-    java_command   path to the Java runtime
-    simgrid.jar    SimGrid jar file
-    file.so        library file to strip and bundle into the archive
-EOF
-    exit 1
-fi
-
-JAVA=$1
-shift
-SIMGRID_JAR=$1
-shift
-
-JSG_BUNDLE=$("$JAVA" -classpath "$SIMGRID_JAR" org.simgrid.NativeLib --quiet)
-
-# prepare directory
-rm -fr NATIVE
-mkdir -p "$JSG_BUNDLE"
-cp $* "$JSG_BUNDLE"
-