CMakeLists.txt 18.3 KB
Newer Older
wester committed
1 2 3
# ----------------------------------------------------------------------------
#  CMake file for java support
# ----------------------------------------------------------------------------
wester committed
4
if(IOS OR NOT PYTHON_EXECUTABLE OR NOT ANT_EXECUTABLE OR NOT (JNI_FOUND OR (ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7)))
wester committed
5 6 7
  ocv_module_disable(java)
endif()

a  
Kai Westerkamp committed
8
set(the_description "The java bindings")
wester committed
9
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)
wester committed
10 11 12 13 14 15 16 17 18 19 20
ocv_module_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/generator/src/cpp")

if(NOT ANDROID)
  include_directories(${JNI_INCLUDE_DIRS})
endif()

# output locations
set(JAVA_INSTALL_ROOT "sdk/java")
set(JNI_INSTALL_ROOT  "sdk/native")

# get list of modules to wrap
wester committed
21 22 23 24
string(REPLACE "opencv_" "" OPENCV_JAVA_MODULES "${OPENCV_MODULE_${the_module}_REQ_DEPS};${OPENCV_MODULE_${the_module}_OPT_DEPS}")
foreach(module ${OPENCV_JAVA_MODULES})
  if(NOT HAVE_opencv_${module})
    list(REMOVE_ITEM OPENCV_JAVA_MODULES ${module})
wester committed
25 26 27 28 29 30 31 32
  endif()
endforeach()

######################################################################################################################################

# scripts
set(scripts_gen_java "${CMAKE_CURRENT_SOURCE_DIR}/generator/gen_java.py")
set(scripts_hdr_parser "${CMAKE_CURRENT_SOURCE_DIR}/../python/src2/hdr_parser.py")
wester committed
33 34
set(scripts_gen_javadoc "${CMAKE_CURRENT_SOURCE_DIR}/generator/gen_javadoc.py")
set(scripts_rst_parser "${CMAKE_CURRENT_SOURCE_DIR}/generator/rst_parser.py")
wester committed
35 36

# handwritten C/C++ and Java sources
wester committed
37 38 39 40 41 42 43 44 45 46 47 48 49
file(GLOB handwrittren_h_sources "${CMAKE_CURRENT_SOURCE_DIR}/generator/src/cpp/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/generator/src/cpp/*.hpp")
file(GLOB handwrittren_cpp_sources "${CMAKE_CURRENT_SOURCE_DIR}/generator/src/cpp/*.cpp")
file(GLOB handwrittren_java_sources "${CMAKE_CURRENT_SOURCE_DIR}/generator/src/java/*.java")
file(GLOB handwrittren_aidl_sources  "${CMAKE_CURRENT_SOURCE_DIR}/generator/src/java/*.aidl")
if(NOT ANDROID)
  ocv_list_filterout(handwrittren_java_sources "/(engine|android)\\\\+")
  ocv_list_filterout(handwrittren_aidl_sources "/(engine|android)\\\\+")
  ocv_list_filterout(handwrittren_java_sources "VideoCapture")
  ocv_list_filterout(handwrittren_cpp_sources "VideoCapture")
