Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cp is called cp.exe on windows...
[simgrid.git] / tools / cmake / Java.cmake
index 2cb9ce3..6d1e43f 100644 (file)
@@ -127,6 +127,12 @@ if(enable_lib_in_jar)
     set(JAVA_NATIVE_PATH NATIVE/${SG_SYSTEM_NAME}/arm) # Default arm (soft-float ABI)
   endif()
 
+  # Find how to copy
+  set(CPEXE cp)
+  if(WIN32)
+    set(CPEXE cp.exe)
+  endif()
+
   # Find what to copy
   set(JAVALIBS ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO} ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_JAVA_SO})
   if (HAVE_BOOST_CONTEXT)
@@ -135,10 +141,14 @@ if(enable_lib_in_jar)
   if(MINGW)
     find_library(WINPTHREAD_DLL
       NAME winpthread winpthread-1
-      PATHS C:\\MinGW C:\\MinGW64 C:\\MinGW\\bin C:\\MinGW64\\bin C:\\msys64\\mingw64\\bin C:\\msys64\\mingw64 C:\\msys\\mingw64\\bin C:\\msys\\mingw64
+      PATHS C:\\MinGW C:\\MinGW64 C:\\MinGW\\bin C:\\MinGW64\\bin C:\\msys64\\mingw32\\bin C:\\msys64\\mingw32 C:\\msys\\mingw32\\bin C:\\msys\\mingw32 C:\\msys64\\mingw64\\bin C:\\msys64\\mingw64 C:\\msys\\mingw64\\bin C:\\msys\\mingw64
     )
-    set(JAVALIBS ${JAVALIBS} ${WINPTHREAD_DLL})
+    if(${WINPTHREAD_DLL})
+      set(JAVALIBS ${JAVALIBS} ${WINPTHREAD_DLL})
+    endif()
   endif(MINGW)
+  string(REPLACE ";" " " JAVALIBS "${JAVALIBS}")
+  message("-- [Java] Native Libs: ${JAVALIBS}")
 
   add_custom_command(
     TARGET simgrid-java_jar POST_BUILD
@@ -147,7 +157,19 @@ if(enable_lib_in_jar)
          
     COMMAND ${CMAKE_COMMAND} -E remove_directory ${JAVA_NATIVE_PATH}
     COMMAND ${CMAKE_COMMAND} -E make_directory   ${JAVA_NATIVE_PATH}
-    COMMAND cp ${JAVALIBS} ${JAVA_NATIVE_PATH} # cp is less portable, but cmake cannot copy several files at once
+    
+    COMMAND echo ${CPEXE} ${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 sh -c "${CPEXE} ${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"