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.
public static void main(String[] args) {
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());
tools/cmake/scripts/Makefile.default
tools/cmake/scripts/SimGrid.packproj
tools/cmake/scripts/generate_memcheck_tests.pl
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
tools/cmake/scripts/my_valgrind.pl
tools/cmake/scripts/postinstall.sh
tools/cmake/scripts/preinstall.sh
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(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
set(LIBSIMGRID_SO
libsimgrid${CMAKE_SHARED_LIBRARY_SUFFIX})
set(LIBSIMGRID_JAVA_SO
add_jar(simgrid-java_pre_jar ${JMSG_JAVA_SRC} OUTPUT_NAME simgrid)
endif()
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
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
${CMAKE_HOME_DIRECTORY}/COPYING
${CMAKE_HOME_DIRECTORY}/ChangeLog
${CMAKE_HOME_DIRECTORY}/ChangeLog.SimGrid-java
COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} ${SIMGRID_JAR}
COMMAND ${CMAKE_COMMAND} -E copy ${SIMGRID_JAR} ${SIMGRID_FULL_JAR}
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 ${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
)
COMMAND ${CMAKE_COMMAND} -E remove ${SIMGRID_JAR}_finalized
COMMAND ${CMAKE_COMMAND} -E touch ${SIMGRID_JAR}_finalized
)
+++ /dev/null
-#!/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"
-