Merge pull request #11171 from codingforfun:fix_11143
[platform/upstream/opencv.git] / cmake / OpenCVFindLibsGrfmt.cmake
1 # ----------------------------------------------------------------------------
2 #  Detect 3rd-party image IO libraries
3 # ----------------------------------------------------------------------------
4
5 # --- zlib (required) ---
6 if(BUILD_ZLIB)
7   ocv_clear_vars(ZLIB_FOUND)
8 else()
9   find_package(ZLIB "${MIN_VER_ZLIB}")
10   if(ZLIB_FOUND AND ANDROID)
11     if(ZLIB_LIBRARIES MATCHES "/usr/(lib|lib32|lib64)/libz.so$")
12       set(ZLIB_LIBRARIES z)
13     endif()
14   endif()
15 endif()
16
17 if(NOT ZLIB_FOUND)
18   ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIRS)
19
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})
24
25   ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION)
26 endif()
27
28 # --- libjpeg (optional) ---
29 if(WITH_JPEG)
30   if(BUILD_JPEG)
31     ocv_clear_vars(JPEG_FOUND)
32   else()
33     include(FindJPEG)
34   endif()
35
36   if(NOT JPEG_FOUND)
37     ocv_clear_vars(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR)
38
39     set(JPEG_LIBRARY libjpeg)
40     set(JPEG_LIBRARIES ${JPEG_LIBRARY})
41     add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg")
42     set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}")
43   endif()
44
45   ocv_parse_header("${JPEG_INCLUDE_DIR}/jpeglib.h" JPEG_VERSION_LINES JPEG_LIB_VERSION)
46   set(HAVE_JPEG YES)
47 endif()
48
49 # --- libtiff (optional, should be searched after zlib and libjpeg) ---
50 if(WITH_TIFF)
51   if(BUILD_TIFF)
52     ocv_clear_vars(TIFF_FOUND)
53   else()
54     include(FindTIFF)
55     if(TIFF_FOUND)
56       ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
57     endif()
58   endif()
59
60   if(NOT TIFF_FOUND)
61     ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
62
63     set(TIFF_LIBRARY libtiff)
64     set(TIFF_LIBRARIES ${TIFF_LIBRARY})
65     add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libtiff")
66     set(TIFF_INCLUDE_DIR "${${TIFF_LIBRARY}_SOURCE_DIR}" "${${TIFF_LIBRARY}_BINARY_DIR}")
67     ocv_parse_header("${${TIFF_LIBRARY}_SOURCE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
68   endif()
69
70   if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION)
71     set(TIFF_VERSION ${TIFF_VERSION_CLASSIC})
72   endif()
73
74   if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
75     set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
76   endif()
77
78   if(NOT TIFF_VERSION_STRING AND TIFF_INCLUDE_DIR)
79     list(GET TIFF_INCLUDE_DIR 0 _TIFF_INCLUDE_DIR)
80     if(EXISTS "${_TIFF_INCLUDE_DIR}/tiffvers.h")
81       file(STRINGS "${_TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
82       string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
83       unset(tiff_version_str)
84     endif()
85     unset(_TIFF_INCLUDE_DIR)
86   endif()
87
88   set(HAVE_TIFF YES)
89 endif()
90
91 # --- libwebp (optional) ---
92
93 if(WITH_WEBP)
94   if(BUILD_WEBP)
95     ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR)
96   else()
97     include(cmake/OpenCVFindWebP.cmake)
98     if(WEBP_FOUND)
99       set(HAVE_WEBP 1)
100     endif()
101   endif()
102 endif()
103
104 # --- Add libwebp to 3rdparty/libwebp and compile it if not available ---
105 if(WITH_WEBP AND NOT WEBP_FOUND
106     AND (NOT ANDROID OR HAVE_CPUFEATURES)
107 )
108
109   set(WEBP_LIBRARY libwebp)
110   set(WEBP_LIBRARIES ${WEBP_LIBRARY})
111
112   add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp")
113   set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src")
114   set(HAVE_WEBP 1)
115 endif()
116
117 if(NOT WEBP_VERSION AND WEBP_INCLUDE_DIR)
118   ocv_clear_vars(ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
119   if(EXISTS "${WEBP_INCLUDE_DIR}/enc/vp8enci.h")
120     ocv_parse_header("${WEBP_INCLUDE_DIR}/enc/vp8enci.h" WEBP_VERSION_LINES ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
121     set(WEBP_VERSION "${ENC_MAJ_VERSION}.${ENC_MIN_VERSION}.${ENC_REV_VERSION}")
122   elseif(EXISTS "${WEBP_INCLUDE_DIR}/webp/encode.h")
123     file(STRINGS "${WEBP_INCLUDE_DIR}/webp/encode.h" WEBP_ENCODER_ABI_VERSION REGEX "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)" )
124     if(WEBP_ENCODER_ABI_VERSION MATCHES "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)")
125         set(WEBP_ENCODER_ABI_VERSION "${CMAKE_MATCH_1}")
126         set(WEBP_VERSION "encoder: ${WEBP_ENCODER_ABI_VERSION}")
127     else()
128       unset(WEBP_ENCODER_ABI_VERSION)
129     endif()
130   endif()
131 endif()
132
133 # --- libjasper (optional, should be searched after libjpeg) ---
134 if(WITH_JASPER)
135   if(BUILD_JASPER)
136     ocv_clear_vars(JASPER_FOUND)
137   else()
138     include(FindJasper)
139   endif()
140
141   if(NOT JASPER_FOUND)
142     ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
143
144     set(JASPER_LIBRARY libjasper)
145     set(JASPER_LIBRARIES ${JASPER_LIBRARY})
146     add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjasper")
147     set(JASPER_INCLUDE_DIR "${${JASPER_LIBRARY}_SOURCE_DIR}")
148   endif()
149
150   set(HAVE_JASPER YES)
151
152   if(NOT JASPER_VERSION_STRING)
153     ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
154   endif()
155 endif()
156
157 # --- libpng (optional, should be searched after zlib) ---
158 if(WITH_PNG)
159   if(BUILD_PNG)
160     ocv_clear_vars(PNG_FOUND)
161   else()
162     include(FindPNG)
163     if(PNG_FOUND)
164       include(CheckIncludeFile)
165       check_include_file("${PNG_PNG_INCLUDE_DIR}/libpng/png.h" HAVE_LIBPNG_PNG_H)
166       if(HAVE_LIBPNG_PNG_H)
167         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)
168       else()
169         ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
170       endif()
171     endif()
172   endif()
173
174   if(NOT PNG_FOUND)
175     ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
176
177     set(PNG_LIBRARY libpng)
178     set(PNG_LIBRARIES ${PNG_LIBRARY})
179     add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libpng")
180     set(PNG_INCLUDE_DIR "${${PNG_LIBRARY}_SOURCE_DIR}")
181     set(PNG_DEFINITIONS "")
182     ocv_parse_header("${PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
183   endif()
184
185   set(HAVE_PNG YES)
186   set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}")
187 endif()
188
189 # --- OpenEXR (optional) ---
190 if(WITH_OPENEXR)
191   if(BUILD_OPENEXR)
192     ocv_clear_vars(OPENEXR_FOUND)
193   else()
194     include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
195   endif()
196
197   if(NOT OPENEXR_FOUND)
198     ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
199
200     set(OPENEXR_LIBRARIES IlmImf)
201     set(OPENEXR_ILMIMF_LIBRARY IlmImf)
202     add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr")
203   endif()
204
205   set(HAVE_OPENEXR YES)
206 endif()
207
208 # --- GDAL (optional) ---
209 if(WITH_GDAL)
210     find_package(GDAL QUIET)
211
212     if(NOT GDAL_FOUND)
213         set(HAVE_GDAL NO)
214         ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES)
215     else()
216         set(HAVE_GDAL YES)
217         ocv_include_directories(${GDAL_INCLUDE_DIR})
218     endif()
219 endif()
220
221 if (WITH_GDCM)
222   find_package(GDCM QUIET)
223   if(NOT GDCM_FOUND)
224     set(HAVE_GDCM NO)
225     ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES)
226   else()
227     set(HAVE_GDCM YES)
228     # include(${GDCM_USE_FILE})
229     set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason
230   endif()
231 endif()