diff --git a/CMakeLists.txt b/CMakeLists.txt index c7f64784ee..51e5ae9e6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -274,6 +274,9 @@ OCV_OPTION(ANDROID_EXAMPLES_WITH_LIBS "Build binaries of Android examples with n OCV_OPTION(ENABLE_IMPL_COLLECTION "Collect implementation data on function call" OFF ) OCV_OPTION(GENERATE_ABI_DESCRIPTOR "Generate XML file for abi_compliance_checker tool" OFF IF UNIX) +OCV_OPTION(DOWNLOAD_EXTERNAL_TEST_DATA "Download external test data (Python executable and OPENCV_TEST_DATA_PATH environment variable may be required)" OFF ) + + if(ENABLE_IMPL_COLLECTION) add_definitions(-DCV_COLLECT_IMPL_DATA) endif() diff --git a/cmake/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake index 71001d9c6c..3bff766930 100644 --- a/cmake/OpenCVFindIPP.cmake +++ b/cmake/OpenCVFindIPP.cmake @@ -146,12 +146,14 @@ macro(ipp_detect_version) IMPORTED_LOCATION ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX} ) list(APPEND IPP_LIBRARIES ipp${name}) - # CMake doesn't support "install(TARGETS ${IPP_PREFIX}${name} " command with imported targets - install(FILES ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev) - string(TOUPPER ${name} uname) - set(IPP${uname}_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_3P_LIB_INSTALL_PATH}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) - set(IPP${uname}_LOCATION_PATH "${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) + if (NOT BUILD_SHARED_LIBS OR NOT INSTALL_CREATE_DISTRIB) + # CMake doesn't support "install(TARGETS ${IPP_PREFIX}${name} " command with imported targets + install(FILES ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX} + DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev) + string(TOUPPER ${name} uname) + set(IPP${uname}_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_3P_LIB_INSTALL_PATH}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) + set(IPP${uname}_LOCATION_PATH "${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) + endif() endif() else() message(STATUS "Can't find IPP library: ${name} at ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}") diff --git a/cmake/OpenCVGenConfig.cmake b/cmake/OpenCVGenConfig.cmake index ae8fc89399..dbfd7ca4a7 100644 --- a/cmake/OpenCVGenConfig.cmake +++ b/cmake/OpenCVGenConfig.cmake @@ -83,7 +83,7 @@ endif() export(TARGETS ${OpenCVModules_TARGETS} FILE "${CMAKE_BINARY_DIR}/OpenCVModules${modules_file_suffix}.cmake") -if(TARGET ippicv) +if(TARGET ippicv AND (NOT BUILD_SHARED_LIBS OR NOT INSTALL_CREATE_DISTRIB)) set(USE_IPPICV TRUE) file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV ${CMAKE_BINARY_DIR} ${IPPICV_LOCATION_PATH}) else() @@ -133,11 +133,7 @@ if(WIN32) exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"" OUTPUT_VARIABLE RET_VAL) if(USE_IPPICV) - if(BUILD_SHARED_LIBS) - file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OpenCV_INSTALL_BINARIES_PREFIX}lib" ${IPPICV_INSTALL_PATH}) - else() - file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" ${IPPICV_INSTALL_PATH}) - endif() + file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" ${IPPICV_INSTALL_PATH}) endif() configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" @ONLY) configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig-version.cmake" @ONLY) diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index 92894b8b81..d6cdd0402c 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -305,9 +305,10 @@ macro(ocv_glob_modules) set(OPENCV_INITIAL_PASS OFF PARENT_SCOPE) set(OPENCV_INITIAL_PASS OFF) if(${BUILD_opencv_world}) - add_subdirectory("${OPENCV_MODULE_opencv_world_LOCATION}" "${CMAKE_CURRENT_BINARY_DIR}/world") foreach(m ${OPENCV_MODULES_BUILD}) - if(NOT OPENCV_MODULE_${m}_IS_PART_OF_WORLD AND NOT ${m} STREQUAL opencv_world) + if("${m}" STREQUAL opencv_world) + add_subdirectory("${OPENCV_MODULE_opencv_world_LOCATION}" "${CMAKE_CURRENT_BINARY_DIR}/world") + elseif(NOT OPENCV_MODULE_${m}_IS_PART_OF_WORLD AND NOT ${m} STREQUAL opencv_world) message(STATUS "Processing module ${m}...") if(m MATCHES "^opencv_") string(REGEX REPLACE "^opencv_" "" __shortname "${m}") @@ -446,6 +447,17 @@ function(__ocv_resolve_dependencies) list(APPEND deps_${m} ${d}) set(has_changes ON) endif() + if(BUILD_opencv_world + AND NOT "${m}" STREQUAL "opencv_world" + AND NOT "${m2}" STREQUAL "opencv_world" + AND OPENCV_MODULE_${m2}_IS_PART_OF_WORLD + AND NOT OPENCV_MODULE_${m}_IS_PART_OF_WORLD) + if(NOT (";${deps_${m}};" MATCHES ";opencv_world;")) +# message(STATUS " Transfer dependency opencv_world alias ${m2} to ${m}") + list(APPEND deps_${m} opencv_world) + set(has_changes ON) + endif() + endif() endforeach() endif() endforeach() @@ -777,11 +789,20 @@ macro(_ocv_create_module) set_source_files_properties(${OPENCV_MODULE_${the_module}_HEADERS} ${OPENCV_MODULE_${the_module}_SOURCES} ${${the_module}_pch} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};Module") - ocv_target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}) - ocv_target_link_libraries(${the_module} LINK_INTERFACE_LIBRARIES ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}) - ocv_target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN}) - if (HAVE_CUDA) - ocv_target_link_libraries(${the_module} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) + if(NOT BUILD_SHARED_LIBS OR NOT INSTALL_CREATE_DISTRIB) + ocv_target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}) + ocv_target_link_libraries(${the_module} LINK_INTERFACE_LIBRARIES ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}) + ocv_target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN}) + if (HAVE_CUDA) + ocv_target_link_libraries(${the_module} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) + endif() + else() + ocv_target_link_libraries(${the_module} LINK_PRIVATE ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}) + ocv_target_link_libraries(${the_module} LINK_PRIVATE ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}) + ocv_target_link_libraries(${the_module} LINK_PRIVATE ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN}) + if (HAVE_CUDA) + ocv_target_link_libraries(${the_module} LINK_PRIVATE ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) + endif() endif() add_dependencies(opencv_modules ${the_module}) @@ -825,12 +846,14 @@ macro(_ocv_create_module) set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:libc /DEBUG") endif() - ocv_install_target(${the_module} EXPORT OpenCVModules OPTIONAL - RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs - LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT libs NAMELINK_SKIP - ARCHIVE DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT dev - ) get_target_property(_target_type ${the_module} TYPE) + if("${_target_type}" STREQUAL "SHARED_LIBRARY" OR (NOT BUILD_SHARED_LIBS OR NOT INSTALL_CREATE_DISTRIB)) + ocv_install_target(${the_module} EXPORT OpenCVModules OPTIONAL + RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs + LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT libs NAMELINK_SKIP + ARCHIVE DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT dev + ) + endif() if("${_target_type}" STREQUAL "SHARED_LIBRARY") install(TARGETS ${the_module} LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT dev NAMELINK_ONLY) diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index 550237a552..2e2782b3a5 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -824,12 +824,18 @@ macro(ocv_get_all_libs _modules _extra _3rdparty) list(FIND ${_extra} "ippicv" ippicv_idx) if (${ippicv_idx} GREATER -1) list(REMOVE_ITEM ${_extra} "ippicv") - list(INSERT ${_3rdparty} 0 "ippicv") + if(NOT BUILD_SHARED_LIBS) + list(INSERT ${_3rdparty} 0 "ippicv") + endif() endif() # split 3rdparty libs and modules list(REMOVE_ITEM ${_modules} ${${_3rdparty}} ${${_extra}} non_empty_list) + ocv_list_filterout(${_modules} "^[\$]<") + ocv_list_filterout(${_3rdparty} "^[\$]<") + ocv_list_filterout(${_extra} "^[\$]<") + # convert CMake lists to makefile literals foreach(lst ${_modules} ${_3rdparty} ${_extra}) ocv_list_unique(${lst}) diff --git a/cmake/templates/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in index ee57ecda63..80ffbaf015 100644 --- a/cmake/templates/OpenCVConfig.cmake.in +++ b/cmake/templates/OpenCVConfig.cmake.in @@ -159,6 +159,7 @@ SET(OpenCV_VERSION_STATUS "@OPENCV_VERSION_STATUS@") # ==================================================================== SET(OpenCV_LIB_COMPONENTS @OPENCV_MODULES_CONFIGCMAKE@) +list(REMOVE_ITEM OpenCV_LIB_COMPONENTS opencv_hal) SET(OpenCV_WORLD_COMPONENTS @OPENCV_WORLD_MODULES@) # ============================================================== diff --git a/modules/core/src/dxt.cpp b/modules/core/src/dxt.cpp index 5576a347a5..691b297467 100644 --- a/modules/core/src/dxt.cpp +++ b/modules/core/src/dxt.cpp @@ -2215,7 +2215,7 @@ class PlanCache clAmdFftDim dim = dft_size.height == 1 || dft_rows ? CLFFT_1D : CLFFT_2D; size_t batchSize = dft_rows ? dft_size.height : 1; - size_t clLengthsIn[3] = { dft_size.width, dft_rows ? 1 : dft_size.height, 1 }; + size_t clLengthsIn[3] = { (size_t)dft_size.width, dft_rows ? 1 : (size_t)dft_size.height, 1 }; size_t clStridesIn[3] = { 1, 1, 1 }; size_t clStridesOut[3] = { 1, 1, 1 }; int elemSize = doubleFP ? sizeof(double) : sizeof(float); diff --git a/modules/ts/CMakeLists.txt b/modules/ts/CMakeLists.txt index 2732924b74..8d625f8d00 100644 --- a/modules/ts/CMakeLists.txt +++ b/modules/ts/CMakeLists.txt @@ -1,6 +1,6 @@ set(the_description "The ts module") -if(IOS) +if(NOT BUILD_opencv_ts AND NOT BUILD_TESTS AND NOT BUILD_PERF_TESTS) ocv_module_disable(ts) endif() diff --git a/samples/cpp/CMakeLists.txt b/samples/cpp/CMakeLists.txt index ff5caa9fa8..b7de23e9ab 100644 --- a/samples/cpp/CMakeLists.txt +++ b/samples/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ SET(OPENCV_CPP_SAMPLES_REQUIRED_DEPS opencv_core opencv_imgproc opencv_flann opencv_imgcodecs opencv_videoio opencv_highgui opencv_ml opencv_video opencv_objdetect opencv_photo opencv_features2d opencv_calib3d - opencv_stitching opencv_videostab opencv_shape) + opencv_stitching opencv_videostab opencv_shape ${OPENCV_MODULES_BUILD} ${OpenCV_LIB_COMPONENTS}) ocv_check_dependencies(${OPENCV_CPP_SAMPLES_REQUIRED_DEPS}) @@ -30,14 +30,6 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/cudafilters/include") endif() - if (HAVE_opencv_xfeatures2d) - ocv_include_directories("${OPENCV_MODULE_opencv_xfeatures2d_LOCATION}/include") - endif() - - if(HAVE_opencv_ocl) - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/ocl/include") - endif() - if(CMAKE_COMPILER_IS_GNUCXX AND NOT ENABLE_NOISY_WARNINGS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") endif() diff --git a/samples/opencl/opencl-opencv-interop.cpp b/samples/opencl/opencl-opencv-interop.cpp index 5d5d52e02b..4f96280cb2 100644 --- a/samples/opencl/opencl-opencv-interop.cpp +++ b/samples/opencl/opencl-opencv-interop.cpp @@ -770,7 +770,7 @@ int App::process_frame_with_open_cl(cv::Mat& frame, bool use_buffer, cl_mem* mem return -1; size_t origin[] = { 0, 0, 0 }; - size_t region[] = { frame.cols, frame.rows, 1 }; + size_t region[] = { (size_t)frame.cols, (size_t)frame.rows, 1 }; res = clEnqueueCopyImage(m_queue, m_img_src, mem, origin, origin, region, 0, 0, &m_event); if (CL_SUCCESS != res) return -1; @@ -796,7 +796,7 @@ int App::process_frame_with_open_cl(cv::Mat& frame, bool use_buffer, cl_mem* mem return -1; // process left half of frame in OpenCL - size_t size[] = { frame.cols / 2, frame.rows }; + size_t size[] = { (size_t)frame.cols / 2, (size_t)frame.rows }; res = clEnqueueNDRangeKernel(m_queue, kernel, 2, 0, size, 0, 0, 0, &m_event); if (CL_SUCCESS != res) return -1;