SDL: xcode: cmake scripts inside frameworks in side xcframework differ from the top cmake script

From 8954e42bcbecc5217752dad1dc79a595ea6fdfa3 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Wed, 22 May 2024 15:28:21 +0200
Subject: [PATCH] xcode: cmake scripts inside frameworks in side xcframework
 differ from the top cmake script

---
 .github/workflows/release.yml                 |  11 ++
 Xcode/SDL/SDL.xcodeproj/project.pbxproj       |   2 +-
 .../resources/CMake/sdl3-config-version.cmake |  27 +--
 .../resources/CMake/sdl3-config.cmake         |  76 ++-------
 Xcode/SDL/pkg-support/resources/ReadMe.txt    |  24 +--
 .../cmake/SDL3/sdl3-config-version.cmake      |  76 +++++++++
 .../share/cmake/SDL3/sdl3-config.cmake        | 154 ++++++++++++++++++
 7 files changed, 271 insertions(+), 99 deletions(-)
 create mode 100644 Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config-version.cmake
 create mode 100644 Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config.cmake

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 320b725d7f588..c82183b80aad8 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -168,6 +168,17 @@ jobs:
               -Werror=dev                                                   \
               -B build_darwin
           cmake --build build_darwin --config Release --verbose
+
+          cmake -S "${{ steps.src.outputs.path }}/cmake/test"                                                   \
+              -DTEST_FULL=FALSE                                                                                 \
+              -DTEST_STATIC=FALSE                                                                               \
+              -DTEST_TEST=FALSE                                                                                 \
+              -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}/SDL3.xcframework/macos-arm64_x86_64"  \
+              -DCMAKE_SYSTEM_NAME=Darwin                                                                        \
+              -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"                                                          \
+              -Werror=dev                                                                                       \
+              -B build_darwin_2
+          cmake --build build_darwin --config Release --verbose
       - name: 'CMake (configure + build) iOS'
         run: |
           cmake -S "${{ steps.src.outputs.path }}/cmake/test"               \
diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj
index cdfff5f92d5f6..376d42844b3fe 100644
--- a/Xcode/SDL/SDL.xcodeproj/project.pbxproj
+++ b/Xcode/SDL/SDL.xcodeproj/project.pbxproj
@@ -2624,7 +2624,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -ex\n\nmkdir -p build/dmg-tmp/share/cmake/SDL3\ncp -a build/SDL3.xcframework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\ncp pkg-support/resources/CMake/sdl3-config.cmake build/dmg-tmp/share/cmake/SDL3\ncp pkg-support/resources/CMake/sdl3-config-version.cmake build/dmg-tmp/share/cmake/SDL3\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL3 -srcfolder build/dmg-tmp build/SDL3.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
+			shellScript = "set -ex\n\nmkdir -p build/dmg-tmp/share/cmake/SDL3\ncp -a build/SDL3.xcframework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\ncp pkg-support/resources/share/cmake/SDL3/sdl3-config.cmake build/dmg-tmp/share/cmake/SDL3\ncp pkg-support/resources/share/cmake/SDL3/sdl3-config-version.cmake build/dmg-tmp/share/cmake/SDL3\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL3 -srcfolder build/dmg-tmp build/SDL3.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
 		};
 		F3B38CF0296F63D1005DA6D3 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
diff --git a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake
index 6c833a7f2ab06..74329c438b81c 100644
--- a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake
+++ b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake
@@ -1,31 +1,16 @@
 # based on the files generated by CMake's write_basic_package_version_file
 
 # SDL CMake version configuration file:
-# This file is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework
+# This file is meant to be placed in Resources/CMake of a SDL3 framework
 
 cmake_minimum_required(VERSION 3.12)
 
-get_filename_component(_sdl3_xcframework_parent_path "${CMAKE_CURRENT_LIST_DIR}" REALPATH)              # /share/cmake/SDL3/
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" REALPATH)       # /share/cmake/SDL3/
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share/cmake
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /
-set(_sdl3_xcframework "${_sdl3_xcframework_parent_path}/SDL3.xcframework")                              # /SDL3.xcframework
-set(_sdl3_framework "${_sdl3_xcframework}/macos-arm64_x86_64/SDL3.framework")                           # /SDL3.xcframework/macos-arm64_x86_64/SDL3.framework
-set(_sdl3_version_h "${_sdl3_framework}/Headers/SDL_version.h")                                         # /SDL3.xcframework/macos-arm64_x86_64/SDL3.framework/Headers/SDL_version.h
-
-if(NOT EXISTS "${_sdl3_version_h}")
-    message(AUTHOR_WARNING "Cannot not find ${_sdl3_framework}. This script is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework")
+if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h")
+    message(AUTHOR_WARNING "Could not find SDL_version.h. This script is meant to be placed in the Resources/CMake directory of SDL2.framework")
     return()
 endif()
 
