OpenCVFindLibsGrfmt.cmake 7.27 KB
Newer Older
1 2 3
# ----------------------------------------------------------------------------
#  Detect 3rd-party image IO libraries
# ----------------------------------------------------------------------------
4

5
# --- zlib (required) ---
6
if(BUILD_ZLIB)
7
  ocv_clear_vars(ZLIB_FOUND)
8
else()
9
  find_package(ZLIB "${MIN_VER_ZLIB}")
Vadim Pisarevsky's avatar
Vadim Pisarevsky committed
10
  if(ZLIB_FOUND AND ANDROID)
11
    if(ZLIB_LIBRARIES MATCHES "/usr/(lib|lib32|lib64)/libz.so$")
Vadim Pisarevsky's avatar
Vadim Pisarevsky committed
12
      set(ZLIB_LIBRARIES z)
13
    endif()
14 15 16 17
  endif()
endif()

if(NOT ZLIB_FOUND)
18
  ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIRS)
19

20 21
  set(ZLIB_LIBRARY zlib)
  add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib")
22 23
  set(ZLIB_INCLUDE_DIRS "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}")
  set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
24 25

  ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION)
26 27
endif()

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
# --- libjpeg (optional) ---
if(WITH_JPEG)
  if(BUILD_JPEG)
    ocv_clear_vars(JPEG_FOUND)
  else()
    include(FindJPEG)
  endif()

  if(NOT JPEG_FOUND)
    ocv_clear_vars(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR)

    set(JPEG_LIBRARY libjpeg)
    set(JPEG_LIBRARIES ${JPEG_LIBRARY})
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg")
    set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}")
  endif()

  ocv_parse_header("${JPEG_INCLUDE_DIR}/jpeglib.h" JPEG_VERSION_LINES JPEG_LIB_VERSION)
  set(HAVE_JPEG YES)
endif()

# --- libtiff (optional, should be searched after zlib and libjpeg) ---
50 51
if(WITH_TIFF)
  if(BUILD_TIFF)
52
    ocv_clear_vars(TIFF_FOUND)
53 54
  else()
    include(FindTIFF)
55 56 57
    if(TIFF_FOUND)
      ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
    endif()
58 59
  endif()

60 61
  if(NOT TIFF_FOUND)
    ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR)
62

63 64 65 66 67 68
    set(TIFF_LIBRARY libtiff)
    set(TIFF_LIBRARIES ${TIFF_LIBRARY})
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libtiff")
    set(TIFF_INCLUDE_DIR "${${TIFF_LIBRARY}_SOURCE_DIR}" "${${TIFF_LIBRARY}_BINARY_DIR}")
    ocv_parse_header("${${TIFF_LIBRARY}_SOURCE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
  endif()
69

70 71 72
  if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION)
    set(TIFF_VERSION ${TIFF_VERSION_CLASSIC})
  endif()
73

74 75 76
  if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG)
    set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION})
  endif()
77

