From 36b34465a4314d3ec42489c3157523bd62d47d01 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Mon, 16 Jan 2017 18:12:38 +0300 Subject: [PATCH] cmake: include contrib modules into opencv_world --- CMakeLists.txt | 4 ++++ cmake/OpenCVGenABI.cmake | 10 ++++++---- cmake/OpenCVModule.cmake | 8 +++++--- cmake/OpenCVPCHSupport.cmake | 2 ++ cmake/OpenCVUtils.cmake | 9 ++++++++- modules/stitching/CMakeLists.txt | 2 +- modules/ts/misc/run_utils.py | 2 +- modules/viz/CMakeLists.txt | 8 +++++--- modules/world/CMakeLists.txt | 11 +++++++++-- 9 files changed, 41 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc45f6f394..c79ad2be6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,6 +76,10 @@ if(POLICY CMP0022) cmake_policy(SET CMP0022 OLD) endif() +if(POLICY CMP0023) + cmake_policy(SET CMP0023 NEW) +endif() + if(POLICY CMP0026) # silence cmake 3.0+ warnings about reading LOCATION attribute cmake_policy(SET CMP0026 OLD) diff --git a/cmake/OpenCVGenABI.cmake b/cmake/OpenCVGenABI.cmake index 86aa78b17b..e9d6a33481 100644 --- a/cmake/OpenCVGenABI.cmake +++ b/cmake/OpenCVGenABI.cmake @@ -33,10 +33,12 @@ foreach(mod ${OPENCV_MODULES_BUILD}) list(APPEND OPENCV_ABI_SKIP_HEADERS "${h}") endforeach() # libraries - set(lib_name "") - get_target_property(lib_name opencv_${mod} LOCATION) - get_filename_component(lib_name "${lib_name}" NAME) - list(APPEND OPENCV_ABI_SKIP_LIBRARIES "${lib_name}") + if(TARGET opencv_${mod}) # opencv_world + set(lib_name "") + get_target_property(lib_name opencv_${mod} LOCATION) + get_filename_component(lib_name "${lib_name}" NAME) + list(APPEND OPENCV_ABI_SKIP_LIBRARIES "${lib_name}") + endif() endif() endforeach() string(REPLACE ";" "\n " OPENCV_ABI_SKIP_HEADERS "${OPENCV_ABI_SKIP_HEADERS}") diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index ebeb25cf2b..a0e859232e 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -182,7 +182,7 @@ macro(ocv_add_module _name) # add self to the world dependencies if((NOT DEFINED OPENCV_MODULE_IS_PART_OF_WORLD AND NOT OPENCV_MODULE_${the_module}_CLASS STREQUAL "BINDINGS" - AND NOT OPENCV_PROCESSING_EXTRA_MODULES + AND (NOT OPENCV_PROCESSING_EXTRA_MODULES OR NOT OPENCV_WORLD_EXCLUDE_EXTRA_MODULES) AND (NOT BUILD_SHARED_LIBS OR NOT "x${OPENCV_MODULE_TYPE}" STREQUAL "xSTATIC")) OR OPENCV_MODULE_IS_PART_OF_WORLD ) @@ -724,8 +724,10 @@ endmacro() # ocv_create_module() # ocv_create_module() macro(ocv_create_module) - ocv_debug_message("ocv_create_module(" ${ARGN} ")") - set(OPENCV_MODULE_${the_module}_LINK_DEPS "${OPENCV_MODULE_${the_module}_LINK_DEPS};${ARGN}" CACHE INTERNAL "") + ocv_debug_message("${the_module}: ocv_create_module(" ${ARGN} ")") + if(NOT " ${ARGN}" STREQUAL " ") + set(OPENCV_MODULE_${the_module}_LINK_DEPS "${OPENCV_MODULE_${the_module}_LINK_DEPS};${ARGN}" CACHE INTERNAL "") + endif() if(${BUILD_opencv_world} AND OPENCV_MODULE_${the_module}_IS_PART_OF_WORLD) # nothing set(the_module_target opencv_world) diff --git a/cmake/OpenCVPCHSupport.cmake b/cmake/OpenCVPCHSupport.cmake index 90437cb204..29f21d8015 100644 --- a/cmake/OpenCVPCHSupport.cmake +++ b/cmake/OpenCVPCHSupport.cmake @@ -303,9 +303,11 @@ ENDMACRO(ADD_PRECOMPILED_HEADER) MACRO(GET_NATIVE_PRECOMPILED_HEADER _targetName _input) + if(ENABLE_PRECOMPILED_HEADERS) if(CMAKE_GENERATOR MATCHES "^Visual.*$") set(${_targetName}_pch ${CMAKE_CURRENT_BINARY_DIR}/${_targetName}_pch.cpp) endif() + endif() ENDMACRO(GET_NATIVE_PRECOMPILED_HEADER) diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index 7a0e448f77..474f7db609 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -887,7 +887,14 @@ function(ocv_target_link_libraries target) if(";${LINK_DEPS};" MATCHES ";${target};") list(REMOVE_ITEM LINK_DEPS "${target}") # prevent "link to itself" warning (world problem) endif() - target_link_libraries(${target} ${LINK_DEPS}) + if(NOT TARGET ${target}) + if(NOT DEFINED OPENCV_MODULE_${target}_LOCATION) + message(FATAL_ERROR "ocv_target_link_libraries: invalid target: '${target}'") + endif() + set(OPENCV_MODULE_${target}_LINK_DEPS ${OPENCV_MODULE_${target}_LINK_DEPS} ${LINK_DEPS} CACHE INTERNAL "" FORCE) + else() + target_link_libraries(${target} ${LINK_DEPS}) + endif() endfunction() function(_ocv_append_target_includes target) diff --git a/modules/stitching/CMakeLists.txt b/modules/stitching/CMakeLists.txt index 76c7bc8489..0e4f39a99d 100644 --- a/modules/stitching/CMakeLists.txt +++ b/modules/stitching/CMakeLists.txt @@ -5,7 +5,7 @@ if(HAVE_CUDA) endif() set(STITCHING_CONTRIB_DEPS "opencv_xfeatures2d") -if(BUILD_SHARED_LIBS AND BUILD_opencv_world) +if(BUILD_SHARED_LIBS AND BUILD_opencv_world AND OPENCV_WORLD_EXCLUDE_EXTRA_MODULES) set(STITCHING_CONTRIB_DEPS "") endif() ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect diff --git a/modules/ts/misc/run_utils.py b/modules/ts/misc/run_utils.py index 8740aa7855..2e9a66f8bd 100644 --- a/modules/ts/misc/run_utils.py +++ b/modules/ts/misc/run_utils.py @@ -193,7 +193,7 @@ class CMakeCache: self.tests_dir = os.path.normpath(path) def read(self, path, fname): - rx = re.compile(r'^opencv_(\w+)_SOURCE_DIR:STATIC=(.*)$') + rx = re.compile(r'^OPENCV_MODULE_opencv_(\w+)_LOCATION:INTERNAL=(.*)$') module_paths = {} # name -> path with open(fname, "rt") as cachefile: for l in cachefile.readlines(): diff --git a/modules/viz/CMakeLists.txt b/modules/viz/CMakeLists.txt index 9fd0301635..a22f52fd87 100644 --- a/modules/viz/CMakeLists.txt +++ b/modules/viz/CMakeLists.txt @@ -2,12 +2,14 @@ if(NOT WITH_VTK OR NOT DEFINED HAVE_VTK OR NOT HAVE_VTK) ocv_module_disable(viz) endif() -include(${VTK_USE_FILE}) set(the_description "Viz") -ocv_define_module(viz opencv_core ${VTK_LIBRARIES} WRAP python) +ocv_define_module(viz opencv_core WRAP python) + +include(${VTK_USE_FILE}) +ocv_target_link_libraries(${the_module} ${VTK_LIBRARIES}) if(APPLE AND BUILD_opencv_viz) - ocv_target_link_libraries(opencv_viz "-framework Cocoa") + ocv_target_link_libraries(${the_module} "-framework Cocoa") endif() if(TARGET opencv_test_viz) diff --git a/modules/world/CMakeLists.txt b/modules/world/CMakeLists.txt index 1a77245df2..dde793fa00 100644 --- a/modules/world/CMakeLists.txt +++ b/modules/world/CMakeLists.txt @@ -11,6 +11,11 @@ endif() function(include_one_module m) include("${OPENCV_MODULE_${m}_LOCATION}/CMakeLists.txt") + foreach(var + CMAKE_CXX_FLAGS CMAKE_C_FLAGS # Propagate warnings settings + ) + set(${var} "${${var}}" PARENT_SCOPE) + endforeach() endfunction() if(NOT OPENCV_INITIAL_PASS) @@ -35,12 +40,14 @@ ocv_add_module(world opencv_core) set(headers_list "HEADERS") set(sources_list "SOURCES") set(link_deps "") -foreach(m ${OPENCV_MODULE_${the_module}_DEPS}) +foreach(m ${OPENCV_MODULE_${the_module}_DEPS} opencv_world) if(OPENCV_MODULE_${m}_IS_PART_OF_WORLD) set(headers_list "${headers_list};${OPENCV_MODULE_${m}_HEADERS}") set(sources_list "${sources_list};${OPENCV_MODULE_${m}_SOURCES}") endif() - set(link_deps "${link_deps};${OPENCV_MODULE_${m}_LINK_DEPS}") + if(NOT " ${OPENCV_MODULE_${m}_LINK_DEPS}" STREQUAL " ") + list(APPEND link_deps ${OPENCV_MODULE_${m}_LINK_DEPS}) + endif() endforeach() ocv_glob_module_sources(${headers_list} ${sources_list})