SDL_image: fix build with clang 16

Use the correct function pointer types to avoid incompatible function pointer type assignment errors with clang 16. Also disable `webp-shared` like the other image formats already do and add it as an explicit dependency.
This commit is contained in:
Randy Eckenrode 2024-07-24 20:50:23 -04:00
parent d72845c2ca
commit 97d56a3365
No known key found for this signature in database
GPG Key ID: 64C1CD4EC2A600D9
2 changed files with 26 additions and 3 deletions

View File

@ -0,0 +1,16 @@
diff -ur a/IMG_webp.c b/IMG_webp.c
--- a/IMG_webp.c 2012-01-20 20:51:33.000000000 -0500
+++ b/IMG_webp.c 2024-07-24 20:48:58.697398200 -0400
@@ -47,9 +47,9 @@
static struct {
int loaded;
void *handle;
- int/*VP8StatuCode*/ (*webp_get_features_internal) (const uint8_t *data, uint32_t data_size, WebPBitstreamFeatures* const features, int decoder_abi_version);
- uint8_t* (*webp_decode_rgb_into) (const uint8_t* data, uint32_t data_size, uint8_t* output_buffer, int output_buffer_size, int output_stride);
- uint8_t* (*webp_decode_rgba_into) (const uint8_t* data, uint32_t data_size, uint8_t* output_buffer, int output_buffer_size, int output_stride);
+ VP8StatusCode (*webp_get_features_internal) (const uint8_t *data, size_t data_size, WebPBitstreamFeatures* const features, int decoder_abi_version);
+ uint8_t* (*webp_decode_rgb_into) (const uint8_t* data, size_t data_size, uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
+ uint8_t* (*webp_decode_rgba_into) (const uint8_t* data, size_t data_size, uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
} lib;
#ifdef LOAD_WEBP_DYNAMIC

View File

@ -8,6 +8,7 @@
libjpeg, libjpeg,
libpng, libpng,
libtiff, libtiff,
libwebp,
pkg-config, pkg-config,
stdenv, stdenv,
}: }:
@ -29,6 +30,8 @@ stdenv.mkDerivation (finalAttrs: {
includes = [ "IMG_xcf.c" ]; includes = [ "IMG_xcf.c" ];
hash = "sha256-Z0nyEtE1LNGsGsN9SFG8ZyPDdunmvg81tUnEkrJQk5w="; hash = "sha256-Z0nyEtE1LNGsGsN9SFG8ZyPDdunmvg81tUnEkrJQk5w=";
}) })
# Fixes incompatible function pointer type errors with clang 16
./clang16-webp-errors.patch
]; ];
configureFlags = [ configureFlags = [
@ -37,6 +40,7 @@ stdenv.mkDerivation (finalAttrs: {
(lib.enableFeature false "jpg-shared") (lib.enableFeature false "jpg-shared")
(lib.enableFeature false "png-shared") (lib.enableFeature false "png-shared")
(lib.enableFeature false "tif-shared") (lib.enableFeature false "tif-shared")
(lib.enableFeature false "webp-shared")
(lib.enableFeature (!stdenv.isDarwin) "sdltest") (lib.enableFeature (!stdenv.isDarwin) "sdltest")
]; ];
@ -52,9 +56,13 @@ stdenv.mkDerivation (finalAttrs: {
libjpeg libjpeg
libpng libpng
libtiff libtiff
libwebp
]; ];
outputs = [ "out" "dev" ]; outputs = [
"out"
"dev"
];
strictDeps = true; strictDeps = true;
@ -62,8 +70,7 @@ stdenv.mkDerivation (finalAttrs: {
homepage = "http://www.libsdl.org/projects/SDL_image/"; homepage = "http://www.libsdl.org/projects/SDL_image/";
description = "SDL image library"; description = "SDL image library";
license = lib.licenses.zlib; license = lib.licenses.zlib;
maintainers = lib.teams.sdl.members maintainers = lib.teams.sdl.members ++ (with lib.maintainers; [ ]);
++ (with lib.maintainers; [ ]);
inherit (SDL.meta) platforms; inherit (SDL.meta) platforms;
}; };
}) })