diff --git a/ci_config.json b/ci_config.json index 909bf2df01..e4cc20e100 100644 --- a/ci_config.json +++ b/ci_config.json @@ -1407,13 +1407,28 @@ ] }, "sdl3_image": { + "build_options": [ + "sdl3_image:enable-all=enabled" + ], "alpine_packages": [ "libudev-zero-dev", "dbus-dev", "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 +1440,10 @@ "libegl-dev", "libgl-dev", "libpng-dev", + "libavif-dev", + "libjxl-dev", + "libtiff-dev", + "libwebp-dev", "libjpeg-dev" ] }, diff --git a/releases.json b/releases.json index 00ef049a38..3dab8223c6 100644 --- a/releases.json +++ b/releases.json @@ -4103,6 +4103,7 @@ "sdl3_image" ], "versions": [ + "3.4.0-1", "3.2.4-1" ] }, diff --git a/subprojects/packagefiles/sdl3_image/meson.build b/subprojects/packagefiles/sdl3_image/meson.build index 7a6285e546..75941a1a53 100644 --- a/subprojects/packagefiles/sdl3_image/meson.build +++ b/subprojects/packagefiles/sdl3_image/meson.build @@ -1,25 +1,231 @@ -project('sdl3_image', 'c', - version: '3.2.4') +project( + 'sdl3_image', + 'c', + license: 'Zlib', + license_files: 'LICENSE.txt', + meson_version: '>= 1.1.0', + version: '3.4.0', + default_options: 'c_std=c99', +) -sdl_dep = dependency('sdl3', version: '>=3.2.4') +# Targets +windows = target_machine.system() == 'windows' +darwin = target_machine.system() == 'darwin' -png_dep = dependency('libpng') -jpg_dep = dependency('libjpeg', required: false) +macos = target_machine.subsystem() == 'macos' -img_args = [] +# 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( + windows, + error_message: 'Windows must be set as the build target', +).allowed() +sdlimage_backend_imageio = get_option('SDLIMAGE_BACKEND_IMAGEIO').require( + 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() -# These are enabled by default it seems. -#img_args = ['-DWANT_LIBPNG'] -#if jpg_dep.found() -# img_args += '-DWANT_JPEGLIB' -#endif + + + +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') -img_lib = library('sdl3_image', - img_src, - c_args: img_args, + +if sdlimage_backend_wic + add_project_arguments( + '-DSDL_IMAGE_USE_WIC_BACKEND', + language: 'c', + ) + deps_dict += { + 'windowscodecs': meson.get_compiler('c').find_library('windowscodecs'), + } +endif + +if sdlimage_backend_imageio + if macos + deps_dict += { + 'appleframeworks_dep': dependency( + 'appleframeworks', + modules: ['CoreGraphics', 'Foundation', 'CoreServices', 'ImageIO'], + ), + } + else + deps_dict += { + 'appleframeworks_dep': dependency( + 'appleframeworks', + modules: [ + 'CoreGraphics', + 'Foundation', + 'CoreServices', + 'ImageIO', + 'UIKit', + ], + ), + } + endif + + 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 not sdlimage_backend_stb + add_project_arguments( + '-DJPG_USES_IMAGEIO', + language: 'objc', + ) + endif +else + add_project_arguments( + '-DSDL_IMAGE_USE_COMMON_BACKEND', + language: 'objc', + ) +endif + +if sdlimage_backend_stb + 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, +} + +# Sets load macros, save macros, guards against +# loading without required dependencies, and +# guards against enabling saving without +# enabling loading +foreach extension, savable : sdlimage_extensions + 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@', + language: 'c', + ) + if savable and get_option(f'SDLIMAGE_@extension@_SAVE').enable_auto_if(auto).enabled() + 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', + ) + endif +endforeach + +deps = [] + +foreach key, dep : deps_dict + deps += dep +endforeach + +sdl3_image_lib = library( + 'sdl3_image', + sdl3_image_src, + include_directories: 'include', + c_args: c_args, + dependencies: deps, + install: true, +) + +sdl3_image_dep = declare_dependency( include_directories: 'include', - dependencies: [png_dep, sdl_dep]) + link_with: sdl3_image_lib, +) -sdl3_image_dep = declare_dependency(include_directories: 'include', - link_with: img_lib) +meson.override_dependency('sdl3_image', sdl3_image_dep) diff --git a/subprojects/packagefiles/sdl3_image/meson.options b/subprojects/packagefiles/sdl3_image/meson.options new file mode 100644 index 0000000000..756fb5d9f5 --- /dev/null +++ b/subprojects/packagefiles/sdl3_image/meson.options @@ -0,0 +1,191 @@ +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_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', +) + +# 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 72e680586d..f8c2d3325d 100644 --- a/subprojects/packagefiles/sdl3_image/src/meson.build +++ b/subprojects/packagefiles/sdl3_image/src/meson.build @@ -1,10 +1,17 @@ -img_src = files( +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', @@ -14,9 +21,21 @@ img_src = files( 'IMG_tga.c', 'IMG_tif.c', 'IMG_webp.c', - 'IMG_WIC.c', 'IMG_xcf.c', 'IMG_xpm.c', 'IMG_xv.c', 'IMG_xxx.c', ) + +if windows and get_option('default_library') == 'shared' + import('windows').compile_resources('version.rc') + c_args = ['-DDLL_EXPORT'] +endif + +if darwin + add_languages( + 'objc', + native: false, + ) + sdl3_image_src += files('IMG_ImageIO.m') +endif diff --git a/subprojects/sdl3_image.wrap b/subprojects/sdl3_image.wrap index 4c316837dd..7478da8bf8 100644 --- a/subprojects/sdl3_image.wrap +++ b/subprojects/sdl3_image.wrap @@ -1,9 +1,9 @@ [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] -sdl3_image = sdl3_image_dep +dependency_names = sdl3_image