1 # ----------------------------------------------------------------------------
2 # Detect 3rd-party image IO libraries
3 # ----------------------------------------------------------------------------
5 # --- zlib (required) ---
7 ocv_clear_vars(ZLIB_FOUND)
9 ocv_clear_internal_cache_vars(ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
10 find_package(ZLIB "${MIN_VER_ZLIB}")
11 if(ZLIB_FOUND AND ANDROID)
12 if(ZLIB_LIBRARIES MATCHES "/usr/(lib|lib32|lib64)/libz.so$")
19 ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR)
21 set(ZLIB_LIBRARY zlib CACHE INTERNAL "")
22 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib")
23 set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "")
24 set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
25 set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
27 ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION)
30 # --- libjpeg (optional) ---
33 ocv_clear_vars(JPEG_FOUND)
35 ocv_clear_internal_cache_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR)
40 ocv_clear_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR)
42 if(NOT BUILD_JPEG_TURBO_DISABLE)
43 set(JPEG_LIBRARY libjpeg-turbo CACHE INTERNAL "")
44 set(JPEG_LIBRARIES ${JPEG_LIBRARY})
45 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg-turbo")
46 set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}/src" CACHE INTERNAL "")
48 set(JPEG_LIBRARY libjpeg CACHE INTERNAL "")
49 set(JPEG_LIBRARIES ${JPEG_LIBRARY})
50 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg")
51 set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "")
53 set(JPEG_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}")
56 macro(ocv_detect_jpeg_version header_file)
57 if(NOT DEFINED JPEG_LIB_VERSION AND EXISTS "${header_file}")
58 ocv_parse_header("${header_file}" JPEG_VERSION_LINES JPEG_LIB_VERSION)
61 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jpeglib.h")
62 if(DEFINED CMAKE_CXX_LIBRARY_ARCHITECTURE)
63 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/jconfig.h")
65 # no needed for strict platform check here, both files 64/32 should contain the same version
66 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-64.h")
67 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-32.h")
68 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig.h")
69 ocv_detect_jpeg_version("${${JPEG_LIBRARY}_BINARY_DIR}/jconfig.h")
70 if(NOT DEFINED JPEG_LIB_VERSION)
71 set(JPEG_LIB_VERSION "unknown")
76 # --- libtiff (optional, should be searched after zlib and libjpeg) ---
79 ocv_clear_vars(TIFF_FOUND)
81 ocv_clear_internal_cache_vars(TIFF_LIBRARY TIFF_INCLUDE_DIR)
84 ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
89 ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
91 set(TIFF_LIBRARY libtiff CACHE INTERNAL "")
92 set(TIFF_LIBRARIES ${TIFF_LIBRARY})
93 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libtiff")
94 set(TIFF_INCLUDE_DIR "${${TIFF_LIBRARY}_SOURCE_DIR}" "${${TIFF_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "")
95 ocv_parse_header("${${TIFF_LIBRARY}_SOURCE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
98 if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION)
99 set(TIFF_VERSION ${TIFF_VERSION_CLASSIC})
102 if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
103 set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
106 if(NOT TIFF_VERSION_STRING AND TIFF_INCLUDE_DIR)
107 list(GET TIFF_INCLUDE_DIR 0 _TIFF_INCLUDE_DIR)
108 if(EXISTS "${_TIFF_INCLUDE_DIR}/tiffvers.h")
109 file(STRINGS "${_TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
110 string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
111 unset(tiff_version_str)
113 unset(_TIFF_INCLUDE_DIR)
119 # --- libwebp (optional) ---
123 ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR)
125 ocv_clear_internal_cache_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR)
126 include(cmake/OpenCVFindWebP.cmake)
133 # --- Add libwebp to 3rdparty/libwebp and compile it if not available ---
134 if(WITH_WEBP AND NOT WEBP_FOUND
135 AND (NOT ANDROID OR HAVE_CPUFEATURES)
137 ocv_clear_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR)
138 set(WEBP_LIBRARY libwebp CACHE INTERNAL "")
139 set(WEBP_LIBRARIES ${WEBP_LIBRARY})
141 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp")
142 set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src" CACHE INTERNAL "")
146 if(NOT WEBP_VERSION AND WEBP_INCLUDE_DIR)
147 ocv_clear_vars(ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
148 if(EXISTS "${WEBP_INCLUDE_DIR}/enc/vp8enci.h")
149 ocv_parse_header("${WEBP_INCLUDE_DIR}/enc/vp8enci.h" WEBP_VERSION_LINES ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
150 set(WEBP_VERSION "${ENC_MAJ_VERSION}.${ENC_MIN_VERSION}.${ENC_REV_VERSION}")
151 elseif(EXISTS "${WEBP_INCLUDE_DIR}/webp/encode.h")
152 file(STRINGS "${WEBP_INCLUDE_DIR}/webp/encode.h" WEBP_ENCODER_ABI_VERSION REGEX "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)" )
153 if(WEBP_ENCODER_ABI_VERSION MATCHES "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)")
154 set(WEBP_ENCODER_ABI_VERSION "${CMAKE_MATCH_1}")
155 set(WEBP_VERSION "encoder: ${WEBP_ENCODER_ABI_VERSION}")
157 unset(WEBP_ENCODER_ABI_VERSION)
162 # --- libopenjp2 (optional, check before libjasper) ---
165 ocv_clear_vars(OpenJPEG_FOUND)
167 find_package(OpenJPEG QUIET)
170 if(NOT OpenJPEG_FOUND OR OPENJPEG_MAJOR_VERSION LESS 2)
171 ocv_clear_vars(OPENJPEG_MAJOR_VERSION OPENJPEG_MINOR_VERSION OPENJPEG_BUILD_VERSION OPENJPEG_LIBRARIES OPENJPEG_INCLUDE_DIRS)
172 message(STATUS "Could NOT find OpenJPEG (minimal suitable version: 2.0, "
173 "recommended version >= 2.3.1). OpenJPEG will be built from sources")
174 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openjpeg")
175 if(OCV_CAN_BUILD_OPENJPEG)
176 set(HAVE_OPENJPEG YES)
177 message(STATUS "OpenJPEG libraries will be built from sources: ${OPENJPEG_LIBRARIES} "
178 "(version \"${OPENJPEG_VERSION}\")")
180 set(HAVE_OPENJPEG NO)
181 message(STATUS "OpenJPEG libraries can't be built from sources. System requirements are not fulfilled.")
184 set(HAVE_OPENJPEG YES)
185 message(STATUS "Found system OpenJPEG: ${OPENJPEG_LIBRARIES} "
186 "(found version \"${OPENJPEG_VERSION}\")")
190 # --- libjasper (optional, should be searched after libjpeg) ---
191 if(WITH_JASPER AND NOT HAVE_OPENJPEG)
193 ocv_clear_vars(JASPER_FOUND)
199 ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
201 set(JASPER_LIBRARY libjasper CACHE INTERNAL "")
202 set(JASPER_LIBRARIES ${JASPER_LIBRARY})
203 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjasper")
204 set(JASPER_INCLUDE_DIR "${${JASPER_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "")
209 if(NOT JASPER_VERSION_STRING)
210 ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
214 # --- libpng (optional, should be searched after zlib) ---
217 ocv_clear_vars(PNG_FOUND)
219 ocv_clear_internal_cache_vars(PNG_LIBRARY PNG_INCLUDE_DIR)
222 include(CheckIncludeFile)
223 check_include_file("${PNG_PNG_INCLUDE_DIR}/libpng/png.h" HAVE_LIBPNG_PNG_H)
224 if(HAVE_LIBPNG_PNG_H)
225 ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/libpng/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
227 ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
233 ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
235 set(PNG_LIBRARY libpng CACHE INTERNAL "")
236 set(PNG_LIBRARIES ${PNG_LIBRARY})
237 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libpng")
238 set(PNG_INCLUDE_DIR "${${PNG_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "")
239 set(PNG_DEFINITIONS "")
240 ocv_parse_header("${PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
244 set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}")
247 # --- OpenEXR (optional) ---
249 ocv_clear_vars(HAVE_OPENEXR)
250 if(NOT BUILD_OPENEXR)
251 ocv_clear_internal_cache_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
252 include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
256 set(HAVE_OPENEXR YES)
258 ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
260 set(OPENEXR_LIBRARIES IlmImf)
261 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr")
262 if(OPENEXR_VERSION) # check via TARGET doesn't work
263 set(HAVE_OPENEXR YES)
268 # --- GDAL (optional) ---
270 find_package(GDAL QUIET)
274 ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES)
277 ocv_include_directories(${GDAL_INCLUDE_DIR})
282 find_package(GDCM QUIET)
285 ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES)
288 # include(${GDCM_USE_FILE})
289 set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason
293 if(WITH_IMGCODEC_HDR)
294 set(HAVE_IMGCODEC_HDR ON)
295 elseif(DEFINED WITH_IMGCODEC_HDR)
296 set(HAVE_IMGCODEC_HDR OFF)
298 if(WITH_IMGCODEC_SUNRASTER)
299 set(HAVE_IMGCODEC_SUNRASTER ON)
300 elseif(DEFINED WITH_IMGCODEC_SUNRASTER)
301 set(HAVE_IMGCODEC_SUNRASTER OFF)
303 if(WITH_IMGCODEC_PXM)
304 set(HAVE_IMGCODEC_PXM ON)
305 elseif(DEFINED WITH_IMGCODEC_PXM)
306 set(HAVE_IMGCODEC_PXM OFF)
308 if(WITH_IMGCODEC_PFM)
309 set(HAVE_IMGCODEC_PFM ON)
310 elseif(DEFINED WITH_IMGCODEC_PFM)
311 set(HAVE_IMGCODEC_PFM OFF)