else()
  file(GLOB_RECURSE handwrittren_lib_project_files_rel RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/android_lib/" "${CMAKE_CURRENT_SOURCE_DIR}/android_lib/*")
  list(REMOVE_ITEM handwrittren_lib_project_files_rel "${ANDROID_MANIFEST_FILE}")
endif()
wester committed
50 51 52 53

# headers of OpenCV modules
set(opencv_public_headers "")
foreach(module ${OPENCV_JAVA_MODULES})
wester committed
54 55 56
  # get list of module headers
  if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/generator/config/${module}.filelist")
    file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/generator/config/${module}.filelist" module_headers)
wester committed
57 58
    ocv_list_add_prefix(module_headers "${OPENCV_MODULE_opencv_${module}_LOCATION}/")
  else()
a  
Kai Westerkamp committed
59
    set(module_headers "${OPENCV_MODULE_opencv_${module}_HEADERS}")
wester committed
60
  endif()
wester committed
61 62 63 64 65 66 67 68 69
  if(module_headers)
    # C headers must go first
    set(module_headers_cpp ${module_headers})
    ocv_list_filterout(module_headers_cpp "\\\\.h$")
    if(module_headers_cpp)
      list(REMOVE_ITEM module_headers ${module_headers_cpp})
      list(APPEND module_headers ${module_headers_cpp})
    endif()
    unset(module_headers_cpp)
wester committed
70

wester committed
71 72 73 74
    set(opencv_public_headers_${module} ${module_headers})
    list(APPEND opencv_public_headers ${module_headers})
  else()
    list(REMOVE_ITEM OPENCV_JAVA_MODULES ${module})
wester committed
75
  endif()
wester committed
76
endforeach()
wester committed
77

wester committed
78 79 80 81 82 83
# rst documentation used for javadoc generation
set(javadoc_rst_sources "")
foreach(module ${OPENCV_JAVA_MODULES})
  file(GLOB_RECURSE refman_rst_headers "${OPENCV_MODULE_opencv_${module}_LOCATION}/*.rst")
  list(APPEND javadoc_rst_sources ${refman_rst_headers})
endforeach()
wester committed
84

wester committed
85 86 87
# generated cpp files
set(generated_cpp_sources "")
foreach(module ${OPENCV_JAVA_MODULES})
a  
Kai Westerkamp committed
88
  list(APPEND generated_cpp_sources "${CMAKE_CURRENT_BINARY_DIR}/${module}.cpp")
wester committed
89
endforeach()
wester committed
90

wester committed
91 92 93 94 95 96 97
# IMPORTANT: add dependencies to cmake (we should rerun cmake if any of these files is modified)
configure_file("${scripts_gen_java}"   "${OpenCV_BINARY_DIR}/junk/gen_java.junk" COPYONLY)
configure_file("${scripts_hdr_parser}" "${OpenCV_BINARY_DIR}/junk/hdr_parser.junk" COPYONLY)
foreach(header ${opencv_public_headers})
  get_filename_component(header_name "${header}" NAME)
  configure_file("${header}" "${OpenCV_BINARY_DIR}/junk/${header_name}.junk" COPYONLY)
endforeach()
wester committed
98

wester committed
99 100 101
# generated java files
set(generated_java_sources "")
foreach(module ${OPENCV_JAVA_MODULES})
wester committed
102
  # first run of gen_java.py (to get list of generated files)
wester committed
103 104 105 106 107 108 109 110 111
  file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/gen_java_out/")
  file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gen_java_out")
  if (ANDROID)
    execute_process(COMMAND ${PYTHON_EXECUTABLE} "${scripts_gen_java}" "${scripts_hdr_parser}" "-android" ${module} ${opencv_public_headers_${module}}
                  WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gen_java_out"
                  OUTPUT_QUIET ERROR_QUIET)
  else()
    execute_process(COMMAND ${PYTHON_EXECUTABLE} "${scripts_gen_java}" "${scripts_hdr_parser}" ${module} ${opencv_public_headers_${module}}
                  WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gen_java_out"
wester committed
112
                  OUTPUT_QUIET ERROR_QUIET)
wester committed
113 114 115
  endif()
  unset(generated_java_sources_${module})
  file(GLOB_RECURSE generated_java_sources_${module} RELATIVE "${CMAKE_CURRENT_BINARY_DIR}/gen_java_out/" "${CMAKE_CURRENT_BINARY_DIR}/gen_java_out/*.java")
a  
Kai Westerkamp committed
116
  ocv_list_add_prefix(generated_java_sources_${module} "${CMAKE_CURRENT_BINARY_DIR}/")
wester committed
117

wester committed
118 119 120
  list(APPEND generated_java_sources ${generated_java_sources_${module}})
endforeach()

wester committed
121 122 123 124 125 126
# generated java files with javadoc
set(documented_java_files "")
foreach(java_file ${generated_java_sources} ${handwrittren_java_sources})
  get_filename_component(java_file_name "${java_file}" NAME_WE)
  list(APPEND documented_java_files "${CMAKE_CURRENT_BINARY_DIR}/${java_file_name}-jdoc.java")
endforeach()
wester committed
127 128 129 130

######################################################################################################################################

# step 1: generate .cpp/.java from OpenCV headers
a  
Kai Westerkamp committed
131
set(step1_depends "${scripts_gen_java}" "${scripts_hdr_parser}" ${opencv_public_headers})
wester committed
132 133
foreach(module ${OPENCV_JAVA_MODULES})
  # second run of gen_java.py (at build time)
wester committed
134 135 136 137 138 139 140 141 142
  if (ANDROID)
    add_custom_command(OUTPUT ${generated_java_sources_${module}} "${CMAKE_CURRENT_BINARY_DIR}/${module}.cpp"
                     COMMAND ${PYTHON_EXECUTABLE} "${scripts_gen_java}" "${scripts_hdr_parser}" "-android" ${module} ${opencv_public_headers_${module}}
                     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                     DEPENDS "${scripts_gen_java}" "${scripts_hdr_parser}" ${opencv_public_headers_${module}}
                    )
  else()
    add_custom_command(OUTPUT ${generated_java_sources_${module}} "${CMAKE_CURRENT_BINARY_DIR}/${module}.cpp"
                     COMMAND ${PYTHON_EXECUTABLE} "${scripts_gen_java}" "${scripts_hdr_parser}" ${module} ${opencv_public_headers_${module}}
a  
Kai Westerkamp committed
143 144
                     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                     DEPENDS "${scripts_gen_java}" "${scripts_hdr_parser}" ${opencv_public_headers_${module}}
wester committed
145
                    )
wester committed
146
  endif()
wester committed
147 148
endforeach()

wester committed
149 150 151 152 153 154 155 156 157
# step 2: generate javadoc comments
set(step2_depends ${step1_depends} ${scripts_gen_javadoc} ${scripts_rst_parser} ${javadoc_rst_sources} ${generated_java_sources} ${handwrittren_java_sources})
string(REPLACE ";" "," OPENCV_JAVA_MODULES_STR "${OPENCV_JAVA_MODULES}")
add_custom_command(OUTPUT ${documented_java_files}
                   COMMAND ${PYTHON_EXECUTABLE} "${scripts_gen_javadoc}" --modules ${OPENCV_JAVA_MODULES_STR} "${CMAKE_CURRENT_SOURCE_DIR}/generator/src/java" "${CMAKE_CURRENT_BINARY_DIR}" 2> "${CMAKE_CURRENT_BINARY_DIR}/get_javadoc_errors.log"
                   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                   DEPENDS ${step2_depends}
                   VERBATIM
                  )
wester committed
158 159

# step 3: copy files to destination
wester committed
160
set(step3_input_files ${documented_java_files} ${handwrittren_aidl_sources})
wester committed
161 162 163 164
set(copied_files "")
foreach(java_file ${step3_input_files})
  get_filename_component(java_file_name "${java_file}" NAME)
  string(REPLACE "-jdoc.java" ".java" java_file_name "${java_file_name}")
a  
Kai Westerkamp committed
165 166
  string(REPLACE "+" "/" java_file_name "${java_file_name}")
  set(output_name "${OpenCV_BINARY_DIR}/src/org/opencv/${java_file_name}")
wester committed
167

a  
Kai Westerkamp committed
168
  add_custom_command(OUTPUT "${output_name}"
wester committed
169
                     COMMAND ${CMAKE_COMMAND} -E copy "${java_file}" "${output_name}"
a  
Kai Westerkamp committed
170
                     MAIN_DEPENDENCY "${java_file}"
wester committed
171
                     DEPENDS ${step2_depends}
a  
Kai Westerkamp committed
172 173 174
                     COMMENT "Generating src/org/opencv/${java_file_name}"
                    )
  list(APPEND copied_files "${output_name}")
wester committed
175 176

  if(ANDROID)
a  
Kai Westerkamp committed
177 178
    get_filename_component(install_subdir "${java_file_name}" PATH)
    install(FILES "${output_name}" DESTINATION "${JAVA_INSTALL_ROOT}/src/org/opencv/${install_subdir}" COMPONENT java)
wester committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
  endif()
endforeach()

if(ANDROID)
  set(android_copied_files "")
  set(android_step3_input_files "")
  foreach(file ${handwrittren_lib_project_files_rel})
    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/android_lib/${file}" "${OpenCV_BINARY_DIR}/${file}" @ONLY)
    list(APPEND android_copied_files "${OpenCV_BINARY_DIR}/${file}")
    list(APPEND android_step3_input_files "${CMAKE_CURRENT_SOURCE_DIR}/android_lib/${file}")

    if(NOT file MATCHES "jni/.+")
      get_filename_component(install_subdir "${file}" PATH)
      install(FILES "${OpenCV_BINARY_DIR}/${file}" DESTINATION "${JAVA_INSTALL_ROOT}/${install_subdir}" COMPONENT java)
    endif()
  endforeach()

  # library project jni sources (nothing really depends on them so we will not add them to step3_input_files)
wester committed
197
  foreach(jni_file ${handwrittren_cpp_sources} ${handwrittren_h_sources} ${generated_cpp_sources})
wester committed
198 199
    get_filename_component(jni_file_name "${jni_file}" NAME)
    add_custom_command(OUTPUT "${OpenCV_BINARY_DIR}/jni/${jni_file_name}"
wester committed
200
                       COMMAND ${CMAKE_COMMAND} -E copy "${jni_file}" "${OpenCV_BINARY_DIR}/jni/${jni_file_name}"
wester committed
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
                       DEPENDS "${jni_file}" ${java_hdr_deps}
                       COMMENT "Generating jni/${jni_file_name}"
                      )
    list(APPEND android_copied_files "${OpenCV_BINARY_DIR}/jni/${jni_file_name}")
  endforeach()
endif(ANDROID)

# step 3.5: generate Android library project
if(ANDROID AND ANDROID_EXECUTABLE)
  set(lib_target_files ${ANDROID_LIB_PROJECT_FILES})
  ocv_list_add_prefix(lib_target_files "${OpenCV_BINARY_DIR}/")

  android_get_compatible_target(lib_target_sdk_target ${ANDROID_NATIVE_API_LEVEL} ${ANDROID_SDK_TARGET} 14)
  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/android_lib/${ANDROID_MANIFEST_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${ANDROID_MANIFEST_FILE}" @ONLY)

  add_custom_command(OUTPUT ${lib_target_files} "${OpenCV_BINARY_DIR}/${ANDROID_MANIFEST_FILE}"
                     COMMAND ${CMAKE_COMMAND} -E remove ${lib_target_files}
wester committed
218
                     COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/${ANDROID_MANIFEST_FILE}" "${OpenCV_BINARY_DIR}/${ANDROID_MANIFEST_FILE}"
wester committed
219
                     COMMAND ${ANDROID_EXECUTABLE} --silent create lib-project --path \"${OpenCV_BINARY_DIR}\" --target \"${lib_target_sdk_target}\" --name OpenCV --package org.opencv 2>\"${CMAKE_CURRENT_BINARY_DIR}/create_lib_project.log\"
wester committed
220
                     COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/${ANDROID_MANIFEST_FILE}" "${OpenCV_BINARY_DIR}/${ANDROID_MANIFEST_FILE}"
wester committed
221 222 223 224 225 226 227 228 229 230
                     MAIN_DEPENDENCY "${CMAKE_CURRENT_BINARY_DIR}/${ANDROID_MANIFEST_FILE}"
                     DEPENDS ${android_step3_input_files} ${android_copied_files}
                     COMMENT "Generating OpenCV Android library project. SDK target: ${lib_target_sdk_target}"
                    )
  list(APPEND copied_files ${lib_target_files} "${OpenCV_BINARY_DIR}/${ANDROID_MANIFEST_FILE}")
  list(APPEND step3_input_files "${CMAKE_CURRENT_BINARY_DIR}/${ANDROID_MANIFEST_FILE}")

  install(FILES "${OpenCV_BINARY_DIR}/${ANDROID_PROJECT_PROPERTIES_FILE}" DESTINATION ${JAVA_INSTALL_ROOT} COMPONENT java)
  install(FILES "${OpenCV_BINARY_DIR}/${ANDROID_MANIFEST_FILE}" DESTINATION ${JAVA_INSTALL_ROOT} COMPONENT java)
  # creating empty 'gen' and 'res' folders
a  
Kai Westerkamp committed
231 232
  install(CODE "MAKE_DIRECTORY(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${JAVA_INSTALL_ROOT}/gen\")" COMPONENT java)
  install(CODE "MAKE_DIRECTORY(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${JAVA_INSTALL_ROOT}/res\")" COMPONENT java)
wester committed
233 234 235 236
endif(ANDROID AND ANDROID_EXECUTABLE)

set(step3_depends ${step2_depends} ${step3_input_files} ${copied_files})

a  
Kai Westerkamp committed
237
if(ANDROID)
wester committed
238
  set(LIB_NAME_SUFIX "")
a  
Kai Westerkamp committed
239 240 241 242
else()
  set(LIB_NAME_SUFIX "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
endif()

wester committed
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
# step 4: build jar
if(ANDROID)
  set(JAR_FILE "${OpenCV_BINARY_DIR}/bin/classes.jar")
  if(ANDROID_TOOLS_Pkg_Revision GREATER 13)
    # build the library project
    # normally we should do this after a native part, but for a library project we can build the java part first
    add_custom_command(OUTPUT "${JAR_FILE}" "${JAR_FILE}.dephelper"
                       COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug -Djava.target=1.6 -Djava.source=1.6
                       COMMAND ${CMAKE_COMMAND} -E touch "${JAR_FILE}.dephelper" # can not rely on classes.jar because different versions of SDK update timestamp at different times
                       WORKING_DIRECTORY "${OpenCV_BINARY_DIR}"
                       DEPENDS ${step3_depends}
                       COMMENT "Building OpenCV Android library project"
                      )
  else()
    # ditto
    add_custom_command(OUTPUT "${JAR_FILE}" "${JAR_FILE}.dephelper"
                       COMMAND ${CMAKE_COMMAND} -E touch "${JAR_FILE}"
                       COMMAND ${CMAKE_COMMAND} -E touch "${JAR_FILE}.dephelper"
                       WORKING_DIRECTORY "${OpenCV_BINARY_DIR}"
                       DEPENDS ${step3_depends}
                       COMMENT ""
                      )
  endif()
else(ANDROID)
  set(JAR_NAME opencv-${LIB_NAME_SUFIX}.jar)
  set(JAR_FILE "${OpenCV_BINARY_DIR}/bin/${JAR_NAME}")
  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml.in" "${OpenCV_BINARY_DIR}/build.xml" @ONLY)
  list(APPEND step3_depends "${OpenCV_BINARY_DIR}/build.xml")

  add_custom_command(OUTPUT "${JAR_FILE}" "${JAR_FILE}.dephelper"
a  
Kai Westerkamp committed
273
                     COMMAND ${ANT_EXECUTABLE} -q -noinput -k jar
wester committed
274 275 276 277 278 279
                     COMMAND ${CMAKE_COMMAND} -E touch "${JAR_FILE}.dephelper"
                     WORKING_DIRECTORY "${OpenCV_BINARY_DIR}"
                     DEPENDS ${step3_depends}
                     COMMENT "Generating ${JAR_NAME}"
                    )

wester committed
280 281 282 283 284 285
  if(WIN32)
    set(JAR_INSTALL_DIR java)
  else(WIN32)
    set(JAR_INSTALL_DIR share/OpenCV/java)
  endif(WIN32)
  install(FILES ${JAR_FILE} DESTINATION ${JAR_INSTALL_DIR} COMPONENT java)
wester committed
286 287 288
endif(ANDROID)

# step 5: build native part
wester committed
289
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wunused-const-variable -Woverloaded-virtual)
wester committed
290 291


wester committed
292
add_library(${the_module} SHARED ${handwrittren_h_sources} ${handwrittren_cpp_sources} ${generated_cpp_sources}
wester committed
293 294 295 296 297 298 299 300 301 302
                                 ${copied_files}
                                "${JAR_FILE}" "${JAR_FILE}.dephelper")
if(BUILD_FAT_JAVA_LIB)
  set(__deps ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_MODULES_BUILD})
  foreach(m ${OPENCV_MODULES_BUILD}) # filterout INTERNAL (like opencv_ts) and BINDINGS (like opencv_python) modules
    ocv_assert(DEFINED OPENCV_MODULE_${m}_CLASS)
    if(NOT OPENCV_MODULE_${m}_CLASS STREQUAL "PUBLIC")
      list(REMOVE_ITEM __deps ${m})
    endif()
  endforeach()
wester committed
303 304 305 306 307 308
  if (ENABLE_DYNAMIC_CUDA)
    list(REMOVE_ITEM __deps "opencv_dynamicuda")
  endif()
  if (ANDROID AND HAVE_opencv_gpu)
    list(REMOVE_ITEM __deps "opencv_gpu")
  endif()
wester committed
309 310 311 312 313 314 315 316
  ocv_list_unique(__deps)
  set(__extradeps ${__deps})
  ocv_list_filterout(__extradeps "^opencv_")
  if(__extradeps)
    list(REMOVE_ITEM __deps ${__extradeps})
  endif()
  if(APPLE)
    foreach(_dep ${__deps})
wester committed
317
      target_link_libraries(${the_module} -Wl,-force_load "${_dep}")
wester committed
318 319
    endforeach()
  else()
wester committed
320
    target_link_libraries(${the_module} -Wl,-whole-archive ${__deps} -Wl,-no-whole-archive)
wester committed
321
  endif()
wester committed
322
  target_link_libraries(${the_module} ${__extradeps} ${OPENCV_LINKER_LIBS})
wester committed
323
else()
wester committed
324
  target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS})
wester committed
325 326 327
endif()

if(ANDROID)
wester committed
328
  target_link_libraries(${the_module} jnigraphics) # for Mat <=> Bitmap converters
wester committed
329 330 331 332 333 334 335 336 337 338

  # force strip library after the build command
  # because samples and tests will make a copy of the library before install
  get_target_property(__opencv_java_location ${the_module} LOCATION)
  # Turn off stripping in debug build
  if ( NOT (CMAKE_BUILD_TYPE MATCHES "Debug"))
    add_custom_command(TARGET ${the_module} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${__opencv_java_location}")
  endif()
endif()

wester committed
339 340 341 342 343 344 345 346 347 348
# Additional target properties
set_target_properties(${the_module} PROPERTIES
    OUTPUT_NAME "${the_module}${LIB_NAME_SUFIX}"
    ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
    LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
    RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}
    INSTALL_NAME_DIR ${OPENCV_LIB_INSTALL_PATH}
    LINK_INTERFACE_LIBRARIES ""
    )

wester committed
349 350 351 352 353 354 355 356 357
if(WIN32)
  set_target_properties(${the_module} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
endif()

if(ENABLE_SOLUTION_FOLDERS)
  set_target_properties(${the_module} PROPERTIES FOLDER "bindings")
endif()

if(ANDROID)
wester committed
358
  ocv_install_target(${the_module} EXPORT OpenCVModules
wester committed
359 360 361 362
          LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT java
          ARCHIVE DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT java)
else()
  if(NOT INSTALL_CREATE_DISTRIB)
wester committed
363 364 365
    ocv_install_target(${the_module} EXPORT OpenCVModules
            RUNTIME DESTINATION ${JAR_INSTALL_DIR} COMPONENT java
            LIBRARY DESTINATION ${JAR_INSTALL_DIR} COMPONENT java)
wester committed
366
  else()
wester committed
367 368 369
    ocv_install_target(${the_module} EXPORT OpenCVModules
            RUNTIME DESTINATION ${JAR_INSTALL_DIR}/${OpenCV_ARCH} COMPONENT java
            LIBRARY DESTINATION ${JAR_INSTALL_DIR}/${OpenCV_ARCH} COMPONENT java)
wester committed
370 371 372 373 374 375 376 377 378
  endif()
endif()

######################################################################################################################################

if(BUILD_TESTS)
  if(ANDROID)
    add_subdirectory(android_test)
  else()
wester committed
379
    add_subdirectory(test)
wester committed
380 381
  endif()
endif()