-file(READ "${_sdl3_version_h}" _sdl_version_h)
-
-unset(_sdl3_xcframework_parent_path)
-unset(_sdl3_framework)
-unset(_sdl3_xcframework)
-unset(_sdl3_version_h)
-
+file(READ "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h" _sdl_version_h)
 string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_version_h}")
 set(_sdl_major "${CMAKE_MATCH_1}")
 string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_version_h}")
@@ -70,7 +55,3 @@ endif()
 if(NOT "${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
     set(PACKAGE_VERSION_UNSUITABLE TRUE)
 endif()
-
-if(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|iOS|tvOS)$")
-    set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
diff --git a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake
index 1e5151bd1b300..784d27dbb018c 100644
--- a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake
+++ b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake
@@ -1,5 +1,5 @@
-# SDL CMake configuration file:
-# This file is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework
+# SDL3 CMake configuration file:
+# This file is meant to be placed in Resources/CMake of a SDL3 framework
 
 # INTERFACE_LINK_OPTIONS needs CMake 3.12
 cmake_minimum_required(VERSION 3.12)
@@ -31,49 +31,15 @@ endmacro()
 
 set(SDL3_FOUND TRUE)
 
-macro(_check_target_is_simulator)
-    include(CheckCSourceCompiles)
-    check_c_source_compiles([===[
-    #include <TargetConditionals.h>
-    #if defined(TARGET_OS_SIMULATOR)
-    int target_is_simulator;
-    #endif
-    int main(int argc, char *argv[]) { return target_is_simulator; }
-    ]===] SDL_TARGET_IS_SIMULATOR)
-endmacro()
-
-if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
-    _check_target_is_simulator()
-    if(SDL_TARGET_IS_SIMULATOR)
-        set(_xcfw_target_subdir "ios-arm64_x86_64-simulator")
-    else()
-        set(_xcfw_target_subdir "ios-arm64")
-    endif()
-elseif(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
-    _check_target_is_simulator()
-    if(SDL_TARGET_IS_SIMULATOR)
-        set(_xcfw_target_subdir "tvos-arm64_x86_64-simulator")
-    else()
-        set(_xcfw_target_subdir "tvos-arm64")
-    endif()
-elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-    set(_xcfw_target_subdir "macos-arm64_x86_64")
-else()
-    message(WARNING "Unsupported Apple platform (${CMAKE_SYSTEM_NAME}) and broken sdl3-config-version.cmake")
-    set(SDL3_FOUND FALSE)
-    return()
-endif()
-
 # Compute the installation prefix relative to this file.
-get_filename_component(_sdl3_xcframework_parent_path "${CMAKE_CURRENT_LIST_DIR}" REALPATH)              # /share/cmake/SDL3/
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" REALPATH)       # /share/cmake/SDL3/
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share/cmake
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share
-get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /
-set_and_check(_sdl3_xcframework_path "${_sdl3_xcframework_parent_path}/SDL3.xcframework")               # /SDL3.xcframework
-set_and_check(_sdl3_framework_parent_path "${_sdl3_xcframework_path}/${_xcfw_target_subdir}")           # /SDL3.xcframework/macos-arm64_x86_64
-set_and_check(_sdl3_framework_path "${_sdl3_framework_parent_path}/SDL3.framework")                     # /SDL3.xcframework/macos-arm64_x86_64/SDL3.framework
-set_and_check(_sdl3_include_dirs "${_sdl3_framework_path}/Headers")
+set(_sdl3_framework_path "${CMAKE_CURRENT_LIST_DIR}")                               # > /SDL3.framework/Resources/CMake/
+get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" REALPATH)     # > /SDL3.framework/Versions/Current/Resources/CMake
+get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" REALPATH)     # > /SDL3.framework/Versions/A/Resources/CMake/
+get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH)         # > /SDL3.framework/Versions/A/Resources/
+get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH)         # > /SDL3.framework/Versions/A/
+get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH)         # > /SDL3.framework/Versions/
+get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH)         # > /SDL3.framework/
+get_filename_component(_sdl3_framework_parent_path "${_sdl3_framework_path}" PATH)  # > /
 
 
 # All targets are created, even when some might not be requested though COMPONENTS.
