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