Subject: bug#15531: closed (Re: bug#15531: Emacs configure fails with gif 5.0)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 10 Oct 2013 00:41:02 +0000

Your bug report

#15531: Emacs configure fails with gif 5.0

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
15531: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15531
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#15531: Emacs configure fails with gif 5.0
From: Glenn Morris <[email-masked]>
To: [email-masked]
Date: Wed, 09 Oct 2013 20:40:45 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 24.4

Thank you; applied.

We'll need a copyright assignment to accept any more code from you.
If you think you might contribute more in future, let me know off-list,
and I can send you a form to get started.

Subject: Emacs configure fails with gif 5.0
From: Barry Fishman <[email-masked]>
To: [email-masked]
Date: Sat, 05 Oct 2013 11:27:53 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Package: emacs
Version: 24.3.50

The configure script fails to recognize the gif_lib.h header file for
gif 5.0 and so prints an error that git support can not be found.

The gif_lib.h header file has been reorganized for gif 5.0.  There is no
longer a EGifPutExtensionLast function.  However there is a new
GifMakeMapObject I used in my patch.  A better way would probably be to
look at the new GIFLIB_MAJOR define now in gif_lib.h.

I have included a patch, but I do not have many OS/platforms that I
can check.  I am far from understanding autoconfig, but my attempt at a
fix (git patch) is included below:

diff --git a/configure.ac b/configure.ac
index 53426b6..0f05d8e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3109,8 +3109,9 @@ elif test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
         || test "${HAVE_W32}" = "yes"; then
   AC_CHECK_HEADER(gif_lib.h,
 # EGifPutExtensionLast only exists from version libungif-4.1.0b1.
-# Earlier versions can crash Emacs.
-    [AC_CHECK_LIB(gif, EGifPutExtensionLast, HAVE_GIF=yes, HAVE_GIF=maybe)])
+# Earlier versions can crash Emacs, but version 5.0 removes EGifPutExtensionLast.
+    [AC_CHECK_LIB(gif, GifMakeMapObject, HAVE_GIF=yes,
+        [AC_CHECK_LIB(gif, EGifPutExtensionLast, HAVE_GIF=yes, HAVE_GIF=maybe)])])
 
   if test "$HAVE_GIF" = yes; then
     LIBGIF=-lgif
diff --git a/src/image.c b/src/image.c
index e429830..c414f5b 100644
--- a/src/image.c
+++ b/src/image.c
@@ -7219,14 +7219,22 @@ gif_image_p (Lisp_Object object)
 
 #endif /* HAVE_NTGUI */
 
+#ifndef GIFLIB_MAJOR
+#define GIFLIB_MAJOR 0
+#endif
 
 #ifdef WINDOWSNT
 
 /* GIF library details.  */
 DEF_IMGLIB_FN (int, DGifCloseFile, (GifFileType *));
 DEF_IMGLIB_FN (int, DGifSlurp, (GifFileType *));
+#if GIFLIB_MAJOR < 5
 DEF_IMGLIB_FN (GifFileType *, DGifOpen, (void *, InputFunc));
 DEF_IMGLIB_FN (GifFileType *, DGifOpenFileName, (const char *));
+#else
+DEF_IMGLIB_FN (GifFileType *, DGifOpen, (void *, InputFunc, int *));
+DEF_IMGLIB_FN (GifFileType *, DGifOpenFileName, (const char *, int *));
+#endif
 
 static bool
 init_gif_functions (void)
@@ -7316,7 +7324,11 @@ gif_load (struct frame *f, struct image *img)
 	}
 
       /* Open the GIF file.  */
+#if GIFLIB_MAJOR < 5
       gif = fn_DGifOpenFileName (SSDATA (file));
+#else
+      gif = fn_DGifOpenFileName (SSDATA (file), NULL);
+#endif
       if (gif == NULL)
 	{
 	  image_error ("Cannot open `%s'", file, Qnil);
@@ -7337,7 +7349,11 @@ gif_load (struct frame *f, struct image *img)
       memsrc.len = SBYTES (specified_data);
       memsrc.index = 0;
 
+#if GIFLIB_MAJOR < 5
       gif = fn_DGifOpen (&memsrc, gif_read_from_memory);
+#else
+      gif = fn_DGifOpen (&memsrc, gif_read_from_memory, NULL);
+#endif
       if (!gif)
 	{
 	  image_error ("Cannot open memory source `%s'", img->spec, Qnil);

-- 
Barry Fishman