|
1 | 1 | # ---------------------------------------------------------------------------- |
2 | 2 | # CMake file for java support |
3 | 3 | # ---------------------------------------------------------------------------- |
4 | | -if(NOT ANDROID OR NOT PYTHON_EXECUTABLE OR ANDROID_NATIVE_API_LEVEL LESS 8) |
| 4 | +if(IOS OR NOT PYTHON_EXECUTABLE OR NOT (JNI_FOUND OR (ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7))) |
5 | 5 | ocv_module_disable(java) |
6 | 6 | endif() |
7 | 7 |
|
| 8 | +if(NOT ANDROID) |
| 9 | + # disable java by default because java support on desktop is experimental |
| 10 | + set(BUILD_opencv_java_INIT OFF) |
| 11 | +endif() |
| 12 | + |
8 | 13 | set(the_description "The java bindings") |
9 | 14 | ocv_add_module(java BINDINGS opencv_core opencv_imgproc OPTIONAL opencv_objdetect opencv_features2d opencv_video opencv_highgui opencv_ml opencv_calib3d opencv_photo opencv_nonfree opencv_contrib) |
10 | 15 | ocv_module_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/generator/src/cpp") |
11 | 16 |
|
| 17 | +if(NOT ANDROID) |
| 18 | + include_directories(${JNI_INCLUDE_DIRS}) |
| 19 | +endif() |
| 20 | + |
12 | 21 | # get list of modules to wrap |
13 | 22 | string(REPLACE "opencv_" "" OPENCV_JAVA_MODULES "${OPENCV_MODULE_${the_module}_REQ_DEPS};${OPENCV_MODULE_${the_module}_OPT_DEPS}") |
14 | 23 | foreach(module ${OPENCV_JAVA_MODULES}) |
@@ -123,7 +132,12 @@ set(JNI_INSTALL_ROOT "sdk/native") |
123 | 132 |
|
124 | 133 | # copy each documented header to the final destination |
125 | 134 | set(java_files "") |
126 | | -foreach(java_file ${documented_java_files} ${handwrittren_aidl_sources}) |
| 135 | +set(source_java_files ${documented_java_files} ${handwrittren_aidl_sources}) |
| 136 | +if(NOT ANDROID) |
| 137 | + ocv_list_filterout(source_java_files "/(engine|android)\\\\+") |
| 138 | +endif() |
| 139 | + |
| 140 | +foreach(java_file ${source_java_files}) |
127 | 141 | get_filename_component(java_file_name "${java_file}" NAME) |
128 | 142 | string(REPLACE "-jdoc.java" ".java" java_file_name "${java_file_name}") |
129 | 143 | string(REPLACE "+" "/" java_file_name "${java_file_name}") |
@@ -175,6 +189,7 @@ set_target_properties(${the_module} PROPERTIES |
175 | 189 |
|
176 | 190 | install(TARGETS ${the_module} LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT main) |
177 | 191 |
|
| 192 | +set(lib_target ${the_module}_library) |
178 | 193 | if(ANDROID) |
179 | 194 | target_link_libraries(${the_module} jnigraphics) # for Mat <=> Bitmap converters |
180 | 195 |
|
@@ -223,8 +238,6 @@ if(ANDROID) |
223 | 238 |
|
224 | 239 | # create Android library project in build folder |
225 | 240 | if(ANDROID_EXECUTABLE) |
226 | | - set(lib_target ${the_module}_android_library) |
227 | | - |
228 | 241 | set(lib_target_files ${ANDROID_LIB_PROJECT_FILES}) |
229 | 242 | ocv_list_add_prefix(lib_target_files "${OpenCV_BINARY_DIR}/") |
230 | 243 |
|
@@ -263,12 +276,26 @@ if(ANDROID) |
263 | 276 | endif() |
264 | 277 |
|
265 | 278 | add_custom_target(${lib_target} SOURCES ${lib_proj_files} ${lib_target_files} "${OpenCV_BINARY_DIR}/${ANDROID_MANIFEST_FILE}") |
266 | | - |
267 | | - add_dependencies(${lib_target} ${api_target}) |
268 | | - add_dependencies(${the_module} ${lib_target}) |
269 | 279 | endif() |
| 280 | +else(ANDROID) |
| 281 | + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/jar/build.xml" "${OpenCV_BINARY_DIR}/build.xml" IMMEDIATE @ONLY) |
| 282 | + set(JAR_NAME opencv-${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}.jar) |
| 283 | + |
| 284 | + add_custom_command( |
| 285 | + OUTPUT "${OpenCV_BINARY_DIR}/bin/${JAR_NAME}" "${OpenCV_BINARY_DIR}/bin/.${JAR_NAME}.dephelper" |
| 286 | + COMMAND ${ANT_EXECUTABLE} -q -noinput -k jar |
| 287 | + COMMAND ${CMAKE_COMMAND} -E touch "${OpenCV_BINARY_DIR}/bin/.${JAR_NAME}.dephelper" |
| 288 | + WORKING_DIRECTORY "${OpenCV_BINARY_DIR}" |
| 289 | + DEPENDS "${OpenCV_BINARY_DIR}/build.xml" ${java_files} |
| 290 | + COMMENT "Generating ${JAR_NAME}" |
| 291 | + ) |
| 292 | + |
| 293 | + add_custom_target(${lib_target} SOURCES "${OpenCV_BINARY_DIR}/bin/${JAR_NAME}") |
270 | 294 | endif(ANDROID) |
271 | 295 |
|
| 296 | +add_dependencies(${lib_target} ${api_target}) |
| 297 | +add_dependencies(${the_module} ${lib_target}) |
| 298 | + |
272 | 299 | #android test project |
273 | 300 | if(ANDROID AND BUILD_TESTS) |
274 | 301 | add_subdirectory(android_test) |
|
0 commit comments