opencv

Форк
0
/
OpenCVFindLibsGrfmt.cmake 
393 строки · 13.0 Кб
1
# ----------------------------------------------------------------------------
2
#  Detect 3rd-party image IO libraries
3
# ----------------------------------------------------------------------------
4

5
# --- zlib (required) ---
6
if(WITH_ZLIB_NG)
7
  ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR)
8
  set(ZLIB_LIBRARY zlib CACHE INTERNAL "")
9
  add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib-ng")
10
  set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "")
11
  set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
12
  set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
13

14
  ocv_parse_header_version(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h.in" ZLIB_VERSION)
15
  ocv_parse_header_version(ZLIBNG "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h.in" ZLIBNG_VERSION)
16

17
  set(HAVE_ZLIB_NG YES)
18
else()
19
  if(BUILD_ZLIB)
20
    ocv_clear_vars(ZLIB_FOUND)
21
  else()
22
    ocv_clear_internal_cache_vars(ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
23
  if(ANDROID)
24
    set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
25
    set(CMAKE_FIND_LIBRARY_SUFFIXES .so)
26
  endif()
27
  if(QNX)
28
    set(ZLIB_FOUND TRUE)
29
    set(ZLIB_LIBRARY z)
30
    set(ZLIB_LIBRARIES z)
31
  else()
32
    find_package(ZLIB "${MIN_VER_ZLIB}")
33
  endif()
34
  if(ANDROID)
35
    set(CMAKE_FIND_LIBRARY_SUFFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
36
    unset(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
37
  endif()
38
  if(ZLIB_FOUND AND ANDROID)
39
    if(ZLIB_LIBRARY MATCHES "/usr/lib.*/libz.so$")
40
      set(ZLIB_LIBRARY z)
41
      set(ZLIB_LIBRARIES z)
42
      set(ZLIB_LIBRARY_RELEASE z)
43
    endif()
44
  endif()
45
  endif()
46

47
  if(NOT ZLIB_FOUND)
48
    ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR)
49

50
    set(ZLIB_LIBRARY zlib CACHE INTERNAL "")
51
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib")
52
    set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "")
53
    set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
54
    set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
55

56
    ocv_parse_header_version(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION)
57
  endif()
58
endif()
59

60
# --- libavif (optional) ---
61

62
if(WITH_AVIF)
63
  ocv_clear_internal_cache_vars(AVIF_LIBRARY AVIF_INCLUDE_DIR)
64
  include(cmake/OpenCVFindAVIF.cmake)
65
  if(AVIF_FOUND)
66
    set(HAVE_AVIF 1)
67
  endif()
68
endif()
69

70
# --- libjpeg (optional) ---
71
if(WITH_JPEG)
72
  if(BUILD_JPEG)
73
    ocv_clear_vars(JPEG_FOUND)
74
  else()
75
    ocv_clear_internal_cache_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR)
76
    if(QNX)
77
      set(JPEG_LIBRARY jpeg)
78
      set(JPEG_LIBRARIES jpeg)
79
      set(JPEG_FOUND TRUE)
80
    else()
81
      include(FindJPEG)
82
    endif()
83
  endif()
84

85
  if(NOT JPEG_FOUND)
86
    ocv_clear_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR)
87

88
    if(NOT BUILD_JPEG_TURBO_DISABLE)
89
      set(JPEG_LIBRARY libjpeg-turbo CACHE INTERNAL "")
90
      set(JPEG_LIBRARIES ${JPEG_LIBRARY})
91
      add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg-turbo")
92
      set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}/src" CACHE INTERNAL "")
93
    else()
94
      set(JPEG_LIBRARY libjpeg CACHE INTERNAL "")
95
      set(JPEG_LIBRARIES ${JPEG_LIBRARY})
96
      add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg")
97
      set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "")
98
    endif()
99
    set(JPEG_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}")
100
  endif()
101

102
  macro(ocv_detect_jpeg_version header_file)
103
    if(NOT DEFINED JPEG_LIB_VERSION AND EXISTS "${header_file}")
104
      ocv_parse_header("${header_file}" JPEG_VERSION_LINES JPEG_LIB_VERSION)
105
    endif()
106
  endmacro()
107
  ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jpeglib.h")
108
  if(DEFINED CMAKE_CXX_LIBRARY_ARCHITECTURE)
109
    ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/jconfig.h")
110
  endif()
111
  # no needed for strict platform check here, both files 64/32 should contain the same version
