cmake: fix android examples dependencies
authorAlexander Alekhin <alexander.alekhin@intel.com>
Thu, 15 Mar 2018 11:17:02 +0000 (14:17 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Thu, 15 Mar 2018 11:17:02 +0000 (14:17 +0300)
add_dependencies(${target}) doesn't control regeneration of .apk file,
because "${target}" is dummy target.

cmake/OpenCVDetectAndroidSDK.cmake
cmake/copy_files.cmake

index e0bbd28..fb11714 100644 (file)
@@ -302,18 +302,6 @@ macro(add_android_project target path)
     else()
       list(APPEND android_proj_extra_deps opencv_java_android)
     endif()
-    add_custom_command(
-        OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk"
-        COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug -Djava.target=1.6 -Djava.source=1.6
-        COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk
-        WORKING_DIRECTORY "${android_proj_bin_dir}"
-        DEPENDS ${android_proj_extra_deps} ${android_proj_file_deps} ${JNI_LIB_NAME}
-        COMMENT "Generating ${target}-debug.apk"
-    )
-
-    unset(JNI_LIB_NAME)
-
-    add_custom_target(${target} ALL SOURCES "${android_proj_bin_dir}/bin/${target}-debug.apk" )
 
     set(_native_deps "")
     if(NOT android_proj_IGNORE_JAVA)
@@ -323,7 +311,7 @@ macro(add_android_project target path)
       list(APPEND _native_deps ${android_proj_native_deps})
     endif()
     if(_native_deps)
-      add_dependencies(${target} ${_native_deps})
+      list(APPEND android_proj_extra_deps ${_native_deps})
     endif()
 
     if((android_proj_COPY_LIBS OR ANDROID_EXAMPLES_WITH_LIBS) AND _native_deps)
@@ -332,9 +320,22 @@ macro(add_android_project target path)
       ocv_copyfiles_append_dir(NATIVE_COPY "${OpenCV_BINARY_DIR}/lib" "${android_proj_bin_dir}/libs" "${OpenCV_BINARY_DIR}/lib/*.so")
       ocv_copyfiles_add_target(${target}_copy_libs NATIVE_COPY "Copy native libs for project: ${target}" ${_native_deps})
 
-      add_dependencies(${target} ${target}_copy_libs)
+      list(APPEND android_proj_extra_deps ${target}_copy_libs)
     endif()
 
+    add_custom_command(
+        OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk"
+        COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug -Djava.target=1.6 -Djava.source=1.6
+        COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk
+        WORKING_DIRECTORY "${android_proj_bin_dir}"
+        DEPENDS ${android_proj_extra_deps} ${android_proj_file_deps} ${JNI_LIB_NAME}
+        COMMENT "Generating ${target}-debug.apk"
+    )
+
+    unset(JNI_LIB_NAME)
+
+    add_custom_target(${target} ALL SOURCES "${android_proj_bin_dir}/bin/${target}-debug.apk" )
+
     # There is some strange problem with concurrent Android .APK builds:
     # <android-sdk>/tools/ant/build.xml:781: Problem reading <build_dir>/bin/classes.jar'
     if(__android_project_chain)
index 2613eee..423f7ff 100644 (file)
@@ -25,7 +25,7 @@ macro(copy_file_ src dst prefix)
     endif()
     get_filename_component(target_path "${dst}" PATH)
     file(MAKE_DIRECTORY "${target_path}")
-    execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${src} ${dst}
+    execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${src}" "${dst}"
         RESULT_VARIABLE SYMLINK_RESULT)
     if(NOT SYMLINK_RESULT EQUAL 0)
       #message("Symlink failed, fallback to 'copy'")