From fe12bf03d7e8c26f6982ded44cd77d12a0cf94e3 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sat, 31 Jan 2026 20:42:22 -0330 Subject: [PATCH 01/51] Initial commit --- .../packagefiles/sdl3_image/meson.build | 1280 ++++++++++++++++- .../packagefiles/sdl3_image/meson.options | 34 + .../packagefiles/sdl3_image/src/meson.build | 2 +- 3 files changed, 1300 insertions(+), 16 deletions(-) create mode 100644 subprojects/packagefiles/sdl3_image/meson.options diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 7a6285e546..299e51e222 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,25 +1,1275 @@ +# list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + +major_version = 3 +minor_version = 4 +micro_version = 0 +version_string = to_string(major_version) + '.' + to_string(minor_version) + '.' + to_string(micro_version) + project('sdl3_image', 'c', - version: '3.2.4') + version: version_string) + +feature_args = [] + +sdl3_dep = dependency('sdl3', version: '>=3.4.0') # Minimum allowed SDL3 version, not SDL3_IMAGE version +libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) +libavif_dep = dependency('libavif', version: '>=0.1.0' required: false) + +deps = [sdl3_dep, libpng_dep, libavif_dep] + +# include("${CMAKE_CURRENT_LIST_DIR}/cmake/GetGitRevisionDescription.cmake") +# include("${CMAKE_CURRENT_LIST_DIR}/cmake/PrivateSdlFunctions.cmake") +# include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlcpu.cmake") +# include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlplatform.cmake") +# include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlmanpages.cmake") +# sdl_calculate_derived_version_variables(${MAJOR_VERSION} ${MINOR_VERSION} ${MICRO_VERSION}) + +sdlimage_rootproject = not meson.is_subproject() + +# Assume MSVC projects don't have a package manager and need vendored dependencies (by default). +# Most other platforms have some kind of package manager. +get_option('SDLIMAGE_VENDORED').enable_auto_if(meson.get_compiler('c') == 'MSVC') + +# if(NOT DEFINED CMAKE_FIND_PACKAGE_PREFER_CONFIG) +# set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) +# endif() + +# include(CMakeDependentOption) +# include(CMakePackageConfigHelpers) +# include(GNUInstallDirs) + +platform_supports_shared = target_machine.system() == 'emscripten' ? true : false + +get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'POSITION_INDEPENDENT_CODE: Target does not support shared libraries') + +# SDL3_image-3.4.0, CMakeLists.txt, line 65 +get_option('SDLIMAGE_INSTALL').require(!subproject('sdl3'), error_message: 'SDLIMAGE_INSTALL: Cannot install SDL3_image when SDL3 is built in same build') +get_option('SDLIMAGE_INSTALL').require(sdlimage_rootproject, error_message: 'SDLIMAGE_INSTALL: Cannot install SDL3_image when it is a subproject') + +# cmake_dependent_option(SDLIMAGE_INSTALL_MAN "Install man pages for SDL3_image" OFF "SDLIMAGE_INSTALL" OFF) +# cmake_dependent_option(SDLIMAGE_DEPS_SHARED "Load dependencies dynamically" ON PLATFORM_SUPPORTS_SHARED OFF) +# cmake_dependent_option(SDLIMAGE_RELOCATABLE "Create relocatable SDL_image package" "${MSVC}" SDLIMAGE_INSTALL OFF) +# option(SDLIMAGE_WERROR "Treat warnings as errors" OFF) + +# option(SDLIMAGE_STRICT "Fail when a dependency could not be found" OFF) +# set(required "") +# set(fatal_error "STATUS") +# if(SDLIMAGE_STRICT) +# set(required "REQUIRED") +# set(fatal_error "FATAL_ERROR") +# endif() + +get_option('SDLIMAGE_SAMPLES').enable_auto_if(sdlimage_rootproject) +get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') +get_option('SDLIMAGE_SAMPLES_INSTALL').enable_auto_if(get_option('SDLIMAGE_SAMPLES').enabled() and get_option('SDLIMAGE_INSTALL').enabled()) + +# SDLIMAGE_BACKEND_STB is included in the SDL3_image source +get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'SDLIMAGE_BACKEND_WIC: Windows Required') +get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.subsystem() == 'macos', error_message: 'SDLIMAGE_BACKEND_IMAGEIO: MacOS required') +get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(libpng_dep.found()) + +get_option('SDLIMAGE_ANI_SAVE').enable_auto_if(get_option('SDLIMAGE_ANI').enabled()) +get_option('SDLIMAGE_AVIF_SAVE').enable_auto_if(get_option('SDLIMAGE_AVIF').enabled()) +get_option('SDLIMAGE_BMP_SAVE').enable_auto_if(get_option('SDLIMAGE_BMP').enabled()) +get_option('SDLIMAGE_GIF_SAVE').enable_auto_if(get_option('SDLIMAGE_GIF').enabled()) +get_option('SDLIMAGE_JPG_SAVE').enable_auto_if(get_option('SDLIMAGE_JPG').enabled()) +get_option('SDLIMAGE_PNG_SAVE').enable_auto_if(get_option('SDLIMAGE_PNG').enabled()) +get_option('SDLIMAGE_TGA_SAVE').enable_auto_if(get_option('SDLIMAGE_TGA').enabled()) +get_option('SDLIMAGE_WEBP_SAVE').enable_auto_if(get_option('SDLIMAGE_WEBP').enabled()) +get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(get_option('SDLIMAGE_PNG').enabled()) + +sdlimage_avif_vendored = get_option('SDLIMAGE_VENDORED' and 'SDLIMAGE_AVIF') ? true : false +# cmake_dependent_option(SDLIMAGE_AVIF_SHARED "Dynamically load AVIF support (requires shared libavif)" +# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_AVIF ON) + +sdlimage_dav1d = sdlimage_avif_vendored ? true : false +sdlimage_dav1d = sdlimage_avif_vendored ? true : false +sdlimage_dav1d_vendored = sdlimage_avif_vendored ? true : false +sdlimage_aom = sdlimage_avif_vendored ? true : false +sdlimage_aom_vendored = sdlimage_avif_vendored ? true : false + +# if(SDLIMAGE_AVIF_SHARED) +# set(SDLIMAGE_DAV1D_SHARED ON) +# set(SDLIMAGE_AOM_SHARED ON) +# else() +# set(SDLIMAGE_DAV1D_SHARED OFF) +# set(SDLIMAGE_AOM_SHARED OFF) +# endif() + +# if(SDLIMAGE_VENDORED AND SDLIMAGE_JPG AND NOT (SDLIMAGE_BACKEND_WIC OR SDLIMAGE_BACKEND_STB OR SDLIMAGE_BACKEND_IMAGEIO)) +# set(SDLIMAGE_JPG_VENDORED ON) +# else() +# set(SDLIMAGE_JPG_VENDORED OFF) +# endif() +# cmake_dependent_option(SDLIMAGE_JPG_SHARED "Dynamically load JPG support (requires shared libjpeg)" +# ${SDLIMAGE_DEPS_SHARED} "SDLIMAGE_JPG;NOT SDLIMAGE_BACKEND_WIC;NOT SDLIMAGE_BACKEND_STB;NOT SDLIMAGE_BACKEND_IMAGEIO" OFF) + +# if(SDLIMAGE_VENDORED AND SDLIMAGE_JXL) +# set(SDLIMAGE_JXL_VENDORED ON) +# else() +# set(SDLIMAGE_JXL_VENDORED OFF) +# endif() +# cmake_dependent_option(SDLIMAGE_JXL_SHARED "Dynamically load JXL support (requires shared libjxl)" +# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_JXL OFF) + +# if(SDLIMAGE_VENDORED AND SDLIMAGE_PNG) +# set(SDLIMAGE_PNG_VENDORED ON) +# else() +# set(SDLIMAGE_PNG_VENDORED OFF) +# endif() +# cmake_dependent_option(SDLIMAGE_PNG_SHARED "Dynamically load PNG support (requires shared libpng)" +# ${SDLIMAGE_DEPS_SHARED} "SDLIMAGE_PNG" OFF) -sdl_dep = dependency('sdl3', version: '>=3.2.4') +# if(SDLIMAGE_VENDORED AND SDLIMAGE_TIF AND NOT (SDLIMAGE_BACKEND_IMAGEIO OR SDLIMAGE_BACKEND_WIC)) +# set(SDLIMAGE_TIF_VENDORED ON) +# else() +# set(SDLIMAGE_TIF_VENDORED OFF) +# endif() +# cmake_dependent_option(SDLIMAGE_TIF_SHARED "Dynamically load TIFF support (requires shared libtiff)" +# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_TIF OFF) -png_dep = dependency('libpng') -jpg_dep = dependency('libjpeg', required: false) +# if(SDLIMAGE_VENDORED AND SDLIMAGE_WEBP) +# set(SDLIMAGE_WEBP_VENDORED ON) +# else() +# set(SDLIMAGE_WEBP_VENDORED OFF) +# endif() +# cmake_dependent_option(SDLIMAGE_WEBP_SHARED "Dynamically load WEBP support (requires shared libwebp)" +# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_WEBP OFF) -img_args = [] +# if(SDLIMAGE_PNG_LIBPNG AND SDLIMAGE_PNG_VENDORED) +# set(SDLIMAGE_ZLIB ON) +# else() +# set(SDLIMAGE_ZLIB OFF) +# endif() -# These are enabled by default it seems. -#img_args = ['-DWANT_LIBPNG'] -#if jpg_dep.found() -# img_args += '-DWANT_JPEGLIB' -#endif +# if(SDLIMAGE_VENDORED AND SDLIMAGE_PNG_VENDORED) +# set(SDLIMAGE_ZLIB_VENDORED ON) +# else() +# set(SDLIMAGE_ZLIB_VENDORED OFF) +# endif() +# set(SDLIMAGE_ZLIB_SHARED OFF) +# # Save BUILD_SHARED_LIBS variable +# set(SDLIMAGE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) + +# set(sdl_required_components Headers) + +# if(SDLIMAGE_BUILD_SHARED_LIBS) +# set(sdl3_image_target_name SDL3_image-shared) +# set(sdl3_target_name SDL3::SDL3-shared) + +# list(APPEND sdl_required_components SDL3-shared) +# else() +# set(sdl3_image_target_name SDL3_image-static) +# set(sdl3_target_name SDL3::SDL3) +# endif() + +# if(NOT TARGET SDL3::Headers OR NOT TARGET ${sdl3_target_name}) +# find_package(SDL3 ${SDL_REQUIRED_VERSION} REQUIRED COMPONENTS ${sdl_required_components}) +# endif() + +# get_property(sdl3_version TARGET ${sdl3_target_name} PROPERTY SDL_FULL_VERSION) +# if(sdl3_version AND sdl3_version VERSION_LESS SDL_REQUIRED_VERSION) +# message(FATAL_ERROR "SDL3 ${SDL_REQUIRED_VERSION} is required (${sdl3_version} was found)") +# endif() + +# SDL_DetectTargetCPUArchitectures(SDL_CPU_NAMES) +# SDL_DetectCMakePlatform() + +# # Set PROJECT_VERSION of subprojects to "" if it's project call does not set VERSION +# cmake_policy(SET CMP0048 NEW) + +# # Allow cmake_dependent_option to use "Full Condition Syntax" +# if(POLICY CMP0127) +# cmake_policy(SET CMP0127 NEW) +# endif() + +# # OpenGL is required by dependencies of (dependencies of) some vendored libraries +# if(NOT DEFINED OpenGL_GL_PREFERENCE) +# set(OpenGL_GL_PREFERENCE GLVND) +# endif() + +# set(BUILD_SHARED_LIBS ${SDLIMAGE_BUILD_SHARED_LIBS}) subdir('src') -img_lib = library('sdl3_image', - img_src, - c_args: img_args, +# add_library(SDL3_image::${sdl3_image_target_name} ALIAS ${sdl3_image_target_name}) +# if(NOT TARGET SDL3_image::SDL3_image) +# add_library(SDL3_image::SDL3_image ALIAS ${sdl3_image_target_name}) +# endif() +# if("c_std_99" IN_LIST CMAKE_C_COMPILE_FEATURES) +# target_compile_features(${sdl3_image_target_name} PRIVATE c_std_99) +# else() +# message(WARNING "target_compile_features does not know c_std_99 for C compiler") +# endif() +# target_include_directories(${sdl3_image_target_name} +# PUBLIC +# "$" +# "$" +# ) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# BUILD_SDL +# SDL_BUILD_MAJOR_VERSION=${MAJOR_VERSION} +# SDL_BUILD_MINOR_VERSION=${MINOR_VERSION} +# SDL_BUILD_MICRO_VERSION=${MICRO_VERSION} +# ) +# # Make sure SDL3's include directory comes first +# target_include_directories(${sdl3_image_target_name} PRIVATE $) +# target_link_libraries(${sdl3_image_target_name} PUBLIC SDL3::Headers) +# if(SDLIMAGE_BUILD_SHARED_LIBS) +# target_link_libraries(${sdl3_image_target_name} PRIVATE SDL3::SDL3-shared) +# endif() +# sdl_add_warning_options(${sdl3_image_target_name} WARNING_AS_ERROR ${SDLIMAGE_WERROR}) +# if(WIN32 AND SDLIMAGE_BUILD_SHARED_LIBS) +# target_sources(${sdl3_image_target_name} PRIVATE +# src/version.rc +# ) +# if(MINGW) +# target_link_options(${sdl3_image_target_name} PRIVATE -static-libgcc) +# endif() +# endif() +# set_target_properties(${sdl3_image_target_name} PROPERTIES +# OUTPUT_NAME "SDL3_image" +# DEFINE_SYMBOL DLL_EXPORT +# EXPORT_NAME ${sdl3_image_target_name} +# C_VISIBILITY_PRESET "hidden" +# ) + +# sdl_target_link_option_version_file(${sdl3_image_target_name} "${CMAKE_CURRENT_SOURCE_DIR}/src/SDL_image.sym") + +# if(NOT ANDROID) +# set_target_properties(${sdl3_image_target_name} PROPERTIES +# SOVERSION "${SO_VERSION_MAJOR}" +# VERSION "${SO_VERSION}" +# ) +# if(APPLE) +# set_target_properties(${sdl3_image_target_name} PROPERTIES +# MACHO_COMPATIBILITY_VERSION "${DYLIB_COMPAT_VERSION}" +# MACHO_CURRENT_VERSION "${DYLIB_CURRENT_VERSION}" +# ) +# sdl_no_deprecated_errors(${sdl3_image_target_name}) +# set_property(TARGET ${sdl3_image_target_name} APPEND PROPERTY LINK_DEPENDS +# "${PROJECT_SOURCE_DIR}/src/SDL_image.exports") +# target_link_options(${sdl3_image_target_name} PRIVATE +# "SHELL:-Wl,-exported_symbols_list,${PROJECT_SOURCE_DIR}/src/SDL_image.exports") +# endif() +# endif() +# if(SDLIMAGE_BUILD_SHARED_LIBS) +# if(WIN32) +# set_target_properties(${sdl3_image_target_name} PROPERTIES +# PREFIX "" +# DLL_NAME_WITH_SOVERSION FALSE +# ) +# endif() +# else() +# if(MSVC) +# set_target_properties(${sdl3_image_target_name} PROPERTIES +# OUTPUT_NAME "SDL3_image-static" +# ) +# endif() +# endif() + +# # Use `Compatible Interface Properties` to ensure a shared SDL3_image is built with a shared SDL3 +# if(SDLIMAGE_BUILD_SHARED_LIBS) +# set_property(TARGET ${sdl3_image_target_name} PROPERTY INTERFACE_SDL3_SHARED TRUE) +# set_property(TARGET ${sdl3_image_target_name} APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED) +# endif() + +# if(SDLIMAGE_BUILD_SHARED_LIBS) +# sdl_target_link_options_no_undefined(${sdl3_image_target_name}) +# endif() + +# if(SDLIMAGE_BUILD_SHARED_LIBS) +# # Make sure static library dependencies are built with -fPIC when building a shared SDL3_image +# set(CMAKE_POSITION_INDEPENDENT_CODE ON) +# endif() + +# set(install_license_names) +# macro(register_license NAME FILE) +# list(APPEND install_license_names ${NAME}) +# set(install_license_${NAME} "${FILE}") +# endmacro() + +# set(INSTALL_EXTRA_TARGETS) +# set(INSTALL_EXTRA_CMAKE_MODULES) +# set(PC_LIBS) +# set(PC_REQUIRES) +# set(SDLIMAGE_BACKENDS) + +# list(APPEND SDLIMAGE_BACKENDS STB) +# set(SDLIMAGE_STB_ENABLED FALSE) +# if(SDLIMAGE_BACKEND_STB) +# set(SDLIMAGE_STB_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE USE_STBIMAGE) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS IMAGEIO) +# set(SDLIMAGE_IMAGEIO_ENABLED FALSE) +# if(APPLE) +# if(SDLIMAGE_BACKEND_IMAGEIO) +# enable_language(OBJC) +# set(SDLIMAGE_IMAGEIO_ENABLED TRUE) +# if(CMAKE_VERSION VERSION_LESS "3.24") +# set(genex_FRAMEWORK "1:") +# else() +# set(genex_FRAMEWORK "LINK_LIBRARY:FRAMEWORK,") +# endif() +# if(CMAKE_SYSTEM_NAME MATCHES ".*(Darwin|MacOS).*") +# target_link_libraries(${sdl3_image_target_name} PRIVATE $<${genex_FRAMEWORK}ApplicationServices>) +# target_link_libraries(${sdl3_image_target_name} PRIVATE $<${genex_FRAMEWORK}Foundation>) +# else() +# target_link_libraries(${sdl3_image_target_name} PRIVATE +# $<${genex_FRAMEWORK}CoreGraphics> +# $<${genex_FRAMEWORK}Foundation> +# $<${genex_FRAMEWORK}ImageIO> +# $<${genex_FRAMEWORK}MobileCoreServices> +# $<${genex_FRAMEWORK}UIKit> +# ) +# endif() +# target_link_libraries(${sdl3_image_target_name} PRIVATE objc) +# target_sources(${sdl3_image_target_name} PRIVATE +# src/IMG_ImageIO.m +# ) + +# if (SDLIMAGE_PNG AND NOT SDLIMAGE_BACKEND_STB) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE PNG_USES_IMAGEIO) +# endif() +# if (SDLIMAGE_JPG AND NOT SDLIMAGE_BACKEND_STB) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE JPG_USES_IMAGEIO) +# endif() +# else() +# target_compile_definitions(${sdl3_image_target_name} PRIVATE SDL_IMAGE_USE_COMMON_BACKEND) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS WIC) +# set(SDLIMAGE_WIC_ENABLED FALSE) +# if(SDLIMAGE_BACKEND_WIC) +# set(SDLIMAGE_WIC_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE SDL_IMAGE_USE_WIC_BACKEND) +# endif() + +# if(SDLIMAGE_ZLIB) +# if(SDLIMAGE_ZLIB_VENDORED) +# message(STATUS "${PROJECT_NAME}: Using vendored zlib") +# # disable build of zlib example programs: +# set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "zlib examples" FORCE) +# sdl_check_project_in_subfolder(external/zlib zlib SDLIMAGE_VENDORED) +# add_subdirectory(external/zlib external/zlib-build EXCLUDE_FROM_ALL) +# register_license(zlib external/zlib/LICENSE) +# set(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib-build") +# # ZLIB_INCLUDE_DIR variable is used by vendored libpng +# set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib-build" CACHE STRING "path of zlib, passed to libpng" FORCE) +# # ZLIB_LIBRARY variable is used by vendored libpng +# if(SDLIMAGE_ZLIB_SHARED) +# set(ZLIB_LIBRARY zlib) +# else() +# set(ZLIB_LIBRARY zlibstatic) +# set(SKIP_INSTALL_CONFIG_FILE ON) +# endif() +# if(NOT TARGET ZLIB::ZLIB) +# add_library(ZLIB::ZLIB ALIAS ${ZLIB_LIBRARY}) +# endif() +# if(NOT TARGET ZLIB::zlibstatic) +# add_library(ZLIB::zlibstatic ALIAS ${ZLIB_LIBRARY}) +# endif() +# # ZLIB_LIBRARIES variable is used by vendored libpng +# set(ZLIB_LIBRARIES "${ZLIB_LIBRARY}") +# # ZLIB_INCLUDE_DIRS variable is used by vendored libpng +# set(ZLIB_INCLUDE_DIRS "${ZLIB_INCLUDE_DIR}") +# target_include_directories(${ZLIB_LIBRARY} INTERFACE $) +# if(SDLIMAGE_ZLIB_SHARED OR (SDLIMAGE_PNG AND NOT SDLIMAGE_PNG_SHARED)) +# list(APPEND INSTALL_EXTRA_TARGETS ${ZLIB_LIBRARY}) +# endif() +# set_target_properties(${ZLIB_LIBRARY} PROPERTIES EXPORT_NAME external_zlib) +# add_library(SDL3_image::external_zlib ALIAS ${ZLIB_LIBRARY}) +# else() +# message(FATAL_ERROR "Internal error (zlib is only required when requesting vendored dependencies)") +# endif() +# endif() + +# if(SDLIMAGE_DAV1D) +# if(SDLIMAGE_DAV1D_VENDORED) +# message(STATUS "${PROJECT_NAME}: Using vendored dav1d") +# set(BUILD_SHARED_LIBS ${SDLIMAGE_DAV1D_SHARED}) +# add_subdirectory(external/dav1d external/dav1d-build EXCLUDE_FROM_ALL) +# register_license(dav1d external/dav1d/COPYING) +# if(DAV1D_ASM AND (SDL_CPU_X64 OR SDL_CPU_X86)) +# enable_language(ASM_NASM) +# endif() +# set(DAV1D_LIBRARY dav1d) +# if(SDLIMAGE_DAV1D_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS dav1d) +# endif() +# else() +# message(FATAL_ERROR "Internal error (dav1d is only required when requesting vendored dependencies)") +# endif() +# endif() + +# if(SDLIMAGE_AOM) +# if(SDLIMAGE_AOM_VENDORED) +# message(STATUS "${PROJECT_NAME}: Using vendored aom") +# set(BUILD_SHARED_LIBS ${SDLIMAGE_AOM_SHARED}) +# set(ENABLE_DOCS OFF CACHE BOOL "") +# set(ENABLE_EXAMPLES OFF CACHE BOOL "") +# set(ENABLE_TESTDATA OFF CACHE BOOL "") +# set(ENABLE_TESTS OFF CACHE BOOL "") +# set(ENABLE_TOOLS OFF CACHE BOOL "") +# if(SDLIMAGE_AOM_SHARED) +# set(CONFIG_AV1_DECODER 1 CACHE BOOL "" FORCE) +# else() +# set(CONFIG_AV1_DECODER 0 CACHE BOOL "" FORCE) +# endif() +# set(CONFIG_AV1_ENCODER 1 CACHE BOOL "" FORCE) +# # aom detects cpu using CMAKE_SYSTEM_NAME +# if(SDL_CPU_X86) +# set(AOM_TARGET_CPU "x86") +# elseif(SDL_CPU_X64) +# set(AOM_TARGET_CPU "x86_64") +# elseif(SDL_CPU_ARM32) +# set(AOM_TARGET_CPU "arm") +# set(AOM_NEON_INTRIN_FLAG "-mfpu=neon" CACHE STRING "AOM CFLAGS for enabling neon intrinsics") +# elseif(SDL_CPU_ARM64) +# set(AOM_TARGET_CPU "aarch64") +# endif() +# add_subdirectory(external/aom external/aom-build EXCLUDE_FROM_ALL) +# register_license(aom external/aom/LICENSE) +# set(AOM_LIBRARY aom) +# if(SDLIMAGE_AOM_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS aom) +# endif() +# else() +# message(FATAL_ERROR "Internal error (aom is only required when requesting vendored dependencies)") +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS AVIF) +# set(SDLIMAGE_AVIF_ENABLED FALSE) +if get_option('SDLIMAGE_AVIF'): + if get_option('SDLIMAGE_VENDORED'): +# if(SDLIMAGE_AVIF) +# if(SDLIMAGE_AVIF_VENDORED) +# set(SDLIMAGE_AVIF_ENABLED TRUE) +# message(STATUS "${PROJECT_NAME}: Using vendored libavif") +# sdl_check_project_in_subfolder(external/libavif libavif SDLIMAGE_VENDORED) +# set(SKIP_INSTALL_LIBRARIES TRUE) +# set(BUILD_SHARED_LIBS ${SDLIMAGE_AVIF_SHARED}) +# set(AVIF_CODEC_DAV1D ON CACHE BOOL "Use dav1d codec for decoding" FORCE) +# set(AVIF_LOCAL_DAV1D OFF CACHE BOOL "Build dav1d by libavif" FORCE) +# set(AVIF_CODEC_AOM ON CACHE BOOL "Use aom codec for decoding" FORCE) +# set(AVIF_LOCAL_AOM OFF CACHE BOOL "Build aom by libavif" FORCE) +# set(AVIF_CODEC_AOM_ENCODE ON CACHE BOOL "Enable aom encoder" FORCE) +# set(AVIF_CODEC_AOM_DECODE OFF CACHE BOOL "Enable aom decoder" FORCE) +# set(LIBAVIF_WITH_SHARPYUV_SDLIMAGE ${SDLIMAGE_WEBP} CACHE BOOL "Build libavif with sharpyuv support (re-use sharpyuv built by libwebp)" FORCE) +# set(BUILD_SHARED_LIBS ${SDLIMAGE_AVIF_SHARED}) +# set(AOM_LIBRARIES "aom" CACHE STRING "aom libraries" FORCE) +# add_subdirectory(external/libavif external/libavif-build EXCLUDE_FROM_ALL) +# register_license(avif external/libavif/LICENSE) +# if(SDLIMAGE_AVIF_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS avif) +# endif() +# set_target_properties(avif PROPERTIES EXPORT_NAME external_libavif) +# add_library(SDL3_image::external_libavif ALIAS avif) +# if(NOT SDLIMAGE_AVIF_SHARED) +# list(APPEND PC_LIBS -l$) +# endif() +# if(NOT MSVC AND NOT CMAKE_SYSTEM_NAME MATCHES ".*OpenBSD.*") +# sdl_check_linker_flag("-Wl,--no-undefined" LINKER_SUPPORTS_WL_NO_UNDEFINED) +# if(LINKER_SUPPORTS_WL_NO_UNDEFINED) +# target_link_options(avif PRIVATE "-Wl,--no-undefined") +# endif() +# endif() +# elseif(SDLIMAGE_AVIF_SHARED AND DEFINED SDLIMAGE_DYNAMIC_AVIF AND EXISTS "${SDLIMAGE_DYNAMIC_AVIF}") +# message(STATUS "${PROJECT_NAME}: Using libavif from CMake variable") +# set(SDLIMAGE_AVIF_ENABLED TRUE) +# else() +# find_package(libavif "${LIBAVIF_MINIMUM_VERSION}" QUIET ${required}) +# if(libavif_FOUND) +# message(STATUS "${PROJECT_NAME}: Using system libavif") +# set(SDLIMAGE_AVIF_ENABLED TRUE) +# if(NOT SDLIMAGE_AVIF_SHARED) +# list(APPEND PC_REQUIRES "libavif >= ${LIBAVIF_MINIMUM_VERSION}") +# endif() +# else() +# message(STATUS "libavif-${LIBAVIF_MINIMUM_VERSION} or compatible not found") +# message(${fatal_error} "libavif NOT found") +# endif() +# endif() +# if(SDLIMAGE_AVIF_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_AVIF +# SAVE_AVIF=$ +# ) +# if(SDLIMAGE_AVIF_SHARED) +# if(NOT DEFINED SDLIMAGE_DYNAMIC_AVIF) +# target_include_directories(${sdl3_image_target_name} PRIVATE +# $ +# $ +# $ +# ) +# if(SDLIMAGE_AVIF_VENDORED) +# add_dependencies(${sdl3_image_target_name} avif) +# endif() +# endif() +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_AVIF avif) +# message(STATUS "Dynamic libavif: ${SDLIMAGE_DYNAMIC_AVIF}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_AVIF_DYNAMIC=\"${SDLIMAGE_DYNAMIC_AVIF}\"") +# else() +# target_link_libraries(${sdl3_image_target_name} PRIVATE avif) +# endif() +# else() +# # Variable is used by test suite +# set(SDLIMAGE_AVIF_SAVE OFF) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS ANI) +# set(SDLIMAGE_ANI_ENABLED FALSE) +# if(SDLIMAGE_ANI) +# set(SDLIMAGE_ANI_ENABLED TRUE) +# if(SDLIMAGE_ANI_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_ANI +# SAVE_ANI=$ +# ) +# else() +# # Variable is used by test suite +# set(SDLIMAGE_ANI_SAVE OFF) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS BMP) +# set(SDLIMAGE_BMP_ENABLED FALSE) +# if(SDLIMAGE_BMP) +# set(SDLIMAGE_BMP_ENABLED TRUE) +# if(SDLIMAGE_BMP_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_BMP +# SAVE_BMP=$ +# ) +# else() +# # Variable is used by test suite +# set(SDLIMAGE_BMP_SAVE OFF) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS GIF) +# set(SDLIMAGE_GIF_ENABLED FALSE) +# if(SDLIMAGE_GIF) +# set(SDLIMAGE_GIF_ENABLED TRUE) +# if(SDLIMAGE_GIF_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_GIF +# SAVE_GIF=$ +# ) +# else() +# # Variable is used by test suite +# set(SDLIMAGE_GIF_SAVE OFF) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS JPG) +# set(SDLIMAGE_JPG_ENABLED FALSE) +# if(SDLIMAGE_JPG) +# if(SDLIMAGE_BACKEND_STB OR SDLIMAGE_BACKEND_WIC OR SDLIMAGE_BACKEND_IMAGEIO) +# set(SDLIMAGE_JPG_ENABLED TRUE) +# else() +# if(SDLIMAGE_JPG_VENDORED) +# set(SDLIMAGE_JPG_ENABLED TRUE) +# message(STATUS "${PROJECT_NAME}: Using vendored libjpeg") +# sdl_check_project_in_subfolder(external/jpeg libjpeg SDLIMAGE_VENDORED) +# set(BUILD_SHARED_LIBS ${SDLIMAGE_JPG_SHARED}) +# add_subdirectory(external/jpeg external/jpeg-build EXCLUDE_FROM_ALL) +# register_license(jpeg external/jpeg/COPYING) +# if(SDLIMAGE_JPG_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS jpeg) +# endif() +# set_target_properties(jpeg PROPERTIES EXPORT_NAME external_libjpeg) +# add_library(SDL3_image::external_libjpeg ALIAS jpeg) +# if(NOT SDLIMAGE_JPG_SHARED) +# list(APPEND PC_LIBS -l$) +# endif() +# elseif(SDLIMAGE_JPG_SHARED AND DEFINED SDLIMAGE_DYNAMIC_JPEG AND EXISTS "${SDLIMAGE_DYNAMIC_JPEG}") +# message(STATUS "${PROJECT_NAME}: Using libjpeg from CMake variable") +# set(SDLIMAGE_JPG_ENABLED TRUE) +# else() +# find_package(JPEG ${required}) +# if(JPEG_FOUND) +# message(STATUS "${PROJECT_NAME}: Using system libjpeg") +# set(SDLIMAGE_JPG_ENABLED TRUE) +# if(NOT SDLIMAGE_JPG_SHARED) +# list(APPEND PC_REQUIRES libjpeg) +# endif() +# else() +# message(${fatal_error} "libjpeg NOT found") +# endif() +# endif() +# if(SDLIMAGE_JPG_ENABLED) +# if(SDLIMAGE_JPG_SHARED) +# if(NOT DEFINED SDLIMAGE_DYNAMIC_JPEG) +# target_include_directories(${sdl3_image_target_name} PRIVATE +# $ +# $ +# $ +# ) +# if(SDLIMAGE_JPG_VENDORED) +# add_dependencies(${sdl3_image_target_name} JPEG::JPEG) +# endif() +# endif() +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_JPEG JPEG::JPEG) +# message(STATUS "Dynamic libjpeg: ${SDLIMAGE_DYNAMIC_JPEG}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_JPG_DYNAMIC=\"${SDLIMAGE_DYNAMIC_JPEG}\"") +# else() +# target_link_libraries(${sdl3_image_target_name} PRIVATE JPEG::JPEG) +# endif() +# endif() +# endif() +# if(SDLIMAGE_JPG_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_JPG +# SAVE_JPG=$ +# ) +# else() +# # Variable is used by test suite +# set(SDLIMAGE_JPG_SAVE OFF) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS JXL) +# set(SDLIMAGE_JXL_ENABLED FALSE) +# if(SDLIMAGE_JXL) +# if(SDLIMAGE_JXL_VENDORED) +# set(SDLIMAGE_JXL_ENABLED TRUE) +# enable_language(CXX) +# message(STATUS "${PROJECT_NAME}: Using vendored libjxl") +# # BUILD_TESTING variable is used by libjxl +# set(BUILD_TESTING OFF CACHE BOOL "build testing") +# # JPEGXL_ENABLE_BENCHMARK variable is used by libjxl +# set(JPEGXL_ENABLE_BENCHMARK OFF CACHE BOOL "libjpegxl benchmark" FORCE) +# # JPEGXL_ENABLE_TOOLS variable is used by libjxl +# set(JPEGXL_ENABLE_JNI OFF CACHE BOOL "build jpegxl jni" FORCE) +# # JPEGXL_ENABLE_SJPEG variable is used by libjxl +# set(JPEGXL_ENABLE_SJPEG OFF CACHE BOOL "build jpegxl sjpeg" FORCE) +# # JPEGXL_BUNDLE_SKCMS variable is used by libjxl +# set(JPEGXL_BUNDLE_SKCMS OFF CACHE BOOL "build jpegxl bundle sjpeg" FORCE) +# # JPEGXL_ENABLE_OPENEXR variable is used by libjxl +# set(JPEGXL_ENABLE_OPENEXR OFF CACHE BOOL "build jpegxl openxr" FORCE) +# # JPEGXL_ENABLE_MANPAGES variable is used by libjxl +# set(JPEGXL_ENABLE_MANPAGES OFF CACHE BOOL "libjxl manpage option" FORCE) +# # JPEGXL_ENABLE_PLUGINS variable is used by libjxl +# set(JPEGXL_ENABLE_PLUGINS OFF CACHE BOOL "libjxl manpage option" FORCE) +# # JPEGXL_ENABLE_SKCMS variable is used by libjxl +# set(JPEGXL_ENABLE_SKCMS OFF CACHE BOOL "libjxl skcms option" FORCE) +# # JPEGXL_FORCE_SYSTEM_HWY variable is used by libjxl +# set(JPEGXL_FORCE_SYSTEM_HWY OFF CACHE BOOL "libjxl highway option" FORCE) +# sdl_check_project_in_subfolder(external/libjxl libjxl SDLIMAGE_VENDORED) +# set(BUILD_SHARED_LIBS ${SDLIMAGE_JXL_SHARED}) +# add_subdirectory(external/libjxl external/libjxl-build EXCLUDE_FROM_ALL) +# register_license(jxl external/libjxl/LICENSE) +# if(SDLIMAGE_JXL_SHARED) +# set(jxl_lib jxl) +# set(jxl_install_libs brotlidec brotlicommon brotlienc jxl) +# else() +# set(jxl_lib jxl_dec-static) +# set(jxl_install_libs brotlidec brotlicommon hwy jxl_dec-static) +# list(APPEND PC_LIBS +# -l$ -l$ +# -l$ -l$ +# ) +# endif() +# if(SDLIMAGE_JXL_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS ${jxl_install_libs}) +# endif() +# set_target_properties(${jxl_lib} PROPERTIES EXPORT_NAME external_libjxl) +# add_library(SDL3_image::external_libjxl ALIAS ${jxl_lib}) +# if(NOT TARGET libjxl::libjxl) +# add_library(libjxl::libjxl ALIAS ${jxl_lib}) +# endif() +# elseif(SDLIMAGE_JXL_SHARED AND DEFINED SDLIMAGE_DYNAMIC_JXL AND EXISTS "${SDLIMAGE_DYNAMIC_JXL}") +# message(STATUS "${PROJECT_NAME}: Using libjxl from CMake variable") +# set(SDLIMAGE_JXL_ENABLED TRUE) +# else() +# find_package(libjxl ${required}) +# if(libjxl_FOUND) +# message(STATUS "${PROJECT_NAME}: Using system libjxl") +# set(SDLIMAGE_JXL_ENABLED TRUE) +# if(NOT SDLIMAGE_JXL_SHARED) +# list(APPEND PC_REQUIRES libjxl) +# list(APPEND INSTALL_EXTRA_CMAKE_MODULES cmake/Findlibjxl.cmake) +# endif() +# else() +# message(${fatal_error} "libjxl NOT found") +# endif() +# endif() +# if(SDLIMAGE_JXL_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_JXL) +# if(SDLIMAGE_JXL_SHARED) +# if(NOT DEFINED SDLIMAGE_DYNAMIC_JXL) +# target_include_directories(${sdl3_image_target_name} PRIVATE +# $ +# $ +# $ +# ) +# if(SDLIMAGE_JXL_VENDORED) +# add_dependencies(${sdl3_image_target_name} libjxl::libjxl) +# endif() +# endif() +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_JXL libjxl::libjxl) +# message(STATUS "Dynamic libjxl: ${SDLIMAGE_DYNAMIC_JXL}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_JXL_DYNAMIC=\"${SDLIMAGE_DYNAMIC_JXL}\"") +# else() +# target_link_libraries(${sdl3_image_target_name} PRIVATE libjxl::libjxl) +# endif() +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS LBM) +# set(SDLIMAGE_LBM_ENABLED FALSE) +# if(SDLIMAGE_LBM) +# set(SDLIMAGE_LBM_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_LBM) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS PCX) +# set(SDLIMAGE_PCX_ENABLED FALSE) +# if(SDLIMAGE_PCX) +# set(SDLIMAGE_PCX_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_PCX) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS PNG) +# list(APPEND SDLIMAGE_BACKENDS APNG) +# set(SDLIMAGE_PNG_ENABLED FALSE) +# if(SDLIMAGE_PNG) +# set(SDLIMAGE_APNG_ENABLED FALSE) +# set(SDLIMAGE_PNG_ENABLED TRUE) +# set(SDLIMAGE_LIBPNG_ENABLED FALSE) + +# if(SDLIMAGE_PNG_LIBPNG) +# if(SDLIMAGE_PNG_VENDORED) +# set(PNG_SHARED "${SDLIMAGE_PNG_SHARED}") +# set(SDLIMAGE_LIBPNG_ENABLED TRUE) +# message(STATUS "${PROJECT_NAME}: Using vendored libpng") +# set(PNG_TESTS OFF CACHE BOOL "Build PNG Tests" FORCE) +# set(SKIP_INSTALL_EXPORT TRUE) +# sdl_check_project_in_subfolder(external/libpng libpng SDLIMAGE_VENDORED) +# add_subdirectory(external/libpng external/libpng-build EXCLUDE_FROM_ALL) +# register_license(libpng external/libpng/LICENSE) +# if(SDLIMAGE_PNG_SHARED) +# set(PNG_LIBRARY png_shared) +# else() +# set(PNG_LIBRARY png_static) +# endif() +# add_library(PNG::PNG ALIAS ${PNG_LIBRARY}) +# set_property(TARGET ${PNG_LIBRARY} PROPERTY DEBUG_POSTFIX "") +# target_include_directories(${sdl3_image_target_name} PRIVATE external/libpng) +# if(SDLIMAGE_PNG_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS ${PNG_LIBRARY}) +# endif() +# set_target_properties(${PNG_LIBRARY} PROPERTIES EXPORT_NAME external_libpng) +# add_library(SDL3_image::external_libpng ALIAS ${PNG_LIBRARY}) +# if(NOT SDLIMAGE_PNG_SHARED) +# list(APPEND PC_LIBS -l$) +# if(SDLIMAGE_ZLIB_VENDORED) +# list(APPEND PC_LIBS -l$) +# else() +# list(APPEND PC_REQUIRES zlib) +# endif() +# endif() +# elseif(SDLIMAGE_PNG_SHARED AND DEFINED SDLIMAGE_DYNAMIC_PNG AND EXISTS "${SDLIMAGE_DYNAMIC_PNG}") +# message(STATUS "${PROJECT_NAME}: Using libpng from CMake variable") +# set(SDLIMAGE_LIBPNG_ENABLED TRUE) +# else() +# find_package(PNG ${required}) +# if(PNG_FOUND) +# message(STATUS "${PROJECT_NAME}: Using system libpng") +# set(SDLIMAGE_LIBPNG_ENABLED TRUE) +# if(NOT SDLIMAGE_PNG_SHARED) +# list(APPEND PC_REQUIRES libpng) +# endif() +# else() +# message(${FATAL_ERROR} "libpng NOT found") +# endif() +# endif() +# endif() + +# if(SDLIMAGE_LIBPNG_ENABLED) +# set(SDLIMAGE_APNG_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# SDL_IMAGE_LIBPNG +# ) +# if(SDLIMAGE_PNG_SHARED) +# if(NOT DEFINED SDLIMAGE_DYNAMIC_PNG) +# if(TARGET PNG::png_shared) +# set(png_target PNG::png_shared) +# else() +# set(png_target PNG::PNG) +# endif() +# target_include_directories(${sdl3_image_target_name} PRIVATE +# $ +# $ +# $ +# ) +# if(SDLIMAGE_PNG_VENDORED) +# add_dependencies(${sdl3_image_target_name} ${png_target}) +# endif() +# endif() +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_PNG PNG::PNG) +# message(STATUS "Dynamic libpng: ${SDLIMAGE_DYNAMIC_PNG}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_LIBPNG_DYNAMIC=\"${SDLIMAGE_DYNAMIC_PNG}\"") +# else() +# target_link_libraries(${sdl3_image_target_name} PRIVATE PNG::PNG) +# endif() +# endif() + +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_PNG +# SAVE_PNG=$ +# ) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS PNM) +# set(SDLIMAGE_PNM_ENABLED FALSE) +# if(SDLIMAGE_PNM) +# set(SDLIMAGE_PNM_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_PNM) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS QOI) +# set(SDLIMAGE_QOI_ENABLED FALSE) +# if(SDLIMAGE_QOI) +# set(SDLIMAGE_QOI_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_QOI) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS SVG) +# set(SDLIMAGE_SVG_ENABLED FALSE) +# if(SDLIMAGE_SVG) +# set(SDLIMAGE_SVG_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_SVG) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS TGA) +# set(SDLIMAGE_TGA_ENABLED FALSE) +# if(SDLIMAGE_TGA) +# set(SDLIMAGE_TGA_ENABLED TRUE) +# if(SDLIMAGE_TGA_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_TGA +# SAVE_TGA=$ +# ) +# else() +# # Variable is used by test suite +# set(SDLIMAGE_TGA_SAVE OFF) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS TIF) +# set(SDLIMAGE_TIF_ENABLED FALSE) +# if(SDLIMAGE_TIF) +# if(SDLIMAGE_BACKEND_IMAGEIO OR SDLIMAGE_BACKEND_WIC) +# set(SDLIMAGE_TIF_ENABLED TRUE) +# else() +# if(SDLIMAGE_TIF_VENDORED) +# set(SDLIMAGE_TIF_ENABLED TRUE) +# message(STATUS "${PROJECT_NAME}: Using vendored libtiff") +# # tiff-cxx variable is used by vendored libtiff +# set(tiff-cxx OFF CACHE BOOL "libtiff: C++ API" FORCE) +# # tiff-tests variable is used by vendored libtiff +# set(tiff-tests OFF CACHE BOOL "libtiff: tests" FORCE) +# # tiff-opengl variable is used by vendored libtiff +# set(tiff-opengl OFF CACHE BOOL "libtiff: OpenGL option" FORCE) +# # jpeg variable is used by vendored libtiff +# set(jpeg OFF CACHE BOOL "libtiff: jpeg option" FORCE) +# # libdeflate variable is used by vendored libtiff +# set(libdeflate OFF CACHE BOOL "libtiff: libdeflate option" FORCE) +# # DEFLATE_FOUND variable is used by vendored libtiff +# set(DEFLATE_FOUND OFF CACHE BOOL "libtiff: libdeflate option" FORCE) +# # zlib variable is used by vendored libtiff (controls use of `find_package`) +# set(zlib OFF CACHE BOOL "libtiff: find zlib using find_package" FORCE) +# # ZLIB_FOUND is used by vendored libtiff +# set(ZLIB_FOUND "") +# # lerc variable is used by vendored libtiff +# set(lerc OFF CACHE BOOL "libtiff: lerc option" FORCE) +# # lzma variable is used by vendored libtiff +# set(lzma OFF CACHE BOOL "libtiff: lzma option" FORCE) +# # webp variable is used by vendored libtiff +# set(webp OFF CACHE BOOL "libtiff: webp option" FORCE) +# # zstd variable is used by vendored libtiff +# set(zstd OFF CACHE BOOL "libtiff: zstd option" FORCE) +# # ZSTD_FOUND variable is used by vendored libtiff +# set(ZSTD_FOUND OFF) +# # WEBP_LIBRARY variable is used by vendored libtiff +# set(WEBP_LIBRARY "") +# sdl_check_project_in_subfolder(external/libtiff libtiff SDLIMAGE_VENDORED) +# set(BUILD_SHARED_LIBS ${SDLIMAGE_TIF_SHARED}) +# add_subdirectory(external/libtiff external/libtiff-build EXCLUDE_FROM_ALL) +# register_license(tiff external/libtiff/LICENSE.md) +# add_library(TIFF::TIFF ALIAS tiff) +# set(SDLIMAGE_TIF_TARGET "TIFF::tiff") +# if(SDLIMAGE_TIF_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS tiff) +# endif() +# set_target_properties(tiff PROPERTIES EXPORT_NAME external_libtiff) +# add_library(SDL3_image::external_libtiff ALIAS tiff) +# if(NOT SDLIMAGE_TIF_SHARED) +# list(APPEND PC_LIBS -l$) +# endif() +# elseif(SDLIMAGE_TIF_SHARED AND DEFINED SDLIMAGE_DYNAMIC_TIF AND EXISTS "${SDLIMAGE_DYNAMIC_TIF}") +# message(STATUS "${PROJECT_NAME}: Using libtiff from CMake variable") +# set(SDLIMAGE_TIF_ENABLED TRUE) +# set(SDLIMAGE_TIF_TARGET "tiff-non-existing-target") +# else() +# find_package(TIFF ${required}) +# if(TIFF_FOUND) +# message(STATUS "${PROJECT_NAME}: Using system libtiff") +# set(SDLIMAGE_TIF_ENABLED TRUE) +# if(NOT SDLIMAGE_TIF_SHARED) +# list(APPEND PC_REQUIRES libtiff-4) +# endif() +# if(TARGET TIFF::tiff) +# # introduced in CMake 3.28 +# # TIFF::TIFF still exists, but it is an INTERFACE library linking to TIFF::tiff (no ALIAS library) +# set(SDLIMAGE_TIF_TARGET "TIFF::tiff") +# else() +# set(SDLIMAGE_TIF_TARGET "TIFF::TIFF") +# endif() +# else() +# message(${fatal_error} "libtiff NOT found") +# endif() +# endif() +# if(SDLIMAGE_TIF_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_TIF) +# if(SDLIMAGE_TIF_SHARED) +# if(NOT DEFINED SDLIMAGE_DYNAMIC_TIF) +# target_include_directories(${sdl3_image_target_name} PRIVATE +# $ +# $ +# $ +# ) +# if(SDLIMAGE_TIF_VENDORED) +# add_dependencies(${sdl3_image_target_name} ${SDLIMAGE_TIF_TARGET}) +# endif() +# endif() +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_TIF ${SDLIMAGE_TIF_TARGET}) +# message(STATUS "Dynamic libtiff: ${SDLIMAGE_DYNAMIC_TIF}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_TIF_DYNAMIC=\"${SDLIMAGE_DYNAMIC_TIF}\"") +# else() +# target_link_libraries(${sdl3_image_target_name} PRIVATE ${SDLIMAGE_TIF_TARGET}) +# endif() +# endif() +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS WEBP) +# set(SDLIMAGE_WEBP_ENABLED FALSE) +# if(SDLIMAGE_WEBP) +# # missing cpufeatures +# if(SDLIMAGE_WEBP_VENDORED) +# set(SDLIMAGE_WEBP_ENABLED TRUE) +# message(STATUS "${PROJECT_NAME}: Using vendored libwebp") +# sdl_check_project_in_subfolder(external/libwebp libwebp SDLIMAGE_VENDORED) +# set(BUILD_SHARED_LIBS ${SDLIMAGE_WEBP_SHARED}) +# add_subdirectory(external/libwebp external/libwebp-build EXCLUDE_FROM_ALL) +# register_license(webp external/libwebp/COPYING) +# target_include_directories(${sdl3_image_target_name} PRIVATE external/libwebp/src) +# add_library(WebP::webp ALIAS webp) +# add_library(WebP::webpdemux ALIAS webpdemux) +# add_library(WebP::libwebpmux ALIAS libwebpmux) +# if(SDLIMAGE_WEBP_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) +# list(APPEND INSTALL_EXTRA_TARGETS webp webpdemux libwebpmux) +# if(NOT SDLIMAGE_WEBP_SHARED) +# list(APPEND INSTALL_EXTRA_TARGETS sharpyuv) +# endif() +# endif() +# set_target_properties(webp PROPERTIES EXPORT_NAME "external_libwebp") +# set_target_properties(webpdemux PROPERTIES EXPORT_NAME "external_webpdemux") +# set_target_properties(libwebpmux PROPERTIES EXPORT_NAME "external_libwebpmux") +# set_target_properties(sharpyuv PROPERTIES EXPORT_NAME "external_sharpyuv") +# add_library(SDL3_image::external_libwebp ALIAS webp) +# elseif(SDLIMAGE_WEBP_SHARED AND DEFINED SDLIMAGE_DYNAMIC_WEBP AND EXISTS "${SDLIMAGE_DYNAMIC_WEBP}" AND DEFINED SDLIMAGE_DYNAMIC_WEBPDEMUX AND EXISTS "${SDLIMAGE_DYNAMIC_WEBPDEMUX}" AND DEFINED SDLIMAGE_DYNAMIC_WEBPMUX AND EXISTS "${SDLIMAGE_DYNAMIC_WEBPMUX}") +# message(STATUS "${PROJECT_NAME}: Using libwebp from CMake variable") +# set(SDLIMAGE_WEBP_ENABLED TRUE) +# else() +# find_package(webp ${required}) +# if(webp_FOUND) +# message(STATUS "${PROJECT_NAME}: Using system libwebp") +# set(SDLIMAGE_WEBP_ENABLED TRUE) +# if(NOT SDLIMAGE_WEBP_SHARED) +# list(APPEND PC_REQUIRES libwebp libwebpdemux libwebpmux) +# list(APPEND INSTALL_EXTRA_CMAKE_MODULES cmake/Findwebp.cmake) +# endif() +# else() +# message(${fatal_error} "libwebp NOT found") +# endif() +# endif() +# if(SDLIMAGE_WEBP_ENABLED) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE +# LOAD_WEBP +# SAVE_WEBP=$ +# ) +# if(SDLIMAGE_WEBP_SHARED) +# if(NOT DEFINED SDLIMAGE_DYNAMIC_WEBP AND NOT DEFINED SDLIMAGE_DYNAMIC_WEBPDEMUX AND NOT DEFINED SDLIMAGE_DYNAMIC_WEBPMUX) +# target_include_directories(${sdl3_image_target_name} PRIVATE +# $ +# $ +# $ +# $ +# $ +# $ +# $ +# $ +# $ +# ) +# if(SDLIMAGE_WEBP_VENDORED) +# add_dependencies(${sdl3_image_target_name} WebP::webp WebP::webpdemux WebP::libwebpmux) +# endif() +# endif() +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_WEBPDEMUX WebP::webpdemux) +# message(STATUS "Dynamic libwebpdemux: ${SDLIMAGE_DYNAMIC_WEBPDEMUX}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_WEBPDEMUX_DYNAMIC=\"${SDLIMAGE_DYNAMIC_WEBPDEMUX}\"") +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_WEBPMUX WebP::libwebpmux) +# message(STATUS "Dynamic libwebpmux: ${SDLIMAGE_DYNAMIC_WEBPMUX}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_WEBPMUX_DYNAMIC=\"${SDLIMAGE_DYNAMIC_WEBPMUX}\"") +# target_get_dynamic_library(SDLIMAGE_DYNAMIC_WEBP WebP::webp) +# message(STATUS "Dynamic libwebp: ${SDLIMAGE_DYNAMIC_WEBP}") +# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_WEBP_DYNAMIC=\"${SDLIMAGE_DYNAMIC_WEBP}\"") +# else() +# target_link_libraries(${sdl3_image_target_name} PRIVATE WebP::webp WebP::webpdemux WebP::libwebpmux) +# endif() +# else() +# # Variable is used by test suite +# set(SDLIMAGE_WEBP_SAVE OFF) +# endif() +# endif() + +# list(APPEND SDLIMAGE_BACKENDS XCF) +# set(SDLIMAGE_XCF_ENABLED FALSE) +# if(SDLIMAGE_XCF) +# set(SDLIMAGE_XCF_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_XCF) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS XPM) +# set(SDLIMAGE_XPM_ENABLED FALSE) +# if(SDLIMAGE_XPM) +# set(SDLIMAGE_XPM_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_XPM) +# endif() + +# list(APPEND SDLIMAGE_BACKENDS XV) +# set(SDLIMAGE_XV_ENABLED FALSE) +# if(SDLIMAGE_XV) +# set(SDLIMAGE_XV_ENABLED TRUE) +# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_XV) +# endif() + +# # Restore BUILD_SHARED_LIBS +# set(BUILD_SHARED_LIBS ${SDLIMAGE_BUILD_SHARED_LIBS}) + +# if(SDLIMAGE_INSTALL) +# install( +# TARGETS ${sdl3_image_target_name} +# EXPORT SDL3ImageExports +# ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel +# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library +# RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library +# ) +# install( +# FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/SDL3_image/SDL_image.h" +# DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3_image" COMPONENT DEVEL +# ) + +# export(TARGETS ${sdl3_image_target_name} ${INSTALL_EXTRA_TARGETS} NAMESPACE "SDL3_image::" FILE "${sdl3_image_target_name}-targets.cmake") + +# if(BUILD_SHARED_LIBS) +# set(pdbdir "${CMAKE_INSTALL_BINDIR}") +# else() +# set(pdbdir "${CMAKE_INSTALL_LIBDIR}") +# endif() +# if(MSVC) +# SDL_install_pdb("${sdl3_image_target_name}" "${pdbdir}") +# endif() + +# if(INSTALL_EXTRA_TARGETS) +# set_property(TARGET ${INSTALL_EXTRA_TARGETS} PROPERTY PUBLIC_HEADER "") +# set(archive_destination) +# if(NOT BUILD_SHARED_LIBS) +# set(archive_destination ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) +# endif() +# install( +# TARGETS ${INSTALL_EXTRA_TARGETS} +# EXPORT SDL3ImageExports +# ${archive_destination} +# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library +# RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library +# ) +# if(MSVC) +# foreach(tgt IN LISTS INSTALL_EXTRA_TARGETS) +# SDL_install_pdb("${tgt}" "${pdbdir}") +# endforeach() +# endif() +# endif() + +# if(WIN32 AND NOT MINGW) +# set(SDLIMAGE_INSTALL_CMAKEDIR_ROOT_DEFAULT "cmake") +# else() +# set(SDLIMAGE_INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake") +# endif() +# set(SDLIMAGE_INSTALL_CMAKEDIR_ROOT "${SDLIMAGE_INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3_imageConfig.cmake related files (SDL3_image subfolder for MSVC projects)") +# set(SDLIMAGE_PKGCONFIG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + +# if(WIN32 AND NOT MINGW) +# set(SDLIMAGE_INSTALL_CMAKEDIR "${SDLIMAGE_INSTALL_CMAKEDIR_ROOT}") +# else() +# set(SDLIMAGE_INSTALL_CMAKEDIR "${SDLIMAGE_INSTALL_CMAKEDIR_ROOT}/SDL3_image") +# endif() + +# configure_package_config_file(cmake/SDL3_imageConfig.cmake.in SDL3_imageConfig.cmake +# NO_SET_AND_CHECK_MACRO +# INSTALL_DESTINATION "${SDLIMAGE_INSTALL_CMAKEDIR}" +# ) +# write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL3_imageConfigVersion.cmake" +# COMPATIBILITY AnyNewerVersion +# ) +# install( +# FILES +# "${CMAKE_CURRENT_BINARY_DIR}/SDL3_imageConfig.cmake" +# "${CMAKE_CURRENT_BINARY_DIR}/SDL3_imageConfigVersion.cmake" +# ${INSTALL_EXTRA_CMAKE_MODULES} +# DESTINATION "${SDLIMAGE_INSTALL_CMAKEDIR}" +# COMPONENT devel +# ) +# install(EXPORT SDL3ImageExports +# FILE ${sdl3_image_target_name}-targets.cmake +# NAMESPACE SDL3_image:: +# DESTINATION "${SDLIMAGE_INSTALL_CMAKEDIR}" +# COMPONENT devel +# ) + +# if(SDLIMAGE_RELOCATABLE) +# file(RELATIVE_PATH SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${CMAKE_INSTALL_PREFIX}/${SDLIMAGE_PKGCONFIG_INSTALLDIR}" "${CMAKE_INSTALL_PREFIX}") +# string(REGEX REPLACE "[/]+$" "" SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}") +# set(SDL_PKGCONFIG_PREFIX "\${pcfiledir}/${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}") +# else() +# set(SDL_PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") +# endif() + +# if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") +# set(INCLUDEDIR_FOR_PKG_CONFIG "${CMAKE_INSTALL_INCLUDEDIR}") +# else() +# set(INCLUDEDIR_FOR_PKG_CONFIG "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") +# endif() +# if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") +# set(LIBDIR_FOR_PKG_CONFIG "${CMAKE_INSTALL_LIBDIR}") +# else() +# set(LIBDIR_FOR_PKG_CONFIG "\${prefix}/${CMAKE_INSTALL_LIBDIR}") +# endif() + +# string(JOIN " " PC_REQUIRES ${PC_REQUIRES}) +# string(JOIN " " PC_LIBS ${PC_LIBS}) +# configure_file(cmake/sdl3-image.pc.in sdl3-image.pc @ONLY) + +# # Always install sdl3-image.pc file: libraries might be different between config modes +# install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl3-image.pc" +# DESTINATION "${SDLIMAGE_PKGCONFIG_INSTALLDIR}" COMPONENT devel) + +# install(FILES "LICENSE.txt" +# DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}" +# COMPONENT library +# ) + +# foreach(license_name IN LISTS install_license_names) +# install(FILES "${install_license_${license_name}}" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}/optional" RENAME "LICENSE.${license_name}.txt") +# endforeach() + +# if(SDLIMAGE_INSTALL_CPACK) +# if(MSVC) +# set(CPACK_GENERATOR "ZIP") +# else() +# set(CPACK_GENERATOR "TGZ") +# endif() +# 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${PROJECT_VERSION_MAJOR}-${PROJECT_VERSION}-src") +# set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/dist") +# include(CPack) +# endif() + +# if(SDLIMAGE_INSTALL_MAN) +# sdl_get_git_revision_hash(SDLIMAGE_REVISION) +# SDL_generate_manpages( +# HEADERS_DIR "${PROJECT_SOURCE_DIR}/include/SDL3_image" +# SYMBOL "IMG_Init" +# WIKIHEADERS_PL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build-scripts/wikiheaders.pl" +# REVISION "${SDLIMAGE_REVISION}" +# ) +# endif() + +# if(SDLIMAGE_ROOTPROJECT) +# configure_file(cmake/cmake_uninstall.cmake.in cmake_uninstall.cmake IMMEDIATE @ONLY) + +# add_custom_target(uninstall +# COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") +# endif() +# endif() + +# if(SDLIMAGE_SAMPLES) +# function(add_sdl_image_example_executable TARGET) +# if(ANDROID) +# add_library(${TARGET} SHARED ${ARGN}) +# else() +# add_executable(${TARGET} ${ARGN}) +# endif() +# sdl_add_warning_options(${TARGET} WARNING_AS_ERROR ${SDLIMAGE_WERROR}) +# sdl_target_link_options_no_undefined(${TARGET}) +# target_link_libraries(${TARGET} PRIVATE SDL3_image::${sdl3_image_target_name}) +# target_link_libraries(${TARGET} PRIVATE ${sdl3_target_name}) + +# if(SDLIMAGE_SAMPLES_INSTALL) +# install(TARGETS ${TARGET} +# RUNTIME DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3_image" +# ) +# if(MSVC) +# SDL_install_pdb("${TARGET}" "${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3_image") +# endif() +# endif() +# endfunction() +# add_sdl_image_example_executable(showanim examples/showanim.c) +# add_sdl_image_example_executable(showimage examples/showimage.c) +# add_sdl_image_example_executable(showclipboard examples/showclipboard.c) +# add_sdl_image_example_executable(showgpuimage examples/showgpuimage.c) +# endif() + +# if(SDLIMAGE_TESTS) +# enable_testing() +# add_subdirectory(test) +# endif() + + +# set(available_deps) +# set(unavailable_deps) +# foreach(dep IN LISTS SDLIMAGE_BACKENDS) +# set(var SDLIMAGE_${dep}_ENABLED) +# if(NOT DEFINED ${var}) +# message(AUTHOR_WARNING "${var} not defined") +# endif() +# if(${var}) +# list(APPEND available_deps ${dep}) +# else() +# list(APPEND unavailable_deps ${dep}) +# endif() +# endforeach() +# string(JOIN " " avail_str ${available_deps}) +# string(TOLOWER "${avail_str}" avail_str) +# string(JOIN " " unavail_str ${unavailable_deps}) +# string(TOLOWER "${unavail_str}" unavail_str) +# message(STATUS "SDL3_image backends:") +# message(STATUS "- enabled: ${avail_str}") +# message(STATUS "- disabled: ${unavail_str}") + +sdl3_image_lib = library('sdl3_image', + sdl3_image_src, include_directories: 'include', - dependencies: [png_dep, sdl_dep]) + dependencies: deps) sdl3_image_dep = declare_dependency(include_directories: 'include', - link_with: img_lib) + link_with: sdl3_image_lib) \ No newline at end of file diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options new file mode 100644 index 0000000000..7a62cd0d08 --- /dev/null +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -0,0 +1,34 @@ +option('SDLIMAGE_VENDORED', type: 'feature', value: 'auto', description: 'Use vendored third-party libraries') + +option('POSITION_INDEPENDENT_CODE', type: 'feature', value: 'enabled', description: 'Build static libraries with -fPIC') +option('BUILD_SHARED_LIBS', type: 'feature', value: 'enabled', description: 'Build the library as a shared library') + +option('SDLIMAGE_INSTALL', type: 'feature', value: 'disabled', description: 'Enable SDL3_image install target') +option('SDLIMAGE_SAMPLES', type: 'feature', value: 'disabled', description: 'Build the SDL3_image sample program(s)') +option('SDLIMAGE_SAMPLES_INSTALL', type: 'feature', value: 'disabled', description: 'Install the SDL3_image sample program(s)') +option('SDLIMAGE_TESTS', type: 'feature', value: 'disabled', description: 'Build unit tests?') +option('SDLIMAGE_TESTS_INSTALL', type: 'feature', value: 'disabled', description: 'Install unit tests?') + +option('SDLIMAGE_BACKEND_STB', type: 'feature', value: 'enabled', description: 'Use stb_image for loading JPEG files') +option('SDLIMAGE_BACKEND_WIC', type: 'feature', value: 'auto', description: 'Add WIC backend (Windows Imaging Component)') +option('SDLIMAGE_BACKEND_IMAGEIO', type: 'feature', value: 'auto', description: 'Use native Mac OS X frameworks for loading images') +option('SDLIMAGE_PNG_LIBPNG', type: 'feature', value: 'auto', description: 'Support loading PNGs using libpng (useful for APNGs)') + +option('SDLIMAGE_ANI', type: 'feature', value: 'auto', description: 'Support loading ANI animations') +option('SDLIMAGE_AVIF', type: 'feature', value: 'auto', description: 'Support loading AVIF images') +option('SDLIMAGE_BMP', type: 'feature', value: 'auto', description: 'Support loading BMP images') +option('SDLIMAGE_GIF', type: 'feature', value: 'auto', description: 'Support loading GIF images') +option('SDLIMAGE_JPG', type: 'feature', value: 'auto', description: 'Support loading JPEG images') +option('SDLIMAGE_JXL', type: 'feature', value: 'auto', description: 'Support loading JXL images') +option('SDLIMAGE_LBM', type: 'feature', value: 'auto', description: 'Support loading LBM images') +option('SDLIMAGE_PCX', type: 'feature', value: 'auto', description: 'Support loading PCX images') +option('SDLIMAGE_PNG', type: 'feature', value: 'auto', description: 'Support loading PNG images') +option('SDLIMAGE_PNM', type: 'feature', value: 'auto', description: 'Support loading PNM images') +option('SDLIMAGE_QOI', type: 'feature', value: 'auto', description: 'Support loading QOI images') +option('SDLIMAGE_SVG', type: 'feature', value: 'auto', description: 'Support loading SVG images') +option('SDLIMAGE_TGA', type: 'feature', value: 'auto', description: 'Support loading TGA images') +option('SDLIMAGE_TIF', type: 'feature', value: 'auto', description: 'Support loading TIFF images') +option('SDLIMAGE_WEBP', type: 'feature', value: 'auto', description: 'Support loading WEBP images') +option('SDLIMAGE_XCF', type: 'feature', value: 'auto', description: 'Support loading XCF images') +option('SDLIMAGE_XPM', type: 'feature', value: 'auto', description: 'Support loading XPM images') +option('SDLIMAGE_XV', type: 'feature', value: 'auto', description: 'Support loading XV images') \ No newline at end of file diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index 72e680586d..fc35c46a39 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -1,4 +1,4 @@ -img_src = files( +sdl3_image_src = files( 'IMG_avif.c', 'IMG_bmp.c', 'IMG_gif.c', From 7dc3f75075a75519c554299c9fd51affcc4a2a91 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 00:36:48 -0330 Subject: [PATCH 02/51] Update sdl3_image to 3.4.0 --- subprojects/sdl3_image.wrap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subprojects/sdl3_image.wrap b/subprojects/sdl3_image.wrap index 4c316837dd..1c882b3325 100644 --- a/subprojects/sdl3_image.wrap +++ b/subprojects/sdl3_image.wrap @@ -1,8 +1,8 @@ [wrap-file] -directory = SDL3_image-3.2.4 -source_url = https://github.com/libsdl-org/SDL_image/releases/download/release-3.2.4/SDL3_image-3.2.4.tar.gz -source_filename = SDL3_image-3.2.4.tar.gz -source_hash = a725bd6d04261fdda0dd8d950659e1dc15a8065d025275ef460d32ae7dcfc182 +directory = SDL3_image-3.4.0 +source_url = https://github.com/libsdl-org/SDL_image/releases/download/release-3.4.0/SDL3_image-3.4.0.tar.gz +source_filename = SDL3_image-3.4.0.tar.gz +source_hash = 2ceb75eab4235c2c7e93dafc3ef3268ad368ca5de40892bf8cffdd510f29d9d8 patch_directory = sdl3_image [provide] From d39e53e20790ae927d770dfacb28345ce9fb7f1c Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 00:38:35 -0330 Subject: [PATCH 03/51] Remove vendored dependencies --- .../packagefiles/sdl3_image/meson.build | 61 +++++++------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 299e51e222..799f1afbc5 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,18 +1,28 @@ -# list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") +# Rough PR Comments: +# - Mostly 1:1 recreation of the logic used in the SDL_image/CMakeLists.txt (exceptions listed below) +# - Meson best practices always preferred over the CMake logic +# - CPack excluded because yknow, it aint CMake +# - Vendored dependencies excluded as they're not directly included in the source +# - +# -major_version = 3 -minor_version = 4 -micro_version = 0 -version_string = to_string(major_version) + '.' + to_string(minor_version) + '.' + to_string(micro_version) +# list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") project('sdl3_image', 'c', - version: version_string) + meson_version: '>= 1.1.0', + version: '3.4.0') + +varr = meson.project_version().split('.') + +major_version = meson.project_version().split('.')[0] +minor_version = meson.project_version().split('.')[1] +micro_version = meson.project_version().split('.')[2] feature_args = [] sdl3_dep = dependency('sdl3', version: '>=3.4.0') # Minimum allowed SDL3 version, not SDL3_IMAGE version libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) -libavif_dep = dependency('libavif', version: '>=0.1.0' required: false) +libavif_dep = dependency('libavif', version: '>=0.1.0', required: false) deps = [sdl3_dep, libpng_dep, libavif_dep] @@ -25,10 +35,6 @@ deps = [sdl3_dep, libpng_dep, libavif_dep] sdlimage_rootproject = not meson.is_subproject() -# Assume MSVC projects don't have a package manager and need vendored dependencies (by default). -# Most other platforms have some kind of package manager. -get_option('SDLIMAGE_VENDORED').enable_auto_if(meson.get_compiler('c') == 'MSVC') - # if(NOT DEFINED CMAKE_FIND_PACKAGE_PREFER_CONFIG) # set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) # endif() @@ -37,13 +43,13 @@ get_option('SDLIMAGE_VENDORED').enable_auto_if(meson.get_compiler('c') == 'MSVC' # include(CMakePackageConfigHelpers) # include(GNUInstallDirs) -platform_supports_shared = target_machine.system() == 'emscripten' ? true : false +platform_supports_shared = target_machine.system() == 'emscripten' ? false : true -get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'POSITION_INDEPENDENT_CODE: Target does not support shared libraries') +get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'Target "' + target_machine.system() + '" does not support shared libraries') # SDL3_image-3.4.0, CMakeLists.txt, line 65 -get_option('SDLIMAGE_INSTALL').require(!subproject('sdl3'), error_message: 'SDLIMAGE_INSTALL: Cannot install SDL3_image when SDL3 is built in same build') -get_option('SDLIMAGE_INSTALL').require(sdlimage_rootproject, error_message: 'SDLIMAGE_INSTALL: Cannot install SDL3_image when it is a subproject') +get_option('SDLIMAGE_INSTALL').require(not subproject('sdl3').found(), error_message: 'Cannot install SDL3_image when SDL3 is built in same build') +get_option('SDLIMAGE_INSTALL').require(sdlimage_rootproject, error_message: 'Cannot install SDL3_image when it is a subproject') # cmake_dependent_option(SDLIMAGE_INSTALL_MAN "Install man pages for SDL3_image" OFF "SDLIMAGE_INSTALL" OFF) # cmake_dependent_option(SDLIMAGE_DEPS_SHARED "Load dependencies dynamically" ON PLATFORM_SUPPORTS_SHARED OFF) @@ -77,16 +83,9 @@ get_option('SDLIMAGE_TGA_SAVE').enable_auto_if(get_option('SDLIMAGE_TGA').enable get_option('SDLIMAGE_WEBP_SAVE').enable_auto_if(get_option('SDLIMAGE_WEBP').enabled()) get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(get_option('SDLIMAGE_PNG').enabled()) -sdlimage_avif_vendored = get_option('SDLIMAGE_VENDORED' and 'SDLIMAGE_AVIF') ? true : false # cmake_dependent_option(SDLIMAGE_AVIF_SHARED "Dynamically load AVIF support (requires shared libavif)" # ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_AVIF ON) -sdlimage_dav1d = sdlimage_avif_vendored ? true : false -sdlimage_dav1d = sdlimage_avif_vendored ? true : false -sdlimage_dav1d_vendored = sdlimage_avif_vendored ? true : false -sdlimage_aom = sdlimage_avif_vendored ? true : false -sdlimage_aom_vendored = sdlimage_avif_vendored ? true : false - # if(SDLIMAGE_AVIF_SHARED) # set(SDLIMAGE_DAV1D_SHARED ON) # set(SDLIMAGE_AOM_SHARED ON) @@ -442,8 +441,8 @@ subdir('src') # list(APPEND SDLIMAGE_BACKENDS AVIF) # set(SDLIMAGE_AVIF_ENABLED FALSE) -if get_option('SDLIMAGE_AVIF'): - if get_option('SDLIMAGE_VENDORED'): +if get_option('SDLIMAGE_AVIF').enabled() +endif # if(SDLIMAGE_AVIF) # if(SDLIMAGE_AVIF_VENDORED) # set(SDLIMAGE_AVIF_ENABLED TRUE) @@ -1180,20 +1179,6 @@ if get_option('SDLIMAGE_AVIF'): # install(FILES "${install_license_${license_name}}" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}/optional" RENAME "LICENSE.${license_name}.txt") # endforeach() -# if(SDLIMAGE_INSTALL_CPACK) -# if(MSVC) -# set(CPACK_GENERATOR "ZIP") -# else() -# set(CPACK_GENERATOR "TGZ") -# endif() -# 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${PROJECT_VERSION_MAJOR}-${PROJECT_VERSION}-src") -# set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/dist") -# include(CPack) -# endif() - # if(SDLIMAGE_INSTALL_MAN) # sdl_get_git_revision_hash(SDLIMAGE_REVISION) # SDL_generate_manpages( From 9928a8758a7de13fe47fe42bb714315383f5076b Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 00:39:07 -0330 Subject: [PATCH 04/51] Set SDLIMAGE types to 'enabled' default --- .../packagefiles/sdl3_image/meson.options | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options index 7a62cd0d08..b447ee22fd 100644 --- a/subprojects/packagefiles/sdl3_image/meson.options +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -1,5 +1,3 @@ -option('SDLIMAGE_VENDORED', type: 'feature', value: 'auto', description: 'Use vendored third-party libraries') - option('POSITION_INDEPENDENT_CODE', type: 'feature', value: 'enabled', description: 'Build static libraries with -fPIC') option('BUILD_SHARED_LIBS', type: 'feature', value: 'enabled', description: 'Build the library as a shared library') @@ -14,21 +12,30 @@ option('SDLIMAGE_BACKEND_WIC', type: 'feature', value: 'auto', description: 'Add option('SDLIMAGE_BACKEND_IMAGEIO', type: 'feature', value: 'auto', description: 'Use native Mac OS X frameworks for loading images') option('SDLIMAGE_PNG_LIBPNG', type: 'feature', value: 'auto', description: 'Support loading PNGs using libpng (useful for APNGs)') -option('SDLIMAGE_ANI', type: 'feature', value: 'auto', description: 'Support loading ANI animations') -option('SDLIMAGE_AVIF', type: 'feature', value: 'auto', description: 'Support loading AVIF images') -option('SDLIMAGE_BMP', type: 'feature', value: 'auto', description: 'Support loading BMP images') -option('SDLIMAGE_GIF', type: 'feature', value: 'auto', description: 'Support loading GIF images') -option('SDLIMAGE_JPG', type: 'feature', value: 'auto', description: 'Support loading JPEG images') -option('SDLIMAGE_JXL', type: 'feature', value: 'auto', description: 'Support loading JXL images') -option('SDLIMAGE_LBM', type: 'feature', value: 'auto', description: 'Support loading LBM images') -option('SDLIMAGE_PCX', type: 'feature', value: 'auto', description: 'Support loading PCX images') -option('SDLIMAGE_PNG', type: 'feature', value: 'auto', description: 'Support loading PNG images') -option('SDLIMAGE_PNM', type: 'feature', value: 'auto', description: 'Support loading PNM images') -option('SDLIMAGE_QOI', type: 'feature', value: 'auto', description: 'Support loading QOI images') -option('SDLIMAGE_SVG', type: 'feature', value: 'auto', description: 'Support loading SVG images') -option('SDLIMAGE_TGA', type: 'feature', value: 'auto', description: 'Support loading TGA images') -option('SDLIMAGE_TIF', type: 'feature', value: 'auto', description: 'Support loading TIFF images') -option('SDLIMAGE_WEBP', type: 'feature', value: 'auto', description: 'Support loading WEBP images') -option('SDLIMAGE_XCF', type: 'feature', value: 'auto', description: 'Support loading XCF images') -option('SDLIMAGE_XPM', type: 'feature', value: 'auto', description: 'Support loading XPM images') -option('SDLIMAGE_XV', type: 'feature', value: 'auto', description: 'Support loading XV images') \ No newline at end of file +option('SDLIMAGE_ANI', type: 'feature', value: 'enabled', description: 'Support loading ANI animations') +option('SDLIMAGE_AVIF', type: 'feature', value: 'enabled', description: 'Support loading AVIF images') +option('SDLIMAGE_BMP', type: 'feature', value: 'enabled', description: 'Support loading BMP images') +option('SDLIMAGE_GIF', type: 'feature', value: 'enabled', description: 'Support loading GIF images') +option('SDLIMAGE_JPG', type: 'feature', value: 'enabled', description: 'Support loading JPEG images') +option('SDLIMAGE_JXL', type: 'feature', value: 'enabled', description: 'Support loading JXL images') +option('SDLIMAGE_LBM', type: 'feature', value: 'enabled', description: 'Support loading LBM images') +option('SDLIMAGE_PCX', type: 'feature', value: 'enabled', description: 'Support loading PCX images') +option('SDLIMAGE_PNG', type: 'feature', value: 'enabled', description: 'Support loading PNG images') +option('SDLIMAGE_PNM', type: 'feature', value: 'enabled', description: 'Support loading PNM images') +option('SDLIMAGE_QOI', type: 'feature', value: 'enabled', description: 'Support loading QOI images') +option('SDLIMAGE_SVG', type: 'feature', value: 'enabled', description: 'Support loading SVG images') +option('SDLIMAGE_TGA', type: 'feature', value: 'enabled', description: 'Support loading TGA images') +option('SDLIMAGE_TIF', type: 'feature', value: 'enabled', description: 'Support loading TIFF images') +option('SDLIMAGE_WEBP', type: 'feature', value: 'enabled', description: 'Support loading WEBP images') +option('SDLIMAGE_XCF', type: 'feature', value: 'enabled', description: 'Support loading XCF images') +option('SDLIMAGE_XPM', type: 'feature', value: 'enabled', description: 'Support loading XPM images') +option('SDLIMAGE_XV', type: 'feature', value: 'enabled', description: 'Support loading XV images') + +option('SDLIMAGE_ANI_SAVE', type: 'feature', value: 'auto', description: 'Add ANI save support') +option('SDLIMAGE_AVIF_SAVE', type: 'feature', value: 'auto', description: 'Add AVIF save support') +option('SDLIMAGE_BMP_SAVE', type: 'feature', value: 'auto', description: 'Add BMP save support') +option('SDLIMAGE_GIF_SAVE', type: 'feature', value: 'auto', description: 'Add GIF save support') +option('SDLIMAGE_JPG_SAVE', type: 'feature', value: 'auto', description: 'Add JPEG save support') +option('SDLIMAGE_PNG_SAVE', type: 'feature', value: 'auto', description: 'Add PNG save support') +option('SDLIMAGE_TGA_SAVE', type: 'feature', value: 'auto', description: 'Add TGA save support') +option('SDLIMAGE_WEBP_SAVE', type: 'feature', value: 'auto', description: 'Add WEBP save support') \ No newline at end of file From 87605e250e6dc9b2d8010e5bc106f0af0d660e7d Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 00:53:15 -0330 Subject: [PATCH 05/51] Rule out vendored AVIF Exclude DAV1D Exclude AOM Exclude ZLIB --- .../packagefiles/sdl3_image/meson.build | 157 +----------------- 1 file changed, 2 insertions(+), 155 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 799f1afbc5..29b6aa3113 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -86,14 +86,6 @@ get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(get_option('SDLIMAGE_PNG').enab # cmake_dependent_option(SDLIMAGE_AVIF_SHARED "Dynamically load AVIF support (requires shared libavif)" # ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_AVIF ON) -# if(SDLIMAGE_AVIF_SHARED) -# set(SDLIMAGE_DAV1D_SHARED ON) -# set(SDLIMAGE_AOM_SHARED ON) -# else() -# set(SDLIMAGE_DAV1D_SHARED OFF) -# set(SDLIMAGE_AOM_SHARED OFF) -# endif() - # if(SDLIMAGE_VENDORED AND SDLIMAGE_JPG AND NOT (SDLIMAGE_BACKEND_WIC OR SDLIMAGE_BACKEND_STB OR SDLIMAGE_BACKEND_IMAGEIO)) # set(SDLIMAGE_JPG_VENDORED ON) # else() @@ -134,19 +126,6 @@ get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(get_option('SDLIMAGE_PNG').enab # cmake_dependent_option(SDLIMAGE_WEBP_SHARED "Dynamically load WEBP support (requires shared libwebp)" # ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_WEBP OFF) -# if(SDLIMAGE_PNG_LIBPNG AND SDLIMAGE_PNG_VENDORED) -# set(SDLIMAGE_ZLIB ON) -# else() -# set(SDLIMAGE_ZLIB OFF) -# endif() - -# if(SDLIMAGE_VENDORED AND SDLIMAGE_PNG_VENDORED) -# set(SDLIMAGE_ZLIB_VENDORED ON) -# else() -# set(SDLIMAGE_ZLIB_VENDORED OFF) -# endif() -# set(SDLIMAGE_ZLIB_SHARED OFF) - # # Save BUILD_SHARED_LIBS variable # set(SDLIMAGE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) @@ -345,139 +324,15 @@ subdir('src') # target_compile_definitions(${sdl3_image_target_name} PRIVATE SDL_IMAGE_USE_WIC_BACKEND) # endif() -# if(SDLIMAGE_ZLIB) -# if(SDLIMAGE_ZLIB_VENDORED) -# message(STATUS "${PROJECT_NAME}: Using vendored zlib") -# # disable build of zlib example programs: -# set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "zlib examples" FORCE) -# sdl_check_project_in_subfolder(external/zlib zlib SDLIMAGE_VENDORED) -# add_subdirectory(external/zlib external/zlib-build EXCLUDE_FROM_ALL) -# register_license(zlib external/zlib/LICENSE) -# set(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib-build") -# # ZLIB_INCLUDE_DIR variable is used by vendored libpng -# set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib-build" CACHE STRING "path of zlib, passed to libpng" FORCE) -# # ZLIB_LIBRARY variable is used by vendored libpng -# if(SDLIMAGE_ZLIB_SHARED) -# set(ZLIB_LIBRARY zlib) -# else() -# set(ZLIB_LIBRARY zlibstatic) -# set(SKIP_INSTALL_CONFIG_FILE ON) -# endif() -# if(NOT TARGET ZLIB::ZLIB) -# add_library(ZLIB::ZLIB ALIAS ${ZLIB_LIBRARY}) -# endif() -# if(NOT TARGET ZLIB::zlibstatic) -# add_library(ZLIB::zlibstatic ALIAS ${ZLIB_LIBRARY}) -# endif() -# # ZLIB_LIBRARIES variable is used by vendored libpng -# set(ZLIB_LIBRARIES "${ZLIB_LIBRARY}") -# # ZLIB_INCLUDE_DIRS variable is used by vendored libpng -# set(ZLIB_INCLUDE_DIRS "${ZLIB_INCLUDE_DIR}") -# target_include_directories(${ZLIB_LIBRARY} INTERFACE $) -# if(SDLIMAGE_ZLIB_SHARED OR (SDLIMAGE_PNG AND NOT SDLIMAGE_PNG_SHARED)) -# list(APPEND INSTALL_EXTRA_TARGETS ${ZLIB_LIBRARY}) -# endif() -# set_target_properties(${ZLIB_LIBRARY} PROPERTIES EXPORT_NAME external_zlib) -# add_library(SDL3_image::external_zlib ALIAS ${ZLIB_LIBRARY}) -# else() -# message(FATAL_ERROR "Internal error (zlib is only required when requesting vendored dependencies)") -# endif() -# endif() - -# if(SDLIMAGE_DAV1D) -# if(SDLIMAGE_DAV1D_VENDORED) -# message(STATUS "${PROJECT_NAME}: Using vendored dav1d") -# set(BUILD_SHARED_LIBS ${SDLIMAGE_DAV1D_SHARED}) -# add_subdirectory(external/dav1d external/dav1d-build EXCLUDE_FROM_ALL) -# register_license(dav1d external/dav1d/COPYING) -# if(DAV1D_ASM AND (SDL_CPU_X64 OR SDL_CPU_X86)) -# enable_language(ASM_NASM) -# endif() -# set(DAV1D_LIBRARY dav1d) -# if(SDLIMAGE_DAV1D_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS dav1d) -# endif() -# else() -# message(FATAL_ERROR "Internal error (dav1d is only required when requesting vendored dependencies)") -# endif() -# endif() - -# if(SDLIMAGE_AOM) -# if(SDLIMAGE_AOM_VENDORED) -# message(STATUS "${PROJECT_NAME}: Using vendored aom") -# set(BUILD_SHARED_LIBS ${SDLIMAGE_AOM_SHARED}) -# set(ENABLE_DOCS OFF CACHE BOOL "") -# set(ENABLE_EXAMPLES OFF CACHE BOOL "") -# set(ENABLE_TESTDATA OFF CACHE BOOL "") -# set(ENABLE_TESTS OFF CACHE BOOL "") -# set(ENABLE_TOOLS OFF CACHE BOOL "") -# if(SDLIMAGE_AOM_SHARED) -# set(CONFIG_AV1_DECODER 1 CACHE BOOL "" FORCE) -# else() -# set(CONFIG_AV1_DECODER 0 CACHE BOOL "" FORCE) -# endif() -# set(CONFIG_AV1_ENCODER 1 CACHE BOOL "" FORCE) -# # aom detects cpu using CMAKE_SYSTEM_NAME -# if(SDL_CPU_X86) -# set(AOM_TARGET_CPU "x86") -# elseif(SDL_CPU_X64) -# set(AOM_TARGET_CPU "x86_64") -# elseif(SDL_CPU_ARM32) -# set(AOM_TARGET_CPU "arm") -# set(AOM_NEON_INTRIN_FLAG "-mfpu=neon" CACHE STRING "AOM CFLAGS for enabling neon intrinsics") -# elseif(SDL_CPU_ARM64) -# set(AOM_TARGET_CPU "aarch64") -# endif() -# add_subdirectory(external/aom external/aom-build EXCLUDE_FROM_ALL) -# register_license(aom external/aom/LICENSE) -# set(AOM_LIBRARY aom) -# if(SDLIMAGE_AOM_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS aom) -# endif() -# else() -# message(FATAL_ERROR "Internal error (aom is only required when requesting vendored dependencies)") -# endif() -# endif() - # list(APPEND SDLIMAGE_BACKENDS AVIF) # set(SDLIMAGE_AVIF_ENABLED FALSE) if get_option('SDLIMAGE_AVIF').enabled() endif # if(SDLIMAGE_AVIF) -# if(SDLIMAGE_AVIF_VENDORED) -# set(SDLIMAGE_AVIF_ENABLED TRUE) -# message(STATUS "${PROJECT_NAME}: Using vendored libavif") -# sdl_check_project_in_subfolder(external/libavif libavif SDLIMAGE_VENDORED) -# set(SKIP_INSTALL_LIBRARIES TRUE) -# set(BUILD_SHARED_LIBS ${SDLIMAGE_AVIF_SHARED}) -# set(AVIF_CODEC_DAV1D ON CACHE BOOL "Use dav1d codec for decoding" FORCE) -# set(AVIF_LOCAL_DAV1D OFF CACHE BOOL "Build dav1d by libavif" FORCE) -# set(AVIF_CODEC_AOM ON CACHE BOOL "Use aom codec for decoding" FORCE) -# set(AVIF_LOCAL_AOM OFF CACHE BOOL "Build aom by libavif" FORCE) -# set(AVIF_CODEC_AOM_ENCODE ON CACHE BOOL "Enable aom encoder" FORCE) -# set(AVIF_CODEC_AOM_DECODE OFF CACHE BOOL "Enable aom decoder" FORCE) -# set(LIBAVIF_WITH_SHARPYUV_SDLIMAGE ${SDLIMAGE_WEBP} CACHE BOOL "Build libavif with sharpyuv support (re-use sharpyuv built by libwebp)" FORCE) -# set(BUILD_SHARED_LIBS ${SDLIMAGE_AVIF_SHARED}) -# set(AOM_LIBRARIES "aom" CACHE STRING "aom libraries" FORCE) -# add_subdirectory(external/libavif external/libavif-build EXCLUDE_FROM_ALL) -# register_license(avif external/libavif/LICENSE) -# if(SDLIMAGE_AVIF_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS avif) -# endif() -# set_target_properties(avif PROPERTIES EXPORT_NAME external_libavif) -# add_library(SDL3_image::external_libavif ALIAS avif) -# if(NOT SDLIMAGE_AVIF_SHARED) -# list(APPEND PC_LIBS -l$) -# endif() -# if(NOT MSVC AND NOT CMAKE_SYSTEM_NAME MATCHES ".*OpenBSD.*") -# sdl_check_linker_flag("-Wl,--no-undefined" LINKER_SUPPORTS_WL_NO_UNDEFINED) -# if(LINKER_SUPPORTS_WL_NO_UNDEFINED) -# target_link_options(avif PRIVATE "-Wl,--no-undefined") -# endif() -# endif() -# elseif(SDLIMAGE_AVIF_SHARED AND DEFINED SDLIMAGE_DYNAMIC_AVIF AND EXISTS "${SDLIMAGE_DYNAMIC_AVIF}") +# if(SDLIMAGE_AVIF_SHARED AND DEFINED SDLIMAGE_DYNAMIC_AVIF AND EXISTS "${SDLIMAGE_DYNAMIC_AVIF}") # message(STATUS "${PROJECT_NAME}: Using libavif from CMake variable") # set(SDLIMAGE_AVIF_ENABLED TRUE) +# endif() # else() # find_package(libavif "${LIBAVIF_MINIMUM_VERSION}" QUIET ${required}) # if(libavif_FOUND) @@ -766,10 +621,6 @@ endif # add_library(SDL3_image::external_libpng ALIAS ${PNG_LIBRARY}) # if(NOT SDLIMAGE_PNG_SHARED) # list(APPEND PC_LIBS -l$) -# if(SDLIMAGE_ZLIB_VENDORED) -# list(APPEND PC_LIBS -l$) -# else() -# list(APPEND PC_REQUIRES zlib) # endif() # endif() # elseif(SDLIMAGE_PNG_SHARED AND DEFINED SDLIMAGE_DYNAMIC_PNG AND EXISTS "${SDLIMAGE_DYNAMIC_PNG}") @@ -881,10 +732,6 @@ endif # set(libdeflate OFF CACHE BOOL "libtiff: libdeflate option" FORCE) # # DEFLATE_FOUND variable is used by vendored libtiff # set(DEFLATE_FOUND OFF CACHE BOOL "libtiff: libdeflate option" FORCE) -# # zlib variable is used by vendored libtiff (controls use of `find_package`) -# set(zlib OFF CACHE BOOL "libtiff: find zlib using find_package" FORCE) -# # ZLIB_FOUND is used by vendored libtiff -# set(ZLIB_FOUND "") # # lerc variable is used by vendored libtiff # set(lerc OFF CACHE BOOL "libtiff: lerc option" FORCE) # # lzma variable is used by vendored libtiff From 06a4d3ac9b82ef246b677758bfd40c475cce3b57 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 14:57:31 -0330 Subject: [PATCH 06/51] Add image backends --- .../packagefiles/sdl3_image/meson.build | 326 ++---------------- .../packagefiles/sdl3_image/meson.options | 36 +- .../packagefiles/sdl3_image/src/meson.build | 8 + 3 files changed, 57 insertions(+), 313 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 29b6aa3113..c15d0c5c77 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -10,9 +10,8 @@ project('sdl3_image', 'c', meson_version: '>= 1.1.0', - version: '3.4.0') - -varr = meson.project_version().split('.') + version: '3.4.0', + default_options: 'c_std=c99') major_version = meson.project_version().split('.')[0] minor_version = meson.project_version().split('.')[1] @@ -22,9 +21,12 @@ feature_args = [] sdl3_dep = dependency('sdl3', version: '>=3.4.0') # Minimum allowed SDL3 version, not SDL3_IMAGE version libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) -libavif_dep = dependency('libavif', version: '>=0.1.0', required: false) +libavif_dep = dependency('libavif', version: '>=0.1.0', required: get_option('SDLIMAGE_AVIF')) # Absent from wrapdb as of Feb 1 2026 +libjxl_dep = dependency('libjxl', required: get_option('SDLIMAGE_JXL')) # Absent from wrapdb as of Feb 1 2026 +libtiff_dep = dependency('libtiff', required: get_option('SDLIMAGE_TIF')) +libwebp_dep = dependency('libwebp', required: get_option('SDLIMAGE_WEBP')) -deps = [sdl3_dep, libpng_dep, libavif_dep] +deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep] # include("${CMAKE_CURRENT_LIST_DIR}/cmake/GetGitRevisionDescription.cmake") # include("${CMAKE_CURRENT_LIST_DIR}/cmake/PrivateSdlFunctions.cmake") @@ -56,21 +58,12 @@ get_option('SDLIMAGE_INSTALL').require(sdlimage_rootproject, error_message: 'Can # cmake_dependent_option(SDLIMAGE_RELOCATABLE "Create relocatable SDL_image package" "${MSVC}" SDLIMAGE_INSTALL OFF) # option(SDLIMAGE_WERROR "Treat warnings as errors" OFF) -# option(SDLIMAGE_STRICT "Fail when a dependency could not be found" OFF) -# set(required "") -# set(fatal_error "STATUS") -# if(SDLIMAGE_STRICT) -# set(required "REQUIRED") -# set(fatal_error "FATAL_ERROR") -# endif() - get_option('SDLIMAGE_SAMPLES').enable_auto_if(sdlimage_rootproject) get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') get_option('SDLIMAGE_SAMPLES_INSTALL').enable_auto_if(get_option('SDLIMAGE_SAMPLES').enabled() and get_option('SDLIMAGE_INSTALL').enabled()) -# SDLIMAGE_BACKEND_STB is included in the SDL3_image source -get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'SDLIMAGE_BACKEND_WIC: Windows Required') -get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.subsystem() == 'macos', error_message: 'SDLIMAGE_BACKEND_IMAGEIO: MacOS required') +get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows required') +get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin required') get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(libpng_dep.found()) get_option('SDLIMAGE_ANI_SAVE').enable_auto_if(get_option('SDLIMAGE_ANI').enabled()) @@ -83,296 +76,39 @@ get_option('SDLIMAGE_TGA_SAVE').enable_auto_if(get_option('SDLIMAGE_TGA').enable get_option('SDLIMAGE_WEBP_SAVE').enable_auto_if(get_option('SDLIMAGE_WEBP').enabled()) get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(get_option('SDLIMAGE_PNG').enabled()) -# cmake_dependent_option(SDLIMAGE_AVIF_SHARED "Dynamically load AVIF support (requires shared libavif)" -# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_AVIF ON) - -# if(SDLIMAGE_VENDORED AND SDLIMAGE_JPG AND NOT (SDLIMAGE_BACKEND_WIC OR SDLIMAGE_BACKEND_STB OR SDLIMAGE_BACKEND_IMAGEIO)) -# set(SDLIMAGE_JPG_VENDORED ON) -# else() -# set(SDLIMAGE_JPG_VENDORED OFF) -# endif() -# cmake_dependent_option(SDLIMAGE_JPG_SHARED "Dynamically load JPG support (requires shared libjpeg)" -# ${SDLIMAGE_DEPS_SHARED} "SDLIMAGE_JPG;NOT SDLIMAGE_BACKEND_WIC;NOT SDLIMAGE_BACKEND_STB;NOT SDLIMAGE_BACKEND_IMAGEIO" OFF) - -# if(SDLIMAGE_VENDORED AND SDLIMAGE_JXL) -# set(SDLIMAGE_JXL_VENDORED ON) -# else() -# set(SDLIMAGE_JXL_VENDORED OFF) -# endif() -# cmake_dependent_option(SDLIMAGE_JXL_SHARED "Dynamically load JXL support (requires shared libjxl)" -# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_JXL OFF) - -# if(SDLIMAGE_VENDORED AND SDLIMAGE_PNG) -# set(SDLIMAGE_PNG_VENDORED ON) -# else() -# set(SDLIMAGE_PNG_VENDORED OFF) -# endif() -# cmake_dependent_option(SDLIMAGE_PNG_SHARED "Dynamically load PNG support (requires shared libpng)" -# ${SDLIMAGE_DEPS_SHARED} "SDLIMAGE_PNG" OFF) - -# if(SDLIMAGE_VENDORED AND SDLIMAGE_TIF AND NOT (SDLIMAGE_BACKEND_IMAGEIO OR SDLIMAGE_BACKEND_WIC)) -# set(SDLIMAGE_TIF_VENDORED ON) -# else() -# set(SDLIMAGE_TIF_VENDORED OFF) -# endif() -# cmake_dependent_option(SDLIMAGE_TIF_SHARED "Dynamically load TIFF support (requires shared libtiff)" -# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_TIF OFF) - -# if(SDLIMAGE_VENDORED AND SDLIMAGE_WEBP) -# set(SDLIMAGE_WEBP_VENDORED ON) -# else() -# set(SDLIMAGE_WEBP_VENDORED OFF) -# endif() -# cmake_dependent_option(SDLIMAGE_WEBP_SHARED "Dynamically load WEBP support (requires shared libwebp)" -# ${SDLIMAGE_DEPS_SHARED} SDLIMAGE_WEBP OFF) - -# # Save BUILD_SHARED_LIBS variable -# set(SDLIMAGE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - -# set(sdl_required_components Headers) - -# if(SDLIMAGE_BUILD_SHARED_LIBS) -# set(sdl3_image_target_name SDL3_image-shared) -# set(sdl3_target_name SDL3::SDL3-shared) - -# list(APPEND sdl_required_components SDL3-shared) -# else() -# set(sdl3_image_target_name SDL3_image-static) -# set(sdl3_target_name SDL3::SDL3) -# endif() - -# if(NOT TARGET SDL3::Headers OR NOT TARGET ${sdl3_target_name}) -# find_package(SDL3 ${SDL_REQUIRED_VERSION} REQUIRED COMPONENTS ${sdl_required_components}) -# endif() - -# get_property(sdl3_version TARGET ${sdl3_target_name} PROPERTY SDL_FULL_VERSION) -# if(sdl3_version AND sdl3_version VERSION_LESS SDL_REQUIRED_VERSION) -# message(FATAL_ERROR "SDL3 ${SDL_REQUIRED_VERSION} is required (${sdl3_version} was found)") -# endif() - -# SDL_DetectTargetCPUArchitectures(SDL_CPU_NAMES) -# SDL_DetectCMakePlatform() - -# # Set PROJECT_VERSION of subprojects to "" if it's project call does not set VERSION -# cmake_policy(SET CMP0048 NEW) - -# # Allow cmake_dependent_option to use "Full Condition Syntax" -# if(POLICY CMP0127) -# cmake_policy(SET CMP0127 NEW) -# endif() - -# # OpenGL is required by dependencies of (dependencies of) some vendored libraries -# if(NOT DEFINED OpenGL_GL_PREFERENCE) -# set(OpenGL_GL_PREFERENCE GLVND) -# endif() - -# set(BUILD_SHARED_LIBS ${SDLIMAGE_BUILD_SHARED_LIBS}) subdir('src') -# add_library(SDL3_image::${sdl3_image_target_name} ALIAS ${sdl3_image_target_name}) -# if(NOT TARGET SDL3_image::SDL3_image) -# add_library(SDL3_image::SDL3_image ALIAS ${sdl3_image_target_name}) -# endif() -# if("c_std_99" IN_LIST CMAKE_C_COMPILE_FEATURES) -# target_compile_features(${sdl3_image_target_name} PRIVATE c_std_99) -# else() -# message(WARNING "target_compile_features does not know c_std_99 for C compiler") -# endif() -# target_include_directories(${sdl3_image_target_name} -# PUBLIC -# "$" -# "$" -# ) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# BUILD_SDL -# SDL_BUILD_MAJOR_VERSION=${MAJOR_VERSION} -# SDL_BUILD_MINOR_VERSION=${MINOR_VERSION} -# SDL_BUILD_MICRO_VERSION=${MICRO_VERSION} -# ) -# # Make sure SDL3's include directory comes first -# target_include_directories(${sdl3_image_target_name} PRIVATE $) -# target_link_libraries(${sdl3_image_target_name} PUBLIC SDL3::Headers) -# if(SDLIMAGE_BUILD_SHARED_LIBS) -# target_link_libraries(${sdl3_image_target_name} PRIVATE SDL3::SDL3-shared) -# endif() -# sdl_add_warning_options(${sdl3_image_target_name} WARNING_AS_ERROR ${SDLIMAGE_WERROR}) -# if(WIN32 AND SDLIMAGE_BUILD_SHARED_LIBS) -# target_sources(${sdl3_image_target_name} PRIVATE -# src/version.rc -# ) -# if(MINGW) -# target_link_options(${sdl3_image_target_name} PRIVATE -static-libgcc) -# endif() -# endif() -# set_target_properties(${sdl3_image_target_name} PROPERTIES -# OUTPUT_NAME "SDL3_image" -# DEFINE_SYMBOL DLL_EXPORT -# EXPORT_NAME ${sdl3_image_target_name} -# C_VISIBILITY_PRESET "hidden" -# ) - -# sdl_target_link_option_version_file(${sdl3_image_target_name} "${CMAKE_CURRENT_SOURCE_DIR}/src/SDL_image.sym") - -# if(NOT ANDROID) -# set_target_properties(${sdl3_image_target_name} PROPERTIES -# SOVERSION "${SO_VERSION_MAJOR}" -# VERSION "${SO_VERSION}" -# ) -# if(APPLE) -# set_target_properties(${sdl3_image_target_name} PROPERTIES -# MACHO_COMPATIBILITY_VERSION "${DYLIB_COMPAT_VERSION}" -# MACHO_CURRENT_VERSION "${DYLIB_CURRENT_VERSION}" -# ) -# sdl_no_deprecated_errors(${sdl3_image_target_name}) -# set_property(TARGET ${sdl3_image_target_name} APPEND PROPERTY LINK_DEPENDS -# "${PROJECT_SOURCE_DIR}/src/SDL_image.exports") -# target_link_options(${sdl3_image_target_name} PRIVATE -# "SHELL:-Wl,-exported_symbols_list,${PROJECT_SOURCE_DIR}/src/SDL_image.exports") -# endif() -# endif() -# if(SDLIMAGE_BUILD_SHARED_LIBS) -# if(WIN32) -# set_target_properties(${sdl3_image_target_name} PROPERTIES -# PREFIX "" -# DLL_NAME_WITH_SOVERSION FALSE -# ) -# endif() -# else() -# if(MSVC) -# set_target_properties(${sdl3_image_target_name} PROPERTIES -# OUTPUT_NAME "SDL3_image-static" -# ) -# endif() -# endif() -# # Use `Compatible Interface Properties` to ensure a shared SDL3_image is built with a shared SDL3 -# if(SDLIMAGE_BUILD_SHARED_LIBS) -# set_property(TARGET ${sdl3_image_target_name} PROPERTY INTERFACE_SDL3_SHARED TRUE) -# set_property(TARGET ${sdl3_image_target_name} APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED) -# endif() +add_project_arguments('-DSDL_BUILD_MAJOR_VERSION=' + major_version, language: 'c') +add_project_arguments('-DSDL_BUILD_MAJOR_VERSION=' + minor_version, language: 'c') +add_project_arguments('-DSDL_BUILD_MAJOR_VERSION=' + micro_version, language: 'c') -# if(SDLIMAGE_BUILD_SHARED_LIBS) -# sdl_target_link_options_no_undefined(${sdl3_image_target_name}) -# endif() +if get_option('SDLIMAGE_BACKEND_STB').enabled() + add_project_arguments('-DUSE_STBIMAGE', language: 'c') +endif -# if(SDLIMAGE_BUILD_SHARED_LIBS) -# # Make sure static library dependencies are built with -fPIC when building a shared SDL3_image -# set(CMAKE_POSITION_INDEPENDENT_CODE ON) -# endif() +if target_machine.system() == 'darwin' + add_language('objc', required: get_option('SDLIMAGE_BACKEND_IMAGEIO')) + if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() + add_project_arguments('-DPNG_USES_IMAGEIO', language: 'objc') + endif + if get_option('SDLIMAGE_JPG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() + add_project_arguments('-DJPG_USES_IMAGEIO', language: 'objc') + endif +else + add_project_arguments('-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc') +endif -# set(install_license_names) -# macro(register_license NAME FILE) -# list(APPEND install_license_names ${NAME}) -# set(install_license_${NAME} "${FILE}") -# endmacro() - -# set(INSTALL_EXTRA_TARGETS) -# set(INSTALL_EXTRA_CMAKE_MODULES) -# set(PC_LIBS) -# set(PC_REQUIRES) -# set(SDLIMAGE_BACKENDS) - -# list(APPEND SDLIMAGE_BACKENDS STB) -# set(SDLIMAGE_STB_ENABLED FALSE) -# if(SDLIMAGE_BACKEND_STB) -# set(SDLIMAGE_STB_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE USE_STBIMAGE) -# endif() +if get_option('SDLIMAGE_BACKEND_WIC').enabled() + add_project_arguments('-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c') +endif -# list(APPEND SDLIMAGE_BACKENDS IMAGEIO) -# set(SDLIMAGE_IMAGEIO_ENABLED FALSE) -# if(APPLE) -# if(SDLIMAGE_BACKEND_IMAGEIO) -# enable_language(OBJC) -# set(SDLIMAGE_IMAGEIO_ENABLED TRUE) -# if(CMAKE_VERSION VERSION_LESS "3.24") -# set(genex_FRAMEWORK "1:") -# else() -# set(genex_FRAMEWORK "LINK_LIBRARY:FRAMEWORK,") -# endif() -# if(CMAKE_SYSTEM_NAME MATCHES ".*(Darwin|MacOS).*") -# target_link_libraries(${sdl3_image_target_name} PRIVATE $<${genex_FRAMEWORK}ApplicationServices>) -# target_link_libraries(${sdl3_image_target_name} PRIVATE $<${genex_FRAMEWORK}Foundation>) -# else() -# target_link_libraries(${sdl3_image_target_name} PRIVATE -# $<${genex_FRAMEWORK}CoreGraphics> -# $<${genex_FRAMEWORK}Foundation> -# $<${genex_FRAMEWORK}ImageIO> -# $<${genex_FRAMEWORK}MobileCoreServices> -# $<${genex_FRAMEWORK}UIKit> -# ) -# endif() -# target_link_libraries(${sdl3_image_target_name} PRIVATE objc) -# target_sources(${sdl3_image_target_name} PRIVATE -# src/IMG_ImageIO.m -# ) -# if (SDLIMAGE_PNG AND NOT SDLIMAGE_BACKEND_STB) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE PNG_USES_IMAGEIO) -# endif() -# if (SDLIMAGE_JPG AND NOT SDLIMAGE_BACKEND_STB) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE JPG_USES_IMAGEIO) -# endif() -# else() -# target_compile_definitions(${sdl3_image_target_name} PRIVATE SDL_IMAGE_USE_COMMON_BACKEND) -# endif() -# endif() -# list(APPEND SDLIMAGE_BACKENDS WIC) -# set(SDLIMAGE_WIC_ENABLED FALSE) -# if(SDLIMAGE_BACKEND_WIC) -# set(SDLIMAGE_WIC_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE SDL_IMAGE_USE_WIC_BACKEND) -# endif() -# list(APPEND SDLIMAGE_BACKENDS AVIF) -# set(SDLIMAGE_AVIF_ENABLED FALSE) if get_option('SDLIMAGE_AVIF').enabled() + add_project_arguments('-DLOAD_AVIF', language: 'c') + add_project_arguments('-DSAVE_AVIF=' + get_option('SDLIMAGE_AVIF_SAVE').enabled(), language: 'c') endif -# if(SDLIMAGE_AVIF) -# if(SDLIMAGE_AVIF_SHARED AND DEFINED SDLIMAGE_DYNAMIC_AVIF AND EXISTS "${SDLIMAGE_DYNAMIC_AVIF}") -# message(STATUS "${PROJECT_NAME}: Using libavif from CMake variable") -# set(SDLIMAGE_AVIF_ENABLED TRUE) -# endif() -# else() -# find_package(libavif "${LIBAVIF_MINIMUM_VERSION}" QUIET ${required}) -# if(libavif_FOUND) -# message(STATUS "${PROJECT_NAME}: Using system libavif") -# set(SDLIMAGE_AVIF_ENABLED TRUE) -# if(NOT SDLIMAGE_AVIF_SHARED) -# list(APPEND PC_REQUIRES "libavif >= ${LIBAVIF_MINIMUM_VERSION}") -# endif() -# else() -# message(STATUS "libavif-${LIBAVIF_MINIMUM_VERSION} or compatible not found") -# message(${fatal_error} "libavif NOT found") -# endif() -# endif() -# if(SDLIMAGE_AVIF_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_AVIF -# SAVE_AVIF=$ -# ) -# if(SDLIMAGE_AVIF_SHARED) -# if(NOT DEFINED SDLIMAGE_DYNAMIC_AVIF) -# target_include_directories(${sdl3_image_target_name} PRIVATE -# $ -# $ -# $ -# ) -# if(SDLIMAGE_AVIF_VENDORED) -# add_dependencies(${sdl3_image_target_name} avif) -# endif() -# endif() -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_AVIF avif) -# message(STATUS "Dynamic libavif: ${SDLIMAGE_DYNAMIC_AVIF}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_AVIF_DYNAMIC=\"${SDLIMAGE_DYNAMIC_AVIF}\"") -# else() -# target_link_libraries(${sdl3_image_target_name} PRIVATE avif) -# endif() -# else() -# # Variable is used by test suite -# set(SDLIMAGE_AVIF_SAVE OFF) -# endif() -# endif() # list(APPEND SDLIMAGE_BACKENDS ANI) # set(SDLIMAGE_ANI_ENABLED FALSE) diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options index b447ee22fd..f92ac108e5 100644 --- a/subprojects/packagefiles/sdl3_image/meson.options +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -12,24 +12,24 @@ option('SDLIMAGE_BACKEND_WIC', type: 'feature', value: 'auto', description: 'Add option('SDLIMAGE_BACKEND_IMAGEIO', type: 'feature', value: 'auto', description: 'Use native Mac OS X frameworks for loading images') option('SDLIMAGE_PNG_LIBPNG', type: 'feature', value: 'auto', description: 'Support loading PNGs using libpng (useful for APNGs)') -option('SDLIMAGE_ANI', type: 'feature', value: 'enabled', description: 'Support loading ANI animations') -option('SDLIMAGE_AVIF', type: 'feature', value: 'enabled', description: 'Support loading AVIF images') -option('SDLIMAGE_BMP', type: 'feature', value: 'enabled', description: 'Support loading BMP images') -option('SDLIMAGE_GIF', type: 'feature', value: 'enabled', description: 'Support loading GIF images') -option('SDLIMAGE_JPG', type: 'feature', value: 'enabled', description: 'Support loading JPEG images') -option('SDLIMAGE_JXL', type: 'feature', value: 'enabled', description: 'Support loading JXL images') -option('SDLIMAGE_LBM', type: 'feature', value: 'enabled', description: 'Support loading LBM images') -option('SDLIMAGE_PCX', type: 'feature', value: 'enabled', description: 'Support loading PCX images') -option('SDLIMAGE_PNG', type: 'feature', value: 'enabled', description: 'Support loading PNG images') -option('SDLIMAGE_PNM', type: 'feature', value: 'enabled', description: 'Support loading PNM images') -option('SDLIMAGE_QOI', type: 'feature', value: 'enabled', description: 'Support loading QOI images') -option('SDLIMAGE_SVG', type: 'feature', value: 'enabled', description: 'Support loading SVG images') -option('SDLIMAGE_TGA', type: 'feature', value: 'enabled', description: 'Support loading TGA images') -option('SDLIMAGE_TIF', type: 'feature', value: 'enabled', description: 'Support loading TIFF images') -option('SDLIMAGE_WEBP', type: 'feature', value: 'enabled', description: 'Support loading WEBP images') -option('SDLIMAGE_XCF', type: 'feature', value: 'enabled', description: 'Support loading XCF images') -option('SDLIMAGE_XPM', type: 'feature', value: 'enabled', description: 'Support loading XPM images') -option('SDLIMAGE_XV', type: 'feature', value: 'enabled', description: 'Support loading XV images') +option('SDLIMAGE_ANI', type: 'feature', value: 'auto', description: 'Support loading ANI animations') +option('SDLIMAGE_AVIF', type: 'feature', value: 'auto', description: 'Support loading AVIF images') +option('SDLIMAGE_BMP', type: 'feature', value: 'auto', description: 'Support loading BMP images') +option('SDLIMAGE_GIF', type: 'feature', value: 'auto', description: 'Support loading GIF images') +option('SDLIMAGE_JPG', type: 'feature', value: 'auto', description: 'Support loading JPEG images') +option('SDLIMAGE_JXL', type: 'feature', value: 'auto', description: 'Support loading JXL images') +option('SDLIMAGE_LBM', type: 'feature', value: 'auto', description: 'Support loading LBM images') +option('SDLIMAGE_PCX', type: 'feature', value: 'auto', description: 'Support loading PCX images') +option('SDLIMAGE_PNG', type: 'feature', value: 'auto', description: 'Support loading PNG images') +option('SDLIMAGE_PNM', type: 'feature', value: 'auto', description: 'Support loading PNM images') +option('SDLIMAGE_QOI', type: 'feature', value: 'auto', description: 'Support loading QOI images') +option('SDLIMAGE_SVG', type: 'feature', value: 'auto', description: 'Support loading SVG images') +option('SDLIMAGE_TGA', type: 'feature', value: 'auto', description: 'Support loading TGA images') +option('SDLIMAGE_TIF', type: 'feature', value: 'auto', description: 'Support loading TIFF images') +option('SDLIMAGE_WEBP', type: 'feature', value: 'auto', description: 'Support loading WEBP images') +option('SDLIMAGE_XCF', type: 'feature', value: 'auto', description: 'Support loading XCF images') +option('SDLIMAGE_XPM', type: 'feature', value: 'auto', description: 'Support loading XPM images') +option('SDLIMAGE_XV', type: 'feature', value: 'auto', description: 'Support loading XV images') option('SDLIMAGE_ANI_SAVE', type: 'feature', value: 'auto', description: 'Add ANI save support') option('SDLIMAGE_AVIF_SAVE', type: 'feature', value: 'auto', description: 'Add AVIF save support') diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index fc35c46a39..c4289a8dc1 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -20,3 +20,11 @@ sdl3_image_src = files( 'IMG_xv.c', 'IMG_xxx.c', ) + +if meson.get_compiler('c').get_id() == 'msvc' and get_option('default_library') == 'shared' + sdl3_image_src += 'version.rc' +endif + +if target_machine.system() == 'darwin' + sdl3_image_src += 'IMG_ImageIO.m' +endif \ No newline at end of file From 8c9ceb498497eb4e5d70df676fdd86d16cf70d5c Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 18:00:23 -0330 Subject: [PATCH 07/51] Added all image backends, updated logic --- .../packagefiles/sdl3_image/meson.build | 784 +----------------- 1 file changed, 19 insertions(+), 765 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index c15d0c5c77..be8f4af4cb 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,11 +1,3 @@ -# Rough PR Comments: -# - Mostly 1:1 recreation of the logic used in the SDL_image/CMakeLists.txt (exceptions listed below) -# - Meson best practices always preferred over the CMake logic -# - CPack excluded because yknow, it aint CMake -# - Vendored dependencies excluded as they're not directly included in the source -# - -# - # list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") project('sdl3_image', 'c', @@ -17,16 +9,15 @@ major_version = meson.project_version().split('.')[0] minor_version = meson.project_version().split('.')[1] micro_version = meson.project_version().split('.')[2] -feature_args = [] - sdl3_dep = dependency('sdl3', version: '>=3.4.0') # Minimum allowed SDL3 version, not SDL3_IMAGE version libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) libavif_dep = dependency('libavif', version: '>=0.1.0', required: get_option('SDLIMAGE_AVIF')) # Absent from wrapdb as of Feb 1 2026 libjxl_dep = dependency('libjxl', required: get_option('SDLIMAGE_JXL')) # Absent from wrapdb as of Feb 1 2026 libtiff_dep = dependency('libtiff', required: get_option('SDLIMAGE_TIF')) libwebp_dep = dependency('libwebp', required: get_option('SDLIMAGE_WEBP')) +libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) -deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep] +deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep, libtiff_dep, libwebp_dep, libjpeg_dep] # include("${CMAKE_CURRENT_LIST_DIR}/cmake/GetGitRevisionDescription.cmake") # include("${CMAKE_CURRENT_LIST_DIR}/cmake/PrivateSdlFunctions.cmake") @@ -35,28 +26,13 @@ deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep] # include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlmanpages.cmake") # sdl_calculate_derived_version_variables(${MAJOR_VERSION} ${MINOR_VERSION} ${MICRO_VERSION}) -sdlimage_rootproject = not meson.is_subproject() - -# if(NOT DEFINED CMAKE_FIND_PACKAGE_PREFER_CONFIG) -# set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) -# endif() - -# include(CMakeDependentOption) -# include(CMakePackageConfigHelpers) -# include(GNUInstallDirs) - platform_supports_shared = target_machine.system() == 'emscripten' ? false : true get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'Target "' + target_machine.system() + '" does not support shared libraries') # SDL3_image-3.4.0, CMakeLists.txt, line 65 get_option('SDLIMAGE_INSTALL').require(not subproject('sdl3').found(), error_message: 'Cannot install SDL3_image when SDL3 is built in same build') -get_option('SDLIMAGE_INSTALL').require(sdlimage_rootproject, error_message: 'Cannot install SDL3_image when it is a subproject') - -# cmake_dependent_option(SDLIMAGE_INSTALL_MAN "Install man pages for SDL3_image" OFF "SDLIMAGE_INSTALL" OFF) -# cmake_dependent_option(SDLIMAGE_DEPS_SHARED "Load dependencies dynamically" ON PLATFORM_SUPPORTS_SHARED OFF) -# cmake_dependent_option(SDLIMAGE_RELOCATABLE "Create relocatable SDL_image package" "${MSVC}" SDLIMAGE_INSTALL OFF) -# option(SDLIMAGE_WERROR "Treat warnings as errors" OFF) +get_option('SDLIMAGE_INSTALL').require(not meson.is_subproject(), error_message: 'Cannot install SDL3_image when it is a subproject') get_option('SDLIMAGE_SAMPLES').enable_auto_if(sdlimage_rootproject) get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') @@ -66,16 +42,6 @@ get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin required') get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(libpng_dep.found()) -get_option('SDLIMAGE_ANI_SAVE').enable_auto_if(get_option('SDLIMAGE_ANI').enabled()) -get_option('SDLIMAGE_AVIF_SAVE').enable_auto_if(get_option('SDLIMAGE_AVIF').enabled()) -get_option('SDLIMAGE_BMP_SAVE').enable_auto_if(get_option('SDLIMAGE_BMP').enabled()) -get_option('SDLIMAGE_GIF_SAVE').enable_auto_if(get_option('SDLIMAGE_GIF').enabled()) -get_option('SDLIMAGE_JPG_SAVE').enable_auto_if(get_option('SDLIMAGE_JPG').enabled()) -get_option('SDLIMAGE_PNG_SAVE').enable_auto_if(get_option('SDLIMAGE_PNG').enabled()) -get_option('SDLIMAGE_TGA_SAVE').enable_auto_if(get_option('SDLIMAGE_TGA').enabled()) -get_option('SDLIMAGE_WEBP_SAVE').enable_auto_if(get_option('SDLIMAGE_WEBP').enabled()) -get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(get_option('SDLIMAGE_PNG').enabled()) - subdir('src') add_project_arguments('-DSDL_BUILD_MAJOR_VERSION=' + major_version, language: 'c') @@ -103,736 +69,24 @@ if get_option('SDLIMAGE_BACKEND_WIC').enabled() endif +# Boolean correlates to whether the extension is natively savable or not +sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, + 'JPG': true, 'JXL': false, 'LBM': false, 'PCX': false, + 'PNG': true, 'PNM': false, 'QOI': false, 'SVG': false, + 'TGA': true, 'TIF': false, 'WEBP': true, 'XCF': false, + 'XPM': false, 'XC': false} -if get_option('SDLIMAGE_AVIF').enabled() - add_project_arguments('-DLOAD_AVIF', language: 'c') - add_project_arguments('-DSAVE_AVIF=' + get_option('SDLIMAGE_AVIF_SAVE').enabled(), language: 'c') -endif - -# list(APPEND SDLIMAGE_BACKENDS ANI) -# set(SDLIMAGE_ANI_ENABLED FALSE) -# if(SDLIMAGE_ANI) -# set(SDLIMAGE_ANI_ENABLED TRUE) -# if(SDLIMAGE_ANI_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_ANI -# SAVE_ANI=$ -# ) -# else() -# # Variable is used by test suite -# set(SDLIMAGE_ANI_SAVE OFF) -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS BMP) -# set(SDLIMAGE_BMP_ENABLED FALSE) -# if(SDLIMAGE_BMP) -# set(SDLIMAGE_BMP_ENABLED TRUE) -# if(SDLIMAGE_BMP_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_BMP -# SAVE_BMP=$ -# ) -# else() -# # Variable is used by test suite -# set(SDLIMAGE_BMP_SAVE OFF) -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS GIF) -# set(SDLIMAGE_GIF_ENABLED FALSE) -# if(SDLIMAGE_GIF) -# set(SDLIMAGE_GIF_ENABLED TRUE) -# if(SDLIMAGE_GIF_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_GIF -# SAVE_GIF=$ -# ) -# else() -# # Variable is used by test suite -# set(SDLIMAGE_GIF_SAVE OFF) -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS JPG) -# set(SDLIMAGE_JPG_ENABLED FALSE) -# if(SDLIMAGE_JPG) -# if(SDLIMAGE_BACKEND_STB OR SDLIMAGE_BACKEND_WIC OR SDLIMAGE_BACKEND_IMAGEIO) -# set(SDLIMAGE_JPG_ENABLED TRUE) -# else() -# if(SDLIMAGE_JPG_VENDORED) -# set(SDLIMAGE_JPG_ENABLED TRUE) -# message(STATUS "${PROJECT_NAME}: Using vendored libjpeg") -# sdl_check_project_in_subfolder(external/jpeg libjpeg SDLIMAGE_VENDORED) -# set(BUILD_SHARED_LIBS ${SDLIMAGE_JPG_SHARED}) -# add_subdirectory(external/jpeg external/jpeg-build EXCLUDE_FROM_ALL) -# register_license(jpeg external/jpeg/COPYING) -# if(SDLIMAGE_JPG_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS jpeg) -# endif() -# set_target_properties(jpeg PROPERTIES EXPORT_NAME external_libjpeg) -# add_library(SDL3_image::external_libjpeg ALIAS jpeg) -# if(NOT SDLIMAGE_JPG_SHARED) -# list(APPEND PC_LIBS -l$) -# endif() -# elseif(SDLIMAGE_JPG_SHARED AND DEFINED SDLIMAGE_DYNAMIC_JPEG AND EXISTS "${SDLIMAGE_DYNAMIC_JPEG}") -# message(STATUS "${PROJECT_NAME}: Using libjpeg from CMake variable") -# set(SDLIMAGE_JPG_ENABLED TRUE) -# else() -# find_package(JPEG ${required}) -# if(JPEG_FOUND) -# message(STATUS "${PROJECT_NAME}: Using system libjpeg") -# set(SDLIMAGE_JPG_ENABLED TRUE) -# if(NOT SDLIMAGE_JPG_SHARED) -# list(APPEND PC_REQUIRES libjpeg) -# endif() -# else() -# message(${fatal_error} "libjpeg NOT found") -# endif() -# endif() -# if(SDLIMAGE_JPG_ENABLED) -# if(SDLIMAGE_JPG_SHARED) -# if(NOT DEFINED SDLIMAGE_DYNAMIC_JPEG) -# target_include_directories(${sdl3_image_target_name} PRIVATE -# $ -# $ -# $ -# ) -# if(SDLIMAGE_JPG_VENDORED) -# add_dependencies(${sdl3_image_target_name} JPEG::JPEG) -# endif() -# endif() -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_JPEG JPEG::JPEG) -# message(STATUS "Dynamic libjpeg: ${SDLIMAGE_DYNAMIC_JPEG}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_JPG_DYNAMIC=\"${SDLIMAGE_DYNAMIC_JPEG}\"") -# else() -# target_link_libraries(${sdl3_image_target_name} PRIVATE JPEG::JPEG) -# endif() -# endif() -# endif() -# if(SDLIMAGE_JPG_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_JPG -# SAVE_JPG=$ -# ) -# else() -# # Variable is used by test suite -# set(SDLIMAGE_JPG_SAVE OFF) -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS JXL) -# set(SDLIMAGE_JXL_ENABLED FALSE) -# if(SDLIMAGE_JXL) -# if(SDLIMAGE_JXL_VENDORED) -# set(SDLIMAGE_JXL_ENABLED TRUE) -# enable_language(CXX) -# message(STATUS "${PROJECT_NAME}: Using vendored libjxl") -# # BUILD_TESTING variable is used by libjxl -# set(BUILD_TESTING OFF CACHE BOOL "build testing") -# # JPEGXL_ENABLE_BENCHMARK variable is used by libjxl -# set(JPEGXL_ENABLE_BENCHMARK OFF CACHE BOOL "libjpegxl benchmark" FORCE) -# # JPEGXL_ENABLE_TOOLS variable is used by libjxl -# set(JPEGXL_ENABLE_JNI OFF CACHE BOOL "build jpegxl jni" FORCE) -# # JPEGXL_ENABLE_SJPEG variable is used by libjxl -# set(JPEGXL_ENABLE_SJPEG OFF CACHE BOOL "build jpegxl sjpeg" FORCE) -# # JPEGXL_BUNDLE_SKCMS variable is used by libjxl -# set(JPEGXL_BUNDLE_SKCMS OFF CACHE BOOL "build jpegxl bundle sjpeg" FORCE) -# # JPEGXL_ENABLE_OPENEXR variable is used by libjxl -# set(JPEGXL_ENABLE_OPENEXR OFF CACHE BOOL "build jpegxl openxr" FORCE) -# # JPEGXL_ENABLE_MANPAGES variable is used by libjxl -# set(JPEGXL_ENABLE_MANPAGES OFF CACHE BOOL "libjxl manpage option" FORCE) -# # JPEGXL_ENABLE_PLUGINS variable is used by libjxl -# set(JPEGXL_ENABLE_PLUGINS OFF CACHE BOOL "libjxl manpage option" FORCE) -# # JPEGXL_ENABLE_SKCMS variable is used by libjxl -# set(JPEGXL_ENABLE_SKCMS OFF CACHE BOOL "libjxl skcms option" FORCE) -# # JPEGXL_FORCE_SYSTEM_HWY variable is used by libjxl -# set(JPEGXL_FORCE_SYSTEM_HWY OFF CACHE BOOL "libjxl highway option" FORCE) -# sdl_check_project_in_subfolder(external/libjxl libjxl SDLIMAGE_VENDORED) -# set(BUILD_SHARED_LIBS ${SDLIMAGE_JXL_SHARED}) -# add_subdirectory(external/libjxl external/libjxl-build EXCLUDE_FROM_ALL) -# register_license(jxl external/libjxl/LICENSE) -# if(SDLIMAGE_JXL_SHARED) -# set(jxl_lib jxl) -# set(jxl_install_libs brotlidec brotlicommon brotlienc jxl) -# else() -# set(jxl_lib jxl_dec-static) -# set(jxl_install_libs brotlidec brotlicommon hwy jxl_dec-static) -# list(APPEND PC_LIBS -# -l$ -l$ -# -l$ -l$ -# ) -# endif() -# if(SDLIMAGE_JXL_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS ${jxl_install_libs}) -# endif() -# set_target_properties(${jxl_lib} PROPERTIES EXPORT_NAME external_libjxl) -# add_library(SDL3_image::external_libjxl ALIAS ${jxl_lib}) -# if(NOT TARGET libjxl::libjxl) -# add_library(libjxl::libjxl ALIAS ${jxl_lib}) -# endif() -# elseif(SDLIMAGE_JXL_SHARED AND DEFINED SDLIMAGE_DYNAMIC_JXL AND EXISTS "${SDLIMAGE_DYNAMIC_JXL}") -# message(STATUS "${PROJECT_NAME}: Using libjxl from CMake variable") -# set(SDLIMAGE_JXL_ENABLED TRUE) -# else() -# find_package(libjxl ${required}) -# if(libjxl_FOUND) -# message(STATUS "${PROJECT_NAME}: Using system libjxl") -# set(SDLIMAGE_JXL_ENABLED TRUE) -# if(NOT SDLIMAGE_JXL_SHARED) -# list(APPEND PC_REQUIRES libjxl) -# list(APPEND INSTALL_EXTRA_CMAKE_MODULES cmake/Findlibjxl.cmake) -# endif() -# else() -# message(${fatal_error} "libjxl NOT found") -# endif() -# endif() -# if(SDLIMAGE_JXL_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_JXL) -# if(SDLIMAGE_JXL_SHARED) -# if(NOT DEFINED SDLIMAGE_DYNAMIC_JXL) -# target_include_directories(${sdl3_image_target_name} PRIVATE -# $ -# $ -# $ -# ) -# if(SDLIMAGE_JXL_VENDORED) -# add_dependencies(${sdl3_image_target_name} libjxl::libjxl) -# endif() -# endif() -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_JXL libjxl::libjxl) -# message(STATUS "Dynamic libjxl: ${SDLIMAGE_DYNAMIC_JXL}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_JXL_DYNAMIC=\"${SDLIMAGE_DYNAMIC_JXL}\"") -# else() -# target_link_libraries(${sdl3_image_target_name} PRIVATE libjxl::libjxl) -# endif() -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS LBM) -# set(SDLIMAGE_LBM_ENABLED FALSE) -# if(SDLIMAGE_LBM) -# set(SDLIMAGE_LBM_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_LBM) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS PCX) -# set(SDLIMAGE_PCX_ENABLED FALSE) -# if(SDLIMAGE_PCX) -# set(SDLIMAGE_PCX_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_PCX) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS PNG) -# list(APPEND SDLIMAGE_BACKENDS APNG) -# set(SDLIMAGE_PNG_ENABLED FALSE) -# if(SDLIMAGE_PNG) -# set(SDLIMAGE_APNG_ENABLED FALSE) -# set(SDLIMAGE_PNG_ENABLED TRUE) -# set(SDLIMAGE_LIBPNG_ENABLED FALSE) - -# if(SDLIMAGE_PNG_LIBPNG) -# if(SDLIMAGE_PNG_VENDORED) -# set(PNG_SHARED "${SDLIMAGE_PNG_SHARED}") -# set(SDLIMAGE_LIBPNG_ENABLED TRUE) -# message(STATUS "${PROJECT_NAME}: Using vendored libpng") -# set(PNG_TESTS OFF CACHE BOOL "Build PNG Tests" FORCE) -# set(SKIP_INSTALL_EXPORT TRUE) -# sdl_check_project_in_subfolder(external/libpng libpng SDLIMAGE_VENDORED) -# add_subdirectory(external/libpng external/libpng-build EXCLUDE_FROM_ALL) -# register_license(libpng external/libpng/LICENSE) -# if(SDLIMAGE_PNG_SHARED) -# set(PNG_LIBRARY png_shared) -# else() -# set(PNG_LIBRARY png_static) -# endif() -# add_library(PNG::PNG ALIAS ${PNG_LIBRARY}) -# set_property(TARGET ${PNG_LIBRARY} PROPERTY DEBUG_POSTFIX "") -# target_include_directories(${sdl3_image_target_name} PRIVATE external/libpng) -# if(SDLIMAGE_PNG_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS ${PNG_LIBRARY}) -# endif() -# set_target_properties(${PNG_LIBRARY} PROPERTIES EXPORT_NAME external_libpng) -# add_library(SDL3_image::external_libpng ALIAS ${PNG_LIBRARY}) -# if(NOT SDLIMAGE_PNG_SHARED) -# list(APPEND PC_LIBS -l$) -# endif() -# endif() -# elseif(SDLIMAGE_PNG_SHARED AND DEFINED SDLIMAGE_DYNAMIC_PNG AND EXISTS "${SDLIMAGE_DYNAMIC_PNG}") -# message(STATUS "${PROJECT_NAME}: Using libpng from CMake variable") -# set(SDLIMAGE_LIBPNG_ENABLED TRUE) -# else() -# find_package(PNG ${required}) -# if(PNG_FOUND) -# message(STATUS "${PROJECT_NAME}: Using system libpng") -# set(SDLIMAGE_LIBPNG_ENABLED TRUE) -# if(NOT SDLIMAGE_PNG_SHARED) -# list(APPEND PC_REQUIRES libpng) -# endif() -# else() -# message(${FATAL_ERROR} "libpng NOT found") -# endif() -# endif() -# endif() - -# if(SDLIMAGE_LIBPNG_ENABLED) -# set(SDLIMAGE_APNG_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# SDL_IMAGE_LIBPNG -# ) -# if(SDLIMAGE_PNG_SHARED) -# if(NOT DEFINED SDLIMAGE_DYNAMIC_PNG) -# if(TARGET PNG::png_shared) -# set(png_target PNG::png_shared) -# else() -# set(png_target PNG::PNG) -# endif() -# target_include_directories(${sdl3_image_target_name} PRIVATE -# $ -# $ -# $ -# ) -# if(SDLIMAGE_PNG_VENDORED) -# add_dependencies(${sdl3_image_target_name} ${png_target}) -# endif() -# endif() -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_PNG PNG::PNG) -# message(STATUS "Dynamic libpng: ${SDLIMAGE_DYNAMIC_PNG}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_LIBPNG_DYNAMIC=\"${SDLIMAGE_DYNAMIC_PNG}\"") -# else() -# target_link_libraries(${sdl3_image_target_name} PRIVATE PNG::PNG) -# endif() -# endif() - -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_PNG -# SAVE_PNG=$ -# ) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS PNM) -# set(SDLIMAGE_PNM_ENABLED FALSE) -# if(SDLIMAGE_PNM) -# set(SDLIMAGE_PNM_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_PNM) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS QOI) -# set(SDLIMAGE_QOI_ENABLED FALSE) -# if(SDLIMAGE_QOI) -# set(SDLIMAGE_QOI_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_QOI) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS SVG) -# set(SDLIMAGE_SVG_ENABLED FALSE) -# if(SDLIMAGE_SVG) -# set(SDLIMAGE_SVG_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_SVG) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS TGA) -# set(SDLIMAGE_TGA_ENABLED FALSE) -# if(SDLIMAGE_TGA) -# set(SDLIMAGE_TGA_ENABLED TRUE) -# if(SDLIMAGE_TGA_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_TGA -# SAVE_TGA=$ -# ) -# else() -# # Variable is used by test suite -# set(SDLIMAGE_TGA_SAVE OFF) -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS TIF) -# set(SDLIMAGE_TIF_ENABLED FALSE) -# if(SDLIMAGE_TIF) -# if(SDLIMAGE_BACKEND_IMAGEIO OR SDLIMAGE_BACKEND_WIC) -# set(SDLIMAGE_TIF_ENABLED TRUE) -# else() -# if(SDLIMAGE_TIF_VENDORED) -# set(SDLIMAGE_TIF_ENABLED TRUE) -# message(STATUS "${PROJECT_NAME}: Using vendored libtiff") -# # tiff-cxx variable is used by vendored libtiff -# set(tiff-cxx OFF CACHE BOOL "libtiff: C++ API" FORCE) -# # tiff-tests variable is used by vendored libtiff -# set(tiff-tests OFF CACHE BOOL "libtiff: tests" FORCE) -# # tiff-opengl variable is used by vendored libtiff -# set(tiff-opengl OFF CACHE BOOL "libtiff: OpenGL option" FORCE) -# # jpeg variable is used by vendored libtiff -# set(jpeg OFF CACHE BOOL "libtiff: jpeg option" FORCE) -# # libdeflate variable is used by vendored libtiff -# set(libdeflate OFF CACHE BOOL "libtiff: libdeflate option" FORCE) -# # DEFLATE_FOUND variable is used by vendored libtiff -# set(DEFLATE_FOUND OFF CACHE BOOL "libtiff: libdeflate option" FORCE) -# # lerc variable is used by vendored libtiff -# set(lerc OFF CACHE BOOL "libtiff: lerc option" FORCE) -# # lzma variable is used by vendored libtiff -# set(lzma OFF CACHE BOOL "libtiff: lzma option" FORCE) -# # webp variable is used by vendored libtiff -# set(webp OFF CACHE BOOL "libtiff: webp option" FORCE) -# # zstd variable is used by vendored libtiff -# set(zstd OFF CACHE BOOL "libtiff: zstd option" FORCE) -# # ZSTD_FOUND variable is used by vendored libtiff -# set(ZSTD_FOUND OFF) -# # WEBP_LIBRARY variable is used by vendored libtiff -# set(WEBP_LIBRARY "") -# sdl_check_project_in_subfolder(external/libtiff libtiff SDLIMAGE_VENDORED) -# set(BUILD_SHARED_LIBS ${SDLIMAGE_TIF_SHARED}) -# add_subdirectory(external/libtiff external/libtiff-build EXCLUDE_FROM_ALL) -# register_license(tiff external/libtiff/LICENSE.md) -# add_library(TIFF::TIFF ALIAS tiff) -# set(SDLIMAGE_TIF_TARGET "TIFF::tiff") -# if(SDLIMAGE_TIF_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS tiff) -# endif() -# set_target_properties(tiff PROPERTIES EXPORT_NAME external_libtiff) -# add_library(SDL3_image::external_libtiff ALIAS tiff) -# if(NOT SDLIMAGE_TIF_SHARED) -# list(APPEND PC_LIBS -l$) -# endif() -# elseif(SDLIMAGE_TIF_SHARED AND DEFINED SDLIMAGE_DYNAMIC_TIF AND EXISTS "${SDLIMAGE_DYNAMIC_TIF}") -# message(STATUS "${PROJECT_NAME}: Using libtiff from CMake variable") -# set(SDLIMAGE_TIF_ENABLED TRUE) -# set(SDLIMAGE_TIF_TARGET "tiff-non-existing-target") -# else() -# find_package(TIFF ${required}) -# if(TIFF_FOUND) -# message(STATUS "${PROJECT_NAME}: Using system libtiff") -# set(SDLIMAGE_TIF_ENABLED TRUE) -# if(NOT SDLIMAGE_TIF_SHARED) -# list(APPEND PC_REQUIRES libtiff-4) -# endif() -# if(TARGET TIFF::tiff) -# # introduced in CMake 3.28 -# # TIFF::TIFF still exists, but it is an INTERFACE library linking to TIFF::tiff (no ALIAS library) -# set(SDLIMAGE_TIF_TARGET "TIFF::tiff") -# else() -# set(SDLIMAGE_TIF_TARGET "TIFF::TIFF") -# endif() -# else() -# message(${fatal_error} "libtiff NOT found") -# endif() -# endif() -# if(SDLIMAGE_TIF_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_TIF) -# if(SDLIMAGE_TIF_SHARED) -# if(NOT DEFINED SDLIMAGE_DYNAMIC_TIF) -# target_include_directories(${sdl3_image_target_name} PRIVATE -# $ -# $ -# $ -# ) -# if(SDLIMAGE_TIF_VENDORED) -# add_dependencies(${sdl3_image_target_name} ${SDLIMAGE_TIF_TARGET}) -# endif() -# endif() -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_TIF ${SDLIMAGE_TIF_TARGET}) -# message(STATUS "Dynamic libtiff: ${SDLIMAGE_DYNAMIC_TIF}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_TIF_DYNAMIC=\"${SDLIMAGE_DYNAMIC_TIF}\"") -# else() -# target_link_libraries(${sdl3_image_target_name} PRIVATE ${SDLIMAGE_TIF_TARGET}) -# endif() -# endif() -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS WEBP) -# set(SDLIMAGE_WEBP_ENABLED FALSE) -# if(SDLIMAGE_WEBP) -# # missing cpufeatures -# if(SDLIMAGE_WEBP_VENDORED) -# set(SDLIMAGE_WEBP_ENABLED TRUE) -# message(STATUS "${PROJECT_NAME}: Using vendored libwebp") -# sdl_check_project_in_subfolder(external/libwebp libwebp SDLIMAGE_VENDORED) -# set(BUILD_SHARED_LIBS ${SDLIMAGE_WEBP_SHARED}) -# add_subdirectory(external/libwebp external/libwebp-build EXCLUDE_FROM_ALL) -# register_license(webp external/libwebp/COPYING) -# target_include_directories(${sdl3_image_target_name} PRIVATE external/libwebp/src) -# add_library(WebP::webp ALIAS webp) -# add_library(WebP::webpdemux ALIAS webpdemux) -# add_library(WebP::libwebpmux ALIAS libwebpmux) -# if(SDLIMAGE_WEBP_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS) -# list(APPEND INSTALL_EXTRA_TARGETS webp webpdemux libwebpmux) -# if(NOT SDLIMAGE_WEBP_SHARED) -# list(APPEND INSTALL_EXTRA_TARGETS sharpyuv) -# endif() -# endif() -# set_target_properties(webp PROPERTIES EXPORT_NAME "external_libwebp") -# set_target_properties(webpdemux PROPERTIES EXPORT_NAME "external_webpdemux") -# set_target_properties(libwebpmux PROPERTIES EXPORT_NAME "external_libwebpmux") -# set_target_properties(sharpyuv PROPERTIES EXPORT_NAME "external_sharpyuv") -# add_library(SDL3_image::external_libwebp ALIAS webp) -# elseif(SDLIMAGE_WEBP_SHARED AND DEFINED SDLIMAGE_DYNAMIC_WEBP AND EXISTS "${SDLIMAGE_DYNAMIC_WEBP}" AND DEFINED SDLIMAGE_DYNAMIC_WEBPDEMUX AND EXISTS "${SDLIMAGE_DYNAMIC_WEBPDEMUX}" AND DEFINED SDLIMAGE_DYNAMIC_WEBPMUX AND EXISTS "${SDLIMAGE_DYNAMIC_WEBPMUX}") -# message(STATUS "${PROJECT_NAME}: Using libwebp from CMake variable") -# set(SDLIMAGE_WEBP_ENABLED TRUE) -# else() -# find_package(webp ${required}) -# if(webp_FOUND) -# message(STATUS "${PROJECT_NAME}: Using system libwebp") -# set(SDLIMAGE_WEBP_ENABLED TRUE) -# if(NOT SDLIMAGE_WEBP_SHARED) -# list(APPEND PC_REQUIRES libwebp libwebpdemux libwebpmux) -# list(APPEND INSTALL_EXTRA_CMAKE_MODULES cmake/Findwebp.cmake) -# endif() -# else() -# message(${fatal_error} "libwebp NOT found") -# endif() -# endif() -# if(SDLIMAGE_WEBP_ENABLED) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE -# LOAD_WEBP -# SAVE_WEBP=$ -# ) -# if(SDLIMAGE_WEBP_SHARED) -# if(NOT DEFINED SDLIMAGE_DYNAMIC_WEBP AND NOT DEFINED SDLIMAGE_DYNAMIC_WEBPDEMUX AND NOT DEFINED SDLIMAGE_DYNAMIC_WEBPMUX) -# target_include_directories(${sdl3_image_target_name} PRIVATE -# $ -# $ -# $ -# $ -# $ -# $ -# $ -# $ -# $ -# ) -# if(SDLIMAGE_WEBP_VENDORED) -# add_dependencies(${sdl3_image_target_name} WebP::webp WebP::webpdemux WebP::libwebpmux) -# endif() -# endif() -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_WEBPDEMUX WebP::webpdemux) -# message(STATUS "Dynamic libwebpdemux: ${SDLIMAGE_DYNAMIC_WEBPDEMUX}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_WEBPDEMUX_DYNAMIC=\"${SDLIMAGE_DYNAMIC_WEBPDEMUX}\"") -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_WEBPMUX WebP::libwebpmux) -# message(STATUS "Dynamic libwebpmux: ${SDLIMAGE_DYNAMIC_WEBPMUX}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_WEBPMUX_DYNAMIC=\"${SDLIMAGE_DYNAMIC_WEBPMUX}\"") -# target_get_dynamic_library(SDLIMAGE_DYNAMIC_WEBP WebP::webp) -# message(STATUS "Dynamic libwebp: ${SDLIMAGE_DYNAMIC_WEBP}") -# target_compile_definitions(${sdl3_image_target_name} PRIVATE "LOAD_WEBP_DYNAMIC=\"${SDLIMAGE_DYNAMIC_WEBP}\"") -# else() -# target_link_libraries(${sdl3_image_target_name} PRIVATE WebP::webp WebP::webpdemux WebP::libwebpmux) -# endif() -# else() -# # Variable is used by test suite -# set(SDLIMAGE_WEBP_SAVE OFF) -# endif() -# endif() - -# list(APPEND SDLIMAGE_BACKENDS XCF) -# set(SDLIMAGE_XCF_ENABLED FALSE) -# if(SDLIMAGE_XCF) -# set(SDLIMAGE_XCF_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_XCF) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS XPM) -# set(SDLIMAGE_XPM_ENABLED FALSE) -# if(SDLIMAGE_XPM) -# set(SDLIMAGE_XPM_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_XPM) -# endif() - -# list(APPEND SDLIMAGE_BACKENDS XV) -# set(SDLIMAGE_XV_ENABLED FALSE) -# if(SDLIMAGE_XV) -# set(SDLIMAGE_XV_ENABLED TRUE) -# target_compile_definitions(${sdl3_image_target_name} PRIVATE LOAD_XV) -# endif() - -# # Restore BUILD_SHARED_LIBS -# set(BUILD_SHARED_LIBS ${SDLIMAGE_BUILD_SHARED_LIBS}) - -# if(SDLIMAGE_INSTALL) -# install( -# TARGETS ${sdl3_image_target_name} -# EXPORT SDL3ImageExports -# ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel -# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library -# RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library -# ) -# install( -# FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/SDL3_image/SDL_image.h" -# DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3_image" COMPONENT DEVEL -# ) - -# export(TARGETS ${sdl3_image_target_name} ${INSTALL_EXTRA_TARGETS} NAMESPACE "SDL3_image::" FILE "${sdl3_image_target_name}-targets.cmake") - -# if(BUILD_SHARED_LIBS) -# set(pdbdir "${CMAKE_INSTALL_BINDIR}") -# else() -# set(pdbdir "${CMAKE_INSTALL_LIBDIR}") -# endif() -# if(MSVC) -# SDL_install_pdb("${sdl3_image_target_name}" "${pdbdir}") -# endif() - -# if(INSTALL_EXTRA_TARGETS) -# set_property(TARGET ${INSTALL_EXTRA_TARGETS} PROPERTY PUBLIC_HEADER "") -# set(archive_destination) -# if(NOT BUILD_SHARED_LIBS) -# set(archive_destination ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel) -# endif() -# install( -# TARGETS ${INSTALL_EXTRA_TARGETS} -# EXPORT SDL3ImageExports -# ${archive_destination} -# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library -# RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library -# ) -# if(MSVC) -# foreach(tgt IN LISTS INSTALL_EXTRA_TARGETS) -# SDL_install_pdb("${tgt}" "${pdbdir}") -# endforeach() -# endif() -# endif() - -# if(WIN32 AND NOT MINGW) -# set(SDLIMAGE_INSTALL_CMAKEDIR_ROOT_DEFAULT "cmake") -# else() -# set(SDLIMAGE_INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake") -# endif() -# set(SDLIMAGE_INSTALL_CMAKEDIR_ROOT "${SDLIMAGE_INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3_imageConfig.cmake related files (SDL3_image subfolder for MSVC projects)") -# set(SDLIMAGE_PKGCONFIG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - -# if(WIN32 AND NOT MINGW) -# set(SDLIMAGE_INSTALL_CMAKEDIR "${SDLIMAGE_INSTALL_CMAKEDIR_ROOT}") -# else() -# set(SDLIMAGE_INSTALL_CMAKEDIR "${SDLIMAGE_INSTALL_CMAKEDIR_ROOT}/SDL3_image") -# endif() - -# configure_package_config_file(cmake/SDL3_imageConfig.cmake.in SDL3_imageConfig.cmake -# NO_SET_AND_CHECK_MACRO -# INSTALL_DESTINATION "${SDLIMAGE_INSTALL_CMAKEDIR}" -# ) -# write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL3_imageConfigVersion.cmake" -# COMPATIBILITY AnyNewerVersion -# ) -# install( -# FILES -# "${CMAKE_CURRENT_BINARY_DIR}/SDL3_imageConfig.cmake" -# "${CMAKE_CURRENT_BINARY_DIR}/SDL3_imageConfigVersion.cmake" -# ${INSTALL_EXTRA_CMAKE_MODULES} -# DESTINATION "${SDLIMAGE_INSTALL_CMAKEDIR}" -# COMPONENT devel -# ) -# install(EXPORT SDL3ImageExports -# FILE ${sdl3_image_target_name}-targets.cmake -# NAMESPACE SDL3_image:: -# DESTINATION "${SDLIMAGE_INSTALL_CMAKEDIR}" -# COMPONENT devel -# ) - -# if(SDLIMAGE_RELOCATABLE) -# file(RELATIVE_PATH SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${CMAKE_INSTALL_PREFIX}/${SDLIMAGE_PKGCONFIG_INSTALLDIR}" "${CMAKE_INSTALL_PREFIX}") -# string(REGEX REPLACE "[/]+$" "" SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG "${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}") -# set(SDL_PKGCONFIG_PREFIX "\${pcfiledir}/${SDL_PATH_PREFIX_RELATIVE_TO_PKGCONFIG}") -# else() -# set(SDL_PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") -# endif() - -# if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") -# set(INCLUDEDIR_FOR_PKG_CONFIG "${CMAKE_INSTALL_INCLUDEDIR}") -# else() -# set(INCLUDEDIR_FOR_PKG_CONFIG "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") -# endif() -# if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") -# set(LIBDIR_FOR_PKG_CONFIG "${CMAKE_INSTALL_LIBDIR}") -# else() -# set(LIBDIR_FOR_PKG_CONFIG "\${prefix}/${CMAKE_INSTALL_LIBDIR}") -# endif() - -# string(JOIN " " PC_REQUIRES ${PC_REQUIRES}) -# string(JOIN " " PC_LIBS ${PC_LIBS}) -# configure_file(cmake/sdl3-image.pc.in sdl3-image.pc @ONLY) - -# # Always install sdl3-image.pc file: libraries might be different between config modes -# install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl3-image.pc" -# DESTINATION "${SDLIMAGE_PKGCONFIG_INSTALLDIR}" COMPONENT devel) - -# install(FILES "LICENSE.txt" -# DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}" -# COMPONENT library -# ) - -# foreach(license_name IN LISTS install_license_names) -# install(FILES "${install_license_${license_name}}" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}/optional" RENAME "LICENSE.${license_name}.txt") -# endforeach() - -# if(SDLIMAGE_INSTALL_MAN) -# sdl_get_git_revision_hash(SDLIMAGE_REVISION) -# SDL_generate_manpages( -# HEADERS_DIR "${PROJECT_SOURCE_DIR}/include/SDL3_image" -# SYMBOL "IMG_Init" -# WIKIHEADERS_PL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build-scripts/wikiheaders.pl" -# REVISION "${SDLIMAGE_REVISION}" -# ) -# endif() - -# if(SDLIMAGE_ROOTPROJECT) -# configure_file(cmake/cmake_uninstall.cmake.in cmake_uninstall.cmake IMMEDIATE @ONLY) - -# add_custom_target(uninstall -# COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") -# endif() -# endif() - -# if(SDLIMAGE_SAMPLES) -# function(add_sdl_image_example_executable TARGET) -# if(ANDROID) -# add_library(${TARGET} SHARED ${ARGN}) -# else() -# add_executable(${TARGET} ${ARGN}) -# endif() -# sdl_add_warning_options(${TARGET} WARNING_AS_ERROR ${SDLIMAGE_WERROR}) -# sdl_target_link_options_no_undefined(${TARGET}) -# target_link_libraries(${TARGET} PRIVATE SDL3_image::${sdl3_image_target_name}) -# target_link_libraries(${TARGET} PRIVATE ${sdl3_target_name}) - -# if(SDLIMAGE_SAMPLES_INSTALL) -# install(TARGETS ${TARGET} -# RUNTIME DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3_image" -# ) -# if(MSVC) -# SDL_install_pdb("${TARGET}" "${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3_image") -# endif() -# endif() -# endfunction() -# add_sdl_image_example_executable(showanim examples/showanim.c) -# add_sdl_image_example_executable(showimage examples/showimage.c) -# add_sdl_image_example_executable(showclipboard examples/showclipboard.c) -# add_sdl_image_example_executable(showgpuimage examples/showgpuimage.c) -# endif() - -# if(SDLIMAGE_TESTS) -# enable_testing() -# add_subdirectory(test) -# endif() - - -# set(available_deps) -# set(unavailable_deps) -# foreach(dep IN LISTS SDLIMAGE_BACKENDS) -# set(var SDLIMAGE_${dep}_ENABLED) -# if(NOT DEFINED ${var}) -# message(AUTHOR_WARNING "${var} not defined") -# endif() -# if(${var}) -# list(APPEND available_deps ${dep}) -# else() -# list(APPEND unavailable_deps ${dep}) -# endif() -# endforeach() -# string(JOIN " " avail_str ${available_deps}) -# string(TOLOWER "${avail_str}" avail_str) -# string(JOIN " " unavail_str ${unavailable_deps}) -# string(TOLOWER "${unavail_str}" unavail_str) -# message(STATUS "SDL3_image backends:") -# message(STATUS "- enabled: ${avail_str}") -# message(STATUS "- disabled: ${unavail_str}") +foreach extension, savable : sdlimage_extensions + if get_option(f'SDLIMAGE_@extension@').enabled() + add_project_arguments(f'-DLOAD_@extension@') + if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() + add_project_arguments(f'-DSAVE_@extension@') + endif + elif get_option(f'SDLIMAGE_@extension@_SAVE').enabled() + get_option(f'SDLIMAGE_@extension@_SAVE').disable_if(true, error_message: f'"SDLIMAGE_@extension@" must be enabled to enable saving') + endif +endforeach sdl3_image_lib = library('sdl3_image', sdl3_image_src, From c8ab86e7d5fe0df484194330e4966b880d66e8e6 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 18:09:52 -0330 Subject: [PATCH 08/51] Remove 'enable_auto_if's Auto is enabled by default --- subprojects/packagefiles/sdl3_image/meson.build | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index be8f4af4cb..60445e0bc2 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -34,13 +34,11 @@ get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_ get_option('SDLIMAGE_INSTALL').require(not subproject('sdl3').found(), error_message: 'Cannot install SDL3_image when SDL3 is built in same build') get_option('SDLIMAGE_INSTALL').require(not meson.is_subproject(), error_message: 'Cannot install SDL3_image when it is a subproject') -get_option('SDLIMAGE_SAMPLES').enable_auto_if(sdlimage_rootproject) +get_option('SDLIMAGE_SAMPLES').disable_auto_if(meson.is_subproject()) get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') -get_option('SDLIMAGE_SAMPLES_INSTALL').enable_auto_if(get_option('SDLIMAGE_SAMPLES').enabled() and get_option('SDLIMAGE_INSTALL').enabled()) get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows required') get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin required') -get_option('SDLIMAGE_PNG_LIBPNG').enable_auto_if(libpng_dep.found()) subdir('src') @@ -74,7 +72,7 @@ sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, 'JPG': true, 'JXL': false, 'LBM': false, 'PCX': false, 'PNG': true, 'PNM': false, 'QOI': false, 'SVG': false, 'TGA': true, 'TIF': false, 'WEBP': true, 'XCF': false, - 'XPM': false, 'XC': false} + 'XPM': false, 'XV': false} foreach extension, savable : sdlimage_extensions @@ -83,7 +81,7 @@ foreach extension, savable : sdlimage_extensions if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() add_project_arguments(f'-DSAVE_@extension@') endif - elif get_option(f'SDLIMAGE_@extension@_SAVE').enabled() + elif savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() get_option(f'SDLIMAGE_@extension@_SAVE').disable_if(true, error_message: f'"SDLIMAGE_@extension@" must be enabled to enable saving') endif endforeach From 137ee5c83962f43134666463850ad680dc53275b Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 18:39:38 -0330 Subject: [PATCH 09/51] Add new SDL 3.4.0 sources --- subprojects/packagefiles/sdl3_image/src/meson.build | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index c4289a8dc1..23e44a9b04 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -1,10 +1,17 @@ sdl3_image_src = files( + 'IMG.c', + 'IMG_WIC.c', + 'IMG_ani.c', + 'IMG_anim_decoder.c', + 'IMG_anim_encoder.c', 'IMG_avif.c', 'IMG_bmp.c', 'IMG_gif.c', + 'IMG_gpu.c', 'IMG_jpg.c', 'IMG_jxl.c', 'IMG_lbm.c', + 'IMG_libpng.c', 'IMG_pcx.c', 'IMG_png.c', 'IMG_pnm.c', From 78490a4949c456c40db5530b79361647b0f5010c Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 18:40:08 -0330 Subject: [PATCH 10/51] Remove -DSDL_BUILD_[]_VERSION variables --- subprojects/packagefiles/sdl3_image/meson.build | 4 ---- 1 file changed, 4 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 60445e0bc2..70e2ad7af3 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -42,10 +42,6 @@ get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwi subdir('src') -add_project_arguments('-DSDL_BUILD_MAJOR_VERSION=' + major_version, language: 'c') -add_project_arguments('-DSDL_BUILD_MAJOR_VERSION=' + minor_version, language: 'c') -add_project_arguments('-DSDL_BUILD_MAJOR_VERSION=' + micro_version, language: 'c') - if get_option('SDLIMAGE_BACKEND_STB').enabled() add_project_arguments('-DUSE_STBIMAGE', language: 'c') endif From 710068118f5c0fe2362bfaa9ed0961ce3396d3a4 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 18:55:55 -0330 Subject: [PATCH 11/51] Remove CMake Modules comment No need to implement these --- subprojects/packagefiles/sdl3_image/meson.build | 7 ------- 1 file changed, 7 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 70e2ad7af3..28fa7c68a7 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -19,13 +19,6 @@ libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep, libtiff_dep, libwebp_dep, libjpeg_dep] -# include("${CMAKE_CURRENT_LIST_DIR}/cmake/GetGitRevisionDescription.cmake") -# include("${CMAKE_CURRENT_LIST_DIR}/cmake/PrivateSdlFunctions.cmake") -# include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlcpu.cmake") -# include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlplatform.cmake") -# include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlmanpages.cmake") -# sdl_calculate_derived_version_variables(${MAJOR_VERSION} ${MINOR_VERSION} ${MICRO_VERSION}) - platform_supports_shared = target_machine.system() == 'emscripten' ? false : true get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'Target "' + target_machine.system() + '" does not support shared libraries') From 28ab2dda8d2ed474e56f34c379c9dca5a193f8fb Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 19:03:16 -0330 Subject: [PATCH 12/51] Reword comments --- subprojects/packagefiles/sdl3_image/meson.build | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 28fa7c68a7..60a877d027 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,5 +1,3 @@ -# list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") - project('sdl3_image', 'c', meson_version: '>= 1.1.0', version: '3.4.0', @@ -30,8 +28,8 @@ get_option('SDLIMAGE_INSTALL').require(not meson.is_subproject(), error_message: get_option('SDLIMAGE_SAMPLES').disable_auto_if(meson.is_subproject()) get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') -get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows required') -get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin required') +get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows must be set as the build target') +get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target') subdir('src') @@ -40,7 +38,7 @@ if get_option('SDLIMAGE_BACKEND_STB').enabled() endif if target_machine.system() == 'darwin' - add_language('objc', required: get_option('SDLIMAGE_BACKEND_IMAGEIO')) + add_language('objc') if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() add_project_arguments('-DPNG_USES_IMAGEIO', language: 'objc') endif @@ -63,7 +61,8 @@ sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, 'TGA': true, 'TIF': false, 'WEBP': true, 'XCF': false, 'XPM': false, 'XV': false} - +# Sets load macros, save macros and guards against +# enabling saving without enabling loading foreach extension, savable : sdlimage_extensions if get_option(f'SDLIMAGE_@extension@').enabled() add_project_arguments(f'-DLOAD_@extension@') From 902d90cc42b06fd1c81548e22c93a5c542eb47e2 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 19:06:47 -0330 Subject: [PATCH 13/51] Remove CMake install guard --- subprojects/packagefiles/sdl3_image/meson.build | 4 ---- 1 file changed, 4 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 60a877d027..908057ce40 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -21,10 +21,6 @@ platform_supports_shared = target_machine.system() == 'emscripten' ? false : tru get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'Target "' + target_machine.system() + '" does not support shared libraries') -# SDL3_image-3.4.0, CMakeLists.txt, line 65 -get_option('SDLIMAGE_INSTALL').require(not subproject('sdl3').found(), error_message: 'Cannot install SDL3_image when SDL3 is built in same build') -get_option('SDLIMAGE_INSTALL').require(not meson.is_subproject(), error_message: 'Cannot install SDL3_image when it is a subproject') - get_option('SDLIMAGE_SAMPLES').disable_auto_if(meson.is_subproject()) get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') From 2d7967f2c09540eb9f6d080e156530d740f34180 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 19:15:13 -0330 Subject: [PATCH 14/51] Reorganize --- .../packagefiles/sdl3_image/meson.build | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 908057ce40..5696ae9906 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -16,23 +16,25 @@ libwebp_dep = dependency('libwebp', required: get_option('SDLIMAGE_WEBP')) libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep, libtiff_dep, libwebp_dep, libjpeg_dep] +subdir('src') platform_supports_shared = target_machine.system() == 'emscripten' ? false : true get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'Target "' + target_machine.system() + '" does not support shared libraries') +if get_option('POSITION_INDEPENDENT_CODE').enabled() + add_project_arguments('-fPIC', language: 'c') + get_option('SDLIMAGE_SAMPLES').disable_auto_if(meson.is_subproject()) get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') -get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows must be set as the build target') -get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target') -subdir('src') - -if get_option('SDLIMAGE_BACKEND_STB').enabled() - add_project_arguments('-DUSE_STBIMAGE', language: 'c') +get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows must be set as the build target') +if get_option('SDLIMAGE_BACKEND_WIC').enabled() + add_project_arguments('-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c') endif +get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target') if target_machine.system() == 'darwin' add_language('objc') if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() @@ -45,11 +47,12 @@ else add_project_arguments('-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc') endif -if get_option('SDLIMAGE_BACKEND_WIC').enabled() - add_project_arguments('-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c') +if get_option('SDLIMAGE_BACKEND_STB').enabled() + add_project_arguments('-DUSE_STBIMAGE', language: 'c') endif + # Boolean correlates to whether the extension is natively savable or not sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, 'JPG': true, 'JXL': false, 'LBM': false, 'PCX': false, From 15da70b5a8500004c7cf2f0c850f4c8d5732313d Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 19:40:30 -0330 Subject: [PATCH 15/51] Remove POSITION_INDEPENDENT_CODE option --- subprojects/packagefiles/sdl3_image/meson.build | 17 +++++------------ .../packagefiles/sdl3_image/meson.options | 1 - 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 5696ae9906..ed307b8ac8 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -18,13 +18,6 @@ libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep, libtiff_dep, libwebp_dep, libjpeg_dep] subdir('src') -platform_supports_shared = target_machine.system() == 'emscripten' ? false : true - -get_option('POSITION_INDEPENDENT_CODE').require(platform_supports_shared, error_message: 'Target "' + target_machine.system() + '" does not support shared libraries') -if get_option('POSITION_INDEPENDENT_CODE').enabled() - add_project_arguments('-fPIC', language: 'c') - - get_option('SDLIMAGE_SAMPLES').disable_auto_if(meson.is_subproject()) get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') @@ -36,7 +29,7 @@ endif get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target') if target_machine.system() == 'darwin' - add_language('objc') + add_language('objc', native: false) if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() add_project_arguments('-DPNG_USES_IMAGEIO', language: 'objc') endif @@ -52,7 +45,6 @@ if get_option('SDLIMAGE_BACKEND_STB').enabled() endif - # Boolean correlates to whether the extension is natively savable or not sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, 'JPG': true, 'JXL': false, 'LBM': false, 'PCX': false, @@ -60,7 +52,7 @@ sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, 'TGA': true, 'TIF': false, 'WEBP': true, 'XCF': false, 'XPM': false, 'XV': false} -# Sets load macros, save macros and guards against +# Sets load macros, save macros, and guards against # enabling saving without enabling loading foreach extension, savable : sdlimage_extensions if get_option(f'SDLIMAGE_@extension@').enabled() @@ -69,14 +61,15 @@ foreach extension, savable : sdlimage_extensions add_project_arguments(f'-DSAVE_@extension@') endif elif savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() - get_option(f'SDLIMAGE_@extension@_SAVE').disable_if(true, error_message: f'"SDLIMAGE_@extension@" must be enabled to enable saving') + get_option(f'SDLIMAGE_@extension@_SAVE').disable_if(true, error_message: f'"SDLIMAGE_@extension@" must be enabled') endif endforeach sdl3_image_lib = library('sdl3_image', sdl3_image_src, include_directories: 'include', - dependencies: deps) + dependencies: deps, + install: true) sdl3_image_dep = declare_dependency(include_directories: 'include', link_with: sdl3_image_lib) \ No newline at end of file diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options index f92ac108e5..0476a7e8bf 100644 --- a/subprojects/packagefiles/sdl3_image/meson.options +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -1,4 +1,3 @@ -option('POSITION_INDEPENDENT_CODE', type: 'feature', value: 'enabled', description: 'Build static libraries with -fPIC') option('BUILD_SHARED_LIBS', type: 'feature', value: 'enabled', description: 'Build the library as a shared library') option('SDLIMAGE_INSTALL', type: 'feature', value: 'disabled', description: 'Enable SDL3_image install target') From af5601ced591c9f08770460e1c79a291cc7fc90f Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 20:06:30 -0330 Subject: [PATCH 16/51] Fix version.rc --- subprojects/packagefiles/sdl3_image/meson.build | 2 +- subprojects/packagefiles/sdl3_image/src/meson.build | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index ed307b8ac8..6b9ed3b437 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -58,7 +58,7 @@ foreach extension, savable : sdlimage_extensions if get_option(f'SDLIMAGE_@extension@').enabled() add_project_arguments(f'-DLOAD_@extension@') if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() - add_project_arguments(f'-DSAVE_@extension@') + add_project_arguments(f'-DSAVE_@extension@') endif elif savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() get_option(f'SDLIMAGE_@extension@_SAVE').disable_if(true, error_message: f'"SDLIMAGE_@extension@" must be enabled') diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index 23e44a9b04..3395f901df 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -28,8 +28,8 @@ sdl3_image_src = files( 'IMG_xxx.c', ) -if meson.get_compiler('c').get_id() == 'msvc' and get_option('default_library') == 'shared' - sdl3_image_src += 'version.rc' +if target_machine.system() == 'windows' and get_option('default_library') == 'shared' + import('windows').compile_resources('version.rc') endif if target_machine.system() == 'darwin' From 2599dff203ba24084697869e571d531285c14e21 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 20:22:56 -0330 Subject: [PATCH 17/51] Remove unused variables --- subprojects/packagefiles/sdl3_image/meson.build | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 6b9ed3b437..ccac34bbe0 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -3,10 +3,6 @@ project('sdl3_image', 'c', version: '3.4.0', default_options: 'c_std=c99') -major_version = meson.project_version().split('.')[0] -minor_version = meson.project_version().split('.')[1] -micro_version = meson.project_version().split('.')[2] - sdl3_dep = dependency('sdl3', version: '>=3.4.0') # Minimum allowed SDL3 version, not SDL3_IMAGE version libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) libavif_dep = dependency('libavif', version: '>=0.1.0', required: get_option('SDLIMAGE_AVIF')) # Absent from wrapdb as of Feb 1 2026 @@ -47,10 +43,10 @@ endif # Boolean correlates to whether the extension is natively savable or not sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, - 'JPG': true, 'JXL': false, 'LBM': false, 'PCX': false, - 'PNG': true, 'PNM': false, 'QOI': false, 'SVG': false, - 'TGA': true, 'TIF': false, 'WEBP': true, 'XCF': false, - 'XPM': false, 'XV': false} + 'JPG': true, 'JXL': false, 'LBM': false, 'PCX': false, + 'PNG': true, 'PNM': false, 'QOI': false, 'SVG': false, + 'TGA': true, 'TIF': false, 'WEBP': true, 'XCF': false, + 'XPM': false, 'XV': false} # Sets load macros, save macros, and guards against # enabling saving without enabling loading From f19a494d6936ce9f993c85d2acd419eadd04121f Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 22:37:31 -0330 Subject: [PATCH 18/51] Remove unimplemented options --- subprojects/packagefiles/sdl3_image/meson.options | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options index 0476a7e8bf..d68732a830 100644 --- a/subprojects/packagefiles/sdl3_image/meson.options +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -1,12 +1,4 @@ -option('BUILD_SHARED_LIBS', type: 'feature', value: 'enabled', description: 'Build the library as a shared library') - -option('SDLIMAGE_INSTALL', type: 'feature', value: 'disabled', description: 'Enable SDL3_image install target') -option('SDLIMAGE_SAMPLES', type: 'feature', value: 'disabled', description: 'Build the SDL3_image sample program(s)') -option('SDLIMAGE_SAMPLES_INSTALL', type: 'feature', value: 'disabled', description: 'Install the SDL3_image sample program(s)') -option('SDLIMAGE_TESTS', type: 'feature', value: 'disabled', description: 'Build unit tests?') -option('SDLIMAGE_TESTS_INSTALL', type: 'feature', value: 'disabled', description: 'Install unit tests?') - -option('SDLIMAGE_BACKEND_STB', type: 'feature', value: 'enabled', description: 'Use stb_image for loading JPEG files') +option('SDLIMAGE_BACKEND_STB', type: 'feature', value: 'auto', description: 'Use stb_image for loading JPEG files') option('SDLIMAGE_BACKEND_WIC', type: 'feature', value: 'auto', description: 'Add WIC backend (Windows Imaging Component)') option('SDLIMAGE_BACKEND_IMAGEIO', type: 'feature', value: 'auto', description: 'Use native Mac OS X frameworks for loading images') option('SDLIMAGE_PNG_LIBPNG', type: 'feature', value: 'auto', description: 'Support loading PNGs using libpng (useful for APNGs)') From fb8e9e95785bdc911c06d847d32290718b76175c Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 22:38:11 -0330 Subject: [PATCH 19/51] Meson dependency override --- subprojects/packagefiles/sdl3_image/meson.build | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index ccac34bbe0..87d112a88e 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -4,12 +4,12 @@ project('sdl3_image', 'c', default_options: 'c_std=c99') sdl3_dep = dependency('sdl3', version: '>=3.4.0') # Minimum allowed SDL3 version, not SDL3_IMAGE version -libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) +libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) # STB loadable libavif_dep = dependency('libavif', version: '>=0.1.0', required: get_option('SDLIMAGE_AVIF')) # Absent from wrapdb as of Feb 1 2026 libjxl_dep = dependency('libjxl', required: get_option('SDLIMAGE_JXL')) # Absent from wrapdb as of Feb 1 2026 libtiff_dep = dependency('libtiff', required: get_option('SDLIMAGE_TIF')) libwebp_dep = dependency('libwebp', required: get_option('SDLIMAGE_WEBP')) -libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) +libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) # STB loadable deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep, libtiff_dep, libwebp_dep, libjpeg_dep] subdir('src') @@ -68,4 +68,6 @@ sdl3_image_lib = library('sdl3_image', install: true) sdl3_image_dep = declare_dependency(include_directories: 'include', - link_with: sdl3_image_lib) \ No newline at end of file + link_with: sdl3_image_lib) + +meson.override_dependency('sdl3_image', sdl3_image_dep) \ No newline at end of file From 5516c9b60f6fe3aa1fb04feca2a46ceb009d378b Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 22:53:14 -0330 Subject: [PATCH 20/51] Fix non ImageIO Darwin --- subprojects/packagefiles/sdl3_image/meson.build | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 87d112a88e..fba5a2ee91 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -26,14 +26,15 @@ endif get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target') if target_machine.system() == 'darwin' add_language('objc', native: false) - if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() - add_project_arguments('-DPNG_USES_IMAGEIO', language: 'objc') - endif - if get_option('SDLIMAGE_JPG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() - add_project_arguments('-DJPG_USES_IMAGEIO', language: 'objc') - endif -else - add_project_arguments('-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc') + if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() + if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() + add_project_arguments('-DPNG_USES_IMAGEIO', language: 'objc') + endif + if get_option('SDLIMAGE_JPG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() + add_project_arguments('-DJPG_USES_IMAGEIO', language: 'objc') + endif + else + add_project_arguments('-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc') endif if get_option('SDLIMAGE_BACKEND_STB').enabled() From d8d61c7cd086d9079b2bc18f89307bec63cc12d1 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sun, 1 Feb 2026 23:21:50 -0330 Subject: [PATCH 21/51] Fix minor misc stuff --- subprojects/packagefiles/sdl3_image/meson.build | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index fba5a2ee91..35e2a100e6 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -14,10 +14,6 @@ libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep, libtiff_dep, libwebp_dep, libjpeg_dep] subdir('src') -get_option('SDLIMAGE_SAMPLES').disable_auto_if(meson.is_subproject()) -get_option('SDLIMAGE_SAMPLES').disable_auto_if(target_machine.system() == 'android') - - get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows must be set as the build target') if get_option('SDLIMAGE_BACKEND_WIC').enabled() add_project_arguments('-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c') @@ -25,7 +21,7 @@ endif get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target') if target_machine.system() == 'darwin' - add_language('objc', native: false) + add_languages('objc', native: false) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() add_project_arguments('-DPNG_USES_IMAGEIO', language: 'objc') @@ -35,6 +31,7 @@ if target_machine.system() == 'darwin' endif else add_project_arguments('-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc') + endif endif if get_option('SDLIMAGE_BACKEND_STB').enabled() @@ -53,9 +50,9 @@ sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, # enabling saving without enabling loading foreach extension, savable : sdlimage_extensions if get_option(f'SDLIMAGE_@extension@').enabled() - add_project_arguments(f'-DLOAD_@extension@') + add_project_arguments(f'-DLOAD_@extension@', language: 'c') if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() - add_project_arguments(f'-DSAVE_@extension@') + add_project_arguments(f'-DSAVE_@extension@', language: 'c') endif elif savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() get_option(f'SDLIMAGE_@extension@_SAVE').disable_if(true, error_message: f'"SDLIMAGE_@extension@" must be enabled') From 19b017d63d880c7c579aebf00cc929d66842c988 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Tue, 10 Feb 2026 07:24:28 -0330 Subject: [PATCH 22/51] Update releases.json --- releases.json | 1 + 1 file changed, 1 insertion(+) diff --git a/releases.json b/releases.json index 308d990365..a1e017f40a 100644 --- a/releases.json +++ b/releases.json @@ -4096,6 +4096,7 @@ "sdl3_image" ], "versions": [ + "3.4.0-1", "3.2.4-1" ] }, From d8d3b698da69cf2e8aebf4afc3b8b03b20d69786 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Tue, 10 Feb 2026 07:29:03 -0330 Subject: [PATCH 23/51] Add license to project() --- subprojects/packagefiles/sdl3_image/meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 35e2a100e6..8f71f3f1bb 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,4 +1,6 @@ project('sdl3_image', 'c', + license: 'Zlib' + license_files: 'LICENSE.txt' meson_version: '>= 1.1.0', version: '3.4.0', default_options: 'c_std=c99') From a9833a71d407cdd2f43ad8c03202aff82ca15c43 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Tue, 10 Feb 2026 07:30:32 -0330 Subject: [PATCH 24/51] Syntax fix --- subprojects/packagefiles/sdl3_image/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 8f71f3f1bb..ba49d985fc 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,6 +1,6 @@ project('sdl3_image', 'c', - license: 'Zlib' - license_files: 'LICENSE.txt' + license: 'Zlib', + license_files: 'LICENSE.txt', meson_version: '>= 1.1.0', version: '3.4.0', default_options: 'c_std=c99') From b9c28a3e0f4c347b5ad8ee6ad45e004b7f9e44c2 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Tue, 10 Feb 2026 07:33:30 -0330 Subject: [PATCH 25/51] Format with format.py --- .../packagefiles/sdl3_image/meson.build | 155 ++++++++++--- .../packagefiles/sdl3_image/meson.options | 210 +++++++++++++++--- .../packagefiles/sdl3_image/src/meson.build | 5 +- 3 files changed, 304 insertions(+), 66 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index ba49d985fc..1ff4785348 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,73 +1,162 @@ -project('sdl3_image', 'c', +project( + 'sdl3_image', + 'c', license: 'Zlib', license_files: 'LICENSE.txt', meson_version: '>= 1.1.0', version: '3.4.0', - default_options: 'c_std=c99') + default_options: 'c_std=c99', +) -sdl3_dep = dependency('sdl3', version: '>=3.4.0') # Minimum allowed SDL3 version, not SDL3_IMAGE version -libpng_dep = dependency('libpng', required: get_option('SDLIMAGE_PNG_LIBPNG')) # STB loadable -libavif_dep = dependency('libavif', version: '>=0.1.0', required: get_option('SDLIMAGE_AVIF')) # Absent from wrapdb as of Feb 1 2026 -libjxl_dep = dependency('libjxl', required: get_option('SDLIMAGE_JXL')) # Absent from wrapdb as of Feb 1 2026 -libtiff_dep = dependency('libtiff', required: get_option('SDLIMAGE_TIF')) -libwebp_dep = dependency('libwebp', required: get_option('SDLIMAGE_WEBP')) -libjpeg_dep = dependency('libjpeg-turbo', required: get_option('SDLIMAGE_JPG')) # STB loadable +sdl3_dep = dependency( + 'sdl3', + version: '>=3.4.0', +) # Minimum allowed SDL3 version, not SDL3_IMAGE version +libpng_dep = dependency( + 'libpng', + required: get_option('SDLIMAGE_PNG_LIBPNG'), +) # STB loadable +libavif_dep = dependency( + 'libavif', + version: '>=0.1.0', + required: get_option('SDLIMAGE_AVIF'), +) # Absent from wrapdb as of Feb 1 2026 +libjxl_dep = dependency( + 'libjxl', + required: get_option('SDLIMAGE_JXL'), +) # Absent from wrapdb as of Feb 1 2026 +libtiff_dep = dependency( + 'libtiff', + required: get_option('SDLIMAGE_TIF'), +) +libwebp_dep = dependency( + 'libwebp', + required: get_option('SDLIMAGE_WEBP'), +) +libjpeg_dep = dependency( + 'libjpeg-turbo', + required: get_option('SDLIMAGE_JPG'), +) # STB loadable -deps = [sdl3_dep, libpng_dep, libavif_dep, libjxl_dep, libtiff_dep, libwebp_dep, libjpeg_dep] +deps = [ + sdl3_dep, + libpng_dep, + libavif_dep, + libjxl_dep, + libtiff_dep, + libwebp_dep, + libjpeg_dep, +] subdir('src') -get_option('SDLIMAGE_BACKEND_WIC').require(target_machine.system() == 'windows', error_message : 'Windows must be set as the build target') +get_option('SDLIMAGE_BACKEND_WIC').require( + target_machine.system() == 'windows', + error_message: 'Windows must be set as the build target', +) if get_option('SDLIMAGE_BACKEND_WIC').enabled() - add_project_arguments('-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c') + add_project_arguments( + '-DSDL_IMAGE_USE_WIC_BACKEND', + language: 'c', + ) endif -get_option('SDLIMAGE_BACKEND_IMAGEIO').require(target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target') +get_option('SDLIMAGE_BACKEND_IMAGEIO').require( + target_machine.system() == 'darwin', + error_message: 'Darwin must be set as the build target', +) if target_machine.system() == 'darwin' - add_languages('objc', native: false) + add_languages( + 'objc', + native: false, + ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() - if get_option('SDLIMAGE_PNG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() - add_project_arguments('-DPNG_USES_IMAGEIO', language: 'objc') + if get_option('SDLIMAGE_PNG').enabled() and not get_option( + 'SDLIMAGE_BACKEND_STB', + ).enabled() + add_project_arguments( + '-DPNG_USES_IMAGEIO', + language: 'objc', + ) endif - if get_option('SDLIMAGE_JPG').enabled() and not get_option('SDLIMAGE_BACKEND_STB').enabled() - add_project_arguments('-DJPG_USES_IMAGEIO', language: 'objc') + if get_option('SDLIMAGE_JPG').enabled() and not get_option( + 'SDLIMAGE_BACKEND_STB', + ).enabled() + add_project_arguments( + '-DJPG_USES_IMAGEIO', + language: 'objc', + ) endif else - add_project_arguments('-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc') + add_project_arguments( + '-DSDL_IMAGE_USE_COMMON_BACKEND', + language: 'objc', + ) endif endif if get_option('SDLIMAGE_BACKEND_STB').enabled() - add_project_arguments('-DUSE_STBIMAGE', language: 'c') + add_project_arguments( + '-DUSE_STBIMAGE', + language: 'c', + ) endif # Boolean correlates to whether the extension is natively savable or not -sdlimage_extensions = {'ANI': true, 'AVIF': true, 'BMP': true, 'GIF': true, - 'JPG': true, 'JXL': false, 'LBM': false, 'PCX': false, - 'PNG': true, 'PNM': false, 'QOI': false, 'SVG': false, - 'TGA': true, 'TIF': false, 'WEBP': true, 'XCF': false, - 'XPM': false, 'XV': false} +sdlimage_extensions = { + 'ANI': true, + 'AVIF': true, + 'BMP': true, + 'GIF': true, + 'JPG': true, + 'JXL': false, + 'LBM': false, + 'PCX': false, + 'PNG': true, + 'PNM': false, + 'QOI': false, + 'SVG': false, + 'TGA': true, + 'TIF': false, + 'WEBP': true, + 'XCF': false, + 'XPM': false, + 'XV': false, +} # Sets load macros, save macros, and guards against # enabling saving without enabling loading foreach extension, savable : sdlimage_extensions if get_option(f'SDLIMAGE_@extension@').enabled() - add_project_arguments(f'-DLOAD_@extension@', language: 'c') + add_project_arguments( + f'-DLOAD_@extension@', + language: 'c', + ) if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() - add_project_arguments(f'-DSAVE_@extension@', language: 'c') + add_project_arguments( + f'-DSAVE_@extension@', + language: 'c', + ) endif elif savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() - get_option(f'SDLIMAGE_@extension@_SAVE').disable_if(true, error_message: f'"SDLIMAGE_@extension@" must be enabled') + get_option(f'SDLIMAGE_@extension@_SAVE').disable_if( + true, + error_message: f'"SDLIMAGE_@extension@" must be enabled', + ) endif endforeach -sdl3_image_lib = library('sdl3_image', +sdl3_image_lib = library( + 'sdl3_image', sdl3_image_src, include_directories: 'include', dependencies: deps, - install: true) + install: true, +) -sdl3_image_dep = declare_dependency(include_directories: 'include', - link_with: sdl3_image_lib) +sdl3_image_dep = declare_dependency( + include_directories: 'include', + link_with: sdl3_image_lib, +) -meson.override_dependency('sdl3_image', sdl3_image_dep) \ No newline at end of file +meson.override_dependency('sdl3_image', sdl3_image_dep) diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options index d68732a830..8d9bd3a653 100644 --- a/subprojects/packagefiles/sdl3_image/meson.options +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -1,32 +1,182 @@ -option('SDLIMAGE_BACKEND_STB', type: 'feature', value: 'auto', description: 'Use stb_image for loading JPEG files') -option('SDLIMAGE_BACKEND_WIC', type: 'feature', value: 'auto', description: 'Add WIC backend (Windows Imaging Component)') -option('SDLIMAGE_BACKEND_IMAGEIO', type: 'feature', value: 'auto', description: 'Use native Mac OS X frameworks for loading images') -option('SDLIMAGE_PNG_LIBPNG', type: 'feature', value: 'auto', description: 'Support loading PNGs using libpng (useful for APNGs)') +option( + 'SDLIMAGE_BACKEND_STB', + type: 'feature', + value: 'auto', + description: 'Use stb_image for loading JPEG files', +) +option( + 'SDLIMAGE_BACKEND_WIC', + type: 'feature', + value: 'auto', + description: 'Add WIC backend (Windows Imaging Component)', +) +option( + 'SDLIMAGE_BACKEND_IMAGEIO', + type: 'feature', + value: 'auto', + description: 'Use native Mac OS X frameworks for loading images', +) +option( + 'SDLIMAGE_PNG_LIBPNG', + type: 'feature', + value: 'auto', + description: 'Support loading PNGs using libpng (useful for APNGs)', +) -option('SDLIMAGE_ANI', type: 'feature', value: 'auto', description: 'Support loading ANI animations') -option('SDLIMAGE_AVIF', type: 'feature', value: 'auto', description: 'Support loading AVIF images') -option('SDLIMAGE_BMP', type: 'feature', value: 'auto', description: 'Support loading BMP images') -option('SDLIMAGE_GIF', type: 'feature', value: 'auto', description: 'Support loading GIF images') -option('SDLIMAGE_JPG', type: 'feature', value: 'auto', description: 'Support loading JPEG images') -option('SDLIMAGE_JXL', type: 'feature', value: 'auto', description: 'Support loading JXL images') -option('SDLIMAGE_LBM', type: 'feature', value: 'auto', description: 'Support loading LBM images') -option('SDLIMAGE_PCX', type: 'feature', value: 'auto', description: 'Support loading PCX images') -option('SDLIMAGE_PNG', type: 'feature', value: 'auto', description: 'Support loading PNG images') -option('SDLIMAGE_PNM', type: 'feature', value: 'auto', description: 'Support loading PNM images') -option('SDLIMAGE_QOI', type: 'feature', value: 'auto', description: 'Support loading QOI images') -option('SDLIMAGE_SVG', type: 'feature', value: 'auto', description: 'Support loading SVG images') -option('SDLIMAGE_TGA', type: 'feature', value: 'auto', description: 'Support loading TGA images') -option('SDLIMAGE_TIF', type: 'feature', value: 'auto', description: 'Support loading TIFF images') -option('SDLIMAGE_WEBP', type: 'feature', value: 'auto', description: 'Support loading WEBP images') -option('SDLIMAGE_XCF', type: 'feature', value: 'auto', description: 'Support loading XCF images') -option('SDLIMAGE_XPM', type: 'feature', value: 'auto', description: 'Support loading XPM images') -option('SDLIMAGE_XV', type: 'feature', value: 'auto', description: 'Support loading XV images') +option( + 'SDLIMAGE_ANI', + type: 'feature', + value: 'auto', + description: 'Support loading ANI animations', +) +option( + 'SDLIMAGE_AVIF', + type: 'feature', + value: 'auto', + description: 'Support loading AVIF images', +) +option( + 'SDLIMAGE_BMP', + type: 'feature', + value: 'auto', + description: 'Support loading BMP images', +) +option( + 'SDLIMAGE_GIF', + type: 'feature', + value: 'auto', + description: 'Support loading GIF images', +) +option( + 'SDLIMAGE_JPG', + type: 'feature', + value: 'auto', + description: 'Support loading JPEG images', +) +option( + 'SDLIMAGE_JXL', + type: 'feature', + value: 'auto', + description: 'Support loading JXL images', +) +option( + 'SDLIMAGE_LBM', + type: 'feature', + value: 'auto', + description: 'Support loading LBM images', +) +option( + 'SDLIMAGE_PCX', + type: 'feature', + value: 'auto', + description: 'Support loading PCX images', +) +option( + 'SDLIMAGE_PNG', + type: 'feature', + value: 'auto', + description: 'Support loading PNG images', +) +option( + 'SDLIMAGE_PNM', + type: 'feature', + value: 'auto', + description: 'Support loading PNM images', +) +option( + 'SDLIMAGE_QOI', + type: 'feature', + value: 'auto', + description: 'Support loading QOI images', +) +option( + 'SDLIMAGE_SVG', + type: 'feature', + value: 'auto', + description: 'Support loading SVG images', +) +option( + 'SDLIMAGE_TGA', + type: 'feature', + value: 'auto', + description: 'Support loading TGA images', +) +option( + 'SDLIMAGE_TIF', + type: 'feature', + value: 'auto', + description: 'Support loading TIFF images', +) +option( + 'SDLIMAGE_WEBP', + type: 'feature', + value: 'auto', + description: 'Support loading WEBP images', +) +option( + 'SDLIMAGE_XCF', + type: 'feature', + value: 'auto', + description: 'Support loading XCF images', +) +option( + 'SDLIMAGE_XPM', + type: 'feature', + value: 'auto', + description: 'Support loading XPM images', +) +option( + 'SDLIMAGE_XV', + type: 'feature', + value: 'auto', + description: 'Support loading XV images', +) -option('SDLIMAGE_ANI_SAVE', type: 'feature', value: 'auto', description: 'Add ANI save support') -option('SDLIMAGE_AVIF_SAVE', type: 'feature', value: 'auto', description: 'Add AVIF save support') -option('SDLIMAGE_BMP_SAVE', type: 'feature', value: 'auto', description: 'Add BMP save support') -option('SDLIMAGE_GIF_SAVE', type: 'feature', value: 'auto', description: 'Add GIF save support') -option('SDLIMAGE_JPG_SAVE', type: 'feature', value: 'auto', description: 'Add JPEG save support') -option('SDLIMAGE_PNG_SAVE', type: 'feature', value: 'auto', description: 'Add PNG save support') -option('SDLIMAGE_TGA_SAVE', type: 'feature', value: 'auto', description: 'Add TGA save support') -option('SDLIMAGE_WEBP_SAVE', type: 'feature', value: 'auto', description: 'Add WEBP save support') \ No newline at end of file +option( + 'SDLIMAGE_ANI_SAVE', + type: 'feature', + value: 'auto', + description: 'Add ANI save support', +) +option( + 'SDLIMAGE_AVIF_SAVE', + type: 'feature', + value: 'auto', + description: 'Add AVIF save support', +) +option( + 'SDLIMAGE_BMP_SAVE', + type: 'feature', + value: 'auto', + description: 'Add BMP save support', +) +option( + 'SDLIMAGE_GIF_SAVE', + type: 'feature', + value: 'auto', + description: 'Add GIF save support', +) +option( + 'SDLIMAGE_JPG_SAVE', + type: 'feature', + value: 'auto', + description: 'Add JPEG save support', +) +option( + 'SDLIMAGE_PNG_SAVE', + type: 'feature', + value: 'auto', + description: 'Add PNG save support', +) +option( + 'SDLIMAGE_TGA_SAVE', + type: 'feature', + value: 'auto', + description: 'Add TGA save support', +) +option( + 'SDLIMAGE_WEBP_SAVE', + type: 'feature', + value: 'auto', + description: 'Add WEBP save support', +) diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index 3395f901df..415b5e4a12 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -21,7 +21,6 @@ sdl3_image_src = files( 'IMG_tga.c', 'IMG_tif.c', 'IMG_webp.c', - 'IMG_WIC.c', 'IMG_xcf.c', 'IMG_xpm.c', 'IMG_xv.c', @@ -31,7 +30,7 @@ sdl3_image_src = files( if target_machine.system() == 'windows' and get_option('default_library') == 'shared' import('windows').compile_resources('version.rc') endif - + if target_machine.system() == 'darwin' sdl3_image_src += 'IMG_ImageIO.m' -endif \ No newline at end of file +endif From 525dbeb8f11d217c99213b3fcc64de5ca040ac17 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Tue, 10 Feb 2026 07:54:30 -0330 Subject: [PATCH 26/51] Add Apple library logic from SDL3 --- .../packagefiles/sdl3_image/meson.build | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 1ff4785348..0ebf3340a0 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -69,6 +69,24 @@ if target_machine.system() == 'darwin' 'objc', native: false, ) + deps += dependency( + 'appleframeworks', + modules: [ + 'CoreFoundation', + 'Cocoa', + 'CoreAudio', + 'CoreGraphics', + 'CoreHaptics', + 'GameController', + 'ForceFeedback', + 'IOKit', + 'Foundation', + 'QuartzCore', + 'Metal', + 'Carbon', + 'UniformTypeIdentifiers', + ], + ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( 'SDLIMAGE_BACKEND_STB', From 3b4901d3f4d3f61419b4ff77abfbd469933c01b8 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Tue, 10 Feb 2026 07:54:41 -0330 Subject: [PATCH 27/51] Format --- subprojects/sdl3_image.wrap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/sdl3_image.wrap b/subprojects/sdl3_image.wrap index 1c882b3325..7478da8bf8 100644 --- a/subprojects/sdl3_image.wrap +++ b/subprojects/sdl3_image.wrap @@ -6,4 +6,4 @@ source_hash = 2ceb75eab4235c2c7e93dafc3ef3268ad368ca5de40892bf8cffdd510f29d9d8 patch_directory = sdl3_image [provide] -sdl3_image = sdl3_image_dep +dependency_names = sdl3_image From 3816130a4e37939436d3cd1dd9b449bffb58ff33 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Tue, 10 Feb 2026 08:06:58 -0330 Subject: [PATCH 28/51] Update appleframeworks to match CMake --- subprojects/packagefiles/sdl3_image/meson.build | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 0ebf3340a0..906206a1db 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -72,19 +72,11 @@ if target_machine.system() == 'darwin' deps += dependency( 'appleframeworks', modules: [ - 'CoreFoundation', - 'Cocoa', - 'CoreAudio', 'CoreGraphics', - 'CoreHaptics', - 'GameController', - 'ForceFeedback', - 'IOKit', 'Foundation', - 'QuartzCore', - 'Metal', - 'Carbon', - 'UniformTypeIdentifiers', + 'ImageIO', + 'MobileCoreServices', + 'UIKit', ], ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() From 0bf879c9862c9b1eda66450a664711cd5fd8217b Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 03:38:56 -0330 Subject: [PATCH 29/51] Fix Visual Studio CI --- subprojects/packagefiles/sdl3_image/meson.build | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 906206a1db..356d5d0838 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -156,10 +156,17 @@ foreach extension, savable : sdlimage_extensions endif endforeach +if get_option('default_library') == 'shared' + c_args = ['-DDLL_EXPORT'] +else + c_args = [] +endif + sdl3_image_lib = library( 'sdl3_image', sdl3_image_src, include_directories: 'include', + c_args: c_args, dependencies: deps, install: true, ) From 2ed8c6e7ab329db18b08e07b2d8910f427956a59 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 04:11:11 -0330 Subject: [PATCH 30/51] Update CI packages --- ci_config.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ci_config.json b/ci_config.json index 909bf2df01..7f60ed2ff4 100644 --- a/ci_config.json +++ b/ci_config.json @@ -1413,7 +1413,19 @@ "pipewire-dev", "libxkbcommon-dev", "mesa-dev", - "wayland-dev" + "wayland-dev", + "libpng-dev", + "libavif-dev", + "libjxl-dev", + "tiff-dev", + "libwebp-dev", + "libjpeg-turbo-dev" + ], + "brew_packages": [ + "libpng", + "libavif", + "libtiff", + "jpeg-turbo" ], "debian_packages": [ "libudev-dev", @@ -1425,6 +1437,10 @@ "libegl-dev", "libgl-dev", "libpng-dev", + "libavif-dev", + "libjxl-dev", + "libtiff-dev", + "libwebp-dev", "libjpeg-dev" ] }, From 52ac50cc2cc45af5a30ad6c970823c1d5e2938df Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 04:11:42 -0330 Subject: [PATCH 31/51] Fix libjpeg --- subprojects/packagefiles/sdl3_image/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 356d5d0838..1c926a7f91 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -34,7 +34,7 @@ libwebp_dep = dependency( required: get_option('SDLIMAGE_WEBP'), ) libjpeg_dep = dependency( - 'libjpeg-turbo', + 'libjpeg', required: get_option('SDLIMAGE_JPG'), ) # STB loadable From 3d21c2a4c336a2084d89898716638daab6fc4638 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 04:30:24 -0330 Subject: [PATCH 32/51] Update appleframeworks --- subprojects/packagefiles/sdl3_image/meson.build | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 1c926a7f91..ad14620b1a 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -71,13 +71,7 @@ if target_machine.system() == 'darwin' ) deps += dependency( 'appleframeworks', - modules: [ - 'CoreGraphics', - 'Foundation', - 'ImageIO', - 'MobileCoreServices', - 'UIKit', - ], + modules: ['ApplicationServices'], ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( From 4ae1005c33adbce7befca8fd6e7a23397928a0ce Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 04:40:16 -0330 Subject: [PATCH 33/51] Fix ImageIO.m in sources --- subprojects/packagefiles/sdl3_image/src/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index 415b5e4a12..2c7f98eee5 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -32,5 +32,5 @@ if target_machine.system() == 'windows' and get_option('default_library') == 'sh endif if target_machine.system() == 'darwin' - sdl3_image_src += 'IMG_ImageIO.m' + sdl3_image_src += files('IMG_ImageIO.m') endif From 9f8da6a01c862df54ddc21516446c2c62e25e7cc Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 04:45:51 -0330 Subject: [PATCH 34/51] Update appleframeworks --- subprojects/packagefiles/sdl3_image/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index ad14620b1a..34e6201ca0 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -71,7 +71,7 @@ if target_machine.system() == 'darwin' ) deps += dependency( 'appleframeworks', - modules: ['ApplicationServices'], + modules: ['CoreGraphics', 'Foundation', 'ImageIO', 'CoreServices', 'UIKit'], ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( From cebf8b83276d6ba36fa12c2f14a5f8ea0462fa78 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 05:01:26 -0330 Subject: [PATCH 35/51] Remove ImageIO from appleframeworks --- subprojects/packagefiles/sdl3_image/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 34e6201ca0..bc80ae32cf 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -71,7 +71,7 @@ if target_machine.system() == 'darwin' ) deps += dependency( 'appleframeworks', - modules: ['CoreGraphics', 'Foundation', 'ImageIO', 'CoreServices', 'UIKit'], + modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'UIKit'], ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( From 395e7b4367177b196fce9a05c9547f92f00042a1 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 05:11:12 -0330 Subject: [PATCH 36/51] Remove UIKit --- subprojects/packagefiles/sdl3_image/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index bc80ae32cf..a7a2c6f956 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -71,7 +71,7 @@ if target_machine.system() == 'darwin' ) deps += dependency( 'appleframeworks', - modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'UIKit'], + modules: ['CoreGraphics', 'Foundation', 'CoreServices'], ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( From 2e391d4b214fa94cfbeafdf191c2acdeddf7abd2 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 05:20:21 -0330 Subject: [PATCH 37/51] Readd ImageIO --- subprojects/packagefiles/sdl3_image/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index a7a2c6f956..6b431e2f6b 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -71,7 +71,7 @@ if target_machine.system() == 'darwin' ) deps += dependency( 'appleframeworks', - modules: ['CoreGraphics', 'Foundation', 'CoreServices'], + modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'ImageIO'], ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( From 4c6ef4d08810e3fa5936d0b3acfce5866dc43c08 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 05:51:21 -0330 Subject: [PATCH 38/51] Add proper appleframeworks subsystem handling --- .../packagefiles/sdl3_image/meson.build | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 6b431e2f6b..7954e5524d 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -64,15 +64,32 @@ get_option('SDLIMAGE_BACKEND_IMAGEIO').require( target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target', ) + +apple_frameworks = {} + if target_machine.system() == 'darwin' add_languages( 'objc', native: false, ) - deps += dependency( - 'appleframeworks', - modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'ImageIO'], - ) + if target_machine.subsystem() == 'macos' + deps += dependency( + 'appleframeworks', + modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'ImageIO'], + ) + else + deps += dependency( + 'appleframeworks', + modules: [ + 'CoreGraphics', + 'Foundation', + 'CoreServices', + 'ImageIO', + 'UIKit', + ], + ) + endif + if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( 'SDLIMAGE_BACKEND_STB', From ddd9b9f3f74de04077248e0aeea953e339918970 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 06:09:39 -0330 Subject: [PATCH 39/51] Fix Darwin defaulting to COMMON_BACKEND --- subprojects/packagefiles/sdl3_image/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 7954e5524d..b9b34e354f 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -65,8 +65,6 @@ get_option('SDLIMAGE_BACKEND_IMAGEIO').require( error_message: 'Darwin must be set as the build target', ) -apple_frameworks = {} - if target_machine.system() == 'darwin' add_languages( 'objc', @@ -90,6 +88,8 @@ if target_machine.system() == 'darwin' ) endif + get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_auto_if(true) + if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() if get_option('SDLIMAGE_PNG').enabled() and not get_option( 'SDLIMAGE_BACKEND_STB', From a224c8417cbb76c528139f606e7bb16932a753e5 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 06:26:06 -0330 Subject: [PATCH 40/51] Add temporary debug messages --- subprojects/packagefiles/sdl3_image/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index b9b34e354f..e576fd1108 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -88,9 +88,8 @@ if target_machine.system() == 'darwin' ) endif - get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_auto_if(true) - if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() + message('SDLIMAGE_BACKEND_IMAGEIO') if get_option('SDLIMAGE_PNG').enabled() and not get_option( 'SDLIMAGE_BACKEND_STB', ).enabled() @@ -112,6 +111,7 @@ if target_machine.system() == 'darwin' '-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc', ) + message('SDL_IMAGE_USE_COMMON_BACKEND') endif endif From 0f140b8371762ebc2b9de8e0f75e1d0b34236216 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 06:39:14 -0330 Subject: [PATCH 41/51] Enable auto SDLIMAGE_BACKEND_IMAGEIO --- subprojects/packagefiles/sdl3_image/meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index e576fd1108..21b72334a6 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -88,6 +88,8 @@ if target_machine.system() == 'darwin' ) endif + get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_auto_if(true) + if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() message('SDLIMAGE_BACKEND_IMAGEIO') if get_option('SDLIMAGE_PNG').enabled() and not get_option( From bc2124dcdc26005de083670f69b503cfe8146e5c Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 06:50:22 -0330 Subject: [PATCH 42/51] Add debug enable_if --- subprojects/packagefiles/sdl3_image/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 21b72334a6..dff4df976d 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -88,7 +88,7 @@ if target_machine.system() == 'darwin' ) endif - get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_auto_if(true) + get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_if(true, error_message: 'AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH') if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() message('SDLIMAGE_BACKEND_IMAGEIO') From ce55dbdadaf99f9eb33e212f5fe4949d07692e17 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 06:52:02 -0330 Subject: [PATCH 43/51] Format --- subprojects/packagefiles/sdl3_image/meson.build | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index dff4df976d..0f6ee35474 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -88,7 +88,10 @@ if target_machine.system() == 'darwin' ) endif - get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_if(true, error_message: 'AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH') + get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_if( + true, + error_message: 'AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH', + ) if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() message('SDLIMAGE_BACKEND_IMAGEIO') From ca2370c6f7177282cc6aa331849e38255d53f994 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 07:25:56 -0330 Subject: [PATCH 44/51] Fix auto SDLIMAGE_BACKEND_IMAGEIO --- subprojects/packagefiles/sdl3_image/meson.build | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 0f6ee35474..d9501930a0 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -88,13 +88,7 @@ if target_machine.system() == 'darwin' ) endif - get_option('SDLIMAGE_BACKEND_IMAGEIO').enable_if( - true, - error_message: 'AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH', - ) - - if get_option('SDLIMAGE_BACKEND_IMAGEIO').enabled() - message('SDLIMAGE_BACKEND_IMAGEIO') + if get_option('SDLIMAGE_BACKEND_IMAGEIO').allowed() if get_option('SDLIMAGE_PNG').enabled() and not get_option( 'SDLIMAGE_BACKEND_STB', ).enabled() @@ -116,7 +110,6 @@ if target_machine.system() == 'darwin' '-DSDL_IMAGE_USE_COMMON_BACKEND', language: 'objc', ) - message('SDL_IMAGE_USE_COMMON_BACKEND') endif endif From fcb6d517b59ce6acd784f9c3d0180401bec9d25a Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 16:54:29 -0330 Subject: [PATCH 45/51] Fix all feature option logic --- .../packagefiles/sdl3_image/meson.build | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index d9501930a0..f82f5892ff 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -53,7 +53,7 @@ get_option('SDLIMAGE_BACKEND_WIC').require( target_machine.system() == 'windows', error_message: 'Windows must be set as the build target', ) -if get_option('SDLIMAGE_BACKEND_WIC').enabled() +if get_option('SDLIMAGE_BACKEND_WIC').allowed() add_project_arguments( '-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c', @@ -88,18 +88,20 @@ if target_machine.system() == 'darwin' ) endif + get_option('SDLIMAGE_BACKEND_STB').disable_auto_if(true) + if get_option('SDLIMAGE_BACKEND_IMAGEIO').allowed() - if get_option('SDLIMAGE_PNG').enabled() and not get_option( + if get_option('SDLIMAGE_PNG').allowed() and get_option( 'SDLIMAGE_BACKEND_STB', - ).enabled() + ).disabled() add_project_arguments( '-DPNG_USES_IMAGEIO', language: 'objc', ) endif - if get_option('SDLIMAGE_JPG').enabled() and not get_option( + if get_option('SDLIMAGE_JPG').allowed() and get_option( 'SDLIMAGE_BACKEND_STB', - ).enabled() + ).disabled() add_project_arguments( '-DJPG_USES_IMAGEIO', language: 'objc', @@ -113,7 +115,7 @@ if target_machine.system() == 'darwin' endif endif -if get_option('SDLIMAGE_BACKEND_STB').enabled() +if get_option('SDLIMAGE_BACKEND_STB').allowed() add_project_arguments( '-DUSE_STBIMAGE', language: 'c', @@ -146,12 +148,12 @@ sdlimage_extensions = { # Sets load macros, save macros, and guards against # enabling saving without enabling loading foreach extension, savable : sdlimage_extensions - if get_option(f'SDLIMAGE_@extension@').enabled() + if get_option(f'SDLIMAGE_@extension@').allowed() add_project_arguments( f'-DLOAD_@extension@', language: 'c', ) - if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enabled() + if savable and get_option(f'SDLIMAGE_@extension@_SAVE').allowed() add_project_arguments( f'-DSAVE_@extension@', language: 'c', From 9638b081d357fb8383c4013ae1b13d08f8d17997 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 17:34:51 -0330 Subject: [PATCH 46/51] Fix all feature option logic --- .../packagefiles/sdl3_image/meson.build | 65 +++++++++---------- .../packagefiles/sdl3_image/src/meson.build | 4 ++ 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index f82f5892ff..373aac5bd2 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -49,27 +49,20 @@ deps = [ ] subdir('src') -get_option('SDLIMAGE_BACKEND_WIC').require( +if get_option('SDLIMAGE_BACKEND_WIC').require( target_machine.system() == 'windows', error_message: 'Windows must be set as the build target', -) -if get_option('SDLIMAGE_BACKEND_WIC').allowed() +).allowed() add_project_arguments( '-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c', ) endif -get_option('SDLIMAGE_BACKEND_IMAGEIO').require( +if get_option('SDLIMAGE_BACKEND_IMAGEIO').require( target_machine.system() == 'darwin', error_message: 'Darwin must be set as the build target', -) - -if target_machine.system() == 'darwin' - add_languages( - 'objc', - native: false, - ) +).allowed() if target_machine.subsystem() == 'macos' deps += dependency( 'appleframeworks', @@ -88,34 +81,36 @@ if target_machine.system() == 'darwin' ) endif - get_option('SDLIMAGE_BACKEND_STB').disable_auto_if(true) - - if get_option('SDLIMAGE_BACKEND_IMAGEIO').allowed() - if get_option('SDLIMAGE_PNG').allowed() and get_option( - 'SDLIMAGE_BACKEND_STB', - ).disabled() - add_project_arguments( - '-DPNG_USES_IMAGEIO', - language: 'objc', - ) - endif - if get_option('SDLIMAGE_JPG').allowed() and get_option( - 'SDLIMAGE_BACKEND_STB', - ).disabled() - add_project_arguments( - '-DJPG_USES_IMAGEIO', - language: 'objc', - ) - endif - else + if get_option('SDLIMAGE_PNG').allowed() and get_option( + 'SDLIMAGE_BACKEND_STB', + ).disable_auto_if( + true, + ) + .disabled() + add_project_arguments( + '-DPNG_USES_IMAGEIO', + language: 'objc', + ) + endif + if get_option('SDLIMAGE_JPG').allowed() and get_option( + 'SDLIMAGE_BACKEND_STB', + ).disable_auto_if( + true, + ) + .disabled() add_project_arguments( - '-DSDL_IMAGE_USE_COMMON_BACKEND', + '-DJPG_USES_IMAGEIO', language: 'objc', ) endif +else + add_project_arguments( + '-DSDL_IMAGE_USE_COMMON_BACKEND', + language: 'objc', + ) endif -if get_option('SDLIMAGE_BACKEND_STB').allowed() +if get_option('SDLIMAGE_BACKEND_STB').disable_auto_if(true).enabled() add_project_arguments( '-DUSE_STBIMAGE', language: 'c', @@ -148,12 +143,12 @@ sdlimage_extensions = { # Sets load macros, save macros, and guards against # enabling saving without enabling loading foreach extension, savable : sdlimage_extensions - if get_option(f'SDLIMAGE_@extension@').allowed() + if get_option(f'SDLIMAGE_@extension@').enable_auto_if(true).enabled() add_project_arguments( f'-DLOAD_@extension@', language: 'c', ) - if savable and get_option(f'SDLIMAGE_@extension@_SAVE').allowed() + if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enable_auto_if(true).enabled() add_project_arguments( f'-DSAVE_@extension@', language: 'c', diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index 2c7f98eee5..14c3ecc2b7 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -32,5 +32,9 @@ if target_machine.system() == 'windows' and get_option('default_library') == 'sh endif if target_machine.system() == 'darwin' + add_languages( + 'objc', + native: false, + ) sdl3_image_src += files('IMG_ImageIO.m') endif From 0abfc5b62ecacf35773824727eee9ca87e8c4d55 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 18:32:45 -0330 Subject: [PATCH 47/51] Fix dependency guard --- .../packagefiles/sdl3_image/meson.build | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 373aac5bd2..36b24ba212 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -38,8 +38,7 @@ libjpeg_dep = dependency( required: get_option('SDLIMAGE_JPG'), ) # STB loadable -deps = [ - sdl3_dep, +image_deps = [ libpng_dep, libavif_dep, libjxl_dep, @@ -47,6 +46,9 @@ deps = [ libwebp_dep, libjpeg_dep, ] + +deps = [sdl3_dep, image_deps] + subdir('src') if get_option('SDLIMAGE_BACKEND_WIC').require( @@ -140,15 +142,22 @@ sdlimage_extensions = { 'XV': false, } -# Sets load macros, save macros, and guards against -# enabling saving without enabling loading +# Sets load macros, save macros, guards against +# loading without required dependencies, and +# guards against enabling saving without +# enabling loading foreach extension, savable : sdlimage_extensions - if get_option(f'SDLIMAGE_@extension@').enable_auto_if(true).enabled() + if is_variable(f'lib@extension@_dep'.to_lower()) + auto = get_variable(f'lib@extension@_dep'.to_lower()).found() ? true : false + else + auto = true + endif + if get_option(f'SDLIMAGE_@extension@').enable_auto_if(auto).enabled() add_project_arguments( f'-DLOAD_@extension@', language: 'c', ) - if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enable_auto_if(true).enabled() + if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enable_auto_if(auto).enabled() add_project_arguments( f'-DSAVE_@extension@', language: 'c', From 66233f252643a22dfc93bf6f7a3c48abbb49c9e4 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Thu, 12 Feb 2026 18:50:08 -0330 Subject: [PATCH 48/51] Fix image_deps --- subprojects/packagefiles/sdl3_image/meson.build | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 36b24ba212..28ec38c213 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -47,7 +47,11 @@ image_deps = [ libjpeg_dep, ] -deps = [sdl3_dep, image_deps] +deps = [sdl3_dep] + +foreach dependency : image_deps + deps += dependency +endforeach subdir('src') From d0906e4a1882260e433328ed3dbd024f7d5c60e4 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Fri, 13 Feb 2026 10:29:29 -0330 Subject: [PATCH 49/51] Add windowscodecs dependency --- .../packagefiles/sdl3_image/meson.build | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 28ec38c213..04238d7363 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -47,11 +47,7 @@ image_deps = [ libjpeg_dep, ] -deps = [sdl3_dep] - -foreach dependency : image_deps - deps += dependency -endforeach +deps = [sdl3_dep, image_deps] subdir('src') @@ -63,6 +59,7 @@ if get_option('SDLIMAGE_BACKEND_WIC').require( '-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c', ) + deps += meson.get_compiler('c').find_library('windowscodecs') endif if get_option('SDLIMAGE_BACKEND_IMAGEIO').require( @@ -87,23 +84,17 @@ if get_option('SDLIMAGE_BACKEND_IMAGEIO').require( ) endif - if get_option('SDLIMAGE_PNG').allowed() and get_option( - 'SDLIMAGE_BACKEND_STB', - ).disable_auto_if( + if get_option('SDLIMAGE_PNG').allowed() and get_option('SDLIMAGE_BACKEND_STB').disable_auto_if( true, - ) - .disabled() + ).disabled() add_project_arguments( '-DPNG_USES_IMAGEIO', language: 'objc', ) endif - if get_option('SDLIMAGE_JPG').allowed() and get_option( - 'SDLIMAGE_BACKEND_STB', - ).disable_auto_if( + if get_option('SDLIMAGE_JPG').allowed() and get_option('SDLIMAGE_BACKEND_STB').disable_auto_if( true, - ) - .disabled() + ).disabled() add_project_arguments( '-DJPG_USES_IMAGEIO', language: 'objc', From 6b28ecf00e97dc30999535ade1e8c9793dec72e5 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Fri, 13 Feb 2026 23:55:37 -0330 Subject: [PATCH 50/51] Reformat --- .../packagefiles/sdl3_image/meson.build | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 04238d7363..6d26a5372e 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -25,7 +25,7 @@ libjxl_dep = dependency( 'libjxl', required: get_option('SDLIMAGE_JXL'), ) # Absent from wrapdb as of Feb 1 2026 -libtiff_dep = dependency( +libtif_dep = dependency( 'libtiff', required: get_option('SDLIMAGE_TIF'), ) @@ -42,19 +42,37 @@ image_deps = [ libpng_dep, libavif_dep, libjxl_dep, - libtiff_dep, + libtif_dep, libwebp_dep, libjpeg_dep, ] deps = [sdl3_dep, image_deps] +c_args = [] + subdir('src') -if get_option('SDLIMAGE_BACKEND_WIC').require( +# Targets +windows = target_machine.system() == 'windows' +darwin = target_machine.system() == 'darwin' + +macos = target_machine.subsystem() == 'macos' + +# Backends +sdlimage_backend_wic = get_option('SDLIMAGE_BACKEND_WIC').require( target_machine.system() == 'windows', error_message: 'Windows must be set as the build target', ).allowed() +sdlimage_backend_imageio = get_option('SDLIMAGE_BACKEND_IMAGEIO').require( + target_machine.system() == 'darwin', + error_message: 'Darwin must be set as the build target', +).allowed() +sdlimage_backend_stb = get_option('SDLIMAGE_BACKEND_STB').disable_auto_if( + sdlimage_backend_wic or sdlimage_backend_imageio, +).allowed() + +if sdlimage_backend_wic add_project_arguments( '-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c', @@ -62,11 +80,8 @@ if get_option('SDLIMAGE_BACKEND_WIC').require( deps += meson.get_compiler('c').find_library('windowscodecs') endif -if get_option('SDLIMAGE_BACKEND_IMAGEIO').require( - target_machine.system() == 'darwin', - error_message: 'Darwin must be set as the build target', -).allowed() - if target_machine.subsystem() == 'macos' +if sdlimage_backend_imageio + if macos deps += dependency( 'appleframeworks', modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'ImageIO'], @@ -84,17 +99,13 @@ if get_option('SDLIMAGE_BACKEND_IMAGEIO').require( ) endif - if get_option('SDLIMAGE_PNG').allowed() and get_option('SDLIMAGE_BACKEND_STB').disable_auto_if( - true, - ).disabled() + if get_option('SDLIMAGE_PNG').allowed() and not sdlimage_backend_stb add_project_arguments( '-DPNG_USES_IMAGEIO', language: 'objc', ) endif - if get_option('SDLIMAGE_JPG').allowed() and get_option('SDLIMAGE_BACKEND_STB').disable_auto_if( - true, - ).disabled() + if get_option('SDLIMAGE_JPG').allowed() and not sdlimage_backend_stb add_project_arguments( '-DJPG_USES_IMAGEIO', language: 'objc', @@ -107,7 +118,7 @@ else ) endif -if get_option('SDLIMAGE_BACKEND_STB').disable_auto_if(true).enabled() +if sdlimage_backend_stb add_project_arguments( '-DUSE_STBIMAGE', language: 'c', @@ -166,10 +177,8 @@ foreach extension, savable : sdlimage_extensions endif endforeach -if get_option('default_library') == 'shared' +if (get_option('default_library') == 'shared') and windows c_args = ['-DDLL_EXPORT'] -else - c_args = [] endif sdl3_image_lib = library( From 04d7292a4be9d9c2abbae9ad1bd4ab861e3f56e8 Mon Sep 17 00:00:00 2001 From: afinn-s Date: Sat, 14 Feb 2026 12:23:38 -0330 Subject: [PATCH 51/51] Dependency rework --- ci_config.json | 3 + .../packagefiles/sdl3_image/meson.build | 173 +++++++++++------- .../packagefiles/sdl3_image/meson.options | 9 + .../packagefiles/sdl3_image/src/meson.build | 5 +- 4 files changed, 118 insertions(+), 72 deletions(-) diff --git a/ci_config.json b/ci_config.json index 7f60ed2ff4..e4cc20e100 100644 --- a/ci_config.json +++ b/ci_config.json @@ -1407,6 +1407,9 @@ ] }, "sdl3_image": { + "build_options": [ + "sdl3_image:enable-all=enabled" + ], "alpine_packages": [ "libudev-zero-dev", "dbus-dev", diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 6d26a5372e..75941a1a53 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -8,51 +8,6 @@ project( default_options: 'c_std=c99', ) -sdl3_dep = dependency( - 'sdl3', - version: '>=3.4.0', -) # Minimum allowed SDL3 version, not SDL3_IMAGE version -libpng_dep = dependency( - 'libpng', - required: get_option('SDLIMAGE_PNG_LIBPNG'), -) # STB loadable -libavif_dep = dependency( - 'libavif', - version: '>=0.1.0', - required: get_option('SDLIMAGE_AVIF'), -) # Absent from wrapdb as of Feb 1 2026 -libjxl_dep = dependency( - 'libjxl', - required: get_option('SDLIMAGE_JXL'), -) # Absent from wrapdb as of Feb 1 2026 -libtif_dep = dependency( - 'libtiff', - required: get_option('SDLIMAGE_TIF'), -) -libwebp_dep = dependency( - 'libwebp', - required: get_option('SDLIMAGE_WEBP'), -) -libjpeg_dep = dependency( - 'libjpeg', - required: get_option('SDLIMAGE_JPG'), -) # STB loadable - -image_deps = [ - libpng_dep, - libavif_dep, - libjxl_dep, - libtif_dep, - libwebp_dep, - libjpeg_dep, -] - -deps = [sdl3_dep, image_deps] - -c_args = [] - -subdir('src') - # Targets windows = target_machine.system() == 'windows' darwin = target_machine.system() == 'darwin' @@ -60,43 +15,117 @@ darwin = target_machine.system() == 'darwin' macos = target_machine.subsystem() == 'macos' # Backends +sdlimage_png_libpng = get_option('SDLIMAGE_PNG_LIBPNG').require( + get_option('SDLIMAGE_PNG').enabled(), + error_message: 'SDLIMAGE_PNG must be enabled to use libpng', +).enabled() sdlimage_backend_wic = get_option('SDLIMAGE_BACKEND_WIC').require( - target_machine.system() == 'windows', + windows, error_message: 'Windows must be set as the build target', ).allowed() sdlimage_backend_imageio = get_option('SDLIMAGE_BACKEND_IMAGEIO').require( - target_machine.system() == 'darwin', + darwin, error_message: 'Darwin must be set as the build target', ).allowed() sdlimage_backend_stb = get_option('SDLIMAGE_BACKEND_STB').disable_auto_if( sdlimage_backend_wic or sdlimage_backend_imageio, ).allowed() + + + +required_deps = [] + +if get_option('enable-all').enabled() + foreach key, dep : deps_dict + required_deps += key.split('_')[0] + endforeach +else + if sdlimage_png_libpng # If libpng explicity requested, add it to required + required_deps += 'libpng' + endif + if not ( # If no loadable PNG backends and PNG is requested, + sdlimage_backend_stb # require libpng if it isn't already + or sdlimage_backend_wic + or sdlimage_backend_imageio + ) + if get_option('SDLIMAGE_PNG').enabled() + if 'libpng' not in required_deps + required_deps += 'libpng' + endif + endif + if get_option('SDLIMAGE_JPG').enabled() # If no JPEG loadable backends and + required_deps += 'libjpeg' # JPEG is requested, require libjpeg + endif + endif +endif + +deps_dict = { + 'sdl3_dep': dependency( + 'sdl3', + version: '>=3.4.0', + ), + 'libpng_dep': dependency( + 'libpng', + required: 'libpng' in required_deps, + ), + 'libavif_dep': dependency( + 'libavif', + required: 'libavif' in required_deps, + ), + 'libjxl_dep': dependency( + 'libjxl', + required: 'libjxl' in required_deps, + ), + 'libtif_dep': dependency( + 'libtif', + required: 'libtif' in required_deps, + ), + 'libwebp_dep': dependency( + 'libwebp', + required: 'libwebp' in required_deps, + ), + 'libjpeg_dep': dependency( + 'libjpeg', + required: 'libjpeg' in required_deps, + ), +} + +c_args = [] + +subdir('src') + if sdlimage_backend_wic add_project_arguments( '-DSDL_IMAGE_USE_WIC_BACKEND', language: 'c', ) - deps += meson.get_compiler('c').find_library('windowscodecs') + deps_dict += { + 'windowscodecs': meson.get_compiler('c').find_library('windowscodecs'), + } endif if sdlimage_backend_imageio if macos - deps += dependency( - 'appleframeworks', - modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'ImageIO'], - ) + deps_dict += { + 'appleframeworks_dep': dependency( + 'appleframeworks', + modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'ImageIO'], + ), + } else - deps += dependency( - 'appleframeworks', - modules: [ - 'CoreGraphics', - 'Foundation', - 'CoreServices', - 'ImageIO', - 'UIKit', - ], - ) + deps_dict += { + 'appleframeworks_dep': dependency( + 'appleframeworks', + modules: [ + 'CoreGraphics', + 'Foundation', + 'CoreServices', + 'ImageIO', + 'UIKit', + ], + ), + } endif if get_option('SDLIMAGE_PNG').allowed() and not sdlimage_backend_stb @@ -153,11 +182,13 @@ sdlimage_extensions = { # guards against enabling saving without # enabling loading foreach extension, savable : sdlimage_extensions - if is_variable(f'lib@extension@_dep'.to_lower()) - auto = get_variable(f'lib@extension@_dep'.to_lower()).found() ? true : false - else - auto = true - endif + foreach key, dep : deps_dict + if key.split('_')[0].endswith(extension) + auto = dep.found() ? true : false + else + auto = false + endif + endforeach if get_option(f'SDLIMAGE_@extension@').enable_auto_if(auto).enabled() add_project_arguments( f'-DLOAD_@extension@', @@ -177,9 +208,11 @@ foreach extension, savable : sdlimage_extensions endif endforeach -if (get_option('default_library') == 'shared') and windows - c_args = ['-DDLL_EXPORT'] -endif +deps = [] + +foreach key, dep : deps_dict + deps += dep +endforeach sdl3_image_lib = library( 'sdl3_image', diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options index 8d9bd3a653..756fb5d9f5 100644 --- a/subprojects/packagefiles/sdl3_image/meson.options +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -180,3 +180,12 @@ option( value: 'auto', description: 'Add WEBP save support', ) + +# Meson + +option( + 'enable-all', + type: 'feature', + value: 'disabled', + description: 'Requires all possible dependencies', +) diff --git a/subprojects/packagefiles/sdl3_image/src/meson.build b/subprojects/packagefiles/sdl3_image/src/meson.build index 14c3ecc2b7..f8c2d3325d 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -27,11 +27,12 @@ sdl3_image_src = files( 'IMG_xxx.c', ) -if target_machine.system() == 'windows' and get_option('default_library') == 'shared' +if windows and get_option('default_library') == 'shared' import('windows').compile_resources('version.rc') + c_args = ['-DDLL_EXPORT'] endif -if target_machine.system() == 'darwin' +if darwin add_languages( 'objc', native: false,