1 if (EXISTS "${CURRENT_INSTALLED_DIR}/share/opencv2")
2 message(FATAL_ERROR "OpenCV 2 is installed, please uninstall and try again:\n vcpkg remove opencv2")
5 if (EXISTS "${CURRENT_INSTALLED_DIR}/share/opencv4")
6 message(FATAL_ERROR "OpenCV 4 is installed, please uninstall and try again:\n vcpkg remove opencv4")
9 set(OPENCV_VERSION "3.4.13")
12 OUT_SOURCE_PATH SOURCE_PATH
15 SHA512 ec87b10534b9187c5ac2eea498c05c73bceab08afaed93b5a117ed34d1eeeb0ffc45901642bebf8f55126fd49ec78d731fc61debe6b40d8642f1323b5dbbeacf
18 0001-disable-downloading.patch
19 0002-install-options.patch
20 0003-force-package-requirements.patch
24 0008-devendor-quirc.patch
27 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
28 set(TARGET_IS_AARCH64 1)
29 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
31 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
32 set(TARGET_IS_X86_64 1)
37 file(REMOVE "${SOURCE_PATH}/cmake/FindCUDNN.cmake")
39 string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" BUILD_WITH_STATIC_CRT)
41 vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
42 "contrib" WITH_CONTRIB
45 "dnn" BUILD_opencv_dnn
48 "flann" BUILD_opencv_flann
54 "nonfree" OPENCV_ENABLE_NONFREE
55 "openexr" WITH_OPENEXR
60 "sfm" BUILD_opencv_sfm
64 "world" BUILD_opencv_world
67 # Cannot use vcpkg_check_features() for "dnn", "ipp", ovis", "tbb"
68 # As the respective value of their variables can be unset conditionally.
69 set(BUILD_opencv_dnn OFF)
70 if("dnn" IN_LIST FEATURES)
71 if(NOT VCPKG_TARGET_IS_ANDROID)
72 set(BUILD_opencv_dnn ON)
74 message(WARNING "The dnn module cannot be enabled on Android")
79 if("ipp" IN_LIST FEATURES)
83 set(BUILD_opencv_ovis OFF)
84 if("ovis" IN_LIST FEATURES)
85 set(BUILD_opencv_ovis ON)
89 if("tbb" IN_LIST FEATURES)
93 if("dnn" IN_LIST FEATURES)
94 vcpkg_download_distfile(TINYDNN_ARCHIVE
95 URLS "https://github.com/tiny-dnn/tiny-dnn/archive/v1.0.0a3.tar.gz"
96 FILENAME "opencv-cache/tiny_dnn/adb1c512e09ca2c7a6faef36f9c53e59-v1.0.0a3.tar.gz"
97 SHA512 5f2c1a161771efa67e85b1fea395953b7744e29f61187ac5a6c54c912fb195b3aef9a5827135c3668bd0eeea5ae04a33cc433e1f6683e2b7955010a2632d168b
101 # Build image quality module when building with 'contrib' feature and not UWP.
102 set(BUILD_opencv_quality OFF)
103 if("contrib" IN_LIST FEATURES)
104 if (VCPKG_TARGET_IS_UWP)
105 set(BUILD_opencv_quality OFF)
106 message(WARNING "The image quality module (quality) does not build for UWP, the module has been disabled.")
107 # The hdf module is silently disabled by OpenCVs buildsystem if HDF5 is not detected.
108 message(WARNING "The hierarchical data format module (hdf) depends on HDF5 which doesn't support UWP, the module has been disabled.")
110 set(BUILD_opencv_quality CMAKE_DEPENDS_IN_PROJECT_ONLY)
114 OUT_SOURCE_PATH CONTRIB_SOURCE_PATH
115 REPO opencv/opencv_contrib
116 REF ${OPENCV_VERSION}
117 SHA512 49f0aed8e07a443f354859a16c8de5ceae26560f141721ae4beb0d5fcc5b24b755ee313519e159b1a5b6ba125dcca8584f2a515e0ac96a8c9c36bb11ac6b3375
122 set(BUILD_WITH_CONTRIB_FLAG "-DOPENCV_EXTRA_MODULES_PATH=${CONTRIB_SOURCE_PATH}/modules")
124 vcpkg_download_distfile(OCV_DOWNLOAD
125 URLS "https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat"
126 FILENAME "opencv-cache/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat"
127 SHA512 c16e60a6c4bb4de3ab39b876ae3c3f320ea56f69c93e9303bd2dff8760841dcd71be4161fff8bc71e8fe4fe8747fa8465d49d6bd8f5ebcdaea161f4bc2da7c93
130 function(download_opencv_3rdparty ID COMMIT HASH)
131 if(NOT EXISTS "${DOWNLOADS}/opencv-cache/${ID}/${COMMIT}.stamp")
132 vcpkg_download_distfile(OCV_DOWNLOAD
133 URLS "https://github.com/opencv/opencv_3rdparty/archive/${COMMIT}.zip"
134 FILENAME "opencv_3rdparty-${COMMIT}.zip"
137 vcpkg_extract_source_archive(${OCV_DOWNLOAD})
138 file(MAKE_DIRECTORY "${DOWNLOADS}/opencv-cache/${ID}")
139 file(GLOB XFEATURES2D_I ${CURRENT_BUILDTREES_DIR}/src/opencv_3rdparty-${COMMIT}/*)
140 foreach(FILE ${XFEATURES2D_I})
141 file(COPY ${FILE} DESTINATION "${DOWNLOADS}/opencv-cache/${ID}")
142 get_filename_component(XFEATURES2D_I_NAME "${FILE}" NAME)
143 file(MD5 "${FILE}" FILE_HASH)
144 file(RENAME "${DOWNLOADS}/opencv-cache/${ID}/${XFEATURES2D_I_NAME}" "${DOWNLOADS}/opencv-cache/${ID}/${FILE_HASH}-${XFEATURES2D_I_NAME}")
146 file(WRITE "${DOWNLOADS}/opencv-cache/${ID}/${COMMIT}.stamp")
150 # Used for opencv's xfeature2d module
151 download_opencv_3rdparty(
152 xfeatures2d/boostdesc
153 34e4206aef44d50e6bbcd0ab06354b52e7466d26
154 2ccdc8fb59da55eabc73309a80a4d3b1e73e2341027cdcdd2d714e0f519e60f243f38f79b13ed3de32f595aa23e4f86418eed42e741f32a81b1e6e0879190601
157 # Used for opencv's xfeature2d module
158 download_opencv_3rdparty(
160 fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d
161 7051f5d6ccb938d296b919dd6d5dcddc5afb527aed456639c9984276a8f64565c084d96a72499a7756f127f8d2b1ce9ab70e4cbb3f89c4e16f82296c2a15daed
166 if(VCPKG_TARGET_IS_OSX)
167 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
168 vcpkg_download_distfile(OCV_DOWNLOAD
169 URLS "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_mac_intel64_20191018_general.tgz"
170 FILENAME "opencv-cache/ippicv/1c3d675c2a2395d094d523024896e01b-ippicv_2020_mac_intel64_20191018_general.tgz"
171 SHA512 454dfaaa245e3a3b2f1ffb1aa8e27e280b03685009d66e147482b14e5796fdf2d332cac0f9b0822caedd5760fda4ee0ce2961889597456bbc18202f10bf727cd
174 message(WARNING "This target architecture is not supported IPPICV")
177 elseif(VCPKG_TARGET_IS_LINUX)
178 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
179 vcpkg_download_distfile(OCV_DOWNLOAD
180 URLS "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz"
181 FILENAME "opencv-cache/ippicv/7421de0095c7a39162ae13a6098782f9-ippicv_2020_lnx_intel64_20191018_general.tgz"
182 SHA512 de6d80695cd6deef359376476edc4ff85fdddcf94972b936e0017f8a48aaa5d18f55c4253ae37deb83bff2f71410f68408063c88b5f3bf4df3c416aa93ceca87
184 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
185 vcpkg_download_distfile(OCV_DOWNLOAD
186 URLS "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_lnx_ia32_20191018_general.tgz"
187 FILENAME "opencv-cache/ippicv/ad189a940fb60eb71f291321322fe3e8-ippicv_2020_lnx_ia32_20191018_general.tgz"
188 SHA512 5ca9dafc3a634e2a5f83f6a498611c990ef16d54358e9b44574b01694e9d64b118d46d6e2011506e40d37e5a9865f576f790e37ff96b7c8b503507633631a296
191 message(WARNING "This target architecture is not supported IPPICV")
194 elseif(VCPKG_TARGET_IS_WINDOWS)
195 if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
196 vcpkg_download_distfile(OCV_DOWNLOAD
197 URLS "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip"
198 FILENAME "opencv-cache/ippicv/879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip"
199 SHA512 50c4af4b7fe2161d652264230389dad2330e8c95b734d04fb7565bffdab855c06d43085e480da554c56b04f8538087d49503538d5943221ee2a772ee7be4c93c
201 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
202 vcpkg_download_distfile(OCV_DOWNLOAD
203 URLS "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_ia32_20191018_general.zip"
204 FILENAME "opencv-cache/ippicv/cd39bdf0c2e1cac9a61101dad7a2413e-ippicv_2020_win_ia32_20191018_general.zip"
205 SHA512 058d00775d9f16955c7a557d554b8c2976ab9dbad4ba3fdb9823c0f768809edbd835e4397f01dc090a9bc80d81de834375e7006614d2a898f42e8004de0e04bf
208 message(WARNING "This target architecture is not supported IPPICV")
212 message(WARNING "This target architecture is not supported IPPICV")
218 if(NOT VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_UWP)
222 if (VCPKG_LIBRARY_LINKAGE STREQUAL static)
224 message(WARNING "TBB is currently unsupported in this build configuration, turning it off")
228 if (VCPKG_TARGET_IS_WINDOWS AND BUILD_opencv_ovis)
229 message(WARNING "OVIS is currently unsupported in this build configuration, turning it off")
230 set(BUILD_opencv_ovis OFF)
234 if("ffmpeg" IN_LIST FEATURES)
235 if(VCPKG_TARGET_IS_UWP)
236 set(VCPKG_C_FLAGS "/sdl- ${VCPKG_C_FLAGS}")
237 set(VCPKG_CXX_FLAGS "/sdl- ${VCPKG_CXX_FLAGS}")
241 if("qt" IN_LIST FEATURES)
242 list(APPEND ADDITIONAL_BUILD_FLAGS "-DCMAKE_AUTOMOC=ON")
245 set(BUILD_opencv_line_descriptor ON)
246 set(BUILD_opencv_saliency ON)
247 set(BUILD_opencv_bgsegm ON)
248 if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm")
249 set(BUILD_opencv_line_descriptor OFF)
250 set(BUILD_opencv_saliency OFF)
251 set(BUILD_opencv_bgsegm OFF)
254 vcpkg_configure_cmake(
256 SOURCE_PATH ${SOURCE_PATH}
258 ###### opencv cpu recognition is broken, always using host and not target: here we bypass that
259 -DOPENCV_SKIP_SYSTEM_PROCESSOR_DETECTION=TRUE
260 -DAARCH64=${TARGET_IS_AARCH64}
261 -DX86_64=${TARGET_IS_X86_64}
262 -DX86=${TARGET_IS_X86}
263 -DARM=${TARGET_IS_ARM}
265 -DOpenCV_INSTALL_BINARIES_PREFIX=
266 -DOPENCV_BIN_INSTALL_PATH=bin
267 -DOPENCV_INCLUDE_INSTALL_PATH=include
268 -DOPENCV_LIB_INSTALL_PATH=lib
269 -DOPENCV_3P_LIB_INSTALL_PATH=lib
270 -DOPENCV_CONFIG_INSTALL_PATH=share/opencv
271 -DINSTALL_TO_MANGLED_PATHS=OFF
272 -DOPENCV_FFMPEG_USE_FIND_PACKAGE=FFMPEG
273 -DOPENCV_FFMPEG_SKIP_BUILD_CHECK=TRUE
274 -DCMAKE_DEBUG_POSTFIX=d
276 -DOPENCV_DEBUG_POSTFIX=d
277 -DOPENCV_GENERATE_SETUPVARS=OFF
278 # Do not build docs/examples
281 ###### Disable build 3rd party libs
292 ###### Disable build 3rd party components
294 ###### OpenCV Build components
295 -DBUILD_opencv_apps=OFF
296 -DBUILD_opencv_bgsegm=${BUILD_opencv_bgsegm}
297 -DBUILD_opencv_line_descriptor=${BUILD_opencv_line_descriptor}
298 -DBUILD_opencv_saliency=${BUILD_opencv_saliency}
299 -DBUILD_ANDROID_PROJECT=OFF
300 -DBUILD_ANDROID_EXAMPLES=OFF
302 -DBUILD_PERF_TESTS=OFF
304 -DBUILD_WITH_DEBUG_INFO=ON
305 -DBUILD_WITH_STATIC_CRT=${BUILD_WITH_STATIC_CRT}
307 -DCURRENT_INSTALLED_DIR=${CURRENT_INSTALLED_DIR}
309 -DPROTOBUF_UPDATE_FILES=${BUILD_opencv_flann}
310 -DUPDATE_PROTO_FILES=${BUILD_opencv_flann}
315 -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON
316 -DCMAKE_DISABLE_FIND_PACKAGE_JNI=ON
320 "-DOPENCV_DOWNLOAD_PATH=${DOWNLOADS}/opencv-cache"
321 ${BUILD_WITH_CONTRIB_FLAG}
322 -DOPENCV_OTHER_INSTALL_PATH=share/opencv
323 ###### customized properties
324 ## Options from vcpkg_check_features()
326 -DCMAKE_DISABLE_FIND_PACKAGE_Halide=ON
327 -DHALIDE_ROOT_DIR=${CURRENT_INSTALLED_DIR}
329 -DWITH_IPP=${WITH_IPP}
331 -DWITH_MSMF=${WITH_MSMF}
333 -DWITH_PROTOBUF=${BUILD_opencv_flann}
334 -DWITH_OPENCLAMDBLAS=OFF
335 -DWITH_TBB=${WITH_TBB}
337 ###### BUILD_options (mainly modules which require additional libraries)
338 -DBUILD_opencv_ovis=${BUILD_opencv_ovis}
339 -DBUILD_opencv_dnn=${BUILD_opencv_dnn}
340 ###### The following modules are disabled for UWP
341 -DBUILD_opencv_quality=${BUILD_opencv_quality}
342 ###### Additional build flags
343 ${ADDITIONAL_BUILD_FLAGS}
346 vcpkg_install_cmake()
347 vcpkg_fixup_cmake_targets(CONFIG_PATH "share/opencv" TARGET_PATH "share/opencv")
350 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
351 file(READ ${CURRENT_PACKAGES_DIR}/share/opencv/OpenCVModules.cmake OPENCV_MODULES)
352 set(DEPS_STRING "include(CMakeFindDependencyMacro)
353 find_dependency(protobuf CONFIG)
355 if(TARGET protobuf::libprotobuf)
356 add_library (libprotobuf INTERFACE IMPORTED)
357 set_target_properties(libprotobuf PROPERTIES
358 INTERFACE_LINK_LIBRARIES protobuf::libprotobuf
361 add_library (libprotobuf UNKNOWN IMPORTED)
362 set_target_properties(libprotobuf PROPERTIES
363 IMPORTED_LOCATION \"${Protobuf_LIBRARY}\"
364 INTERFACE_INCLUDE_DIRECTORIES \"${Protobuf_INCLUDE_DIR}\"
365 INTERFACE_SYSTEM_INCLUDE_DIRECTORIES \"${Protobuf_INCLUDE_DIR}\"
369 find_dependency(Threads)")
370 if("tiff" IN_LIST FEATURES)
371 string(APPEND DEPS_STRING "\nfind_dependency(TIFF)")
373 if("cuda" IN_LIST FEATURES)
374 string(APPEND DEPS_STRING "\nfind_dependency(CUDA)")
376 if(BUILD_opencv_quality)
377 string(APPEND DEPS_STRING "
378 # C language is required for try_compile tests in FindHDF5
380 find_dependency(HDF5)
381 find_dependency(Tesseract)")
384 string(APPEND DEPS_STRING "\nfind_dependency(TBB)")
386 if("vtk" IN_LIST FEATURES)
387 string(APPEND DEPS_STRING "\nfind_dependency(VTK)")
389 if("sfm" IN_LIST FEATURES)
390 string(APPEND DEPS_STRING "\nfind_dependency(gflags CONFIG)\nfind_dependency(Ceres CONFIG)")
392 if("eigen" IN_LIST FEATURES)
393 string(APPEND DEPS_STRING "\nfind_dependency(Eigen3 CONFIG)")
395 if("lapack" IN_LIST FEATURES)
396 string(APPEND DEPS_STRING "\nfind_dependency(LAPACK)")
398 if("openexr" IN_LIST FEATURES)
399 string(APPEND DEPS_STRING "\nfind_dependency(OpenEXR CONFIG)")
402 string(APPEND DEPS_STRING "\nfind_dependency(OpenMP)")
404 if(BUILD_opencv_ovis)
405 string(APPEND DEPS_STRING "\nfind_dependency(Ogre)\nfind_dependency(Freetype)")
407 if("quirc" IN_LIST FEATURES)
408 string(APPEND DEPS_STRING "\nfind_dependency(quirc)")
410 if("qt" IN_LIST FEATURES)
411 string(APPEND DEPS_STRING "
412 set(CMAKE_AUTOMOC ON)
413 set(CMAKE_AUTORCC ON)
414 set(CMAKE_AUTOUIC ON)
415 find_dependency(Qt5 COMPONENTS OpenGL Concurrent Test)")
417 if("ade" IN_LIST FEATURES)
418 string(APPEND DEPS_STRING "\nfind_dependency(ade)")
420 if("gdcm" IN_LIST FEATURES)
421 string(APPEND DEPS_STRING "\nfind_dependency(GDCM)")
424 string(REPLACE "set(CMAKE_IMPORT_FILE_VERSION 1)"
425 "set(CMAKE_IMPORT_FILE_VERSION 1)\n${DEPS_STRING}" OPENCV_MODULES "${OPENCV_MODULES}")
428 string(REPLACE "set_target_properties(opencv_core PROPERTIES
429 INTERFACE_LINK_LIBRARIES \""
430 "set_target_properties(opencv_core PROPERTIES
431 INTERFACE_LINK_LIBRARIES \"\$<LINK_ONLY:OpenMP::OpenMP_CXX>;" OPENCV_MODULES "${OPENCV_MODULES}")
434 if(BUILD_opencv_ovis)
435 string(REPLACE "OgreGLSupportStatic"
436 "OgreGLSupport" OPENCV_MODULES "${OPENCV_MODULES}")
439 file(WRITE ${CURRENT_PACKAGES_DIR}/share/opencv/OpenCVModules.cmake "${OPENCV_MODULES}")
442 file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin)
445 file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
446 file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
447 file(REMOVE ${CURRENT_PACKAGES_DIR}/LICENSE)
448 file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/LICENSE)
450 if(VCPKG_TARGET_IS_ANDROID)
451 file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/README.android)
452 file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/README.android)
455 file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)