diff options
author | obache <obache@pkgsrc.org> | 2013-07-13 10:50:05 +0000 |
---|---|---|
committer | obache <obache@pkgsrc.org> | 2013-07-13 10:50:05 +0000 |
commit | 09a77671bb9698c0498637544aaf8aa3c40d7846 (patch) | |
tree | 2ebc8585db1bb419f7bfa86f163138938451ad6b /graphics | |
parent | 909422ab096edff2c453d5aac2edc6f9cd8b14d2 (diff) | |
download | pkgsrc-09a77671bb9698c0498637544aaf8aa3c40d7846.tar.gz |
partially fix build with giflib-5.
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/libgdiplus/distinfo | 3 | ||||
-rw-r--r-- | graphics/libgdiplus/patches/patch-src_gifcodec.c | 140 |
2 files changed, 142 insertions, 1 deletions
diff --git a/graphics/libgdiplus/distinfo b/graphics/libgdiplus/distinfo index 20ade485b08..c6642cafc37 100644 --- a/graphics/libgdiplus/distinfo +++ b/graphics/libgdiplus/distinfo @@ -1,6 +1,7 @@ -$NetBSD: distinfo,v 1.32 2011/04/25 14:03:17 kefren Exp $ +$NetBSD: distinfo,v 1.33 2013/07/13 10:50:05 obache Exp $ SHA1 (libgdiplus-2.10.tar.bz2) = cc88be4db56561039325cfda10a42408d64332d9 RMD160 (libgdiplus-2.10.tar.bz2) = 5b66e9c00759c24b815a82581efa271d333b058e Size (libgdiplus-2.10.tar.bz2) = 1962898 bytes SHA1 (patch-aa) = 7c57287b22f92e0ac4692c5ee075d5ae0ac6d966 +SHA1 (patch-src_gifcodec.c) = 59a916e00a253d25ac386b33ef55344a7b3ec729 diff --git a/graphics/libgdiplus/patches/patch-src_gifcodec.c b/graphics/libgdiplus/patches/patch-src_gifcodec.c new file mode 100644 index 00000000000..3730aa1dba8 --- /dev/null +++ b/graphics/libgdiplus/patches/patch-src_gifcodec.c @@ -0,0 +1,140 @@ +$NetBSD: patch-src_gifcodec.c,v 1.1 2013/07/13 10:50:05 obache Exp $ + +* fixes build with giflib>=5 + +--- src/gifcodec.c.orig 2011-01-13 22:28:19.000000000 +0000 ++++ src/gifcodec.c +@@ -39,8 +39,12 @@ GUID gdip_gif_image_format_guid = {0xb96 + + #include "gifcodec.h" + +-/* giflib declares this incorrectly as EgifOpen */ ++/* giflib declares this incorrectly as EgifOpen up to 4.1.2 ++ GIF_LIB_VERSION is defined up to 4.1.6, and prototype is changed in 5.0, ++ so it is safe to use it as check condition */ ++#ifdef GIF_LIB_VERSION + extern GifFileType *EGifOpen(void *userData, OutputFunc writeFunc); ++#endif + + /* Data structure used for callback */ + typedef struct +@@ -245,7 +249,9 @@ DGifSlurpMono(GifFileType * GifFile, Sav + if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR) { + return (GIF_ERROR); + } ++#if GIFLIB_MAJOR < 5 + temp_save.Function = 0; ++#endif + } + break; + } +@@ -304,9 +310,17 @@ gdip_load_gif_image (void *stream, GpIma + loop_counter = FALSE; + + if (from_file) { ++#if GIFLIB_MAJOR >= 5 ++ gif = DGifOpen(stream, &gdip_gif_fileinputfunc, NULL); ++#else + gif = DGifOpen(stream, &gdip_gif_fileinputfunc); ++#endif + } else { ++#if GIFLIB_MAJOR >= 5 ++ gif = DGifOpen (stream, &gdip_gif_inputfunc, NULL); ++#else + gif = DGifOpen (stream, &gdip_gif_inputfunc); ++#endif + } + + if (gif == NULL) { +@@ -662,9 +676,17 @@ gdip_save_gif_image (void *stream, GpIma + } + + if (from_file) { ++#if GIFLIB_MAJOR >= 5 ++ fp = EGifOpenFileName (stream, 0, NULL); ++#else + fp = EGifOpenFileName (stream, 0); ++#endif + } else { ++#if GIFLIB_MAJOR >= 5 ++ fp = EGifOpen (stream, gdip_gif_outputfunc, NULL); ++#else + fp = EGifOpen (stream, gdip_gif_outputfunc); ++#endif + } + + if (!fp) { +@@ -703,7 +725,11 @@ gdip_save_gif_image (void *stream, GpIma + goto error; + } + ++#if GIFLIB_MAJOR >= 5 ++ cmap = GifMakeMapObject(cmap_size, 0); ++#else + cmap = MakeMapObject(cmap_size, 0); ++#endif + + pixbuf = GdipAlloc(pixbuf_size); + if (pixbuf == NULL) { +@@ -794,7 +820,11 @@ gdip_save_gif_image (void *stream, GpIma + pixbuf = pixbuf_org; + } else { + cmap_size = 256; ++#if GIFLIB_MAJOR >= 5 ++ cmap = GifMakeMapObject (cmap_size, 0); ++#else + cmap = MakeMapObject (cmap_size, 0); ++#endif + + red = GdipAlloc(pixbuf_size); + green = GdipAlloc(pixbuf_size); +@@ -825,13 +855,21 @@ gdip_save_gif_image (void *stream, GpIma + v += 4; + } + } ++#if GIFLIB_MAJOR >= 5 ++ if (GifQuantizeBuffer(bitmap_data->width, bitmap_data->height, &cmap_size, ++#else + if (QuantizeBuffer(bitmap_data->width, bitmap_data->height, &cmap_size, ++#endif + red, green, blue, pixbuf, cmap->Colors) == GIF_ERROR) { + goto error; + } + } + ++#if GIFLIB_MAJOR >= 5 ++ cmap->BitsPerPixel = GifBitSize (cmap_size); ++#else + cmap->BitsPerPixel = BitSize (cmap_size); ++#endif + cmap->ColorCount = 1 << cmap->BitsPerPixel; + + if ((frame == 0) && (k == 0)) { +@@ -849,8 +887,15 @@ gdip_save_gif_image (void *stream, GpIma + Buffer[0] = 1; + Buffer[1] = ptr[0]; + Buffer[2] = ptr[1]; ++#if GIFLIB_MAJOR >= 5 ++ EGifPutExtensionLeader(fp, APPLICATION_EXT_FUNC_CODE); ++ EGifPutExtensionBlock(fp, 11, "NETSCAPE2.0"); ++ EGifPutExtensionBlock(fp, 3, Buffer); ++ EGifPutExtensionTrailer(fp); ++#else + EGifPutExtensionFirst(fp, APPLICATION_EXT_FUNC_CODE, 11, "NETSCAPE2.0"); + EGifPutExtensionLast(fp, APPLICATION_EXT_FUNC_CODE, 3, Buffer); ++#endif + } + } + +@@ -902,7 +947,11 @@ gdip_save_gif_image (void *stream, GpIma + pixbuf += bitmap_data->width; + } + ++#if GIFLIB_MAJOR >= 5 ++ GifFreeMapObject (cmap); ++#else + FreeMapObject (cmap); ++#endif + if (red != NULL) { + GdipFree (red); + } |