mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-18 20:10:29 +01:00
wrlib: Add support for v5 of the gif_lib API
As reported by Nicolas (nhs), compilation of wrlib is broken when switching to gif_lib v5. The API of gif_lib has known little change to provide thread-safe usage, so we now detect this in configure and and use the functions as appropriate in gif.c Signed-off-by: Christophe CURIS <christophe.curis@free.fr> Signed-off-by: Carlos R. Mafra <crmafra@gmail.com>
This commit is contained in:
committed by
Carlos R. Mafra
parent
7831acebe3
commit
a7663fbbcf
@@ -19,7 +19,7 @@
|
||||
# WM_IMGFMT_CHECK_GIF
|
||||
# -------------------
|
||||
#
|
||||
# Check for GIF file support through 'libgif' or 'libungif'
|
||||
# Check for GIF file support through 'libgif', 'libungif' or 'giflib v5'
|
||||
# The check depends on variable 'enable_gif' being either:
|
||||
# yes - detect, fail if not found
|
||||
# no - do not detect, disable support
|
||||
@@ -53,7 +53,17 @@ AS_IF([test "x$enable_gif" = "xno"],
|
||||
[AC_MSG_ERROR([found $wm_cv_imgfmt_gif but could not find appropriate header - are you missing libgif-dev package?])])
|
||||
AS_IF([wm_fn_imgfmt_try_compile "gif_lib.h" "DGifOpenFileName(filename)" ""],
|
||||
[wm_cv_imgfmt_gif="$wm_cv_imgfmt_gif version:4"],
|
||||
[AC_MSG_ERROR([found $wm_cv_imgfmt_gif and header, but cannot compile - unsupported version?])])
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[@%:@include <gif_lib.h>
|
||||
|
||||
const char *filename = "dummy";],
|
||||
[ int error_code;
|
||||
DGifOpenFileName(filename, &error_code);] )],
|
||||
[wm_cv_imgfmt_gif="$wm_cv_imgfmt_gif version:5"],
|
||||
[AC_MSG_ERROR([found $wm_cv_imgfmt_gif and header, but cannot compile - unsupported version?])])dnl
|
||||
]
|
||||
)
|
||||
CFLAGS="$wm_save_CFLAGS"])
|
||||
])
|
||||
AS_IF([test "x$wm_cv_imgfmt_gif" = "xno"],
|
||||
@@ -62,7 +72,7 @@ AS_IF([test "x$enable_gif" = "xno"],
|
||||
[supported_gfx="$supported_gfx GIF"
|
||||
GFXLIBS="$GFXLIBS `echo "$wm_cv_imgfmt_gif" | sed -e 's, *version:.*,,' `"
|
||||
AC_DEFINE_UNQUOTED([USE_GIF],
|
||||
[1],
|
||||
[`echo "$wm_cv_imgfmt_gif" | sed -e 's,.*version:,,' `],
|
||||
[defined when valid GIF library with header was found])])
|
||||
])
|
||||
AM_CONDITIONAL([USE_GIF], [test "x$enable_gif" != "xno"])dnl
|
||||
|
||||
15
wrlib/gif.c
15
wrlib/gif.c
@@ -48,6 +48,7 @@ RImage *RLoadGIF(const char *file, int index)
|
||||
GifRecordType recType;
|
||||
ColorMapObject *colormap;
|
||||
unsigned char rmap[256], gmap[256], bmap[256];
|
||||
int gif_error;
|
||||
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
@@ -55,10 +56,17 @@ RImage *RLoadGIF(const char *file, int index)
|
||||
/* default error message */
|
||||
RErrorCode = RERR_BADINDEX;
|
||||
|
||||
#if USE_GIF == 4
|
||||
gif = DGifOpenFileName(file);
|
||||
#else /* USE_GIF == 5 */
|
||||
gif = DGifOpenFileName(file, &gif_error);
|
||||
#endif
|
||||
|
||||
if (!gif) {
|
||||
switch (GifLastError()) {
|
||||
#if USE_GIF == 4
|
||||
gif_error = GifLastError();
|
||||
#endif
|
||||
switch (gif_error) {
|
||||
case D_GIF_ERR_OPEN_FAILED:
|
||||
RErrorCode = RERR_OPEN;
|
||||
break;
|
||||
@@ -182,6 +190,7 @@ RImage *RLoadGIF(const char *file, int index)
|
||||
/* yuck! */
|
||||
goto did_not_get_any_errors;
|
||||
giferr:
|
||||
#if USE_GIF == 4
|
||||
switch (GifLastError()) {
|
||||
case D_GIF_ERR_OPEN_FAILED:
|
||||
RErrorCode = RERR_OPEN;
|
||||
@@ -193,6 +202,10 @@ RImage *RLoadGIF(const char *file, int index)
|
||||
RErrorCode = RERR_BADIMAGEFILE;
|
||||
break;
|
||||
}
|
||||
#else
|
||||
/* With gif_lib v5 there's no way to know what went wrong */
|
||||
RErrorCode = RERR_BADIMAGEFILE;
|
||||
#endif
|
||||
bye:
|
||||
if (image)
|
||||
RReleaseImage(image);
|
||||
|
||||
Reference in New Issue
Block a user