mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 04:20:27 +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
|
# 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:
|
# The check depends on variable 'enable_gif' being either:
|
||||||
# yes - detect, fail if not found
|
# yes - detect, fail if not found
|
||||||
# no - do not detect, disable support
|
# 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?])])
|
[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)" ""],
|
AS_IF([wm_fn_imgfmt_try_compile "gif_lib.h" "DGifOpenFileName(filename)" ""],
|
||||||
[wm_cv_imgfmt_gif="$wm_cv_imgfmt_gif version:4"],
|
[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"])
|
CFLAGS="$wm_save_CFLAGS"])
|
||||||
])
|
])
|
||||||
AS_IF([test "x$wm_cv_imgfmt_gif" = "xno"],
|
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"
|
[supported_gfx="$supported_gfx GIF"
|
||||||
GFXLIBS="$GFXLIBS `echo "$wm_cv_imgfmt_gif" | sed -e 's, *version:.*,,' `"
|
GFXLIBS="$GFXLIBS `echo "$wm_cv_imgfmt_gif" | sed -e 's, *version:.*,,' `"
|
||||||
AC_DEFINE_UNQUOTED([USE_GIF],
|
AC_DEFINE_UNQUOTED([USE_GIF],
|
||||||
[1],
|
[`echo "$wm_cv_imgfmt_gif" | sed -e 's,.*version:,,' `],
|
||||||
[defined when valid GIF library with header was found])])
|
[defined when valid GIF library with header was found])])
|
||||||
])
|
])
|
||||||
AM_CONDITIONAL([USE_GIF], [test "x$enable_gif" != "xno"])dnl
|
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;
|
GifRecordType recType;
|
||||||
ColorMapObject *colormap;
|
ColorMapObject *colormap;
|
||||||
unsigned char rmap[256], gmap[256], bmap[256];
|
unsigned char rmap[256], gmap[256], bmap[256];
|
||||||
|
int gif_error;
|
||||||
|
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
index = 0;
|
index = 0;
|
||||||
@@ -55,10 +56,17 @@ RImage *RLoadGIF(const char *file, int index)
|
|||||||
/* default error message */
|
/* default error message */
|
||||||
RErrorCode = RERR_BADINDEX;
|
RErrorCode = RERR_BADINDEX;
|
||||||
|
|
||||||
|
#if USE_GIF == 4
|
||||||
gif = DGifOpenFileName(file);
|
gif = DGifOpenFileName(file);
|
||||||
|
#else /* USE_GIF == 5 */
|
||||||
|
gif = DGifOpenFileName(file, &gif_error);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!gif) {
|
if (!gif) {
|
||||||
switch (GifLastError()) {
|
#if USE_GIF == 4
|
||||||
|
gif_error = GifLastError();
|
||||||
|
#endif
|
||||||
|
switch (gif_error) {
|
||||||
case D_GIF_ERR_OPEN_FAILED:
|
case D_GIF_ERR_OPEN_FAILED:
|
||||||
RErrorCode = RERR_OPEN;
|
RErrorCode = RERR_OPEN;
|
||||||
break;
|
break;
|
||||||
@@ -182,6 +190,7 @@ RImage *RLoadGIF(const char *file, int index)
|
|||||||
/* yuck! */
|
/* yuck! */
|
||||||
goto did_not_get_any_errors;
|
goto did_not_get_any_errors;
|
||||||
giferr:
|
giferr:
|
||||||
|
#if USE_GIF == 4
|
||||||
switch (GifLastError()) {
|
switch (GifLastError()) {
|
||||||
case D_GIF_ERR_OPEN_FAILED:
|
case D_GIF_ERR_OPEN_FAILED:
|
||||||
RErrorCode = RERR_OPEN;
|
RErrorCode = RERR_OPEN;
|
||||||
@@ -193,6 +202,10 @@ RImage *RLoadGIF(const char *file, int index)
|
|||||||
RErrorCode = RERR_BADIMAGEFILE;
|
RErrorCode = RERR_BADIMAGEFILE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* With gif_lib v5 there's no way to know what went wrong */
|
||||||
|
RErrorCode = RERR_BADIMAGEFILE;
|
||||||
|
#endif
|
||||||
bye:
|
bye:
|
||||||
if (image)
|
if (image)
|
||||||
RReleaseImage(image);
|
RReleaseImage(image);
|
||||||
|
|||||||
Reference in New Issue
Block a user