1 # ----------------------------------------------------------------------------
2 # Detect 3rd-party image IO libraries
3 # ----------------------------------------------------------------------------
5 # --- zlib (required) ---
7 ocv_clear_vars(ZLIB_FOUND)
9 find_package(ZLIB "${MIN_VER_ZLIB}")
10 if(ZLIB_FOUND AND ANDROID)
11 if(ZLIB_LIBRARIES MATCHES "/usr/(lib|lib32|lib64)/libz.so$")
18 ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIRS)
20 set(ZLIB_LIBRARY zlib)
21 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib")
22 set(ZLIB_INCLUDE_DIRS "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}")
23 set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
25 ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION)
28 # --- libjpeg (optional) ---
31 ocv_clear_vars(JPEG_FOUND)
37 ocv_clear_vars(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR)
39 if(NOT BUILD_JPEG_TURBO_DISABLE)
40 set(JPEG_LIBRARY libjpeg-turbo)
41 set(JPEG_LIBRARIES ${JPEG_LIBRARY})
42 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg-turbo")
43 set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}/src")
45 set(JPEG_LIBRARY libjpeg)
46 set(JPEG_LIBRARIES ${JPEG_LIBRARY})
47 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg")
48 set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}")
52 macro(ocv_detect_jpeg_version header_file)
53 if(NOT DEFINED JPEG_LIB_VERSION AND EXISTS "${header_file}")
54 ocv_parse_header("${header_file}" JPEG_VERSION_LINES JPEG_LIB_VERSION)
57 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jpeglib.h")
58 if(DEFINED CMAKE_CXX_LIBRARY_ARCHITECTURE)
59 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/jconfig.h")
61 # no needed for strict platform check here, both files 64/32 should contain the same version
62 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-64.h")
63 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-32.h")
64 ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig.h")
65 ocv_detect_jpeg_version("${${JPEG_LIBRARY}_BINARY_DIR}/jconfig.h")
66 if(NOT DEFINED JPEG_LIB_VERSION)
67 set(JPEG_LIB_VERSION "unknown")
72 # --- libtiff (optional, should be searched after zlib and libjpeg) ---
75 ocv_clear_vars(TIFF_FOUND)
79 ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
84 ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
86 set(TIFF_LIBRARY libtiff)
87 set(TIFF_LIBRARIES ${TIFF_LIBRARY})
88 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libtiff")
89 set(TIFF_INCLUDE_DIR "${${TIFF_LIBRARY}_SOURCE_DIR}" "${${TIFF_LIBRARY}_BINARY_DIR}")
90 ocv_parse_header("${${TIFF_LIBRARY}_SOURCE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
93 if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION)
94 set(TIFF_VERSION ${TIFF_VERSION_CLASSIC})
97 if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
98 set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
101 if(NOT TIFF_VERSION_STRING AND TIFF_INCLUDE_DIR)
102 list(GET TIFF_INCLUDE_DIR 0 _TIFF_INCLUDE_DIR)
103 if(EXISTS "${_TIFF_INCLUDE_DIR}/tiffvers.h")
104 file(STRINGS "${_TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
105 string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
106 unset(tiff_version_str)
108 unset(_TIFF_INCLUDE_DIR)
114 # --- libwebp (optional) ---
118 ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR)
120 include(cmake/OpenCVFindWebP.cmake)
127 # --- Add libwebp to 3rdparty/libwebp and compile it if not available ---
128 if(WITH_WEBP AND NOT WEBP_FOUND
129 AND (NOT ANDROID OR HAVE_CPUFEATURES)
132 set(WEBP_LIBRARY libwebp)
133 set(WEBP_LIBRARIES ${WEBP_LIBRARY})
135 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp")
136 set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src")
140 if(NOT WEBP_VERSION AND WEBP_INCLUDE_DIR)
141 ocv_clear_vars(ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
142 if(EXISTS "${WEBP_INCLUDE_DIR}/enc/vp8enci.h")
143 ocv_parse_header("${WEBP_INCLUDE_DIR}/enc/vp8enci.h" WEBP_VERSION_LINES ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
144 set(WEBP_VERSION "${ENC_MAJ_VERSION}.${ENC_MIN_VERSION}.${ENC_REV_VERSION}")
145 elseif(EXISTS "${WEBP_INCLUDE_DIR}/webp/encode.h")
146 file(STRINGS "${WEBP_INCLUDE_DIR}/webp/encode.h" WEBP_ENCODER_ABI_VERSION REGEX "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)" )
147 if(WEBP_ENCODER_ABI_VERSION MATCHES "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)")
148 set(WEBP_ENCODER_ABI_VERSION "${CMAKE_MATCH_1}")
149 set(WEBP_VERSION "encoder: ${WEBP_ENCODER_ABI_VERSION}")
151 unset(WEBP_ENCODER_ABI_VERSION)
156 # --- libjasper (optional, should be searched after libjpeg) ---
159 ocv_clear_vars(JASPER_FOUND)
165 ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
167 set(JASPER_LIBRARY libjasper)
168 set(JASPER_LIBRARIES ${JASPER_LIBRARY})
169 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjasper")
170 set(JASPER_INCLUDE_DIR "${${JASPER_LIBRARY}_SOURCE_DIR}")
175 if(NOT JASPER_VERSION_STRING)
176 ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
180 # --- libpng (optional, should be searched after zlib) ---
183 ocv_clear_vars(PNG_FOUND)
187 include(CheckIncludeFile)
188 check_include_file("${PNG_PNG_INCLUDE_DIR}/libpng/png.h" HAVE_LIBPNG_PNG_H)
189 if(HAVE_LIBPNG_PNG_H)
190 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)
192 ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
198 ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
200 set(PNG_LIBRARY libpng)
201 set(PNG_LIBRARIES ${PNG_LIBRARY})
202 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libpng")
203 set(PNG_INCLUDE_DIR "${${PNG_LIBRARY}_SOURCE_DIR}")
204 set(PNG_DEFINITIONS "")
205 ocv_parse_header("${PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
209 set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}")
212 # --- OpenEXR (optional) ---
215 ocv_clear_vars(OPENEXR_FOUND)
217 include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
220 if(NOT OPENEXR_FOUND)
221 ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
223 set(OPENEXR_LIBRARIES IlmImf)
224 set(OPENEXR_ILMIMF_LIBRARY IlmImf)
225 add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr")
228 set(HAVE_OPENEXR YES)
231 # --- GDAL (optional) ---
233 find_package(GDAL QUIET)
237 ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES)
240 ocv_include_directories(${GDAL_INCLUDE_DIR})
245 find_package(GDCM QUIET)
248 ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES)
251 # include(${GDCM_USE_FILE})
252 set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason