1 # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
4 #[=======================================================================[.rst:
8 Find the TIFF library (``libtiff``, https://libtiff.gitlab.io/libtiff/).
13 This module supports the optional component `CXX`, for use with the COMPONENTS
14 argument of the :command:`find_package` command. This component has an associated
15 imported target, as described below.
22 This module defines the following :prop_tgt:`IMPORTED` targets:
25 The TIFF library, if found.
28 .. versionadded:: 3.19
30 The C++ wrapper libtiffxx, if requested by the `COMPONENTS CXX` option,
31 if the compiler is not MSVC (which includes the C++ wrapper in libtiff),
37 This module will set the following variables in your project:
40 true if the TIFF headers and libraries were found
42 the directory containing the TIFF headers
44 the directory containing the TIFF headers
46 TIFF libraries to be linked
51 The following cache variables may also be set:
54 the directory containing the TIFF headers
55 ``TIFF_LIBRARY_RELEASE``
56 the path to the TIFF library for release configurations
57 ``TIFF_LIBRARY_DEBUG``
58 the path to the TIFF library for debug configurations
59 ``TIFFXX_LIBRARY_RELEASE``
60 the path to the TIFFXX library for release configurations
61 ``TIFFXX_LIBRARY_DEBUG``
62 the path to the TIFFXX library for debug configurations
65 Debug and Release variants are found separately.
66 #]=======================================================================]
69 cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
72 if (TIFF_FIND_VERSION)
73 list(APPEND _TIFF_args
74 "${TIFF_FIND_VERSION}")
75 if (TIFF_FIND_VERSION_EXACT)
76 list(APPEND _TIFF_args
80 set(_TIFF_component_req)
81 set(_TIFF_component_opt)
82 foreach (_TIFF_component IN LISTS TIFF_FIND_COMPONENTS)
83 if (TIFF_FIND_REQUIRE_${_TIFF_component})
84 list(APPEND _TIFF_component_req
87 list(APPEND _TIFF_component_opt
91 unset(_TIFF_component)
92 if (_TIFF_component_req)
93 list(APPEND _TIFF_args
94 COMPONENTS "${_TIFF_component_req}")
96 unset(_TIFF_component_req)
97 if (_TIFF_component_opt)
98 list(APPEND _TIFF_args
99 OPTIONAL_COMPONENTS "${_TIFF_component_opt}")
101 unset(_TIFF_component_opt)
102 # Always find with QUIET to avoid noise when it is not found.
103 find_package(Tiff CONFIG QUIET ${_TIFF_args})
106 if (NOT TARGET TIFF::TIFF)
107 add_library(TIFF::TIFF IMPORTED INTERFACE)
108 set_target_properties(TIFF::TIFF PROPERTIES
109 INTERFACE_LINK_LIBRARIES TIFF::tiff)
111 get_property(TIFF_INCLUDE_DIRS TARGET TIFF::tiff PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
112 get_property(TIFF_LIBRARIES TARGET TIFF::tiff PROPERTY INTERFACE_LINK_LIBRARIES)
113 get_property(_TIFF_location TARGET TIFF::tiff PROPERTY IMPORTED_IMPLIB)
114 if (NOT _TIFF_location)
115 get_property(_TIFF_location_release TARGET TIFF::tiff PROPERTY IMPORTED_IMPLIB_RELEASE)
116 if (NOT _TIFF_location_release)
117 get_property(_TIFF_location_release TARGET TIFF::tiff PROPERTY IMPORTED_IMPLIB_RELWITHDEBINFO)
119 get_property(_TIFF_location_debug TARGET TIFF::tiff PROPERTY IMPORTED_IMPLIB_DEBUG)
120 if (_TIFF_location_release AND _TIFF_location_debug)
122 optimized "${_TIFF_location_release}"
123 debug "${_TIFF_location_debug}")
124 elseif (_TIFF_location_release)
125 set(_TIFF_location "${_TIFF_location_release}")
126 elseif (_TIFF_location_debug)
127 set(_TIFF_location "${_TIFF_location_debug}")
129 get_property(_TIFF_location_release TARGET TIFF::tiff PROPERTY LOCATION_RELEASE)
130 if (NOT _TIFF_location_release)
131 get_property(_TIFF_location_release TARGET TIFF::tiff PROPERTY LOCATION_RELWITHDEBINFO)
133 get_property(_TIFF_location_debug TARGET TIFF::tiff PROPERTY LOCATION_DEBUG)
134 if (_TIFF_location_release AND _TIFF_location_debug)
136 optimized "${_TIFF_location_release}"
137 debug "${_TIFF_location_debug}")
138 elseif (_TIFF_location_release)
139 set(_TIFF_location "${_TIFF_location_release}")
140 elseif (_TIFF_location_debug)
141 set(_TIFF_location "${_TIFF_location_debug}")
143 get_property(_TIFF_location TARGET TIFF::tiff PROPERTY LOCATION)
146 unset(_TIFF_location_release)
147 unset(_TIFF_location_debug)
149 list(INSERT TIFF_LIBRARIES 0
151 unset(_TIFF_location)
153 if("CXX" IN_LIST TIFF_FIND_COMPONENTS)
154 if (TARGET TIFF::CXX)
155 get_property(_TIFF_CXX_location TARGET TIFF::CXX PROPERTY IMPORTED_IMPLIB)
156 if (NOT _TIFF_CXX_location)
157 get_property(_TIFF_CXX_location_release TARGET TIFF::CXX PROPERTY IMPORTED_IMPLIB_RELEASE)
158 if (NOT _TIFF_CXX_location_release)
159 get_property(_TIFF_CXX_location_release TARGET TIFF::CXX PROPERTY IMPORTED_IMPLIB_RELWITHDEBINFO)
161 get_property(_TIFF_CXX_location_debug TARGET TIFF::CXX PROPERTY IMPORTED_IMPLIB_DEBUG)
162 if (_TIFF_CXX_location_release AND _TIFF_CXX_location_debug)
163 set(_TIFF_CXX_location
164 optimized "${_TIFF_CXX_location_release}"
165 debug "${_TIFF_CXX_location_debug}")
166 elseif (_TIFF_CXX_location_release)
167 set(_TIFF_CXX_location "${_TIFF_CXX_location_release}")
168 elseif (_TIFF_CXX_location_debug)
169 set(_TIFF_CXX_location "${_TIFF_CXX_location_debug}")
171 get_property(_TIFF_CXX_location_release TARGET TIFF::CXX PROPERTY LOCATION_RELEASE)
172 if (NOT _TIFF_CXX_location_release)
173 get_property(_TIFF_CXX_location_release TARGET TIFF::CXX PROPERTY LOCATION_RELWITHDEBINFO)
175 get_property(_TIFF_CXX_location_debug TARGET TIFF::CXX PROPERTY LOCATION_DEBUG)
176 if (_TIFF_CXX_location_release AND _TIFF_CXX_location_debug)
177 set(_TIFF_CXX_location
178 optimized "${_TIFF_CXX_location_release}"
179 debug "${_TIFF_CXX_location_debug}")
180 elseif (_TIFF_CXX_location_release)
181 set(_TIFF_CXX_location "${_TIFF_CXX_location_release}")
182 elseif (_TIFF_CXX_location_debug)
183 set(_TIFF_CXX_location "${_TIFF_CXX_location_debug}")
185 get_property(_TIFF_CXX_location TARGET TIFF::CXX PROPERTY LOCATION)
188 unset(_TIFF_CXX_location_release)
189 unset(_TIFF_CXX_location_debug)
191 list(INSERT TIFF_LIBRARIES 0
192 "${_TIFF_CXX_location}")
193 unset(_TIFF_CXX_location)
194 set(TIFF_CXX_FOUND 1)
196 set(TIFF_CXX_FOUND 0)
197 if (TIFF_FIND_REQUIRED_CXX)
199 list(APPEND TIFF_NOT_FOUND_REASON
200 "No C++ bindings target found")
204 set(TIFF_VERSION_STRING "${Tiff_VERSION}")
205 foreach (_TIFF_component IN LISTS TIFF_FIND_COMPONENTS)
206 set(TIFF_${_TIFF_component}_FOUND "${Tiff_${_TIFF_component}_FOUND}")
208 unset(_TIFF_component)
210 include(FindPackageHandleStandardArgs)
211 find_package_handle_standard_args(TIFF
213 REQUIRED_VARS Tiff_DIR
214 VERSION_VAR TIFF_VERSION_STRING)
220 find_path(TIFF_INCLUDE_DIR tiff.h)
222 set(TIFF_NAMES ${TIFF_NAMES} tiff libtiff tiff3 libtiff3)
223 foreach(name ${TIFF_NAMES})
224 list(APPEND TIFF_NAMES_DEBUG "${name}d")
228 find_library(TIFF_LIBRARY_RELEASE NAMES ${TIFF_NAMES})
229 find_library(TIFF_LIBRARY_DEBUG NAMES ${TIFF_NAMES_DEBUG})
230 include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
231 select_library_configurations(TIFF)
232 mark_as_advanced(TIFF_LIBRARY_RELEASE TIFF_LIBRARY_DEBUG)
235 if(TIFF_INCLUDE_DIR AND EXISTS "${TIFF_INCLUDE_DIR}/tiffvers.h")
236 file(STRINGS "${TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str
237 REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
239 string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*"
240 "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
241 unset(tiff_version_str)
244 foreach(_comp IN LISTS TIFF_FIND_COMPONENTS)
245 if(_comp STREQUAL "CXX")
247 # C++ bindings are built into the main tiff library.
248 set(TIFF_CXX_FOUND 1)
250 foreach(name ${TIFF_NAMES})
251 list(APPEND TIFFXX_NAMES "${name}xx")
252 list(APPEND TIFFXX_NAMES_DEBUG "${name}xxd")
254 find_library(TIFFXX_LIBRARY_RELEASE NAMES ${TIFFXX_NAMES})
255 find_library(TIFFXX_LIBRARY_DEBUG NAMES ${TIFFXX_NAMES_DEBUG})
256 include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
257 select_library_configurations(TIFFXX)
258 mark_as_advanced(TIFFXX_LIBRARY_RELEASE TIFFXX_LIBRARY_DEBUG)
260 unset(TIFFXX_NAMES_DEBUG)
262 set(TIFF_CXX_FOUND 1)
270 unset(TIFF_NAMES_DEBUG)
272 include(FindPackageHandleStandardArgs)
273 find_package_handle_standard_args(TIFF
275 REQUIRED_VARS TIFF_LIBRARY TIFF_INCLUDE_DIR
276 VERSION_VAR TIFF_VERSION_STRING)
279 set(TIFF_LIBRARIES ${TIFF_LIBRARY})
280 if("CXX" IN_LIST TIFF_FIND_COMPONENTS AND NOT MSVC)
281 list(APPEND TIFF_LIBRARIES ${TIFFXX_LIBRARY})
284 set(TIFF_INCLUDE_DIRS "${TIFF_INCLUDE_DIR}")
286 if(NOT TARGET TIFF::TIFF)
287 add_library(TIFF::TIFF UNKNOWN IMPORTED)
288 if(TIFF_INCLUDE_DIRS)
289 set_target_properties(TIFF::TIFF PROPERTIES
290 INTERFACE_INCLUDE_DIRECTORIES "${TIFF_INCLUDE_DIRS}")
292 if(EXISTS "${TIFF_LIBRARY}")
293 set_target_properties(TIFF::TIFF PROPERTIES
294 IMPORTED_LINK_INTERFACE_LANGUAGES "C"
295 IMPORTED_LOCATION "${TIFF_LIBRARY}")
297 if(EXISTS "${TIFF_LIBRARY_RELEASE}")
298 set_property(TARGET TIFF::TIFF APPEND PROPERTY
299 IMPORTED_CONFIGURATIONS RELEASE)
300 set_target_properties(TIFF::TIFF PROPERTIES
301 IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
302 IMPORTED_LOCATION_RELEASE "${TIFF_LIBRARY_RELEASE}")
304 if(EXISTS "${TIFF_LIBRARY_DEBUG}")
305 set_property(TARGET TIFF::TIFF APPEND PROPERTY
306 IMPORTED_CONFIGURATIONS DEBUG)
307 set_target_properties(TIFF::TIFF PROPERTIES
308 IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
309 IMPORTED_LOCATION_DEBUG "${TIFF_LIBRARY_DEBUG}")
313 if(NOT TARGET TIFF::CXX)
315 add_library(TIFF::CXX INTERFACE IMPORTED)
316 set_property(TARGET TIFF::CXX PROPERTY INTERFACE_LINK_LIBRARIES TIFF::TIFF)
318 add_library(TIFF::CXX UNKNOWN IMPORTED)
319 set_property(TARGET TIFF::CXX PROPERTY INTERFACE_LINK_LIBRARIES TIFF::TIFF)
320 if(TIFF_INCLUDE_DIRS)
321 set_target_properties(TIFF::CXX PROPERTIES
322 INTERFACE_INCLUDE_DIRECTORIES "${TIFF_INCLUDE_DIRS}")
324 if(EXISTS "${TIFFXX_LIBRARY}")
325 set_target_properties(TIFF::CXX PROPERTIES
326 IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
327 IMPORTED_LOCATION "${TIFFXX_LIBRARY}")
329 if(EXISTS "${TIFFXX_LIBRARY_RELEASE}")
330 set_property(TARGET TIFF::CXX APPEND PROPERTY
331 IMPORTED_CONFIGURATIONS RELEASE)
332 set_target_properties(TIFF::CXX PROPERTIES
333 IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
334 IMPORTED_LOCATION_RELEASE "${TIFFXX_LIBRARY_RELEASE}")
336 if(EXISTS "${TIFFXX_LIBRARY_DEBUG}")
337 set_property(TARGET TIFF::CXX APPEND PROPERTY
338 IMPORTED_CONFIGURATIONS DEBUG)
339 set_target_properties(TIFF::CXX PROPERTIES
340 IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
341 IMPORTED_LOCATION_DEBUG "${TIFFXX_LIBRARY_DEBUG}")
348 mark_as_advanced(TIFF_INCLUDE_DIR)