112
  ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-64.h")
113
  ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig-32.h")
114
  ocv_detect_jpeg_version("${JPEG_INCLUDE_DIR}/jconfig.h")
115
  ocv_detect_jpeg_version("${${JPEG_LIBRARY}_BINARY_DIR}/jconfig.h")
116
  if(NOT DEFINED JPEG_LIB_VERSION)
117
    set(JPEG_LIB_VERSION "unknown")
118
  endif()
119
  set(HAVE_JPEG YES)
120
endif()
121

122
# --- libtiff (optional, should be searched after zlib and libjpeg) ---
123
if(WITH_TIFF)
124
  if(BUILD_TIFF)
125
    ocv_clear_vars(TIFF_FOUND)
126
  else()
127
    ocv_clear_internal_cache_vars(TIFF_LIBRARY TIFF_INCLUDE_DIR)
128
    if(QNX)
129
      set(TIFF_LIBRARY tiff)
130
      set(TIFF_LIBRARIES tiff)
131
      set(TIFF_FOUND TRUE)
132
    else()
133
      include(FindTIFF)
134
    endif()
135
    if(TIFF_FOUND)
136
      ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
137
    endif()
138
  endif()
139

140
  if(NOT TIFF_FOUND)
141
    ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
142

143
    set(TIFF_LIBRARY libtiff CACHE INTERNAL "")
144
    set(TIFF_LIBRARIES ${TIFF_LIBRARY})
145
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libtiff")
146
    set(TIFF_INCLUDE_DIR "${${TIFF_LIBRARY}_SOURCE_DIR}" "${${TIFF_LIBRARY}_BINARY_DIR}" CACHE INTERNAL "")
147
    ocv_parse_header("${${TIFF_LIBRARY}_SOURCE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
148
  endif()
149

150
  if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION)
151
    set(TIFF_VERSION ${TIFF_VERSION_CLASSIC})
152
  endif()
153

154
  if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
155
    set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
156
  endif()
157

158
  if(NOT TIFF_VERSION_STRING AND TIFF_INCLUDE_DIR)
159
    foreach(_TIFF_INCLUDE_DIR IN LISTS TIFF_INCLUDE_DIR)
160
      if(EXISTS "${_TIFF_INCLUDE_DIR}/tiffvers.h")
161
        file(STRINGS "${_TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
162
        string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
163
        unset(tiff_version_str)
164
      endif()
165
    endforeach()
166
  endif()
167

168
  set(HAVE_TIFF YES)
169
endif()
170

171
# --- libwebp (optional) ---
172

173
if(WITH_WEBP)
174
  if(BUILD_WEBP)
175
    ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR)
176
  else()
177
    ocv_clear_internal_cache_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR)
178
    include(cmake/OpenCVFindWebP.cmake)
179
    if(WEBP_FOUND)
180
      set(HAVE_WEBP 1)
181
    endif()
182
  endif()
183
endif()
184

185
# --- Add libwebp to 3rdparty/libwebp and compile it if not available ---
186
if(WITH_WEBP AND NOT WEBP_FOUND
187
    AND (NOT ANDROID OR HAVE_CPUFEATURES)
188
)
189
  ocv_clear_vars(WEBP_LIBRARY WEBP_INCLUDE_DIR)
190
  set(WEBP_LIBRARY libwebp CACHE INTERNAL "")
191
  set(WEBP_LIBRARIES ${WEBP_LIBRARY})
192

193
  add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp")
194
  set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src" CACHE INTERNAL "")
195
  set(HAVE_WEBP 1)
196
endif()
197

