Browse Source

Replaced subversion command line tool detection logic as the previous one did not work for cross-compiling cases for Android and Raspberry-Pi. More deterministic Android shared library loading, dependent shared libraries shall be loaded first before the target application shared library.

Wei Tjong Yao 12 years ago
parent
commit
1799bc5896

+ 10 - 1
Source/Android/src/org/libsdl/app/SDLActivity.java

@@ -3,6 +3,8 @@
 package org.libsdl.app;
 
 import java.io.File;
+import java.util.Arrays;
+import java.util.Comparator;
 
 import javax.microedition.khronos.egl.EGL10;
 import javax.microedition.khronos.egl.EGLConfig;
@@ -72,7 +74,14 @@ public class SDLActivity extends Activity {
         String libraryPath = getApplicationInfo().dataDir + "/lib";
         //Log.v(TAG, "library path: " + libraryPath);
         if (!mIsSharedLibraryLoaded) {
-            for (final File libraryFilename : new File(libraryPath).listFiles()) {
+            File[] files = new File(libraryPath).listFiles();
+            Arrays.sort(files, new Comparator<File>() {
+                @Override
+                public int compare(File lhs, File rhs) {
+                    return Long.valueOf(lhs.lastModified()).compareTo(rhs.lastModified());
+                }
+            });
+            for (final File libraryFilename : files) {
                 String name = libraryFilename.getName().replaceAll("^lib(.*)\\.so$", "$1");
                 //Log.v(TAG, "library name: " + name);
                 System.loadLibrary(name);

+ 9 - 7
Source/CMake/Modules/Urho3D-CMake-magic.cmake

@@ -393,22 +393,24 @@ macro (setup_main_executable)
         # Setup target as main shared library
         set (LIB_TYPE SHARED)
         setup_library ()
-        # Copy target main shared library to Android library output path
-        file (MAKE_DIRECTORY ${ANDROID_LIBRARY_OUTPUT_PATH})
-        add_custom_command (TARGET ${TARGET_NAME} POST_BUILD
-            COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${TARGET_NAME}>
-            COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different $<TARGET_FILE:${TARGET_NAME}> ${ANDROID_LIBRARY_OUTPUT_PATH}
-            COMMENT "Stripping and copying lib${TARGET_NAME}.so to target library directory")
-        # Also copy other dependent shared libraries to Android library output path
+        # Copy other dependent shared libraries to Android library output path
         foreach(FILE ${ABSOLUTE_PATH_LIBS})
             get_filename_component (EXT ${FILE} EXT)
             if (EXT STREQUAL .so)
                 get_filename_component (NAME ${FILE} NAME)
                 add_custom_command (TARGET ${TARGET_NAME} POST_BUILD
                     COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${FILE} ${ANDROID_LIBRARY_OUTPUT_PATH}
+                    COMMAND ${CMAKE_COMMAND} ARGS -E touch ${ANDROID_LIBRARY_OUTPUT_PATH}/${NAME}
                     COMMENT "Copying ${NAME} to target library directory")
             endif ()
         endforeach ()
+        # Copy target main shared library to Android library output path
+        file (MAKE_DIRECTORY ${ANDROID_LIBRARY_OUTPUT_PATH})
+        add_custom_command (TARGET ${TARGET_NAME} POST_BUILD
+            COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${TARGET_NAME}>
+            COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different $<TARGET_FILE:${TARGET_NAME}> ${ANDROID_LIBRARY_OUTPUT_PATH}
+            COMMAND ${CMAKE_COMMAND} ARGS -E touch ${ANDROID_LIBRARY_OUTPUT_PATH}/lib${TARGET_NAME}.so
+            COMMENT "Stripping and copying lib${TARGET_NAME}.so to target library directory")
     else ()
         if (WIN32)
             set (EXE_TYPE WIN32)

+ 5 - 2
Source/Engine/CMakeLists.txt

@@ -27,8 +27,8 @@ if (URHO3D_BUILD_TYPE STREQUAL SHARED)
 endif ()
 
 # Define generated source files
-FIND_PACKAGE(Subversion)
-If (SUBVERSION_FOUND)
+find_program (SVNVERSION_EXECUTABLE svnversion NO_CMAKE_FIND_ROOT_PATH)
+if (SVNVERSION_EXECUTABLE)
     if (WIN32)
         add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/svnversion.h
             COMMAND for /F %%v in ('svnversion -n ${PROJECT_SOURCE_DIR}') do echo const char* revision="%%v"\; >${CMAKE_CURRENT_BINARY_DIR}/svnversion.h DEPENDS ${STATIC_LIBRARY_TARGETS}
@@ -115,6 +115,9 @@ endif ()
 
 # Setup target
 setup_library ()
+if (NOT SVNVERSION_EXECUTABLE)
+    add_dependencies (${TARGET_NAME} ${STATIC_LIBRARY_TARGETS})
+endif ()
 
 # Setup the frameworks for Mac OS X platform
 if (APPLE AND LIB_TYPE STREQUAL SHARED)