Merge remote-tracking branch 'upstream/3.4' into merge-3.4
[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   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$")
13       set(ZLIB_LIBRARIES z)
14     endif()
15   endif()
16 endif()
17
18 if(NOT ZLIB_FOUND)
19   ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR)
20
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})
26
27   ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION)
28 endif()
29
30 # --- libjpeg (optional) ---
31 if(WITH_JPEG)
32   if(BUILD_JPEG)
33     ocv_clear_vars(JPEG_FOUND)
34   else()
35     ocv_clear_internal_cache_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR)
36     include(FindJPEG)
37   endif()
38
39   if(NOT JPEG_FOUND)
40     ocv_clear_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR)
41
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 "")
47     else()
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 "")
52     endif()
53     set(JPEG_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}")
54   endif()
55
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)
59     endif()
60   endmacro()
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")
64   endif()
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")
72   endif()
73   set(HAVE_JPEG YES)
74 endif()
75
76 # --- libtiff (optional, should be searched after zlib and libjpeg) ---
77 if(WITH_TIFF)
78   if(BUILD_TIFF)
79     ocv_clear_vars(TIFF_FOUND)
80   else()
81     ocv_clear_internal_cache_vars(TIFF_LIBRARY TIFF_INCLUDE_DIR)
82     include(FindTIFF)
83     if(TIFF_FOUND)
84       ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
85     endif()
86   endif()
87
88   if(NOT TIFF_FOUND)
89     ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
90
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)
96   endif()
97
98   if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION)
99     set(TIFF_VERSION ${TIFF_VERSION_CLASSIC})
100   endif()
101
102   if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
103     set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
104   endif()
105
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)
112     endif()
113     unset(_TIFF_INCLUDE_DIR)
114   endif()
115
116   set(HAVE_TIFF YES)
117 endif()
118
119 # --- libwebp (optional) ---
120
121 if(WITH_WEBP)
122   if(BUILD_WEBP)
123     ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR)
124   else()
125     ocv_clear_internal_cache_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR)
126     include(cmake/OpenCVFindWebP.cmake)
127     if(WEBP_FOUND)
128       set(HAVE_WEBP 1)
129     endif()
130   endif()
131 endif()
132
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)
136 )
137   ocv_clear_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR)
138   set(WEBP_LIBRARY libwebp CACHE INTERNAL "")
139   set(WEBP_LIBRARIES ${WEBP_LIBRARY})
140
141   add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp")
142   set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src" CACHE INTERNAL "")
143   set(HAVE_WEBP 1)
144 endif()
145
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}")
156     else()
157       unset(WEBP_ENCODER_ABI_VERSION)
158     endif()
159   endif()
160 endif()
161
162 # --- libopenjp2 (optional, check before libjasper) ---
163 if(WITH_OPENJPEG)
164   if(BUILD_OPENJPEG)
165     ocv_clear_vars(OpenJPEG_FOUND)
166   else()
167     find_package(OpenJPEG QUIET)
168   endif()
169
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}\")")
179     else()
180       set(HAVE_OPENJPEG NO)
181       message(STATUS "OpenJPEG libraries can't be built from sources. System requirements are not fulfilled.")
182     endif()
183   else()
184     set(HAVE_OPENJPEG YES)
185     message(STATUS "Found system OpenJPEG: ${OPENJPEG_LIBRARIES} "
186             "(found version \"${OPENJPEG_VERSION}\")")
187   endif()
188 endif()
189
190 # --- libjasper (optional, should be searched after libjpeg) ---
191 if(WITH_JASPER AND NOT HAVE_OPENJPEG)
192   if(BUILD_JASPER)
193     ocv_clear_vars(JASPER_FOUND)
194   else()
195     include(FindJasper)
196   endif()
197
198   if(NOT JASPER_FOUND)
199     ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
200
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 "")
205   endif()
206
207   set(HAVE_JASPER YES)
208
209   if(NOT JASPER_VERSION_STRING)
210     ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
211   endif()
212 endif()
213
214 # --- libpng (optional, should be searched after zlib) ---
215 if(WITH_PNG)
216   if(BUILD_PNG)
217     ocv_clear_vars(PNG_FOUND)
218   else()
219     ocv_clear_internal_cache_vars(PNG_LIBRARY PNG_INCLUDE_DIR)
220     include(FindPNG)
221     if(PNG_FOUND)
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)
226       else()
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)
228       endif()
229     endif()
230   endif()
231
232   if(NOT PNG_FOUND)
233     ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
234
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)
241   endif()
242
243   set(HAVE_PNG YES)
244   set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}")
245 endif()
246
247 # --- OpenEXR (optional) ---
248 if(WITH_OPENEXR)
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")
253   endif()
254
255   if(OPENEXR_FOUND)
256     set(HAVE_OPENEXR YES)
257   else()
258     ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
259
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)
264     endif()
265   endif()
266 endif()
267
268 # --- GDAL (optional) ---
269 if(WITH_GDAL)
270     find_package(GDAL QUIET)
271
272     if(NOT GDAL_FOUND)
273         set(HAVE_GDAL NO)
274         ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES)
275     else()
276         set(HAVE_GDAL YES)
277         ocv_include_directories(${GDAL_INCLUDE_DIR})
278     endif()
279 endif()
280
281 if(WITH_GDCM)
282   find_package(GDCM QUIET)
283   if(NOT GDCM_FOUND)
284     set(HAVE_GDCM NO)
285     ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES)
286   else()
287     set(HAVE_GDCM YES)
288     # include(${GDCM_USE_FILE})
289     set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason
290   endif()
291 endif()
292
293 if(WITH_IMGCODEC_HDR)
294   set(HAVE_IMGCODEC_HDR ON)
295 elseif(DEFINED WITH_IMGCODEC_HDR)
296   set(HAVE_IMGCODEC_HDR OFF)
297 endif()
298 if(WITH_IMGCODEC_SUNRASTER)
299   set(HAVE_IMGCODEC_SUNRASTER ON)
300 elseif(DEFINED WITH_IMGCODEC_SUNRASTER)
301   set(HAVE_IMGCODEC_SUNRASTER OFF)
302 endif()
303 if(WITH_IMGCODEC_PXM)
304   set(HAVE_IMGCODEC_PXM ON)
305 elseif(DEFINED WITH_IMGCODEC_PXM)
306   set(HAVE_IMGCODEC_PXM OFF)
307 endif()
308 if(WITH_IMGCODEC_PFM)
309   set(HAVE_IMGCODEC_PFM ON)
310 elseif(DEFINED WITH_IMGCODEC_PFM)
311   set(HAVE_IMGCODEC_PFM OFF)
312 endif()