Merge pull request #14583 from FanaticsKang:fix_undistortPoint_bug
[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     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")
44     else()
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}")
49     endif()
50   endif()
51
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)
55     endif()
56   endmacro()
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")
60   endif()
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")
68   endif()
69   set(HAVE_JPEG YES)
70 endif()
71
72 # --- libtiff (optional, should be searched after zlib and libjpeg) ---
73 if(WITH_TIFF)
74   if(BUILD_TIFF)
75     ocv_clear_vars(TIFF_FOUND)
76   else()
77     include(FindTIFF)
78     if(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)
80     endif()
81   endif()
82
83   if(NOT TIFF_FOUND)
84     ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
85
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)
91   endif()
92
93   if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION)
94     set(TIFF_VERSION ${TIFF_VERSION_CLASSIC})
95   endif()
96
97   if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
98     set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
99   endif()
100
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)
107     endif()
108     unset(_TIFF_INCLUDE_DIR)
109   endif()
110
111   set(HAVE_TIFF YES)
112 endif()
113
114 # --- libwebp (optional) ---
115
116 if(WITH_WEBP)
117   if(BUILD_WEBP)
118     ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR)
119   else()
120     include(cmake/OpenCVFindWebP.cmake)
121     if(WEBP_FOUND)
122       set(HAVE_WEBP 1)
123     endif()
124   endif()
125 endif()
126
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)
130 )
131
132   set(WEBP_LIBRARY libwebp)
133   set(WEBP_LIBRARIES ${WEBP_LIBRARY})
134
135   add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp")
136   set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src")
137   set(HAVE_WEBP 1)
138 endif()
139
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}")
150     else()
151       unset(WEBP_ENCODER_ABI_VERSION)
152     endif()
153   endif()
154 endif()
155
156 # --- libjasper (optional, should be searched after libjpeg) ---
157 if(WITH_JASPER)
158   if(BUILD_JASPER)
159     ocv_clear_vars(JASPER_FOUND)
160   else()
161     include(FindJasper)
162   endif()
163
164   if(NOT JASPER_FOUND)
165     ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
166
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}")
171   endif()
172
173   set(HAVE_JASPER YES)
174
175   if(NOT JASPER_VERSION_STRING)
176     ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
177   endif()
178 endif()
179
180 # --- libpng (optional, should be searched after zlib) ---
181 if(WITH_PNG)
182   if(BUILD_PNG)
183     ocv_clear_vars(PNG_FOUND)
184   else()
185     include(FindPNG)
186     if(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)
191       else()
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)
193       endif()
194     endif()
195   endif()
196
197   if(NOT PNG_FOUND)
198     ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
199
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)
206   endif()
207
208   set(HAVE_PNG YES)
209   set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}")
210 endif()
211
212 # --- OpenEXR (optional) ---
213 if(WITH_OPENEXR)
214   ocv_clear_vars(HAVE_OPENEXR)
215   if(NOT BUILD_OPENEXR)
216     include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
217   endif()
218
219   if(OPENEXR_FOUND)
220     set(HAVE_OPENEXR YES)
221   else()
222     ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
223
224     set(OPENEXR_LIBRARIES IlmImf)
225     add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr")
226     if(OPENEXR_VERSION)  # check via TARGET doesn't work
227       set(HAVE_OPENEXR YES)
228     endif()
229   endif()
230 endif()
231
232 # --- GDAL (optional) ---
233 if(WITH_GDAL)
234     find_package(GDAL QUIET)
235
236     if(NOT GDAL_FOUND)
237         set(HAVE_GDAL NO)
238         ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES)
239     else()
240         set(HAVE_GDAL YES)
241         ocv_include_directories(${GDAL_INCLUDE_DIR})
242     endif()
243 endif()
244
245 if (WITH_GDCM)
246   find_package(GDCM QUIET)
247   if(NOT GDCM_FOUND)
248     set(HAVE_GDCM NO)
249     ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES)
250   else()
251     set(HAVE_GDCM YES)
252     # include(${GDCM_USE_FILE})
253     set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason
254   endif()
255 endif()
256
257 if(WITH_IMGCODEC_HDR)
258   set(HAVE_IMGCODEC_HDR ON)
259 elseif(DEFINED WITH_IMGCODEC_HDR)
260   set(HAVE_IMGCODEC_HDR OFF)
261 endif()
262 if(WITH_IMGCODEC_SUNRASTER)
263   set(HAVE_IMGCODEC_SUNRASTER ON)
264 elseif(DEFINED WITH_IMGCODEC_SUNRASTER)
265   set(HAVE_IMGCODEC_SUNRASTER OFF)
266 endif()
267 if(WITH_IMGCODEC_PXM)
268   set(HAVE_IMGCODEC_PXM ON)
269 elseif(DEFINED WITH_IMGCODEC_PXM)
270   set(HAVE_IMGCODEC_PXM OFF)
271 endif()