Skip to content
Snippets Groups Projects
Commit 49ae62fe authored by Wuttke, Joachim's avatar Wuttke, Joachim Committed by Wuttke, Joachim
Browse files

using FindTIFF as submitted to CMake upstream

Our patch, https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4934,
is expected to be released with CMake 3.19. Therefore we shall removed
FindTIFF.cmake from the BornAgain sources, once our minimum required
CMake version has been incremented accordingly.
parent 80aa1908
No related branches found
No related tags found
No related merge requests found
......@@ -43,7 +43,7 @@ endif()
# --- Tiff ---
if(BORNAGAIN_TIFF_SUPPORT)
message(STATUS "Looking for libtiff (use -DBORNAGAIN_TIFF_SUPPORT=OFF to disable)")
find_package(TIFF 4.0.2 REQUIRED)
find_package(TIFF 4.0.2 REQUIRED COMPONENTS CXX)
endif()
# --- Python ---
......
#.rst:
# FindTIFF
# --------
#
# Find TIFF and TIFF/C++libraries
#
# This module defines
#
# ::
#
# TIFF_INCLUDE_DIR, where to find tiff.h, etc.
# TIFF_LIBRARIES, libraries to link against to use TIFF.
# TIFF_FOUND, If false, do not try to use TIFF.
#
# also defined, but not for general use are
#
# ::
#
# TIFF_LIBRARY, where to find the TIFF library.
# This is a heavily patched version of the CMake module FindTIFF.cmake
# Copyright 2002-2009 Kitware, Inc.
# Copyright 2013- BornAgain team
# Distributed under the OSI-approved BSD License
if(WIN32)
find_path(TIFF_INCLUDE_DIR tiff.h PATHS ${CMAKE_INCLUDE_PATH}/libtiff NO_SYSTEM_ENVIRONMENT_PATH)
else()
find_path(TIFF_INCLUDE_DIR tiff.h)
endif()
# This FindTIFF.cmake has been contributed by us to upstream CMake.
# It is expected to be released with CMake 3.19.
# See https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4934.
# Therefore we shall delete this file from BornAgain in a couple of years
# when our minimum required CMake version has been incremented to 3.19.
# - JWu, jun2020.
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindTIFF
--------
Find the TIFF library (``libtiff``, https://libtiff.gitlab.io/libtiff/).
Optional COMPONENTS
^^^^^^^^^^^^^^^^^^^
This module supports the optional component `CXX`, for use with the COMPONENTS
argument of the :command:`find_package` command. This component has an associated
imported target, as described below.
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``TIFF::TIFF``
The TIFF library, if found.
``TIFF::CXX``
The C++ wrapper libtiffxx, if requested by the `COMPONENTS CXX` option,
if the compiler is not MSVC (which includes the C++ wrapper in libtiff),
and if found.
Result variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``TIFF_FOUND``
true if the TIFF headers and libraries were found
``TIFF_INCLUDE_DIR``
the directory containing the TIFF headers
``TIFF_INCLUDE_DIRS``
the directory containing the TIFF headers
``TIFF_LIBRARIES``
TIFF libraries to be linked
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``TIFF_INCLUDE_DIR``
the directory containing the TIFF headers
``TIFF_LIBRARY_RELEASE``
the path to the TIFF library for release configurations
``TIFF_LIBRARY_DEBUG``
the path to the TIFF library for debug configurations
``TIFFXX_LIBRARY_RELEASE``
the path to the TIFFXX library for release configurations
``TIFFXX_LIBRARY_DEBUG``
the path to the TIFFXX library for debug configurations
#]=======================================================================]
set(TIFF_NAMES ${TIFF_NAMES} libtiff tiff libtiff3 tiff3)
find_library(TIFF_LIBRARY NAMES ${TIFF_NAMES})
cmake_policy(PUSH)
cmake_policy(SET CMP0057 NEW)
find_path(TIFF_INCLUDE_DIR tiff.h)
set(TIFF_NAMES ${TIFF_NAMES} tiff libtiff tiff3 libtiff3)
foreach(name ${TIFF_NAMES})
list(APPEND TIFF_NAMES_DEBUG "${name}d")
endforeach()
if(NOT TIFF_LIBRARY)
find_library(TIFF_LIBRARY_RELEASE NAMES ${TIFF_NAMES})
find_library(TIFF_LIBRARY_DEBUG NAMES ${TIFF_NAMES_DEBUG})
include(SelectLibraryConfigurations) # patched because we are outside CMake
select_library_configurations(TIFF)
mark_as_advanced(TIFF_LIBRARY_RELEASE TIFF_LIBRARY_DEBUG)
endif()
if(TIFF_INCLUDE_DIR AND EXISTS "${TIFF_INCLUDE_DIR}/tiffvers.h")
file(STRINGS "${TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str
......@@ -41,35 +93,109 @@ if(TIFF_INCLUDE_DIR AND EXISTS "${TIFF_INCLUDE_DIR}/tiffvers.h")
unset(tiff_version_str)
endif()
# handle the QUIETLY and REQUIRED arguments and set TIFF_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
foreach(_comp IN LISTS TIFF_FIND_COMPONENTS)
if(_comp STREQUAL "CXX")
if(MSVC)
# C++ bindings are built into the main tiff library.
set(TIFF_CXX_FOUND 1)
else()
foreach(name ${TIFF_NAMES})
list(APPEND TIFFXX_NAMES "${name}xx")
list(APPEND TIFFXX_NAMES_DEBUG "${name}xxd")
endforeach()
find_library(TIFFXX_LIBRARY_RELEASE NAMES ${TIFFXX_NAMES})
find_library(TIFFXX_LIBRARY_DEBUG NAMES ${TIFFXX_NAMES_DEBUG})
include(SelectLibraryConfigurations) # patched because we are outside CMake
select_library_configurations(TIFFXX)
mark_as_advanced(TIFFXX_LIBRARY_RELEASE TIFFXX_LIBRARY_DEBUG)
unset(TIFFXX_NAMES)
unset(TIFFXX_NAMES_DEBUG)
if(TIFFXX_LIBRARY)
set(TIFF_CXX_FOUND 1)
endif()
endif()
endif()
endforeach()
unset(_comp)
unset(TIFF_NAMES)
unset(TIFF_NAMES_DEBUG)
include(FindPackageHandleStandardArgs) # patched because we are outside CMake
FIND_PACKAGE_HANDLE_STANDARD_ARGS(TIFF
HANDLE_COMPONENTS
REQUIRED_VARS TIFF_LIBRARY TIFF_INCLUDE_DIR
VERSION_VAR TIFF_VERSION_STRING)
if(TIFF_FOUND)
set( TIFF_LIBRARIES ${TIFF_LIBRARY} )
endif()
set(TIFF_LIBRARIES ${TIFF_LIBRARY})
if("CXX" IN_LIST TIFF_FIND_COMPONENTS AND NOT MSVC)
list(APPEND TIFF_LIBRARIES ${TIFFXX_LIBRARY})
endif()
if(TIFF_FOUND)
message(STATUS "Found TIFF version ${TIFF_VERSION_STRING}, includes at ${TIFF_INCLUDE_DIR}, libraries at ${TIFF_LIBRARIES}")
if(NOT WIN32)
# looking for C++ version of library libtiffxx.so
list(LENGTH TIFF_LIBRARIES len)
if(len EQUAL 1)
get_filename_component(tiff_library_name ${TIFF_LIBRARIES} NAME_WE )
get_filename_component(tiff_path ${TIFF_LIBRARIES} DIRECTORY )
get_filename_component(tiff_ext ${TIFF_LIBRARIES} EXT )
set(cpp_tiff_library "${tiff_path}/${tiff_library_name}xx${tiff_ext}")
if(NOT EXISTS ${cpp_tiff_library})
message(FATAL_ERROR "Could NOT find TIFF/C++ library ${cpp_tiff_library}.")
endif()
message(STATUS "Found TIFF C++ library ${cpp_tiff_library}")
set(TIFF_LIBRARIES ${TIFF_LIBRARIES};${cpp_tiff_library})
endif()
set(TIFF_INCLUDE_DIRS "${TIFF_INCLUDE_DIR}")
if(NOT TARGET TIFF::TIFF)
add_library(TIFF::TIFF UNKNOWN IMPORTED)
if(TIFF_INCLUDE_DIRS)
set_target_properties(TIFF::TIFF PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${TIFF_INCLUDE_DIRS}")
endif()
if(EXISTS "${TIFF_LIBRARY}")
set_target_properties(TIFF::TIFF PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${TIFF_LIBRARY}")
endif()
if(EXISTS "${TIFF_LIBRARY_RELEASE}")
set_property(TARGET TIFF::TIFF APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(TIFF::TIFF PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
IMPORTED_LOCATION_RELEASE "${TIFF_LIBRARY_RELEASE}")
endif()
if(EXISTS "${TIFF_LIBRARY_DEBUG}")
set_property(TARGET TIFF::TIFF APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(TIFF::TIFF PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${TIFF_LIBRARY_DEBUG}")
endif()
endif()
if(NOT TARGET TIFF::CXX)
if(MSVC)
add_library(TIFF::CXX INTERFACE IMPORTED)
set_property(TARGET TIFF::CXX PROPERTY INTERFACE_LINK_LIBRARIES TIFF::TIFF)
else()
add_library(TIFF::CXX UNKNOWN IMPORTED)
set_property(TARGET TIFF::CXX PROPERTY INTERFACE_LINK_LIBRARIES TIFF::TIFF)
if(TIFF_INCLUDE_DIRS)
set_target_properties(TIFF::CXX PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${TIFF_INCLUDE_DIRS}")
endif()
if(EXISTS "${TIFFXX_LIBRARY}")
set_target_properties(TIFF::CXX PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
IMPORTED_LOCATION "${TIFFXX_LIBRARY}")
endif()
if(EXISTS "${TIFFXX_LIBRARY_RELEASE}")
set_property(TARGET TIFF::CXX APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(TIFF::CXX PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
IMPORTED_LOCATION_RELEASE "${TIFFXX_LIBRARY_RELEASE}")
endif()
if(EXISTS "${TIFFXX_LIBRARY_DEBUG}")
set_property(TARGET TIFF::CXX APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(TIFF::CXX PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
IMPORTED_LOCATION_DEBUG "${TIFFXX_LIBRARY_DEBUG}")
endif()
endif()
endif()
endif()
mark_as_advanced(TIFF_INCLUDE_DIR TIFF_LIBRARY TIFF_LIBRARY_DLL)
mark_as_advanced(TIFF_INCLUDE_DIR)
cmake_policy(POP)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment