SDL_image: Don't find SDL2 + add libavif + add CMAKE_MODULE_PATH in CMake configuration file

From a4478430126a4f11a8a9e1c39c406b116fa9a30a Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 4 Jun 2022 02:53:24 +0200
Subject: [PATCH] Don't find SDL2 + add libavif + add CMAKE_MODULE_PATH in
 CMake configuration file

---
 CMakeLists.txt            |  3 ++-
 SDL2_imageConfig.cmake.in | 45 ++++++++++++++++++++++++++-------------
 2 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2a89a736..70b34d4c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -81,6 +81,7 @@ option(SDL2IMAGE_XV "Support loading XV images" ON)
 cmake_dependent_option(SDL2IMAGE_JPG_SAVE "Add JPEG save support" ON SDL2IMAGE_JPG OFF)
 cmake_dependent_option(SDL2IMAGE_PNG_SAVE "Add PNG save support" ON SDL2IMAGE_PNG OFF)
 
+set(LIBAVIF_MINIMUM_VERSION "0.9.1")
 if(SDL2IMAGE_VENDORED AND SDL2IMAGE_AVIF)
     set(SDL2IMAGE_AVIF_VENDORED ON)
 else()
@@ -344,7 +345,7 @@ if(SDL2IMAGE_AVIF)
         endif()
     else()
         message(STATUS "${PROJECT_NAME}: Using system libavif")
-        find_package(libavif 0.9.1 REQUIRED)
+        find_package(libavif ${LIBAVIF_MINIMUM_VERSION} REQUIRED)
         list(APPEND PC_REQUIRES libavif)
     endif()
     if(SDL2IMAGE_AVIF_SHARED)
diff --git a/SDL2_imageConfig.cmake.in b/SDL2_imageConfig.cmake.in
index 6effe451..ae387195 100644
--- a/SDL2_imageConfig.cmake.in
+++ b/SDL2_imageConfig.cmake.in
@@ -1,5 +1,14 @@
+# sdl2_image cmake project-config input for CMakeLists.txt script
+
+include(FeatureSummary)
+set_package_properties(SDL2_image PROPERTIES
+    URL "https://www.libsdl.org/projects/SDL_image/"
+    DESCRIPTION "SDL_image is an image file loading library"
+)
+
 set(SDL2_image_FOUND ON)
 
+set(SDL2IMAGE_AVIF  @SDL2IMAGE_AVIF@)
 set(SDL2IMAGE_BMP   @SDL2IMAGE_BMP@)
 set(SDL2IMAGE_GIF   @SDL2IMAGE_GIF@)
 set(SDL2IMAGE_JPG   @SDL2IMAGE_JPG@)
@@ -9,7 +18,6 @@ set(SDL2IMAGE_PCX   @SDL2IMAGE_PCX@)
 set(SDL2IMAGE_PNG   @SDL2IMAGE_PNG@)
 set(SDL2IMAGE_PNM   @SDL2IMAGE_PNM@)
 set(SDL2IMAGE_QOI   @SDL2IMAGE_QOI@)
-set(SDL2IMAGE_STB   @SDL2IMAGE_STB@)
 set(SDL2IMAGE_SVG   @SDL2IMAGE_SVG@)
 set(SDL2IMAGE_TGA   @SDL2IMAGE_TGA@)
 set(SDL2IMAGE_TIF   @SDL2IMAGE_TIF@)
@@ -18,6 +26,9 @@ set(SDL2IMAGE_XPM   @SDL2IMAGE_XPM@)
 set(SDL2IMAGE_XV    @SDL2IMAGE_XV@)
 set(SDL2IMAGE_WEBP  @SDL2IMAGE_WEBP@)
 
+set(SDL2IMAGE_JPG_SAVE @SDL2IMAGE_JPG_SAVE@)
+set(SDL2IMAGE_PNG_SAVE @SDL2IMAGE_PNG_SAVE@)
+
 set(SDL2IMAGE_VENDORED  @SDL2IMAGE_VENDORED@)
 
 set(SDL2IMAGE_BACKEND_IMAGEIO   @SDL2IMAGE_BACKEND_IMAGEIO@)
@@ -26,8 +37,17 @@ set(SDL2IMAGE_BACKEND_WIC       @SDL2IMAGE_BACKEND_WIC@)
 
 set(SDL2IMAGE_SDL2_REQUIRED_VERSION  @SDL_REQUIRED_VERSION@)
 
+if(NOT SDL2IMAGE_VENDORED)
+    set(_sdl_cmake_module_path "${CMAKE_MODULE_PATH}")
+    list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
+endif()
+
 include(CMakeFindDependencyMacro)
 
+if(SDL2IMAGE_AVIF AND NOT SDL2IMAGE_VENDORED AND NOT TARGET avif)
+    find_dependency(libavif @LIBAVIF_MINIMUM_VERSION@)
+endif()
+
 if(SDL2IMAGE_JPG AND NOT SDL2IMAGE_VENDORED AND NOT TARGET JPEG::JPEG)
     find_dependency(JPEG)
 endif()
@@ -38,9 +58,6 @@ if(SDL2IMAGE_JXL AND NOT SDL2IMAGE_VENDORED AND NOT TARGET libjxl::libjxl)
 endif()
 
 if(SDL2IMAGE_PNG AND NOT SDL2IMAGE_VENDORED AND NOT TARGET PNG::PNG)
-    if(NOT SDL2IMAGE_VENDORED AND NOT TARGET ZLIB::ZLIB)
-        find_dependency(ZLIB)
-    endif()
     find_dependency(PNG)
 endif()
 
@@ -55,21 +72,19 @@ endif()
 
 #FIXME: can't add SDL2IMAGE_SDL2_REQUIRED_VERSION since not all SDL2 installs ship SDL2ConfigVersion.cmake
 if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_image-shared-targets.cmake")
-    if(NOT TARGET SDL2::SDL2)
-        find_dependency(SDL2)
-    endif()
-    if(NOT TARGET SDL2::SDL2)
-        message(WARNING "SDL2_image::SDL2_image requires a SDL2::SDL2 target")
-    endif()
     include("${CMAKE_CURRENT_LIST_DIR}/SDL2_image-shared-targets.cmake")
 endif()
 
 if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_image-static-targets.cmake")
-    if(NOT TARGET SDL2::SDL2-static)
-        find_dependency(SDL2)
-    endif()
-    if(NOT TARGET SDL2::SDL2-static)
-        message(WARNING "SDL2_image::SDL2_image-static requires a SDL2::SDL2-static target")
+    include(CheckLanguage)
+    check_language(CXX)
+    if(SDL2IMAGE_VENDORED AND NOT CMAKE_CXX_COMPILER AND NOT _sdl2image_nowarning)
+        message(WARNING "CXX language not enabled. Linking to SDL2_image::SDL2_image-static might fail.")
     endif()
     include("${CMAKE_CURRENT_LIST_DIR}/SDL2_image-static-targets.cmake")
 endif()
+
+if(NOT SDL2IMAGE_VENDORED)
+    set(CMAKE_MODULE_PATH "${_sdl_cmake_module_path}")
+    unset(_sdl_cmake_module_path)
+endif()