SDL_image: Add XCode + MSVC cmake config files for redist SDK

From 15920661f278699aa626c95cbe3000c93adc2ca8 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 4 Jun 2022 02:39:33 +0200
Subject: [PATCH] Add XCode + MSVC cmake config files for redist SDK

---
 .../cmake/sdl2_image-config-version.cmake     | 54 ++++++++++++++
 .../pkg-support/cmake/sdl2_image-config.cmake | 73 +++++++++++++++++++
 .../CMake/sdl2_image-config-version.cmake     | 48 ++++++++++++
 .../resources/CMake/sdl2_image-config.cmake   | 61 ++++++++++++++++
 Xcode/pkg-support/resources/ReadMe.txt        | 12 ++-
 5 files changed, 247 insertions(+), 1 deletion(-)
 create mode 100644 VisualC/pkg-support/cmake/sdl2_image-config-version.cmake
 create mode 100644 VisualC/pkg-support/cmake/sdl2_image-config.cmake
 create mode 100644 Xcode/pkg-support/resources/CMake/sdl2_image-config-version.cmake
 create mode 100644 Xcode/pkg-support/resources/CMake/sdl2_image-config.cmake

diff --git a/VisualC/pkg-support/cmake/sdl2_image-config-version.cmake b/VisualC/pkg-support/cmake/sdl2_image-config-version.cmake
new file mode 100644
index 00000000..7fa639d3
--- /dev/null
+++ b/VisualC/pkg-support/cmake/sdl2_image-config-version.cmake
@@ -0,0 +1,54 @@
+# based on the files generated by CMake's write_basic_package_version_file
+
+# SDL2 CMake version configuration file:
+# This file is meant to be placed in a cmake subfolder of SDL2-devel-2.x.y-VC
+
+if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../include/SDL_image.h")
+    message(AUTHOR_WARNING "Could not find SDL_image.h. This script is meant to be placed in a CMake subfolder of SDL2_image-devel-2.x.y-VC")
+    return()
+endif()
+
+file(READ "${CMAKE_CURRENT_LIST_DIR}/../SDL_image.h" _sdl_image_h)
+string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_image_h}")
+set(_sdl_major "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_image_h}")
+set(_sdl_minor "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)" _sdl_patch_re "${_sdl_image_h}")
+set(_sdl_patch "${CMAKE_MATCH_1}")
+if(_sdl_major_re AND _sdl_minor_re AND _sdl_patch_re)
+    set(PACKAGE_VERSION "${_sdl_major}.${_sdl_minor}.${_sdl_patch}")
+else()
+    message(AUTHOR_WARNING "Could not extract version from SDL_image.h.")
+    return()
+endif()
+
+if(PACKAGE_FIND_VERSION_RANGE)
+    # Package version must be in the requested version range
+    if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
+        OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
+        OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
+        set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    else()
+        set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    endif()
+else()
+    if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+        set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    else()
+        set(PACKAGE_VERSION_COMPATIBLE TRUE)
+        if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+            set(PACKAGE_VERSION_EXACT TRUE)
+        endif()
+    endif()
+endif()
+
+# if the using project doesn't have CMAKE_SIZEOF_VOID_P set, fail.
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "")
+    set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT (CMAKE_SIZEOF_VOID_P STREQUAL "8" OR CMAKE_SIZEOF_VOID_P STREQUAL "4"))
+    set(PACKAGE_VERSION "${PACKAGE_VERSION} (32+64bit)")
+    set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/VisualC/pkg-support/cmake/sdl2_image-config.cmake b/VisualC/pkg-support/cmake/sdl2_image-config.cmake
new file mode 100644
index 00000000..d78871b4
--- /dev/null
+++ b/VisualC/pkg-support/cmake/sdl2_image-config.cmake
@@ -0,0 +1,73 @@
+# SDL2_image CMake configuration file:
+# This file is meant to be placed in a cmake subfolder of SDL2_image-devel-2.x.y-VC
+
+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"
+)
+
+cmake_minimum_required(VERSION 3.0)
+
+set(SDL2_image_FOUND TRUE)
+
+set(SDL2IMAGE_AVIF  FALSE)
+set(SDL2IMAGE_BMP   TRUE)
+set(SDL2IMAGE_GIF   TRUE)
+set(SDL2IMAGE_JPG   TRUE)
+set(SDL2IMAGE_JXL   FALSE)
+set(SDL2IMAGE_LBM   TRUE)
+set(SDL2IMAGE_PCX   TRUE)
+set(SDL2IMAGE_PNG   TRUE)
+set(SDL2IMAGE_PNM   TRUE)
+set(SDL2IMAGE_QOI   TRUE)
+set(SDL2IMAGE_SVG   TRUE)
+set(SDL2IMAGE_TGA   TRUE)
+set(SDL2IMAGE_TIF   FALSE)
+set(SDL2IMAGE_XCF   FALSE)
+set(SDL2IMAGE_XPM   TRUE)
+set(SDL2IMAGE_XV    TRUE)
+set(SDL2IMAGE_WEBP  FALSE)
+
+set(SDL2IMAGE_JPG_SAVE FALSE)
+set(SDL2IMAGE_PNG_SAVE FALSE)
+
+set(SDL2IMAGE_VENDORED  FALSE)
+
+set(SDL2IMAGE_BACKEND_IMAGEIO   FALSE)
+set(SDL2IMAGE_BACKEND_STB       TRUE)
+set(SDL2IMAGE_BACKEND_WIC       FALSE)
+
+if(CMAKE_SIZEOF_VOID_P STREQUAL "4")
+    set(_sdl_arch_subdir "x86")
+elseif(CMAKE_SIZEOF_VOID_P STREQUAL "8")
+    set(_sdl_arch_subdir "x64")
+else()
+    unset(_sdl_arch_subdir)
+    set(SDL2_image_FOUND FALSE)
+    return()
+endif()
+
+set(_sdl2image_incdir       "${CMAKE_CURRENT_LIST_DIR}/../include/SDL2")
+set(_sdl2image_library      "${CMAKE_CURRENT_LIST_DIR}/../lib/${_sdl_arch_subdir}/SDL2_image.lib")
+set(_sdl2image_dll          "${CMAKE_CURRENT_LIST_DIR}/../lib/${_sdl_arch_subdir}/SDL2_image.dll")
+
+# All targets are created, even when some might not be requested though COMPONENTS.
+# This is done for compatibility with CMake generated SDL2_image-target.cmake files.
+
+if(NOT TARGET SDL2_image::SDL2_image)
+    add_library(SDL2_image::SDL2_image SHARED IMPORTED)
+    set_target_properties(SDL2_image::SDL2_image
+        PROPERTIES
+            INTERFACE_INCLUDE_DIRECTORIES "${_sdl2image_incdir}"
+            IMPORTED_IMPLIB "${_sdl2image_library}"
+            IMPORTED_LOCATION "${_sdl2image_dll}"
+            COMPATIBLE_INTERFACE_BOOL "SDL2_SHARED"
+            INTERFACE_SDL2_SHARED "ON"
+    )
+endif()
+
+unset(_sdl_arch_subdir)
+unset(_sdl2image_incdir)
+unset(_sdl2image_library)
+unset(_sdl2image_dll)
diff --git a/Xcode/pkg-support/resources/CMake/sdl2_image-config-version.cmake b/Xcode/pkg-support/resources/CMake/sdl2_image-config-version.cmake
new file mode 100644
index 00000000..a7762ebd
--- /dev/null
+++ b/Xcode/pkg-support/resources/CMake/sdl2_image-config-version.cmake
@@ -0,0 +1,48 @@
+# based on the files generated by CMake's write_basic_package_version_file
+
+# SDL2_image CMake version configuration file:
+# This file is meant to be placed in Resources/CMake of a SDL2_image framework
+
+if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_image.h")
+    message(AUTHOR_WARNING "Could not find SDL_image.h. This script is meant to be placed in the Resources/CMake directory of SDL2_image.framework")
+    return()
+endif()
+
+file(READ "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_image.h" _sdl_image_h)
+string(REGEX MATCH "#define[ \t]+SDL_IMAGE_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_image_h}")
+set(_sdl_major "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define[ \t]+SDL_IMAGE_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_image_h}")
+set(_sdl_minor "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define[ \t]+SDL_IMAGE_PATCHLEVEL[ \t]+([0-9]+)" _sdl_patch_re "${_sdl_image_h}")
+set(_sdl_patch "${CMAKE_MATCH_1}")
+if(_sdl_major_re AND _sdl_minor_re AND _sdl_patch_re)
+    set(PACKAGE_VERSION "${_sdl_major}.${_sdl_minor}.${_sdl_patch}")
+else()
+    message(AUTHOR_WARNING "Could not extract version from SDL_image.h.")
+    return()
+endif()
+
+if(PACKAGE_FIND_VERSION_RANGE)
+    # Package version must be in the requested version range
+    if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
+        OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
+        OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
+        set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    else()
+        set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    endif()
+else()
+    if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+        set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    else()
+        set(PACKAGE_VERSION_COMPATIBLE TRUE)
+        if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+            set(PACKAGE_VERSION_EXACT TRUE)
+        endif()
+    endif()
+endif()
+
+# if the using project doesn't have CMAKE_SIZEOF_VOID_P set, fail.
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "")
+    set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/Xcode/pkg-support/resources/CMake/sdl2_image-config.cmake b/Xcode/pkg-support/resources/CMake/sdl2_image-config.cmake
new file mode 100644
index 00000000..dc6e33e3
--- /dev/null
+++ b/Xcode/pkg-support/resources/CMake/sdl2_image-config.cmake
@@ -0,0 +1,61 @@
+# SDL2_image CMake configuration file:
+# This file is meant to be placed in Resources/CMake of a SDL2_image framework
+
+# INTERFACE_LINK_OPTIONS needs CMake 3.12
+cmake_minimum_required(VERSION 3.12)
+
+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 TRUE)
+
+set(SDL2IMAGE_AVIF  FALSE)
+set(SDL2IMAGE_BMP   TRUE)
+set(SDL2IMAGE_GIF   TRUE)
+set(SDL2IMAGE_JPG   TRUE)
+set(SDL2IMAGE_JXL   FALSE)
+set(SDL2IMAGE_LBM   TRUE)
+set(SDL2IMAGE_PCX   TRUE)
+set(SDL2IMAGE_PNG   TRUE)
+set(SDL2IMAGE_PNM   TRUE)
+set(SDL2IMAGE_QOI   TRUE)
+set(SDL2IMAGE_SVG   TRUE)
+set(SDL2IMAGE_TGA   TRUE)
+set(SDL2IMAGE_TIF   TRUE)
+set(SDL2IMAGE_XCF   TRUE)
+set(SDL2IMAGE_XPM   TRUE)
+set(SDL2IMAGE_XV    TRUE)
+set(SDL2IMAGE_WEBP  FALSE)
+
+set(SDL2IMAGE_JPG_SAVE FALSE)
+set(SDL2IMAGE_PNG_SAVE FALSE)
+
+set(SDL2IMAGE_VENDORED  FALSE)
+
+set(SDL2IMAGE_BACKEND_IMAGEIO   FALSE)
+set(SDL2IMAGE_BACKEND_STB       TRUE)
+set(SDL2IMAGE_BACKEND_WIC       FALSE)
+
+string(REGEX REPLACE "SDL2_image\\.framework.*" "SDL2_image.framework" _sdl2image_framework_path "${CMAKE_CURRENT_LIST_DIR}")
+string(REGEX REPLACE "SDL2_image\\.framework.*" "" _sdl2image_framework_parent_path "${CMAKE_CURRENT_LIST_DIR}")
+f
+# All targets are created, even when some might not be requested though COMPONENTS.
+# This is done for compatibility with CMake generated SDL2_image-target.cmake files.
+
+if(NOT TARGET SDL2_image::SDL2_image)
+    add_library(SDL2_image::SDL2_image INTERFACE IMPORTED)
+    set_target_properties(SDL2_image::SDL2_image
+        PROPERTIES
+            INTERFACE_COMPILE_OPTIONS "-F;${_sdl2image_framework_parent_path}"
+            INTERFACE_INCLUDE_DIRECTORIES "${_sdl2image_framework_path}/Headers"
+            INTERFACE_LINK_OPTIONS "-F;${_sdl2image_framework_parent_path};-framework;SDL2_image"
+            COMPATIBLE_INTERFACE_BOOL "SDL2_SHARED"
+            INTERFACE_SDL2_SHARED "ON"
+    )
+endif()
+
+unset(_sdl2image_framework_path)
+unset(_sdl2image_framework_parent_path)
diff --git a/Xcode/pkg-support/resources/ReadMe.txt b/Xcode/pkg-support/resources/ReadMe.txt
index 73686f78..04edf70d 100644
--- a/Xcode/pkg-support/resources/ReadMe.txt
+++ b/Xcode/pkg-support/resources/ReadMe.txt
@@ -15,6 +15,16 @@ Copy the SDL2_image.framework to /Library/Frameworks
 You may alternatively install it in <your home directory>/Library/Frameworks if your access privileges are not high enough. (Be aware that the Xcode templates we provide in the SDL Developer Extras package may require some adjustment for your system if you do this.)
 
 
+Use in CMake projects:
+SDL2_image.framework can be used in CMake projects using the following pattern:
+```
+find_package(SDL2_image REQUIRED)
+add_executable(my_game ${MY_SOURCES})
+target_link_libraries(my_game PRIVATE SDL2_image::SDL2_image)
+```
+If SDL2_image.framework is installed in a non-standard location,
+please refer to the following link for ways to configure CMake:
+https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure
 
 
 (Partial) History of PB/Xcode projects:
@@ -22,5 +32,5 @@ You may alternatively install it in <your home directory>/Library/Frameworks if
 	Switched to 10.4 minimum requirement.
 	Switched to ImageIO backend for distribution.
 	Static libraries of libpng and libjpeg are no longer maintained and may eventually be removed.
-	
+
 2006-01-31 - First entry in history. Updated for Universal Binaries. Static libraries of libpng and libjpeg have been brought up-to-date and built as Universal.