From 93aa5c811f28ab0d3f7a8d0a37971efd35dfbcab Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Mon, 8 Oct 2012 02:26:10 -0800 Subject: [PATCH] Improve fix for jpeglib build break --- src/ChangeLog | 5 +++++ src/image.c | 25 +++++++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 250024ba6c5..f9a47ebb4b6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-10-08 Daniel Colascione + + * image.c: Permanent fix for JPEG compilation issue --- limit + jpeglib `boolean' redefinition to Cygwin builds. + 2012-10-08 Eli Zaretskii * image.c (CHECK_LIB_AVAILABLE): Remove, no longer used. diff --git a/src/image.c b/src/image.c index 790ede4c35e..6058bdf444c 100644 --- a/src/image.c +++ b/src/image.c @@ -6061,21 +6061,26 @@ jpeg_image_p (Lisp_Object object) #define __WIN32__ 1 #endif -#if 0 /* FIXME */ -/* Work around conflict between jpeg boolean and rpcndr.h - under Windows. */ +/* rpcndr.h (via windows.h) and jpeglib.h both define boolean types. + Some versions of jpeglib try to detect whether rpcndr.h is loaded, + using the Windows boolean type instead of the jpeglib boolean type + if so. Cygwin jpeglib, however, doesn't try to detect whether its + headers are included along with windows.h, so under Cygwin, jpeglib + attempts to define a conflicting boolean type. Worse, forcing + Cygwin jpeglib headers to use the Windows boolean type doesn't work + because it created an ABI incompatibility between the + already-compiled jpeg library and the header interface definition. + + The best we can do is to define jpeglib's boolean type to a + different name. This name, jpeg_boolean, remains in effect through + the rest of image.c. +*/ +#if defined (CYGWIN) && defined (HAVE_NTGUI) #define boolean jpeg_boolean #endif #include #include -/* Don't undefine boolean --- use the JPEG boolean - through the rest of the file. */ - -#ifdef HAVE_STLIB_H_1 -#define HAVE_STDLIB_H 1 -#endif - #ifdef WINDOWSNT /* JPEG library details. */ -- 2.39.2