78 79 80 81 82 83 84 85
  if(NOT TIFF_VERSION_STRING AND TIFF_INCLUDE_DIR)
    list(GET TIFF_INCLUDE_DIR 0 _TIFF_INCLUDE_DIR)
    if(EXISTS "${_TIFF_INCLUDE_DIR}/tiffvers.h")
      file(STRINGS "${_TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
      string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
      unset(tiff_version_str)
    endif()
    unset(_TIFF_INCLUDE_DIR)
86
  endif()
87 88

  set(HAVE_TIFF YES)
89 90
endif()

91 92 93 94 95 96 97
# --- libwebp (optional) ---

if(WITH_WEBP)
  if(BUILD_WEBP)
    ocv_clear_vars(WEBP_FOUND WEBP_LIBRARY WEBP_LIBRARIES WEBP_INCLUDE_DIR)
  else()
    include(cmake/OpenCVFindWebP.cmake)
98 99 100
    if(WEBP_FOUND)
      set(HAVE_WEBP 1)
    endif()
101 102 103 104
  endif()
endif()

# --- Add libwebp to 3rdparty/libwebp and compile it if not available ---
105 106 107
if(WITH_WEBP AND NOT WEBP_FOUND
    AND (NOT ANDROID OR HAVE_CPUFEATURES)
)
108 109 110 111 112

  set(WEBP_LIBRARY libwebp)
  set(WEBP_LIBRARIES ${WEBP_LIBRARY})

  add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libwebp")
113
  set(WEBP_INCLUDE_DIR "${${WEBP_LIBRARY}_SOURCE_DIR}/src")
114
  set(HAVE_WEBP 1)
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
endif()

if(NOT WEBP_VERSION AND WEBP_INCLUDE_DIR)
  ocv_clear_vars(ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
  if(EXISTS "${WEBP_INCLUDE_DIR}/enc/vp8enci.h")
    ocv_parse_header("${WEBP_INCLUDE_DIR}/enc/vp8enci.h" WEBP_VERSION_LINES ENC_MAJ_VERSION ENC_MIN_VERSION ENC_REV_VERSION)
    set(WEBP_VERSION "${ENC_MAJ_VERSION}.${ENC_MIN_VERSION}.${ENC_REV_VERSION}")
  elseif(EXISTS "${WEBP_INCLUDE_DIR}/webp/encode.h")
    file(STRINGS "${WEBP_INCLUDE_DIR}/webp/encode.h" WEBP_ENCODER_ABI_VERSION REGEX "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)" )
    if(WEBP_ENCODER_ABI_VERSION MATCHES "#define[ \t]+WEBP_ENCODER_ABI_VERSION[ \t]+([x0-9a-f]+)")
        set(WEBP_ENCODER_ABI_VERSION "${CMAKE_MATCH_1}")
        set(WEBP_VERSION "encoder: ${WEBP_ENCODER_ABI_VERSION}")
    else()
      unset(WEBP_ENCODER_ABI_VERSION)
    endif()
  endif()
endif()
132

133
# --- libjasper (optional, should be searched after libjpeg) ---
134 135
if(WITH_JASPER)
  if(BUILD_JASPER)
136
    ocv_clear_vars(JASPER_FOUND)
137 138 139 140
  else()
    include(FindJasper)
  endif()

141 142
  if(NOT JASPER_FOUND)
    ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR)
143

144 145 146 147 148
    set(JASPER_LIBRARY libjasper)
    set(JASPER_LIBRARIES ${JASPER_LIBRARY})
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjasper")
    set(JASPER_INCLUDE_DIR "${${JASPER_LIBRARY}_SOURCE_DIR}")
  endif()
149

150
  set(HAVE_JASPER YES)
151

152 153 154
  if(NOT JASPER_VERSION_STRING)
    ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "")
  endif()
Vadim Pisarevsky's avatar
Vadim Pisarevsky committed
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 162 163
  else()
    include(FindPNG)
    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 169
      else()
        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 172 173
    endif()
  endif()

174 175
  if(NOT PNG_FOUND)
    ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS)
176

177 178 179 180 181 182 183
    set(PNG_LIBRARY libpng)
    set(PNG_LIBRARIES ${PNG_LIBRARY})
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libpng")
    set(PNG_INCLUDE_DIR "${${PNG_LIBRARY}_SOURCE_DIR}")
    set(PNG_DEFINITIONS "")
    ocv_parse_header("${PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE)
  endif()
184

185 186 187
  set(HAVE_PNG YES)
  set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}")
endif()
188

189
# --- OpenEXR (optional) ---
190
if(WITH_OPENEXR)
191 192 193 194 195 196
  if(BUILD_OPENEXR)
    ocv_clear_vars(OPENEXR_FOUND)
  else()
    include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
  endif()

197 198 199 200 201 202 203
  if(NOT OPENEXR_FOUND)
    ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)

    set(OPENEXR_LIBRARIES IlmImf)
    set(OPENEXR_ILMIMF_LIBRARY IlmImf)
    add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr")
  endif()
204

205
  set(HAVE_OPENEXR YES)
206
endif()
207 208 209

# --- GDAL (optional) ---
if(WITH_GDAL)
210
    find_package(GDAL QUIET)
211 212 213

    if(NOT GDAL_FOUND)
        set(HAVE_GDAL NO)
214
        ocv_clear_vars(GDAL_VERSION GDAL_LIBRARIES)
215 216
    else()
        set(HAVE_GDAL YES)
217
        ocv_include_directories(${GDAL_INCLUDE_DIR})
218 219
    endif()
endif()
220 221

if (WITH_GDCM)
222
  find_package(GDCM QUIET)
223 224 225 226 227 228 229 230 231
  if(NOT GDCM_FOUND)
    set(HAVE_GDCM NO)
    ocv_clear_vars(GDCM_VERSION GDCM_LIBRARIES)
  else()
    set(HAVE_GDCM YES)
    # include(${GDCM_USE_FILE})
    set(GDCM_LIBRARIES gdcmMSFF) # GDCM does not set this variable for some reason
  endif()
endif()