123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- set(the_description "High-level GUI")
- if(ANDROID)
- ocv_add_module(highgui opencv_imgproc opencv_imgcodecs OPTIONAL opencv_videoio WRAP python)
- else()
- ocv_add_module(highgui opencv_imgproc opencv_imgcodecs OPTIONAL opencv_videoio WRAP python java)
- endif()
- include(${CMAKE_CURRENT_LIST_DIR}/cmake/plugin.cmake)
- set(tgts "PRIVATE")
- set(highgui_hdrs
- ${CMAKE_CURRENT_LIST_DIR}/src/precomp.hpp
- )
- set(highgui_srcs
- ${CMAKE_CURRENT_LIST_DIR}/src/backend.cpp
- ${CMAKE_CURRENT_LIST_DIR}/src/window.cpp
- ${CMAKE_CURRENT_LIST_DIR}/src/roiSelector.cpp
- )
- # ----------------------------------------------------------------------------
- # CMake file for highgui. See root CMakeLists.txt
- # Some parts taken from version of Hartmut Seichter, HIT Lab NZ.
- # Jose Luis Blanco, 2008
- # ----------------------------------------------------------------------------
- if(DEFINED WINRT AND NOT DEFINED ENABLE_WINRT_MODE_NATIVE)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW")
- endif()
- if(APPLE)
- ocv_include_directories(${ZLIB_INCLUDE_DIRS})
- list(APPEND HIGHGUI_LIBRARIES ${ZLIB_LIBRARIES})
- endif()
- if(HAVE_WEBP)
- add_definitions(-DHAVE_WEBP)
- endif()
- file(GLOB highgui_ext_hdrs
- "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/*.hpp"
- "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.hpp"
- "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.h")
- # Removing WinRT API headers by default
- list(REMOVE_ITEM highgui_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/highgui_winrt.hpp")
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "")
- if(HAVE_QT)
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "QT${QT_VERSION_MAJOR}")
- add_definitions(-DHAVE_QT)
- if(QT_VERSION_MAJOR GREATER 4)
- # "Automoc" doesn't work properly with opencv_world build, use QT<ver>_WRAP_CPP() directly
- #set(CMAKE_AUTOMOC ON)
- set(CMAKE_INCLUDE_CURRENT_DIR ON)
- if(QT_VERSION_MAJOR EQUAL 6)
- add_definitions(-DHAVE_QT6) # QGLWidget deprecated for QT6, use this preprocessor to adjust window_QT.[h,cpp]
- QT6_ADD_RESOURCES(_RCC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.qrc)
- QT6_WRAP_CPP(_MOC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.h)
- elseif(QT_VERSION_MAJOR EQUAL 5)
- QT5_ADD_RESOURCES(_RCC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.qrc)
- QT5_WRAP_CPP(_MOC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.h)
- else()
- message(FATAL_ERROR "Unsupported QT version: ${QT_VERSION_MAJOR}")
- endif()
- list(APPEND highgui_srcs
- ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.cpp
- ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.h
- ${_MOC_OUTFILES}
- ${_RCC_OUTFILES})
- set(qt_deps Core Gui Widgets Test Concurrent)
- if(HAVE_QT_OPENGL)
- add_definitions(-DHAVE_QT_OPENGL)
- # QOpenGLWidget requires Qt6 package component OpenGLWidgets
- if(QT_VERSION_MAJOR GREATER 5)
- list(APPEND qt_deps OpenGLWidgets)
- endif()
- list(APPEND qt_deps OpenGL)
- if(OPENGL_LIBRARIES)
- list(APPEND HIGHGUI_LIBRARIES "${OPENGL_LIBRARIES}")
- endif()
- endif()
- foreach(dt_dep ${qt_deps})
- add_definitions(${Qt${QT_VERSION_MAJOR}${dt_dep}_DEFINITIONS})
- include_directories(${Qt${QT_VERSION_MAJOR}${dt_dep}_INCLUDE_DIRS})
- list(APPEND HIGHGUI_LIBRARIES ${Qt${QT_VERSION_MAJOR}${dt_dep}_LIBRARIES})
- endforeach()
- else()
- ocv_assert(QT_VERSION_MAJOR EQUAL 4)
- if(HAVE_QT_OPENGL)
- set(QT_USE_QTOPENGL TRUE)
- if(OPENGL_LIBRARIES)
- list(APPEND HIGHGUI_LIBRARIES "${OPENGL_LIBRARIES}")
- endif()
- endif()
- include(${QT_USE_FILE})
- QT4_ADD_RESOURCES(_RCC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.qrc)
- QT4_WRAP_CPP(_MOC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.h)
- list(APPEND HIGHGUI_LIBRARIES ${QT_LIBRARIES})
- list(APPEND highgui_srcs ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.cpp ${_MOC_OUTFILES} ${_RCC_OUTFILES})
- ocv_check_flag_support(CXX -Wno-missing-declarations _have_flag "")
- if(${_have_flag})
- set_source_files_properties(${_RCC_OUTFILES} PROPERTIES COMPILE_FLAGS -Wno-missing-declarations)
- endif()
- endif()
- elseif(WINRT)
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "WINRT")
- if(NOT WINRT_8_0)
- # Dependencies used by the implementation referenced
- # below are not available on WinRT 8.0.
- # Enabling it for WiRT 8.1+ only.
- # WinRT 8.1+ detected. Adding WinRT API header.
- message(STATUS " ${name}: WinRT detected. Adding WinRT API header")
- list(APPEND highgui_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/highgui_winrt.hpp")
- list(APPEND highgui_srcs
- ${CMAKE_CURRENT_LIST_DIR}/src/window_winrt.cpp
- ${CMAKE_CURRENT_LIST_DIR}/src/window_winrt_bridge.cpp)
- list(APPEND highgui_hdrs
- ${CMAKE_CURRENT_LIST_DIR}/src/window_winrt_bridge.hpp)
- endif()
- # libraries below are neither available nor required
- # on ARM devices and/or Windows Phone
- if(WINRT_PHONE OR (OpenCV_ARCH STREQUAL "ARM"))
- list(REMOVE_ITEM HIGHGUI_LIBRARIES "comctl32" "gdi32" "ole32" "setupapi")
- if(WINRT_PHONE)
- message(STATUS " ${name}: Windows Phone detected")
- elseif(OpenCV_ARCH STREQUAL "ARM")
- message(STATUS " ${name}: ARM detected")
- if(WINRT_STORE)
- list(REMOVE_ITEM HIGHGUI_LIBRARIES "ws2_32")
- message(STATUS " ${name}: Removing 'ws2_32.lib'")
- endif()
- endif()
- message(STATUS " ${name}: Removing 'comctl32.lib, gdi32.lib, ole32.lib, setupapi.lib'")
- message(STATUS " ${name}: Leaving '${HIGHGUI_LIBRARIES}'")
- endif()
- elseif(HAVE_COCOA)
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "COCOA")
- add_definitions(-DHAVE_COCOA)
- list(APPEND highgui_srcs ${CMAKE_CURRENT_LIST_DIR}/src/window_cocoa.mm)
- list(APPEND HIGHGUI_LIBRARIES "-framework Cocoa")
- endif()
- if(TARGET ocv.3rdparty.win32ui)
- if("win32ui" IN_LIST HIGHGUI_PLUGIN_LIST OR HIGHGUI_PLUGIN_LIST STREQUAL "all")
- ocv_create_builtin_highgui_plugin(opencv_highgui_win32 ocv.3rdparty.win32ui "window_w32.cpp")
- elseif(NOT OPENCV_HIGHGUI_BUILTIN_BACKEND)
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "WIN32UI")
- list(APPEND highgui_srcs ${CMAKE_CURRENT_LIST_DIR}/src/window_w32.cpp)
- list(APPEND tgts ocv.3rdparty.win32ui)
- if(HAVE_OPENGL AND OPENGL_LIBRARIES)
- list(APPEND tgts "${OPENGL_LIBRARIES}")
- endif()
- endif()
- endif()
- if(TARGET ocv.3rdparty.gtk3 OR TARGET ocv.3rdparty.gtk2)
- if(TARGET ocv.3rdparty.gtk3 AND NOT WITH_GTK_2_X)
- set(__gtk_dependency "ocv.3rdparty.gtk3")
- else()
- set(__gtk_dependency "ocv.3rdparty.gtk2")
- endif()
- if(
- NOT HIGHGUI_PLUGIN_LIST STREQUAL "all"
- AND NOT "gtk" IN_LIST HIGHGUI_PLUGIN_LIST
- AND NOT "gtk2" IN_LIST HIGHGUI_PLUGIN_LIST
- AND NOT "gtk3" IN_LIST HIGHGUI_PLUGIN_LIST
- AND NOT OPENCV_HIGHGUI_BUILTIN_BACKEND
- )
- if(__gtk_dependency STREQUAL "ocv.3rdparty.gtk3")
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "GTK3")
- elseif(__gtk_dependency STREQUAL "ocv.3rdparty.gtk2")
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "GTK2")
- else()
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "GTK")
- endif()
- list(APPEND highgui_srcs ${CMAKE_CURRENT_LIST_DIR}/src/window_gtk.cpp)
- list(APPEND tgts ${__gtk_dependency})
- if(TARGET ocv.3rdparty.gthread)
- list(APPEND tgts ocv.3rdparty.gthread)
- endif()
- if(TARGET ocv.3rdparty.gtkglext
- AND __gtk_dependency STREQUAL "ocv.3rdparty.gtk2"
- AND NOT OPENCV_GTK_DISABLE_GTKGLEXT
- )
- list(APPEND tgts ocv.3rdparty.gtkglext)
- if(TARGET ocv.3rdparty.gtk_opengl
- AND __gtk_dependency STREQUAL "ocv.3rdparty.gtk2"
- AND NOT OPENCV_GTK_DISABLE_OPENGL
- )
- list(APPEND tgts ocv.3rdparty.gtk_opengl)
- endif()
- endif()
- elseif("gtk" IN_LIST HIGHGUI_PLUGIN_LIST)
- ocv_create_builtin_highgui_plugin(opencv_highgui_gtk ${__gtk_dependency} "window_gtk.cpp")
- if(TARGET ocv.3rdparty.gthread)
- ocv_target_link_libraries(opencv_highgui_gtk ocv.3rdparty.gthread)
- endif()
- if(TARGET ocv.3rdparty.gtkglext)
- ocv_target_link_libraries(opencv_highgui_gtk ocv.3rdparty.gtkglext)
- endif()
- else()
- if(TARGET ocv.3rdparty.gtk3 AND ("gtk3" IN_LIST HIGHGUI_PLUGIN_LIST OR HIGHGUI_PLUGIN_LIST STREQUAL "all"))
- ocv_create_builtin_highgui_plugin(opencv_highgui_gtk3 ocv.3rdparty.gtk3 "window_gtk.cpp")
- if(TARGET ocv.3rdparty.gthread)
- ocv_target_link_libraries(opencv_highgui_gtk3 ocv.3rdparty.gthread)
- endif()
- if(TARGET ocv.3rdparty.gtkglext)
- ocv_target_link_libraries(opencv_highgui_gtk3 ocv.3rdparty.gtkglext)
- endif()
- endif()
- if(TARGET ocv.3rdparty.gtk2 AND ("gtk2" IN_LIST HIGHGUI_PLUGIN_LIST OR HIGHGUI_PLUGIN_LIST STREQUAL "all"))
- ocv_create_builtin_highgui_plugin(opencv_highgui_gtk2 ocv.3rdparty.gtk2 "window_gtk.cpp")
- if(TARGET ocv.3rdparty.gthread)
- ocv_target_link_libraries(opencv_highgui_gtk2 ocv.3rdparty.gthread)
- endif()
- if(TARGET ocv.3rdparty.gtkglext)
- ocv_target_link_libraries(opencv_highgui_gtk2 ocv.3rdparty.gtkglext)
- endif()
- endif()
- endif()
- endif()
- if(NOT OPENCV_HIGHGUI_BUILTIN_BACKEND)
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "NONE")
- endif()
- message(STATUS "highgui: using builtin backend: ${OPENCV_HIGHGUI_BUILTIN_BACKEND}")
- set(OPENCV_HIGHGUI_BUILTIN_BACKEND "${OPENCV_HIGHGUI_BUILTIN_BACKEND}" PARENT_SCOPE) # informational
- if(TRUE)
- # these variables are set by 'ocv_append_build_options(HIGHGUI ...)'
- foreach(P ${HIGHGUI_INCLUDE_DIRS})
- ocv_include_directories(${P})
- endforeach()
- foreach(P ${HIGHGUI_LIBRARY_DIRS})
- link_directories(${P})
- endforeach()
- endif()
- if(tgts STREQUAL "PRIVATE")
- set(tgts "")
- endif()
- # install used dependencies only
- if(NOT BUILD_SHARED_LIBS
- AND NOT (CMAKE_VERSION VERSION_LESS "3.13.0") # upgrade CMake: https://gitlab.kitware.com/cmake/cmake/-/merge_requests/2152
- )
- foreach(tgt in ${tgts})
- if(tgt MATCHES "^ocv\.3rdparty\.")
- install(TARGETS ${tgt} EXPORT OpenCVModules)
- endif()
- endforeach()
- endif()
- source_group("Src" FILES ${highgui_srcs} ${highgui_hdrs})
- source_group("Include" FILES ${highgui_ext_hdrs})
- ocv_set_module_sources(HEADERS ${highgui_ext_hdrs} SOURCES ${highgui_srcs} ${highgui_hdrs})
- ocv_module_include_directories()
- ocv_create_module(${HIGHGUI_LIBRARIES})
- macro(ocv_highgui_configure_target)
- if(APPLE)
- add_apple_compiler_options(${the_module})
- endif()
- if(MSVC AND NOT BUILD_SHARED_LIBS AND BUILD_WITH_STATIC_CRT)
- set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /NODEFAULTLIB:libcmt.lib /DEBUG")
- endif()
- ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated-declarations)
- endmacro()
- if(NOT BUILD_opencv_world)
- ocv_highgui_configure_target()
- endif()
- ocv_add_accuracy_tests(${tgts})
- #ocv_add_perf_tests(${tgts})
- if(HIGHGUI_ENABLE_PLUGINS)
- ocv_target_compile_definitions(${the_module} PRIVATE ENABLE_PLUGINS)
- if(TARGET opencv_test_highgui)
- ocv_target_compile_definitions(opencv_test_highgui PRIVATE ENABLE_PLUGINS)
- endif()
- endif()
- ocv_target_link_libraries(${the_module} LINK_PRIVATE ${tgts})
- # generate module configuration
- set(CONFIG_STR "// Auto-generated file
- #define OPENCV_HIGHGUI_BUILTIN_BACKEND_STR \"${OPENCV_HIGHGUI_BUILTIN_BACKEND}\"
- ")
- if(OPENCV_HIGHGUI_BUILTIN_BACKEND STREQUAL "NONE")
- set(CONFIG_STR "${CONFIG_STR}
- #define OPENCV_HIGHGUI_WITHOUT_BUILTIN_BACKEND 1
- ")
- endif()
- ocv_update_file("${CMAKE_CURRENT_BINARY_DIR}/opencv_highgui_config.hpp" "${CONFIG_STR}")
|