libtiff: TiffConfig.cmake.in: set TIFF_INCLUDE_DIR, TIFF_INCLUDE_DIRS and...

From eabde1635a230b9fd7b96e41e451d32bc90a11e4 Mon Sep 17 00:00:00 2001
From: Even Rouault <[EMAIL REDACTED]>
Date: Wed, 19 Jul 2023 22:05:15 +0000
Subject: [PATCH] TiffConfig.cmake.in: set TIFF_INCLUDE_DIR, TIFF_INCLUDE_DIRS
 and...

---
 build/gitlab-ci                           |  5 +++++
 build/test_cmake_no_target/CMakeLists.txt |  8 ++++++++
 build/test_cmake_no_target/test.c         |  7 +++++++
 cmake/TiffConfig.cmake.in                 | 24 ++++++++++++++++++++++-
 4 files changed, 43 insertions(+), 1 deletion(-)
 create mode 100644 build/test_cmake_no_target/CMakeLists.txt
 create mode 100644 build/test_cmake_no_target/test.c

diff --git a/build/gitlab-ci b/build/gitlab-ci
index accacc63..234a9302 100644
--- a/build/gitlab-ci
+++ b/build/gitlab-ci
@@ -57,6 +57,11 @@ cmake_build()
     cd cmake-test-build
     cmake -G "$1" -DCMAKE_BUILD_TYPE="$2" "-DTiff_DIR=$PWD/../cmake-install/lib/cmake/tiff" -S ../build/test_cmake -B .
     cmake --build .
+    cd ..
+    mkdir cmake-test-no-target-build
+    cd cmake-test-no-target-build
+    cmake -G "$1" -DCMAKE_BUILD_TYPE="$2" "-DTiff_DIR=$PWD/../cmake-install/lib/cmake/tiff" -S ../build/test_cmake_no_target -B .
+    cmake --build .
     # Return to cmake-build for coverity_build()
     cd ../cmake-build
 }
diff --git a/build/test_cmake_no_target/CMakeLists.txt b/build/test_cmake_no_target/CMakeLists.txt
new file mode 100644
index 00000000..2fe1f141
--- /dev/null
+++ b/build/test_cmake_no_target/CMakeLists.txt
@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 3.9.0)
+project(test)
+
+find_package(Tiff CONFIG REQUIRED)
+
+add_executable(test test.c)
+target_include_directories(test PRIVATE ${TIFF_INCLUDE_DIR})
+target_link_libraries(test PRIVATE ${TIFF_LIBRARIES})
diff --git a/build/test_cmake_no_target/test.c b/build/test_cmake_no_target/test.c
new file mode 100644
index 00000000..011b53e1
--- /dev/null
+++ b/build/test_cmake_no_target/test.c
@@ -0,0 +1,7 @@
+#include "tiffio.h"
+
+int main()
+{
+    TIFFGetVersion();
+    return 0;
+}
diff --git a/cmake/TiffConfig.cmake.in b/cmake/TiffConfig.cmake.in
index 8e0fada2..fad966cf 100644
--- a/cmake/TiffConfig.cmake.in
+++ b/cmake/TiffConfig.cmake.in
@@ -1,6 +1,28 @@
 if(NOT "@BUILD_SHARED_LIBS@")
     # TODO: import dependencies
 endif()
+
+function(set_variable_from_rel_or_absolute_path var root rel_or_abs_path)
+    if(IS_ABSOLUTE "${rel_or_abs_path}")
+        set(${var} "${rel_or_abs_path}" PARENT_SCOPE)
+    else()
+        set(${var} "${root}/${rel_or_abs_path}" PARENT_SCOPE)
+    endif()
+endfunction()
+
+# Tell the user project where to find our headers and libraries
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" ABSOLUTE)
+get_filename_component(_DIR "${_DIR}" DIRECTORY)
+get_filename_component(_ROOT "${_DIR}/@PROJECT_ROOT_DIR@" ABSOLUTE)
+# Use _ROOT as prefix here for the possibility of relocation after installation.
+set_variable_from_rel_or_absolute_path("TIFF_INCLUDE_DIR" "${_ROOT}" "@CMAKE_INSTALL_INCLUDEDIR@")
+set(TIFF_INCLUDE_DIRS ${TIFF_INCLUDE_DIR})
+
+set(TIFF_LIBRARIES TIFF::tiff)
+
 if(NOT TARGET TIFF::tiff)
-    include("${CMAKE_CURRENT_LIST_DIR}/TiffTargets.cmake")
+    include("${_DIR}/TiffTargets.cmake")
 endif()
+
+unset (_ROOT)
+unset (_DIR)