-
- COMMAND echo cp ${JAVALIBS} ${JAVA_NATIVE_PATH} # Just display what's going on
- # So, first of all, I'm sorry for the next few lines. Here is what's going on.
- # I need to copy some files, depending on the environment.
- # I cannot use several POST_BUILD commands because cmake does
- # force them to run sequentially, so it fails if we build with -j
- # So I add some content to the JAVALIBS cmake variable, and copy them in one shoot.
- # But cmake list variables are ; separated, not space separated.
- # So I string(REPLACE a bit above to change ; into spaces.
- # But if I do so, cmake still passes the space-separated list as a single argument to cp.
- # So I have to fire a sh -c, just to correctly parse the cp parameters.
- # Yup. That's the ways it goes. cmake is so lovely, that's wonderful.
- COMMAND ${SHEXE} -c "cp ${JAVALIBS} ${JAVA_NATIVE_PATH}" # cp is less portable, but cmake cannot copy several files at once
-
- ## strip seems to fail on Mac on binaries that are already stripped.
- ## It then spits: "symbols referenced by indirect symbol table entries that can't be stripped"
- #COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_SO} || true
- #COMMAND ${STRIP_COMMAND} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_JAVA_SO} || true
+
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_SO}
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_JAVA_SO} ${JAVA_NATIVE_PATH}/${LIBSIMGRID_JAVA_SO}
+ )
+
+if(WIN32)
+ add_custom_command(
+ TARGET simgrid-java_jar POST_BUILD
+ COMMENT "Add the windows-specific native libs into simgrid.jar..."
+ DEPENDS simgrid simgrid-java ${JAVALIBS}
+
+ # There is no way to disable the dependency of mingw-64 on that lib, unfortunately nor to script cmake -E properly
+ # So let's be brutal and copy it in any case (even on non-windows builds) from the location where appveyor provides it.
+ # The copy is only expected to work on the appveyor builder, but that's all we need right now
+ # since our users are directed to download that file as nightly build.
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different C:/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/libwinpthread-1.dll ${JAVA_NATIVE_PATH}/libwinpthread-1.dll || true
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different C:/ProgramData/chocolatey/lib/mingw/tools/install/mingw64/bin/libwinpthread-1.dll ${JAVA_NATIVE_PATH}/libwinpthread-1.dll || true
+ )
+endif()
+
+if(APPLE)
+ add_custom_command(
+ TARGET simgrid-java_jar POST_BUILD
+ COMMENT "Add the apple-specific native libs into simgrid.jar..."
+ DEPENDS simgrid simgrid-java ${JAVALIBS}
+
+ # We need to fix the rpath of the simgrid-java library so that it
+ # searches the simgrid library in the right location
+ #
+ # Since we don't officially install the lib before copying it in
+ # the jarfile, the lib is searched for where it was built. Given
+ # how we unpack it, we need to instruct simgrid-java to forget
+ # about the build path, and search in its current directory
+ # instead.
+ #
+ # This has to be done with the classical Apple tools, as follows:
+
+ COMMAND install_name_tool -change ${CMAKE_BINARY_DIR}/lib/libsimgrid.${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}${CMAKE_SHARED_LIBRARY_SUFFIX} @loader_path/libsimgrid.dylib ${JAVA_NATIVE_PATH}/${LIBSIMGRID_JAVA_SO}
+ )
+endif(APPLE)
+
+ add_custom_command(
+ TARGET simgrid-java_jar POST_BUILD
+ COMMENT "Packing back the simgrid.jar with the native libs (turn lib_in_jar off when coding in java)..."
+ DEPENDS simgrid simgrid-java ${JAVALIBS}