SDL_gpu_shadercross: Use SDL3_gpu_shadercross instead of unversioned SDL_gpu_shadercross

From 15d4bea20ff5d9fc81912f9e7474496c3eace6ab Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Fri, 25 Oct 2024 22:10:29 +0200
Subject: [PATCH] Use SDL3_gpu_shadercross instead of unversioned
 SDL_gpu_shadercross

---
 CMakeLists.txt                                | 113 +++++++++---------
 build-scripts/test-versioning.sh              |  81 +++++++++++++
 cmake/SDL3_gpu_shadercrossConfig.cmake.in     |  45 +++++++
 cmake/SDL_gpu_shadercrossConfig.cmake.in      |  45 -------
 ...cross.pc.in => sdl3-gpu-shadercross.pc.in} |   0
 .../SDL_gpu_shadercross.h                     |   7 ++
 src/SDL_gpu_shadercross.c                     |   2 +-
 src/cli.c                                     |   2 +-
 src/version.rc                                |  10 +-
 9 files changed, 198 insertions(+), 107 deletions(-)
 create mode 100755 build-scripts/test-versioning.sh
 create mode 100644 cmake/SDL3_gpu_shadercrossConfig.cmake.in
 delete mode 100644 cmake/SDL_gpu_shadercrossConfig.cmake.in
 rename cmake/{sdl-gpu-shadercross.pc.in => sdl3-gpu-shadercross.pc.in} (100%)
 rename include/{ => SDL3_gpu_shadercross}/SDL_gpu_shadercross.h (97%)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b20855c..684ca94 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,14 +1,14 @@
-# CMake Project for SDL_gpu_shadercross - Simple DirectMedia Layer Shader Cross Compiler
+# CMake Project for SDL3_gpu_shadercross - Simple DirectMedia Layer Shader Cross Compiler
 # Written by @thatcosmonaut
 cmake_minimum_required(VERSION 3.22)
 
 # Version
-set(MAJOR_VERSION "1")
-set(MINOR_VERSION "0")
-set(MICRO_VERSION "0")
+set(MAJOR_VERSION 3)
+set(MINOR_VERSION 0)
+set(MICRO_VERSION 0)
 set(SDL_REQUIRED_VERSION "3.1.3")
 
-project(SDL_gpu_shadercross LANGUAGES C VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}")
+project(SDL3_gpu_shadercross LANGUAGES C VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}")
 
 include(CMakeDependentOption)
 include("${CMAKE_CURRENT_LIST_DIR}/cmake/PrivateSdlFunctions.cmake")
@@ -40,70 +40,73 @@ endif()
 # Source lists
 set(SOURCE_FILES
 	# Public Headers
-	include/SDL_gpu_shadercross.h
+	include/SDL3_gpu_shadercross/SDL_gpu_shadercross.h
 	# Source Files
 	src/SDL_gpu_shadercross.c
 	src/spirv_cross_c.h
 	src/spirv.h
 )
 
-add_library(SDL_gpu_shadercross-shared SHARED ${SOURCE_FILES})
-add_library(SDL_gpu_shadercross::SDL_gpu_shadercross ALIAS SDL_gpu_shadercross-shared)
+add_library(SDL3_gpu_shadercross-shared SHARED ${SOURCE_FILES})
+add_library(SDL3_gpu_shadercross::SDL3_gpu_shadercross ALIAS SDL3_gpu_shadercross-shared)
 
-set_property(TARGET SDL_gpu_shadercross-shared PROPERTY DEFINE_SYMBOL DLL_EXPORT)
-sdl_add_warning_options(SDL_gpu_shadercross-shared WARNING_AS_ERROR ${ENABLE_WERROR})
-sdl_target_link_option_version_file(SDL_gpu_shadercross-shared "${CMAKE_CURRENT_SOURCE_DIR}/src/SDL_gpu_shadercross.sym")
+set_property(TARGET SDL3_gpu_shadercross-shared PROPERTY DEFINE_SYMBOL DLL_EXPORT)
+sdl_add_warning_options(SDL3_gpu_shadercross-shared WARNING_AS_ERROR ${ENABLE_WERROR})
+sdl_target_link_option_version_file(SDL3_gpu_shadercross-shared "${CMAKE_CURRENT_SOURCE_DIR}/src/SDL_gpu_shadercross.sym")
 
 # Build flags
 if(WIN32)