198
if(NOT WEBP_VERSION AND WEBP_INCLUDE_DIR)
199
  ocv_clear_vars(ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
200
  if(EXISTS "${WEBP_INCLUDE_DIR}/enc/vp8enci.h")
201
    ocv_parse_header("${WEBP_INCLUDE_DIR}/enc/vp8enci.h" WEBP_VERSION_LINES ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
202
    set(WEBP_VERSION "${ENC_MAJ_VERSION}.${ENC_MIN_VERSION}.${ENC_REV_VERSION}")
203
  elseif(EXISTS "${WEBP_INCLUDE_DIR}/webp/encode.h")
204
    file(STRINGS "${WEBP_INCLUDE_DIR}/webp/encode.h" WEBP_ENCODER_ABI_VERSION REGEX "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)" )
205
    if(WEBP_ENCODER_ABI_VERSION MATCHES "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)")
206
        set(WEBP_ENCODER_ABI_VERSION "${CMAKE_MATCH_1}")
207
        set(WEBP_VERSION "encoder: ${WEBP_ENCODER_ABI_VERSION}")
208
    else()
209
      unset(WEBP_ENCODER_ABI_VERSION)
210
    endif()
211
  endif()
212
endif()
213

214
# --- libopenjp2 (optional, check before libjasper) ---
215
if(WITH_OPENJPEG)
216
  if(BUILD_OPENJPEG)
217
    ocv_clear_vars(OpenJPEG_FOUND)
218
  else()
219
    find_package(OpenJPEG QUIET)
220
  endif()
221

222
  if(NOT OpenJPEG_FOUND OR OPENJPEG_MAJOR_VERSION LESS 2)
223
    ocv_clear_vars(OPENJPEG_MAJOR_VERSION OPENJPEG_MINOR_VERSION OPENJPEG_BUILD_VERSION OPENJPEG_LIBRARIES OPENJPEG_INCLUDE_DIRS)
224
    message(STATUS "Could NOT find OpenJPEG (minimal suitable version: 2.0, "
225
            "recommended version >= 2.3.1). OpenJPEG will be built from sources")
226
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openjpeg")
227
    if(OCV_CAN_BUILD_OPENJPEG)
228
      set(HAVE_OPENJPEG YES)
229
      message(STATUS "OpenJPEG libraries will be built from sources: ${OPENJPEG_LIBRARIES} "
230
              "(version \"${OPENJPEG_VERSION}\")")
231
    else()
232
      set(HAVE_OPENJPEG NO)
233
      message(STATUS "OpenJPEG libraries can't be built from sources. System requirements are not fulfilled.")
234
    endif()
235
  else()
236
    set(HAVE_OPENJPEG YES)
237
    set(OPENJPEG_VERSION "${OPENJPEG_MAJOR_VERSION}.${OPENJPEG_MINOR_VERSION}.${OPENJPEG_BUILD_VERSION}")
238
    message(STATUS "Found system OpenJPEG: ${OPENJPEG_LIBRARIES} "
239
            "(found version \"${OPENJPEG_VERSION}\")")
240
  endif()
241
endif()
242

243
# --- libjasper (optional, should be searched after libjpeg) ---
244
if(WITH_JASPER AND NOT HAVE_OPENJPEG)
245
  if(BUILD_JASPER)
246
    ocv_clear_vars(JASPER_FOUND)
247
  else()
248
    include(FindJasper)
249
  endif()
250

251
  if(NOT JASPER_FOUND)
252
    ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
253

254
    set(JASPER_LIBRARY libjasper CACHE INTERNAL "")
255
    set(JASPER_LIBRARIES ${JASPER_LIBRARY})
256
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjasper")
257
    set(JASPER_INCLUDE_DIR "${${JASPER_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "")
258
  endif()
259

260
  set(HAVE_JASPER YES)
261

262
  if(NOT JASPER_VERSION_STRING)
263
    ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
264
  endif()
265
endif()
266

267
if(WITH_SPNG)
268
  if(BUILD_SPNG)
269
    ocv_clear_vars(PNG_FOUND)
270
  else()
271
    # CMakeConfig bug in SPNG, include is missing there in version 0.7.4 and older
272
    # See https://github.com/randy408/libspng/pull/264
273
    include(CMakeFindDependencyMacro)
274
    find_package(SPNG QUIET)
275
    if(SPNG_FOUND)
276
      set(SPNG_LIBRARY "spng::spng" CACHE INTERNAL "")
277
      set(SPNG_LIBRARIES ${SPNG_LIBRARY})
278
    else()
279
      if(PkgConfig_FOUND)
280
        pkg_check_modules(SPNG QUIET spng)
281
      endif()
282
    endif()
283
    if(SPNG_FOUND)
284
      set(HAVE_SPNG YES)
285
      message(STATUS "imgcodecs: PNG codec will use SPNG, version: ${SPNG_VERSION}")
286
    endif()
287
  endif()
288
  if(NOT SPNG_FOUND)
289
    set(SPNG_LIBRARY libspng CACHE INTERNAL "")
290
    set(SPNG_LIBRARIES ${SPNG_LIBRARY})
291
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libspng")
292
    set(SPNG_INCLUDE_DIR "${${SPNG_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "")
293
    set(SPNG_DEFINITIONS "")
294
    ocv_parse_header("${SPNG_INCLUDE_DIR}/spng.h" SPNG_VERSION_LINES SPNG_VERSION_MAJOR SPNG_VERSION_MINOR SPNG_VERSION_PATCH)
295

296
    set(HAVE_SPNG YES)
297
    set(SPNG_VERSION "${SPNG_VERSION_MAJOR}.${SPNG_VERSION_MINOR}.${SPNG_VERSION_PATCH}")
298
    message(STATUS "imgcodecs: PNG codec will use SPNG, version: ${SPNG_VERSION} ")
299
  endif()
300
endif()
301

302
# --- libpng (optional, should be searched after zlib) ---
303
if(NOT HAVE_SPNG AND WITH_PNG)
304
  if(BUILD_PNG)
305
    ocv_clear_vars(PNG_FOUND)
306
  else()
307
    ocv_clear_internal_cache_vars(PNG_LIBRARY PNG_INCLUDE_DIR)
308
    find_package(PNG QUIET)
309
  endif()
310

311
  if(NOT PNG_FOUND)
312
    ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_DEFINITIONS)
313

314
    set(PNG_LIBRARY libpng CACHE INTERNAL "")
315
    set(PNG_LIBRARIES ${PNG_LIBRARY})
316
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libpng")
317
    set(PNG_INCLUDE_DIR "${${PNG_LIBRARY}_SOURCE_DIR}" CACHE INTERNAL "")
318
    set(PNG_DEFINITIONS "")
319
    ocv_parse_header_version(PNG "${PNG_INCLUDE_DIR}/png.h" PNG_LIBPNG_VER_STRING)
320
  endif()
321

322
  set(HAVE_PNG YES)
323
endif()
324

325

326
# --- OpenEXR (optional) ---
327
if(WITH_OPENEXR)
328
  ocv_clear_vars(HAVE_OPENEXR)
329
  if(NOT BUILD_OPENEXR)
330
    ocv_clear_internal_cache_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
331
    include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
332
  endif()
333

334
  if(OPENEXR_FOUND)
335
    set(HAVE_OPENEXR YES)
336
  else()
337
    ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
338

339
    set(OPENEXR_LIBRARIES IlmImf)
340
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr")
341
    if(OPENEXR_VERSION)  # check via TARGET doesn't work
342
      set(BUILD_OPENEXR ON)
343
      set(HAVE_OPENEXR YES)
344
      set(BUILD_OPENEXR ON)
345
    endif()
346
  endif()
347
endif()
348

349
# --- GDAL (optional) ---
350
if(WITH_GDAL)
351
    find_package(GDAL QUIET)
352

353
    if(NOT GDAL_FOUND)
354
        set(HAVE_GDAL NO)
355
        ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES)
356
    else()
357
        set(HAVE_GDAL YES)
358
        ocv_include_directories(${GDAL_INCLUDE_DIR})
359
    endif()
360
endif()
361

362
if(WITH_GDCM)
363
  find_package(GDCM QUIET)
364
  if(NOT GDCM_FOUND)
365
    set(HAVE_GDCM NO)
366
    ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES)
367
  else()
368
    set(HAVE_GDCM YES)
369
    # include(${GDCM_USE_FILE})
370
    set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason
371
  endif()
372
endif()
373

374
if(WITH_IMGCODEC_HDR)
375
  set(HAVE_IMGCODEC_HDR ON)
376
elseif(DEFINED WITH_IMGCODEC_HDR)
377
  set(HAVE_IMGCODEC_HDR OFF)
378
endif()
379
if(WITH_IMGCODEC_SUNRASTER)
380
  set(HAVE_IMGCODEC_SUNRASTER ON)
381
elseif(DEFINED WITH_IMGCODEC_SUNRASTER)
382
  set(HAVE_IMGCODEC_SUNRASTER OFF)
383
endif()
384
if(WITH_IMGCODEC_PXM)
385
  set(HAVE_IMGCODEC_PXM ON)
386
elseif(DEFINED WITH_IMGCODEC_PXM)
387
  set(HAVE_IMGCODEC_PXM OFF)
388
endif()
389
if(WITH_IMGCODEC_PFM)
390
  set(HAVE_IMGCODEC_PFM ON)
391
elseif(DEFINED WITH_IMGCODEC_PFM)
392
  set(HAVE_IMGCODEC_PFM OFF)
393
endif()
394

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.