@@ -84,30 +50,17 @@ if(NOT TARGET SDL3::Headers)
     set_target_properties(SDL3::Headers
         PROPERTIES
             INTERFACE_COMPILE_OPTIONS "SHELL:-F \"${_sdl3_framework_parent_path}\""
-            INTERFACE_INCLUDE_DIRECTORIES "${_sdl3_include_dirs}"
     )
 endif()
 set(SDL3_Headers_FOUND TRUE)
 
 if(NOT TARGET SDL3::SDL3-shared)
     add_library(SDL3::SDL3-shared SHARED IMPORTED)
-    if(CMAKE_VERSION GREATER_EQUAL "3.28")
-        set_target_properties(SDL3::SDL3-shared
-            PROPERTIES
-                FRAMEWORK "TRUE"
-                IMPORTED_LOCATION "${_sdl3_xcframework_path}"
-                INTERFACE_LINK_LIBRARIES "SDL3::Headers"
-        )
-    else()
-        set_target_properties(SDL3::SDL3-shared
-            PROPERTIES
-                FRAMEWORK "TRUE"
-                IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3"
-                INTERFACE_LINK_LIBRARIES "SDL3::Headers"
-        )
-    endif()
     set_target_properties(SDL3::SDL3-shared
         PROPERTIES
+            FRAMEWORK "TRUE"
+            IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3"
+            INTERFACE_LINK_LIBRARIES "SDL3::Headers"
             COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED"
             INTERFACE_SDL3_SHARED "ON"
             COMPATIBLE_INTERFACE_STRING "SDL_VERSION"
@@ -120,11 +73,8 @@ set(SDL3_SDL3-static FALSE)
 
 set(SDL3_SDL3_test FALSE)
 
-unset(_sdl3_xcframework_parent_path)
-unset(_sdl3_xcframework_path)
 unset(_sdl3_framework_parent_path)
 unset(_sdl3_framework_path)
-unset(_sdl3_include_dirs)
 
 if(SDL3_SDL3-shared_FOUND)
     set(SDL3_SDL3_FOUND TRUE)
diff --git a/Xcode/SDL/pkg-support/resources/ReadMe.txt b/Xcode/SDL/pkg-support/resources/ReadMe.txt
index 27130884faea7..6ea93478fe97e 100644
--- a/Xcode/SDL/pkg-support/resources/ReadMe.txt
+++ b/Xcode/SDL/pkg-support/resources/ReadMe.txt
@@ -1,29 +1,29 @@
-The Simple DirectMedia Layer (SDL for short) is a cross-platform 
-library designed to make it easy to write multi-media software, 
+The Simple DirectMedia Layer (SDL for short) is a cross-platform
+library designed to make it easy to write multi-media software,
 such as games and emulators.
 
-The Simple DirectMedia Layer library source code is available from: 
+The Simple DirectMedia Layer library source code is available from:
 http://www.libsdl.org/
 
-This library is distributed under the terms of the zlib license: 
+This library is distributed under the terms of the zlib license:
 http://zlib.net/zlib_license.html
 
 
-This packages contains the SDL framework for macOS. 
-Conforming with Apple guidelines, this framework 
+This packages contains the SDL framework for macOS.
+Conforming with Apple guidelines, this framework
 contains both the SDL runtime component and development header files.
 
 
 To Install:
-Copy the SDL3.framework to /Library/Frameworks
+Copy "SDL3.xcframework" and "share" to /Library/Frameworks
 
-You may alternatively install it in <Your home directory>/Library/Frameworks 
+You may alternatively install it in <Your home directory>/Library/Frameworks
 if your access privileges are not high enough.
 
 
 Use in CMake projects:
-SDL3.framework can be used in CMake projects using the following pattern:
-```
+SDL3.xcframework can be used in CMake projects using the following pattern:
+```cmake
 find_package(SDL3 REQUIRED COMPONENTS SDL3)
 add_executable(my_game ${MY_SOURCES})
 target_link_libraries(my_game PRIVATE SDL3::SDL3)
@@ -35,10 +35,10 @@ https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search
 
 Additional References:
 
- - Screencast tutorials for getting started with OpenSceneGraph/macOS are 
+ - Screencast tutorials for getting started with OpenSceneGraph/macOS are
  	available at:
 	http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/MacOSXTips
-	Though these are OpenSceneGraph centric, the same exact concepts apply to 
+	Though these are OpenSceneGraph centric, the same exact concepts apply to
 	SDL, thus the videos are recommended for everybody getting started with
 	developing on macOS. (You can skim over the PlugIns stuff since SDL
 	doesn't have any PlugIns to worry about.)
diff --git a/Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config-version.cmake b/Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config-version.cmake
new file mode 100644
index 0000000000000..6c833a7f2ab06
--- /dev/null
+++ b/Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config-version.cmake
@@ -0,0 +1,76 @@
+# based on the files generated by CMake's write_basic_package_version_file
+
+# SDL CMake version configuration file:
+# This file is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework
+
+cmake_minimum_required(VERSION 3.12)
+
+get_filename_component(_sdl3_xcframework_parent_path "${CMAKE_CURRENT_LIST_DIR}" REALPATH)              # /share/cmake/SDL3/
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" REALPATH)       # /share/cmake/SDL3/
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share/cmake
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /
+set(_sdl3_xcframework "${_sdl3_xcframework_parent_path}/SDL3.xcframework")                              # /SDL3.xcframework
+set(_sdl3_framework "${_sdl3_xcframework}/macos-arm64_x86_64/SDL3.framework")                           # /SDL3.xcframework/macos-arm64_x86_64/SDL3.framework
+set(_sdl3_version_h "${_sdl3_framework}/Headers/SDL_version.h")                                         # /SDL3.xcframework/macos-arm64_x86_64/SDL3.framework/Headers/SDL_version.h
+
+if(NOT EXISTS "${_sdl3_version_h}")
+    message(AUTHOR_WARNING "Cannot not find ${_sdl3_framework}. This script is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework")
+    return()
+endif()
+
+file(READ "${_sdl3_version_h}" _sdl_version_h)
+
+unset(_sdl3_xcframework_parent_path)
+unset(_sdl3_framework)
+unset(_sdl3_xcframework)
+unset(_sdl3_version_h)
+
+string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_version_h}")
+set(_sdl_major "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_version_h}")
+set(_sdl_minor "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define[ \t]+SDL_MICRO_VERSION[ \t]+([0-9]+)" _sdl_micro_re "${_sdl_version_h}")
+set(_sdl_micro "${CMAKE_MATCH_1}")
+if(_sdl_major_re AND _sdl_minor_re AND _sdl_micro_re)
+    set(PACKAGE_VERSION "${_sdl_major}.${_sdl_minor}.${_sdl_micro}")
+else()
+    message(AUTHOR_WARNING "Could not extract version from SDL_version.h.")
+    return()
+endif()
+
+unset(_sdl_major_re)
+unset(_sdl_major)
+unset(_sdl_minor_re)
+unset(_sdl_minor)
+unset(_sdl_micro_re)
+unset(_sdl_micro)
+
+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()
+
+# The SDL3.xcframework only contains 64-bit archives
+if(NOT "${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+    set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
+
+if(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|iOS|tvOS)$")
+    set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config.cmake b/Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config.cmake
new file mode 100644
index 0000000000000..278cd3b20293c
--- /dev/null
+++ b/Xcode/SDL/pkg-support/resources/share/cmake/SDL3/sdl3-config.cmake
@@ -0,0 +1,154 @@
+# SDL3 CMake configuration file:
+# This file is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework
+
+# INTERFACE_LINK_OPTIONS needs CMake 3.12
+cmake_minimum_required(VERSION 3.12)
+
+include(FeatureSummary)
+set_package_properties(SDL3 PROPERTIES
+    URL "https://www.libsdl.org/"
+    DESCRIPTION "low level access to audio, keyboard, mouse, joystick, and graphics hardware"
+)
+
+# Copied from `configure_package_config_file`
+macro(set_and_check _var _file)
+    set(${_var} "${_file}")
+    if(NOT EXISTS "${_file}")
+        message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
+    endif()
+endmacro()
+
+# Copied from `configure_package_config_file`
+macro(check_required_components _NAME)
+    foreach(comp ${${_NAME}_FIND_COMPONENTS})
+        if(NOT ${_NAME}_${comp}_FOUND)
+            if(${_NAME}_FIND_REQUIRED_${comp})
+                set(${_NAME}_FOUND FALSE)
+            endif()
+        endif()
+    endforeach()
+endmacro()
+
+set(SDL3_FOUND TRUE)
+
+macro(_check_target_is_simulator)
+    include(CheckCSourceCompiles)
+    check_c_source_compiles([===[
+    #include <TargetConditionals.h>
+    #if defined(TARGET_OS_SIMULATOR)
+    int target_is_simulator;
+    #endif
+    int main(int argc, char *argv[]) { return target_is_simulator; }
+    ]===] SDL_TARGET_IS_SIMULATOR)
+endmacro()
+
+if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
+    _check_target_is_simulator()
+    if(SDL_TARGET_IS_SIMULATOR)
+        set(_xcfw_target_subdir "ios-arm64_x86_64-simulator")
+    else()
+        set(_xcfw_target_subdir "ios-arm64")
+    endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
+    _check_target_is_simulator()
+    if(SDL_TARGET_IS_SIMULATOR)
+        set(_xcfw_target_subdir "tvos-arm64_x86_64-simulator")
+    else()
+        set(_xcfw_target_subdir "tvos-arm64")
+    endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+    set(_xcfw_target_subdir "macos-arm64_x86_64")
+else()
+    message(WARNING "Unsupported Apple platform (${CMAKE_SYSTEM_NAME}) and broken sdl3-config-version.cmake")
+    set(SDL3_FOUND FALSE)
+    return()
+endif()
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_sdl3_xcframework_parent_path "${CMAKE_CURRENT_LIST_DIR}" REALPATH)              # /share/cmake/SDL3/
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" REALPATH)       # /share/cmake/SDL3/
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share/cmake
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /share
+get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH)           # /
+set_and_check(_sdl3_xcframework_path "${_sdl3_xcframework_parent_path}/SDL3.xcframework")               # /SDL3.xcframework
+set_and_check(_sdl3_framework_parent_path "${_sdl3_xcframework_path}/${_xcfw_target_subdir}")           # /SDL3.xcframework/macos-arm64_x86_64
+set_and_check(_sdl3_framework_path "${_sdl3_framework_parent_path}/SDL3.framework")                     # /SDL3.xcframework/macos-arm64_x86_64/SDL3.framework
+
+
+# All targets are created, even when some might not be requested though COMPONENTS.
+# This is done for compatibility with CMake generated SDL3-target.cmake files.
+
+if(NOT TARGET SDL3::Headers)
+    add_library(SDL3::Headers INTERFACE IMPORTED)
+    set_target_properties(SDL3::Headers
+        PROPERTIES
+            INTERFACE_COMPILE_OPTIONS "SHELL:-F \"${_sdl3_framework_parent_path}\""
+    )
+endif()
+set(SDL3_Headers_FOUND TRUE)
+
+if(NOT TARGET SDL3::SDL3-shared)
+    add_library(SDL3::SDL3-shared SHARED IMPORTED)
+    if(CMAKE_VERSION GREATER_EQUAL "3.28")
+        set_target_properties(SDL3::SDL3-shared
+            PROPERTIES
+                FRAMEWORK "TRUE"
+                IMPORTED_LOCATION "${_sdl3_xcframework_path}"
+                INTERFACE_LINK_LIBRARIES "SDL3::Headers"
+        )
+    else()
+        set_target_properties(SDL3::SDL3-shared
+            PROPERTIES
+                FRAMEWORK "TRUE"
+                IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3"
+                INTERFACE_LINK_LIBRARIES "SDL3::Headers"
+        )
+    endif()
+    set_target_properties(SDL3::SDL3-shared
+        PROPERTIES
+            COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED"
+            INTERFACE_SDL3_SHARED "ON"
+            COMPATIBLE_INTERFACE_STRING "SDL_VERSION"
+            INTERFACE_SDL_VERSION "SDL3"
+    )
+endif()
+set(SDL3_SDL3-shared_FOUND TRUE)
+
+set(SDL3_SDL3-static FALSE)
+
+set(SDL3_SDL3_test FALSE)
+
+unset(_sdl3_xcframework_parent_path)
+unset(_sdl3_xcframework_path)
+unset(_sdl3_framework_parent_path)
+unset(_sdl3_framework_path)
+unset(_sdl3_include_dirs)
+
+if(SDL3_SDL3-shared_FOUND)
+    set(SDL3_SDL3_FOUND TRUE)
+endif()
+
+function(_sdl_create_target_alias_compat NEW_TARGET TARGET)
+    if(CMAKE_VERSION VERSION_LESS "3.18")
+        # Aliasing local targets is not supported on CMake < 3.18, so make it global.
+        add_library(${NEW_TARGET} INTERFACE IMPORTED)
+        set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}")
+    else()
+        add_library(${NEW_TARGET} ALIAS ${TARGET})
+    endif()
+endfunction()
+
+# Make sure SDL3::SDL3 always exists
+if(NOT TARGET SDL3::SDL3)
+    if(TARGET SDL3::SDL3-shared)
+        _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-shared)
+    endif()
+endif()
+
+check_required_components(SDL3)
+
+set(SDL3_LIBRARIES SDL3::SDL3)
+set(SDL3_STATIC_LIBRARIES SDL3::SDL3-static)
+set(SDL3_STATIC_PRIVATE_LIBS)
+
+set(SDL3TEST_LIBRARY SDL3::SDL3_test)