-	target_sources(SDL_gpu_shadercross-shared PRIVATE "src/version.rc")
-	set_property(TARGET SDL_gpu_shadercross-shared PROPERTY PREFIX "")
+	target_sources(SDL3_gpu_shadercross-shared PRIVATE "src/version.rc")
+	set_property(TARGET SDL3_gpu_shadercross-shared PROPERTY PREFIX "")
 endif()
-target_compile_features(SDL_gpu_shadercross-shared PRIVATE c_std_99)
+target_compile_features(SDL3_gpu_shadercross-shared PRIVATE c_std_99)
 
-# SDL_gpu_shadercross folders as includes, for other targets to consume
-target_include_directories(SDL_gpu_shadercross-shared PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
+# SDL3_gpu_shadercross folders as includes, for other targets to consume
+target_include_directories(SDL3_gpu_shadercross-shared PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>")
+target_include_directories(SDL3_gpu_shadercross-shared PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
 
 # MinGW builds should statically link libgcc
 if(MINGW)
-	target_link_libraries(SDL_gpu_shadercross-shared PRIVATE -static-libgcc)
+	target_link_options(SDL3_gpu_shadercross-shared PRIVATE "-static-libgcc")
 endif()
 
 # Soname
-set_target_properties(SDL_gpu_shadercross-shared PROPERTIES OUTPUT_NAME "SDL_gpu_shadercross"
+set_target_properties(SDL3_gpu_shadercross-shared PROPERTIES
+	OUTPUT_NAME "SDL3_gpu_shadercross"
 	SOVERSION "${SO_VERSION_MAJOR}"
 	VERSION "${SO_VERSION}"
 )
 
-target_link_libraries(SDL_gpu_shadercross-shared PRIVATE
+target_link_libraries(SDL3_gpu_shadercross-shared PRIVATE
 	SDL3::SDL3-shared
 )
 
 if(BUILD_STATIC)
 	find_package(SDL3 REQUIRED COMPONENTS Headers)
 
-	add_library(SDL_gpu_shadercross-static STATIC ${SOURCE_FILES})
-	add_library(SDL_gpu_shadercross::SDL_gpu_shadercross-static ALIAS SDL_gpu_shadercross-static)
-	sdl_add_warning_options(SDL_gpu_shadercross-static WARNING_AS_ERROR ${ENABLE_WERROR})
-	target_compile_features(SDL_gpu_shadercross-static PRIVATE c_std_99)
+	add_library(SDL3_gpu_shadercross-static STATIC ${SOURCE_FILES})
+	add_library(SDL3_gpu_shadercross::SDL3_gpu_shadercross-static ALIAS SDL3_gpu_shadercross-static)
+	sdl_add_warning_options(SDL3_gpu_shadercross-static WARNING_AS_ERROR ${ENABLE_WERROR})
+	target_compile_features(SDL3_gpu_shadercross-static PRIVATE c_std_99)
 
 	if(NOT MSVC)
-		set_property(TARGET SDL_gpu_shadercross-static PROPERTY OUTPUT_NAME "SDL_gpu_shadercross")
+		set_property(TARGET SDL3_gpu_shadercross-static PROPERTY OUTPUT_NAME "SDL3_gpu_shadercross")
 	endif()
 
-	# SDL_gpu_shadercross folders as includes, for other targets to consume
-	target_include_directories(SDL_gpu_shadercross-static PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
+	# SDL3_gpu_shadercross folders as includes, for other targets to consume
+	target_include_directories(SDL3_gpu_shadercross-static PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>")
+	target_include_directories(SDL3_gpu_shadercross-static PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
 
-	target_link_libraries(SDL_gpu_shadercross-static PUBLIC
+	target_link_libraries(SDL3_gpu_shadercross-static PUBLIC
 		SDL3::Headers
 	)
 endif()
 
-if(NOT TARGET SDL_gpu_shadercross::SDL_gpu_shadercross)
-	if(TARGET SDL_gpu_shadercross-shared)
-		add_library(SDL_gpu_shadercross::SDL_gpu_shadercross ALIAS SDL_gpu_shadercross-shared)
+if(NOT TARGET SDL3_gpu_shadercross::SDL3_gpu_shadercross)
+	if(TARGET SDL3_gpu_shadercross-shared)
+		add_library(SDL3_gpu_shadercross::SDL3_gpu_shadercross ALIAS SDL3_gpu_shadercross-shared)
 	else()
-		add_library(SDL_gpu_shadercross::SDL_gpu_shadercross ALIAS SDL_gpu_shadercross-static)
+		add_library(SDL3_gpu_shadercross::SDL3_gpu_shadercross ALIAS SDL3_gpu_shadercross-static)
 	endif()
 endif()
 
@@ -111,10 +114,10 @@ if(BUILD_CLI)
 	add_executable(shadercross src/cli.c)
 
 	if(BUILD_CLI_STATIC)
-		target_link_libraries(shadercross PRIVATE SDL_gpu_shadercross::SDL_gpu_shadercross-static)
+		target_link_libraries(shadercross PRIVATE SDL3_gpu_shadercross::SDL3_gpu_shadercross-static)
 		target_link_libraries(shadercross PRIVATE SDL3::SDL3-static)
 	else()
-		target_link_libraries(shadercross PRIVATE SDL_gpu_shadercross::SDL_gpu_shadercross)
+		target_link_libraries(shadercross PRIVATE SDL3_gpu_shadercross::SDL3_gpu_shadercross)
 		target_link_libraries(shadercross PRIVATE SDL3::SDL3)
 	endif()
 endif()
@@ -126,60 +129,60 @@ if(ENABLE_INSTALL)
 	else()
 		set(INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake")
 	endif()
-	set(SDLGPUSHADERCROSS_INSTALL_CMAKEDIR_ROOT "${INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL_gpu_shadercross cmake related files (SDL_gpu_shadercross subfolder for MSVC projects)")
+	set(SDLGPUSHADERCROSS_INSTALL_CMAKEDIR_ROOT "${INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3_gpu_shadercross cmake related files (SDL3_gpu_shadercross subfolder for MSVC projects)")
 	set(SDLGPUSHADERCROSS_PKGCONFIG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
 
 	if(WIN32 AND NOT MINGW)
 		set(SDLGPUSHADERCROSS_INSTALL_CMAKEDIR "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR_ROOT}")
 	else()
-		set(SDLGPUSHADERCROSS_INSTALL_CMAKEDIR "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR_ROOT}/SDL_gpu_shadercross")
+		set(SDLGPUSHADERCROSS_INSTALL_CMAKEDIR "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR_ROOT}/SDL3_gpu_shadercross")
 	endif()
 
-	if(TARGET SDL_gpu_shadercross-shared)
-		install(TARGETS SDL_gpu_shadercross-shared EXPORT SDL_gpu_shadercross-shared-export
+	if(TARGET SDL3_gpu_shadercross-shared)
+		install(TARGETS SDL3_gpu_shadercross-shared EXPORT SDL3_gpu_shadercross-shared-export
 			ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel
 			LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library
 			RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library
 		)
-		install(EXPORT SDL_gpu_shadercross-shared-export
-			FILE SDL_gpu_shadercross-shared-targets.cmake
-			NAMESPACE SDL_gpu_shadercross::
+		install(EXPORT SDL3_gpu_shadercross-shared-export
+			FILE SDL3_gpu_shadercross-shared-targets.cmake
+			NAMESPACE SDL3_gpu_shadercross::
 			DESTINATION "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR}"
 			COMPONENT devel
 		)
 	endif()
-	if(TARGET SDL_gpu_shadercross-static)
-		install(TARGETS SDL_gpu_shadercross-static EXPORT SDL_gpu_shadercross-static-export
+	if(TARGET SDL3_gpu_shadercross-static)
+		install(TARGETS SDL3_gpu_shadercross-static EXPORT SDL3_gpu_shadercross-static-export
 			ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel
 			LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library
 		)
-		install(EXPORT SDL_gpu_shadercross-static-export
-			FILE SDL_gpu_shadercross-static-targets.cmake
-			NAMESPACE SDL_gpu_shadercross::
+		install(EXPORT SDL3_gpu_shadercross-static-export
+			FILE SDL3_gpu_shadercross-static-targets.cmake
+			NAMESPACE SDL3_gpu_shadercross::
 			DESTINATION "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR}"
 			COMPONENT devel
 		)
 	endif()
 	install(
-		FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/SDL_gpu_shadercross.h"
-		DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" COMPONENT DEVEL
+		FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/SDL3_gpu_shadercross/SDL_gpu_shadercross.h"
+		DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3_gpu_shadercross" COMPONENT DEVEL
 	)
 	if(BUILD_CLI)
 		install(TARGETS shadercross RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
 	endif()
 
 	include(CMakePackageConfigHelpers)
-	configure_package_config_file(cmake/SDL_gpu_shadercrossConfig.cmake.in SDL_gpu_shadercrossConfig.cmake
+	configure_package_config_file(cmake/SDL3_gpu_shadercrossConfig.cmake.in SDL3_gpu_shadercrossConfig.cmake
 		NO_SET_AND_CHECK_MACRO
 		INSTALL_DESTINATION "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR}"
 	)
-	write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL_gpu_shadercrossConfigVersion.cmake"
+	write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL3_gpu_shadercrossConfigVersion.cmake"
 		COMPATIBILITY AnyNewerVersion
 	)
 	install(
 		FILES
-			"${CMAKE_CURRENT_BINARY_DIR}/SDL_gpu_shadercrossConfig.cmake"
-			"${CMAKE_CURRENT_BINARY_DIR}/SDL_gpu_shadercrossConfigVersion.cmake"
+			"${CMAKE_CURRENT_BINARY_DIR}/SDL3_gpu_shadercrossConfig.cmake"
+			"${CMAKE_CURRENT_BINARY_DIR}/SDL3_gpu_shadercrossConfigVersion.cmake"
 		DESTINATION "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR}"
 		COMPONENT devel
 	)
@@ -189,10 +192,10 @@ if(ENABLE_INSTALL)
 	set(SDL_PKGCONFIG_PREFIX "\${pcfiledir}/${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}")
 	set(PC_REQUIRED "")
 	set(PC_LIBS "")
-	configure_file(cmake/sdl-gpu-shadercross.pc.in sdl-gpu-shadercross.pc @ONLY)
+	configure_file(cmake/sdl3-gpu-shadercross.pc.in sdl3-gpu-shadercross.pc @ONLY)
 
-	# Always install sdl-gpu-shadercross.pc file: libraries might be different between config modes
-	install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl-gpu-shadercross.pc"
+	# Always install sdl3-gpu-shadercross.pc file: libraries might be different between config modes
+	install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl3-gpu-shadercross.pc"
 			DESTINATION "${SDLGPUSHADERCROSS_PKGCONFIG_INSTALLDIR}" COMPONENT devel)
 
 	install(FILES "LICENSE.txt"
@@ -210,7 +213,7 @@ if(ENABLE_INSTALL)
 		configure_file(cmake/CPackProjectConfig.cmake.in CPackProjectConfig.cmake @ONLY)
 		set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/CPackProjectConfig.cmake")
 		# CPACK_SOURCE_PACKAGE_FILE_NAME must end with "-src" (so we can block creating a source archive)
-		set(CPACK_SOURCE_PACKAGE_FILE_NAME "SDL_gpu_shadercross-${PROJECT_VERSION}-src")
+		set(CPACK_SOURCE_PACKAGE_FILE_NAME "SDL3_gpu_shadercross-${PROJECT_VERSION}-src")
 		set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/dist")
 		include(CPack)
 	endif()
diff --git a/build-scripts/test-versioning.sh b/build-scripts/test-versioning.sh
new file mode 100755
index 0000000..560a020
--- /dev/null
+++ b/build-scripts/test-versioning.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Copyright 2022 Collabora Ltd.
+# SPDX-License-Identifier: Zlib
+
+set -eu
+
+cd `dirname $0`/..
+
+# Needed so sed doesn't report illegal byte sequences on macOS
+export LC_CTYPE=C
+
+header=include/SDL3_gpu_shadercross/SDL_gpu_shadercross.h
+ref_major=$(sed -ne 's/^#define SDL_GPU_SHADERCROSS_MAJOR_VERSION  *//p' $header)
+ref_minor=$(sed -ne 's/^#define SDL_GPU_SHADERCROSS_MINOR_VERSION  *//p' $header)
+ref_micro=$(sed -ne 's/^#define SDL_GPU_SHADERCROSS_MICRO_VERSION  *//p' $header)
+ref_version="${ref_major}.${ref_minor}.${ref_micro}"
+
+tests=0
+failed=0
+
+ok () {
+    tests=$(( tests + 1 ))
+    echo "ok - $*"
+}
+
+not_ok () {
+    tests=$(( tests + 1 ))
+    echo "not ok - $*"
+    failed=1
+}
+
+major=$(sed -ne 's/^set(MAJOR_VERSION \([0-9]*\))$/\1/p' CMakeLists.txt)
+minor=$(sed -ne 's/^set(MINOR_VERSION \([0-9]*\))$/\1/p' CMakeLists.txt)
+micro=$(sed -ne 's/^set(MICRO_VERSION \([0-9]*\))$/\1/p' CMakeLists.txt)
+ref_sdl_req=$(sed -ne 's/^set(SDL_REQUIRED_VERSION \([0-9.]*\))$/\1/p' CMakeLists.txt)
+version="${major}.${minor}.${micro}"
+
+if [ "$ref_version" = "$version" ]; then
+    ok "CMakeLists.txt $version"
+else
+    not_ok "CMakeLists.txt $version disagrees with SDL_gpu_shadercross.h $ref_version"
+fi
+
+for rcfile in src/version.rc; do
+    tuple=$(sed -ne 's/^ *FILEVERSION *//p' "$rcfile" | tr -d '\r')
+    ref_tuple="${ref_major},${ref_minor},${ref_micro},0"
+
+    if [ "$ref_tuple" = "$tuple" ]; then
+        ok "$rcfile FILEVERSION $tuple"
+    else
+        not_ok "$rcfile FILEVERSION $tuple disagrees with SDL_gpu_shadercross.h $ref_tuple"
+    fi
+
+    tuple=$(sed -ne 's/^ *PRODUCTVERSION *//p' "$rcfile" | tr -d '\r')
+
+    if [ "$ref_tuple" = "$tuple" ]; then
+        ok "$rcfile PRODUCTVERSION $tuple"
+    else
+        not_ok "$rcfile PRODUCTVERSION $tuple disagrees with SDL_gpu_shadercross.h $ref_tuple"
+    fi
+
+    tuple=$(sed -Ene 's/^ *VALUE "FileVersion", "([0-9, ]*)\\0"\r?$/\1/p' "$rcfile" | tr -d '\r')
+    ref_tuple="${ref_major}, ${ref_minor}, ${ref_micro}, 0"
+
+    if [ "$ref_tuple" = "$tuple" ]; then
+        ok "$rcfile FileVersion $tuple"
+    else
+        not_ok "$rcfile FileVersion $tuple disagrees with SDL_gpu_shadercross.h $ref_tuple"
+    fi
+
+    tuple=$(sed -Ene 's/^ *VALUE "ProductVersion", "([0-9, ]*)\\0"\r?$/\1/p' "$rcfile" | tr -d '\r')
+
+    if [ "$ref_tuple" = "$tuple" ]; then
+        ok "$rcfile ProductVersion $tuple"
+    else
+        not_ok "$rcfile ProductVersion $tuple disagrees with SDL_gpu_shadercross.h $ref_tuple"
+    fi
+done
+
+echo "1..$tests"
+exit "$failed"
diff --git a/cmake/SDL3_gpu_shadercrossConfig.cmake.in b/cmake/SDL3_gpu_shadercrossConfig.cmake.in
new file mode 100644
index 0000000..de46cb4
--- /dev/null
+++ b/cmake/SDL3_gpu_shadercrossConfig.cmake.in
@@ -0,0 +1,45 @@
+# sdl3_gpu_shadercross cmake project-config input for CMakeLists.txt script
+
+include(FeatureSummary)
+set_package_properties(SDL3_gpu_shadercross PROPERTIES
+    URL "https://github.com/libsdl-org/SDL_gpu_shadercross/"
+    DESCRIPTION "Support support SPIR-V and HLSL on various backends"
+)
+
+set(SDL3_gpu_shadercross_FOUND ON)
+
+set(SDL3_gpu_SHADERCROSS_REQUIRED_VERSION  @SDL_REQUIRED_VERSION@)
+
+set(SDL3_gpu_shadercross_SDL3_gpu_shadercross-shared_FOUND FALSE)
+if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_gpu_shadercross-shared-targets.cmake")
+    include("${CMAKE_CURRENT_LIST_DIR}/SDL3_gpu_shadercross-shared.cmake")
+    set(SDL3_gpu_shadercross_SDL3_gpu_shadercross-shared_FOUND TRUE)
+endif()
+
+set(SDL3_gpu_shadercross_SDL3_gpu_shadercross-static FALSE)
+if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_gpu_shadercross-static-targets.cmake")
+    include("${CMAKE_CURRENT_LIST_DIR}/SDL3_gpu_shadercross-static.cmake")
+    set(SDL3_gpu_shadercross_SDL3_gpu_shadercross-static_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_gpu_shadercross::SDL3_gpu_shadercross always exists
+if(NOT TARGET SDL3_gpu_shadercross::SDL3_gpu_shadercross)
+    if(TARGET SDL3_gpu_shadercross::SDL3_gpu_shadercross)
+        _sdl_create_target_alias_compat(SDL3_gpu_shadercross::SDL3_gpu_shadercross SDL3_gpu_shadercross::SDL3_gpu_shadercross-shared)
+    elseif(TARGET SDL3_gpu_shadercross::SDL3_gpu_shadercross-static)
+        _sdl_create_target_alias_compat(SDL3_gpu_shadercross::SDL3_gpu_shadercross SDL3_gpu_shadercross::SDL3_gpu_shadercross-static)
+    endif()
+endif()
+
+@PACKAGE_INIT@
+check_required_components(SDL3_gpu_shadercross)
diff --git a/cmake/SDL_gpu_shadercrossConfig.cmake.in b/cmake/SDL_gpu_shadercrossConfig.cmake.in
deleted file mode 100644
index 5169bc8..0000000
--- a/cmake/SDL_gpu_shadercrossConfig.cmake.in
+++ /dev/null
@@ -1,45 +0,0 @@
-# sdl_gpu_shadercross cmake project-config input for CMakeLists.txt script
-
-include(FeatureSummary)
-set_package_properties(SDL_gpu_shadercross PROPERTIES
-    URL "https://github.com/libsdl-org/SDL_gpu_shadercross/"
-    DESCRIPTION "Support support SPIR-V and HLSL on various backends"
-)
-
-set(SDL_gpu_shadercross_FOUND ON)
-
-set(SDL_GPU_SHADERCROSS_REQUIRED_VERSION  @SDL_REQUIRED_VERSION@)
-
-set(SDL_gpu_shadercross_SDL_gpu_shadercross-shared_FOUND FALSE)
-if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL_gpu_shadercross-shared-targets.cmake")
-    include("${CMAKE_CURRENT_LIST_DIR}/SDL_gpu_shadercross-shared.cmake")
-    set(SDL_gpu_shadercross_SDL_gpu_shadercross-shared_FOUND TRUE)
-endif()
-
-set(SDL_gpu_shadercross_SDL_gpu_shadercross-static FALSE)
-if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL_gpu_shadercross-static-targets.cmake")
-    include("${CMAKE_CURRENT_LIST_DIR}/SDL_gpu_shadercross-static.cmake")
-    set(SDL_gpu_shadercross_SDL_gpu_shadercross-static_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 SDL_gpu_shadercross::SDL_gpu_shadercross always exists
-if(NOT TARGET SDL_gpu_shadercross::SDL_gpu_shadercross)
-    if(TARGET SDL_gpu_shadercross::SDL_gpu_shadercross)
-        _sdl_create_target_alias_compat(SDL_gpu_shadercross::SDL_gpu_shadercross SDL_gpu_shadercross::SDL_gpu_shadercross-shared)
-    elseif(TARGET SDL_gpu_shadercross::SDL_gpu_shadercross-static)
-        _sdl_create_target_alias_compat(SDL_gpu_shadercross::SDL_gpu_shadercross SDL_gpu_shadercross::SDL_gpu_shadercross-static)
-    endif()
-endif()
-
-@PACKAGE_INIT@
-check_required_components(SDL_gpu_shadercross)
diff --git a/cmake/sdl-gpu-shadercross.pc.in b/cmake/sdl3-gpu-shadercross.pc.in
similarity index 100%
rename from cmake/sdl-gpu-shadercross.pc.in
rename to cmake/sdl3-gpu-shadercross.pc.in
diff --git a/include/SDL_gpu_shadercross.h b/include/SDL3_gpu_shadercross/SDL_gpu_shadercross.h
similarity index 97%
rename from include/SDL_gpu_shadercross.h
rename to include/SDL3_gpu_shadercross/SDL_gpu_shadercross.h
index bcce37e..dd857e5 100644
--- a/include/SDL_gpu_shadercross.h
+++ b/include/SDL3_gpu_shadercross/SDL_gpu_shadercross.h
@@ -31,6 +31,13 @@
 extern "C" {
 #endif
 
+/**
+ * Printable format: "%d.%d.%d", MAJOR, MINOR, MICRO
+ */
+#define SDL_GPU_SHADERCROSS_MAJOR_VERSION 3
+#define SDL_GPU_SHADERCROSS_MINOR_VERSION 0
+#define SDL_GPU_SHADERCROSS_MICRO_VERSION 0
+
 #ifndef SDL_GPU_SHADERCROSS_SPIRVCROSS
 #define SDL_GPU_SHADERCROSS_SPIRVCROSS 1
 #endif /* SDL_GPU_SHADERCROSS_SPIRVCROSS */
diff --git a/src/SDL_gpu_shadercross.c b/src/SDL_gpu_shadercross.c
index e160a98..3ecb9e7 100644
--- a/src/SDL_gpu_shadercross.c
+++ b/src/SDL_gpu_shadercross.c
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-#include "SDL_gpu_shadercross.h"
+#include <SDL3_gpu_shadercross/SDL_gpu_shadercross.h>
 #include <SDL3/SDL_loadso.h>
 #include <SDL3/SDL_log.h>
 
diff --git a/src/cli.c b/src/cli.c
index 0098abe..396acfc 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -19,7 +19,7 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-#include "SDL_gpu_shadercross.h"
+#include <SDL3_gpu_shadercross/SDL_gpu_shadercross.h>
 #include <SDL3/SDL_log.h>
 #include <SDL3/SDL_iostream.h>
 
diff --git a/src/version.rc b/src/version.rc
index a3c0176..dd36b6c 100644
--- a/src/version.rc
+++ b/src/version.rc
@@ -9,8 +9,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,0,0
- PRODUCTVERSION 1,0,0,0
+ FILEVERSION 3,0,0,0
+ PRODUCTVERSION 3,0,0,0
  FILEFLAGSMASK 0x3fL
  FILEFLAGS 0x0L
  FILEOS 0x40004L
@@ -23,12 +23,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "\0"
             VALUE "FileDescription", "SDL_gpu_shadercross\0"
-            VALUE "FileVersion", "1, 0, 0, 0\0"
+            VALUE "FileVersion", "3, 0, 0, 0\0"
             VALUE "InternalName", "SDL_gpu_shadercross\0"
             VALUE "LegalCopyright", "Copyright (C) 2024 Sam Lantinga\0"
-            VALUE "OriginalFilename", "SDL_gpu_shadercross.dll\0"
+            VALUE "OriginalFilename", "SDL3_gpu_shadercross.dll\0"
             VALUE "ProductName", "Simple DirectMedia Layer\0"
-            VALUE "ProductVersion", "1, 0, 0, 0\0"
+            VALUE "ProductVersion", "3, 0, 0, 0\0"
         END
     END
     BLOCK "VarFileInfo"