Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
fe12bf0
Initial commit
afinn-s Feb 1, 2026
7dc3f75
Update sdl3_image to 3.4.0
afinn-s Feb 1, 2026
d39e53e
Remove vendored dependencies
afinn-s Feb 1, 2026
9928a87
Set SDLIMAGE types to 'enabled' default
afinn-s Feb 1, 2026
87605e2
Rule out vendored AVIF
afinn-s Feb 1, 2026
06a4d3a
Add image backends
afinn-s Feb 1, 2026
8c9ceb4
Added all image backends, updated logic
afinn-s Feb 1, 2026
c8ab86e
Remove 'enable_auto_if's
afinn-s Feb 1, 2026
137ee5c
Add new SDL 3.4.0 sources
afinn-s Feb 1, 2026
78490a4
Remove -DSDL_BUILD_[]_VERSION variables
afinn-s Feb 1, 2026
7100681
Remove CMake Modules comment
afinn-s Feb 1, 2026
28ab2dd
Reword comments
afinn-s Feb 1, 2026
902d90c
Remove CMake install guard
afinn-s Feb 1, 2026
2d7967f
Reorganize
afinn-s Feb 1, 2026
15da70b
Remove POSITION_INDEPENDENT_CODE option
afinn-s Feb 1, 2026
af5601c
Fix version.rc
afinn-s Feb 1, 2026
2599dff
Remove unused variables
afinn-s Feb 1, 2026
f19a494
Remove unimplemented options
afinn-s Feb 2, 2026
fb8e9e9
Meson dependency override
afinn-s Feb 2, 2026
5516c9b
Fix non ImageIO Darwin
afinn-s Feb 2, 2026
d8d61c7
Fix minor misc stuff
afinn-s Feb 2, 2026
60840ba
Merge branch 'mesonbuild:master' into master
afinn-s Feb 10, 2026
19b017d
Update releases.json
afinn-s Feb 10, 2026
d8d3b69
Add license to project()
afinn-s Feb 10, 2026
a9833a7
Syntax fix
afinn-s Feb 10, 2026
b9c28a3
Format with format.py
afinn-s Feb 10, 2026
525dbeb
Add Apple library logic from SDL3
afinn-s Feb 10, 2026
3b4901d
Format
afinn-s Feb 10, 2026
3816130
Update appleframeworks to match CMake
afinn-s Feb 10, 2026
c122330
Merge branch 'mesonbuild:master' into master
afinn-s Feb 12, 2026
0bf879c
Fix Visual Studio CI
afinn-s Feb 12, 2026
2ed8c6e
Update CI packages
afinn-s Feb 12, 2026
52ac50c
Fix libjpeg
afinn-s Feb 12, 2026
3d21c2a
Update appleframeworks
afinn-s Feb 12, 2026
4ae1005
Fix ImageIO.m in sources
afinn-s Feb 12, 2026
9f8da6a
Update appleframeworks
afinn-s Feb 12, 2026
cebf8b8
Remove ImageIO from appleframeworks
afinn-s Feb 12, 2026
395e7b4
Remove UIKit
afinn-s Feb 12, 2026
2e391d4
Readd ImageIO
afinn-s Feb 12, 2026
4c6ef4d
Add proper appleframeworks subsystem handling
afinn-s Feb 12, 2026
ddd9b9f
Fix Darwin defaulting to COMMON_BACKEND
afinn-s Feb 12, 2026
a224c84
Add temporary debug messages
afinn-s Feb 12, 2026
0f140b8
Enable auto SDLIMAGE_BACKEND_IMAGEIO
afinn-s Feb 12, 2026
bc2124d
Add debug enable_if
afinn-s Feb 12, 2026
ce55dbd
Format
afinn-s Feb 12, 2026
ca2370c
Fix auto SDLIMAGE_BACKEND_IMAGEIO
afinn-s Feb 12, 2026
fcb6d51
Fix all feature option logic
afinn-s Feb 12, 2026
9638b08
Fix all feature option logic
afinn-s Feb 12, 2026
0abfc5b
Fix dependency guard
afinn-s Feb 12, 2026
66233f2
Fix image_deps
afinn-s Feb 12, 2026
d0906e4
Add windowscodecs dependency
afinn-s Feb 13, 2026
6b28ecf
Reformat
afinn-s Feb 14, 2026
04d7292
Dependency rework
afinn-s Feb 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion ci_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -1425,6 +1440,10 @@
"libegl-dev",
"libgl-dev",
"libpng-dev",
"libavif-dev",
"libjxl-dev",
"libtiff-dev",
"libwebp-dev",
"libjpeg-dev"
]
},
Expand Down
1 change: 1 addition & 0 deletions releases.json
Original file line number Diff line number Diff line change
Expand Up @@ -4103,6 +4103,7 @@
"sdl3_image"
],
"versions": [
"3.4.0-1",
"3.2.4-1"
]
},
Expand Down
240 changes: 223 additions & 17 deletions subprojects/packagefiles/sdl3_image/meson.build
Original file line number Diff line number Diff line change
@@ -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)
Loading
Loading