svn commit: r375625 - head/x11-toolkits/libgdiplus/files

Antoine Brodin antoine at FreeBSD.org
Fri Dec 26 14:28:41 UTC 2014


Author: antoine
Date: Fri Dec 26 14:28:39 2014
New Revision: 375625
URL: https://svnweb.freebsd.org/changeset/ports/375625
QAT: https://qat.redports.org/buildarchive/r375625/

Log:
  Allow building with either giflib 4.2 or 5.0
  
  Obtained from:	OpenBSD ports

Added:
  head/x11-toolkits/libgdiplus/files/
  head/x11-toolkits/libgdiplus/files/patch-src_gifcodec.c   (contents, props changed)

Added: head/x11-toolkits/libgdiplus/files/patch-src_gifcodec.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-toolkits/libgdiplus/files/patch-src_gifcodec.c	Fri Dec 26 14:28:39 2014	(r375625)
@@ -0,0 +1,177 @@
+$OpenBSD: patch-src_gifcodec_c,v 1.2 2014/07/18 16:00:28 ajacoutot Exp $
+
+giflib 5.0+
+http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/pkgsrc/graphics/libgdiplus/patches/patch-src_gifcodec.c?rev=1.2
+
+--- src/gifcodec.c.orig	Fri Dec  2 18:23:12 2011
++++ src/gifcodec.c	Fri Jul 18 15:30:15 2014
+@@ -39,8 +39,12 @@ GUID gdip_gif_image_format_guid = {0xb96b3cb0U, 0x0728
+ 
+ #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
+@@ -129,7 +133,11 @@ AddExtensionBlockMono(SavedImage *New, int Len, BYTE E
+ 
+ 	if (ExtData) {
+ 		memcpy(ep->Bytes, ExtData, Len);
++#if GIFLIB_MAJOR >= 5
++		ep->Function = New->ExtensionBlocks[New->ExtensionBlockCount++].Function;
++#else
+ 		ep->Function = New->Function;
++#endif
+ 	}
+ 
+ 	return (GIF_OK);
+@@ -232,7 +240,11 @@ DGifSlurpMono(GifFileType * GifFile, SavedImage *Trail
+ 			}
+ 
+ 			case EXTENSION_RECORD_TYPE: {
++#if GIFLIB_MAJOR >= 5
++				if (DGifGetExtension(GifFile, &temp_save.ExtensionBlocks[temp_save.ExtensionBlockCount].Function, &ExtData) == GIF_ERROR) {
++#else
+ 				if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) == GIF_ERROR) {
++#endif
+ 					return (GIF_ERROR);
+ 				}
+ 
+@@ -245,7 +257,9 @@ DGifSlurpMono(GifFileType * GifFile, SavedImage *Trail
+ 					if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR) {
+ 						return (GIF_ERROR);
+ 					}
++#if GIFLIB_MAJOR < 5
+ 					temp_save.Function = 0;
++#endif
+ 				}
+ 				break;
+ 			}
+@@ -304,9 +318,17 @@ gdip_load_gif_image (void *stream, GpImage **image, BO
+ 	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) {
+@@ -661,9 +683,17 @@ gdip_save_gif_image (void *stream, GpImage *image, BOO
+ 	}
+ 
+ 	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) {
+@@ -702,7 +732,11 @@ gdip_save_gif_image (void *stream, GpImage *image, BOO
+ 					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) {
+@@ -793,7 +827,11 @@ gdip_save_gif_image (void *stream, GpImage *image, BOO
+ 				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);
+@@ -824,13 +862,21 @@ gdip_save_gif_image (void *stream, GpImage *image, BOO
+ 						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)) {
+@@ -848,8 +894,15 @@ gdip_save_gif_image (void *stream, GpImage *image, BOO
+ 						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
+ 					}
+ 				}
+ 
+@@ -901,7 +954,11 @@ gdip_save_gif_image (void *stream, GpImage *image, BOO
+ 				pixbuf += bitmap_data->width;
+ 			}
+ 
++#if GIFLIB_MAJOR >= 5
++			GifFreeMapObject (cmap);
++#else
+ 			FreeMapObject (cmap);
++#endif
+ 			if (red != NULL) {
+ 				GdipFree (red);
+ 			}
+@@ -929,7 +986,11 @@ gdip_save_gif_image (void *stream, GpImage *image, BOO
+ 
+ error:
+ 	if (cmap != NULL) {
++#if GIFLIB_MAJOR >= 5
++		GifFreeMapObject (cmap);
++#else
+ 		FreeMapObject (cmap);
++#endif
+ 	}
+ 
+ 	if (red != NULL) {


More information about the svn-ports-head mailing list