From 654abdc5eb438e83e23bac86384dbe364060c630 Mon Sep 17 00:00:00 2001 From: Sam Edwards Date: Sat, 5 Jan 2019 13:53:55 -0700 Subject: [PATCH] CMake: Detect when to set OPENCV_VER_23/OPENCV_VER_3 --- cmake/modules/FindOpenCV.cmake | 39 ++++++++++++++++++++++----------- dtool/Package.cmake | 9 +++++++- dtool/dtool_config.h.in | 1 - panda/src/vision/CMakeLists.txt | 6 +++++ 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/cmake/modules/FindOpenCV.cmake b/cmake/modules/FindOpenCV.cmake index fcb6e1b49b..77d49edfbe 100644 --- a/cmake/modules/FindOpenCV.cmake +++ b/cmake/modules/FindOpenCV.cmake @@ -21,6 +21,7 @@ # stitching # superres # video +# videoio # videostab # # Once done this will define: @@ -30,33 +31,44 @@ # component # OpenCV_LIBS - the paths to the OpenCV libraries for the requested # component(s) +# OpenCV_VERSION_MAJOR- a "best guess" of the major version (X.x) +# OpenCV_VERSION_MINOR- a "best guess" of the minor version (x.X) # set(OpenCV_INCLUDE_DIRS) -if(NOT OpenCV_V1_INCLUDE_DIR) - find_path(OpenCV_V1_INCLUDE_DIR - NAMES "cv.h" - PATH_SUFFIXES "opencv") - mark_as_advanced(OpenCV_V1_INCLUDE_DIR) -endif() +find_path(OpenCV_V1_INCLUDE_DIR + NAMES "cv.h" + PATH_SUFFIXES "opencv") +mark_as_advanced(OpenCV_V1_INCLUDE_DIR) if(OpenCV_V1_INCLUDE_DIR) list(APPEND OpenCV_INCLUDE_DIRS "${OpenCV_V1_INCLUDE_DIR}") + + # This is a wild guess: + set(OpenCV_VERSION_MAJOR 1) + set(OpenCV_VERSION_MINOR 0) endif() -if(NOT OpenCV_V2_INCLUDE_DIR) - find_path(OpenCV_V2_INCLUDE_DIR "opencv2/core/core.hpp") - - mark_as_advanced(OpenCV_V2_INCLUDE_DIR) -endif() +find_path(OpenCV_V2_INCLUDE_DIR "opencv2/core/version.hpp") +mark_as_advanced(OpenCV_V2_INCLUDE_DIR) if(OpenCV_V2_INCLUDE_DIR) list(APPEND OpenCV_INCLUDE_DIRS "${OpenCV_V2_INCLUDE_DIR}") + + file(STRINGS "${OpenCV_V2_INCLUDE_DIR}/opencv2/core/version.hpp" + _version_major REGEX "#define CV_VERSION_EPOCH") + file(STRINGS "${OpenCV_V2_INCLUDE_DIR}/opencv2/core/version.hpp" + _version_minor REGEX "#define CV_VERSION_MAJOR") + + string(REGEX REPLACE "[^0-9]" "" OpenCV_VERSION_MAJOR "${_version_major}") + string(REGEX REPLACE "[^0-9]" "" OpenCV_VERSION_MINOR "${_version_minor}") + unset(_version_major) + unset(_version_minor) endif() set(OpenCV_LIBS) foreach(_component calib3d contrib core features2d flann gpu highgui imgproc legacy ml nonfree objdetect photo stitching superres video - videostab) + videoio videostab) list(FIND OpenCV_FIND_COMPONENTS "${_component}" _index) if(_index GREATER -1 OR _component STREQUAL "core") @@ -76,4 +88,5 @@ unset(_component) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(OpenCV HANDLE_COMPONENTS - REQUIRED_VARS OpenCV_INCLUDE_DIRS OpenCV_LIBS) + REQUIRED_VARS OpenCV_INCLUDE_DIRS OpenCV_LIBS + OpenCV_VERSION_MAJOR OpenCV_VERSION_MINOR) diff --git a/dtool/Package.cmake b/dtool/Package.cmake index c30402aa6b..39a80cb080 100644 --- a/dtool/Package.cmake +++ b/dtool/Package.cmake @@ -474,7 +474,7 @@ package_status(EGL "EGL") # # OpenCV -find_package(OpenCV QUIET COMPONENTS core highgui) +find_package(OpenCV QUIET COMPONENTS core highgui OPTIONAL_COMPONENTS videoio) package_option(OPENCV "Enable support for OpenCV. This will be built into the 'vision' package." @@ -482,6 +482,13 @@ package_option(OPENCV package_status(OPENCV "OpenCV") +if(OpenCV_VERSION_MAJOR GREATER_EQUAL 3) + set(OPENCV_VER_3 ON) +elseif(OpenCV_VERSION_MAJOR GREATER_EQUAL 2 AND + OpenCV_VERSION_MINOR GREATER_EQUAL 3) + set(OPENCV_VER_23 ON) +endif() + # ARToolKit find_package(ARToolKit QUIET) diff --git a/dtool/dtool_config.h.in b/dtool/dtool_config.h.in index 5a20f9666c..59950c5480 100644 --- a/dtool/dtool_config.h.in +++ b/dtool/dtool_config.h.in @@ -108,7 +108,6 @@ /* Define if we have OpenCV installed and want to build for OpenCV. */ #cmakedefine HAVE_OPENCV -#cmakedefine OPENCV_VER_23 /* Define if we have FFMPEG installed and want to build for FFMPEG. */ #cmakedefine HAVE_FFMPEG diff --git a/panda/src/vision/CMakeLists.txt b/panda/src/vision/CMakeLists.txt index a581ef3076..f1497fcf6e 100644 --- a/panda/src/vision/CMakeLists.txt +++ b/panda/src/vision/CMakeLists.txt @@ -33,6 +33,12 @@ target_link_libraries(p3vision panda set_target_properties(p3vision PROPERTIES CXX_EXCEPTIONS ON) target_interrogate(p3vision ALL) +if(OPENCV_VER_3) + set_target_properties(p3vision PROPERTIES COMPILE_DEFINITIONS "OPENCV_VER_3") +elseif(OPENCV_VER_23) + set_target_properties(p3vision PROPERTIES COMPILE_DEFINITIONS "OPENCV_VER_23") +endif() + install(TARGETS p3vision EXPORT Vision COMPONENT Vision DESTINATION lib