1# ---------------------------------------------------------------------------- 2# Detect 3rd-party image IO libraries 3# ---------------------------------------------------------------------------- 4 5# --- zlib (required) --- 6if(BUILD_ZLIB) 7 ocv_clear_vars(ZLIB_FOUND) 8else() 9 ocv_clear_internal_cache_vars(ZLIB_LIBRARY ZLIB_INCLUDE_DIR) 10 if(ANDROID) 11 set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) 12 set(CMAKE_FIND_LIBRARY_SUFFIXES .so) 13 endif() 14 find_package(ZLIB "${MIN_VER_ZLIB}") 15 if(ANDROID) 16 set(CMAKE_FIND_LIBRARY_SUFFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) 17 unset(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES) 18 endif() 19 if(ZLIB_FOUND AND ANDROID) 20 if(ZLIB_LIBRARIES MATCHES "/usr/lib.*/libz.so$") 21 set(ZLIB_LIBRARIES z) 22 endif() 23 endif() 24endif() 25 26if(NOT ZLIB_FOUND) 27 ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR) 28 29 set(ZLIB_LIBRARY zlib CACHE INTERNAL "") 30 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib") 31 set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "") 32 set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) 33 set(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) 34 35 ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION) 36endif() 37 38# --- libjpeg (optional) --- 39if(WITH_JPEG) 40 if(BUILD_JPEG) 41 ocv_clear_vars(JPEG_FOUND) 42 else() 43 ocv_clear_internal_cache_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR) 44 include(FindJPEG) 45 endif() 46 47 if(NOT JPEG_FOUND) 48 ocv_clear_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR) 49 50 if(NOT BUILD_JPEG_TURBO_DISABLE) 51 set(JPEG_LIBRARY libjpeg-turbo CACHE INTERNAL "") 52 set(JPEG_LIBRARIES ${JPEG_LIBRARY}) 53 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg-turbo") 54 set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}/src" CACHE INTERNAL "") 55 else() 56 set(JPEG_LIBRARY libjpeg CACHE INTERNAL "") 57 set(JPEG_LIBRARIES ${JPEG_LIBRARY}) 58 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg") 59 set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "") 60 endif() 61 set(JPEG_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}") 62 endif() 63 64 macro(ocv_detect_jpeg_version header_file) 65 if(NOT DEFINED JPEG_LIB_VERSION AND EXISTS "${header_file}") 66 ocv_parse_header("${header_file}" JPEG_VERSION_LINES JPEG_LIB_VERSION) 67 endif() 68 endmacro() 69 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jpeglib.h") 70 if(DEFINED CMAKE_CXX_LIBRARY_ARCHITECTURE) 71 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/jconfig.h") 72 endif() 73 # no needed for strict platform check here, both files 64/32 should contain the same version 74 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-64.h") 75 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-32.h") 76 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig.h") 77 ocv_detect_jpeg_version("${${JPEG_LIBRARY}_BINARY_DIR}/jconfig.h") 78 if(NOT DEFINED JPEG_LIB_VERSION) 79 set(JPEG_LIB_VERSION "unknown") 80 endif() 81 set(HAVE_JPEG YES) 82endif() 83 84# --- libtiff (optional, should be searched after zlib and libjpeg) --- 85if(WITH_TIFF) 86 if(BUILD_TIFF) 87 ocv_clear_vars(TIFF_FOUND) 88 else() 89 ocv_clear_internal_cache_vars(TIFF_LIBRARY TIFF_INCLUDE_DIR) 90 include(FindTIFF) 91 if(TIFF_FOUND) 92 ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION) 93 endif() 94 endif() 95 96 if(NOT TIFF_FOUND) 97 ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR) 98 99 set(TIFF_LIBRARY libtiff CACHE INTERNAL "") 100 set(TIFF_LIBRARIES ${TIFF_LIBRARY}) 101 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libtiff") 102 set(TIFF_INCLUDE_DIR "${${TIFF_LIBRARY}_SOURCE_DIR}" "${${TIFF_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "") 103 ocv_parse_header("${${TIFF_LIBRARY}_SOURCE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION) 104 endif() 105 106 if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION) 107 set(TIFF_VERSION ${TIFF_VERSION_CLASSIC}) 108 endif() 109 110 if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG) 111 set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION}) 112 endif() 113 114 if(NOT TIFF_VERSION_STRING AND TIFF_INCLUDE_DIR) 115 list(GET TIFF_INCLUDE_DIR 0 _TIFF_INCLUDE_DIR) 116 if(EXISTS "${_TIFF_INCLUDE_DIR}/tiffvers.h") 117 file(STRINGS "${_TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*") 118 string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" "\\1" TIFF_VERSION_STRING "${tiff_version_str}") 119 unset(tiff_version_str) 120 endif() 121 unset(_TIFF_INCLUDE_DIR) 122 endif() 123 124 set(HAVE_TIFF YES) 125endif() 126 127# --- libwebp (optional) --- 128 129if(WITH_WEBP) 130 if(BUILD_WEBP) 131 ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR) 132 else() 133 ocv_clear_internal_cache_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR) 134 include(cmake/OpenCVFindWebP.cmake) 135 if(WEBP_FOUND) 136 set(HAVE_WEBP 1) 137 endif() 138 endif() 139endif() 140 141# --- Add libwebp to 3rdparty/libwebp and compile it if not available --- 142if(WITH_WEBP AND NOT WEBP_FOUND 143 AND (NOT ANDROID OR HAVE_CPUFEATURES) 144) 145 ocv_clear_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR) 146 set(WEBP_LIBRARY libwebp CACHE INTERNAL "") 147 set(WEBP_LIBRARIES ${WEBP_LIBRARY}) 148 149 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp") 150 set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src" CACHE INTERNAL "") 151 set(HAVE_WEBP 1) 152endif() 153 154if(NOT WEBP_VERSION AND WEBP_INCLUDE_DIR) 155 ocv_clear_vars(ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION) 156 if(EXISTS "${WEBP_INCLUDE_DIR}/enc/vp8enci.h") 157 ocv_parse_header("${WEBP_INCLUDE_DIR}/enc/vp8enci.h" WEBP_VERSION_LINES ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION) 158 set(WEBP_VERSION "${ENC_MAJ_VERSION}.${ENC_MIN_VERSION}.${ENC_REV_VERSION}") 159 elseif(EXISTS "${WEBP_INCLUDE_DIR}/webp/encode.h") 160 file(STRINGS "${WEBP_INCLUDE_DIR}/webp/encode.h" WEBP_ENCODER_ABI_VERSION REGEX "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)" ) 161 if(WEBP_ENCODER_ABI_VERSION MATCHES "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)") 162 set(WEBP_ENCODER_ABI_VERSION "${CMAKE_MATCH_1}") 163 set(WEBP_VERSION "encoder: ${WEBP_ENCODER_ABI_VERSION}") 164 else() 165 unset(WEBP_ENCODER_ABI_VERSION) 166 endif() 167 endif() 168endif() 169 170# --- libopenjp2 (optional, check before libjasper) --- 171if(WITH_OPENJPEG) 172 if(BUILD_OPENJPEG) 173 ocv_clear_vars(OpenJPEG_FOUND) 174 else() 175 find_package(OpenJPEG QUIET) 176 endif() 177 178 if(NOT OpenJPEG_FOUND OR OPENJPEG_MAJOR_VERSION LESS 2) 179 ocv_clear_vars(OPENJPEG_MAJOR_VERSION OPENJPEG_MINOR_VERSION OPENJPEG_BUILD_VERSION OPENJPEG_LIBRARIES OPENJPEG_INCLUDE_DIRS) 180 message(STATUS "Could NOT find OpenJPEG (minimal suitable version: 2.0, " 181 "recommended version >= 2.3.1). OpenJPEG will be built from sources") 182 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openjpeg") 183 if(OCV_CAN_BUILD_OPENJPEG) 184 set(HAVE_OPENJPEG YES) 185 message(STATUS "OpenJPEG libraries will be built from sources: ${OPENJPEG_LIBRARIES} " 186 "(version \"${OPENJPEG_VERSION}\")") 187 else() 188 set(HAVE_OPENJPEG NO) 189 message(STATUS "OpenJPEG libraries can't be built from sources. System requirements are not fulfilled.") 190 endif() 191 else() 192 set(HAVE_OPENJPEG YES) 193 message(STATUS "Found system OpenJPEG: ${OPENJPEG_LIBRARIES} " 194 "(found version \"${OPENJPEG_VERSION}\")") 195 endif() 196endif() 197 198# --- libjasper (optional, should be searched after libjpeg) --- 199if(WITH_JASPER AND NOT HAVE_OPENJPEG) 200 if(BUILD_JASPER) 201 ocv_clear_vars(JASPER_FOUND) 202 else() 203 include(FindJasper) 204 endif() 205 206 if(NOT JASPER_FOUND) 207 ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR) 208 209 set(JASPER_LIBRARY libjasper CACHE INTERNAL "") 210 set(JASPER_LIBRARIES ${JASPER_LIBRARY}) 211 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjasper") 212 set(JASPER_INCLUDE_DIR "${${JASPER_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "") 213 endif() 214 215 set(HAVE_JASPER YES) 216 217 if(NOT JASPER_VERSION_STRING) 218 ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "") 219 endif() 220endif() 221 222# --- libpng (optional, should be searched after zlib) --- 223if(WITH_PNG) 224 if(BUILD_PNG) 225 ocv_clear_vars(PNG_FOUND) 226 else() 227 ocv_clear_internal_cache_vars(PNG_LIBRARY PNG_INCLUDE_DIR) 228 include(FindPNG) 229 if(PNG_FOUND) 230 include(CheckIncludeFile) 231 check_include_file("${PNG_PNG_INCLUDE_DIR}/libpng16/png.h" HAVE_LIBPNG_PNG_H) 232 if(HAVE_LIBPNG_PNG_H) 233 ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/libpng16/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE) 234 else() 235 ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE) 236 endif() 237 endif() 238 endif() 239 240 if(NOT PNG_FOUND) 241 ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS) 242 243 set(PNG_LIBRARY libpng CACHE INTERNAL "") 244 set(PNG_LIBRARIES ${PNG_LIBRARY}) 245 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libpng") 246 set(PNG_INCLUDE_DIR "${${PNG_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "") 247 set(PNG_DEFINITIONS "") 248 ocv_parse_header("${PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE) 249 endif() 250 251 set(HAVE_PNG YES) 252 set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}") 253endif() 254 255# --- OpenEXR (optional) --- 256if(WITH_OPENEXR) 257 ocv_clear_vars(HAVE_OPENEXR) 258 if(NOT BUILD_OPENEXR) 259 ocv_clear_internal_cache_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION) 260 include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake") 261 endif() 262 263 if(OPENEXR_FOUND) 264 set(HAVE_OPENEXR YES) 265 else() 266 ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION) 267 268 set(OPENEXR_LIBRARIES IlmImf) 269 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr") 270 if(OPENEXR_VERSION) # check via TARGET doesn't work 271 set(HAVE_OPENEXR YES) 272 endif() 273 endif() 274endif() 275 276# --- GDAL (optional) --- 277if(WITH_GDAL) 278 find_package(GDAL QUIET) 279 280 if(NOT GDAL_FOUND) 281 set(HAVE_GDAL NO) 282 ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES) 283 else() 284 set(HAVE_GDAL YES) 285 ocv_include_directories(${GDAL_INCLUDE_DIR}) 286 endif() 287endif() 288 289if(WITH_GDCM) 290 find_package(GDCM QUIET) 291 if(NOT GDCM_FOUND) 292 set(HAVE_GDCM NO) 293 ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES) 294 else() 295 set(HAVE_GDCM YES) 296 # include(${GDCM_USE_FILE}) 297 set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason 298 endif() 299endif() 300 301if(WITH_IMGCODEC_HDR) 302 set(HAVE_IMGCODEC_HDR ON) 303elseif(DEFINED WITH_IMGCODEC_HDR) 304 set(HAVE_IMGCODEC_HDR OFF) 305endif() 306if(WITH_IMGCODEC_SUNRASTER) 307 set(HAVE_IMGCODEC_SUNRASTER ON) 308elseif(DEFINED WITH_IMGCODEC_SUNRASTER) 309 set(HAVE_IMGCODEC_SUNRASTER OFF) 310endif() 311if(WITH_IMGCODEC_PXM) 312 set(HAVE_IMGCODEC_PXM ON) 313elseif(DEFINED WITH_IMGCODEC_PXM) 314 set(HAVE_IMGCODEC_PXM OFF) 315endif() 316if(WITH_IMGCODEC_PFM) 317 set(HAVE_IMGCODEC_PFM ON) 318elseif(DEFINED WITH_IMGCODEC_PFM) 319 set(HAVE_IMGCODEC_PFM OFF) 320endif() 321