aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2016-10-06 18:11:43 +0300
committerEli Zaretskii2016-10-06 18:11:43 +0300
commitd48369db9c97b6f2accf702e5bbe0bda11cb92a1 (patch)
tree73975d4d08fc4da05e2bbd2059467eb85909e0db
parent6e6c08815347a78008211613c9ddfa0acd7f0ef8 (diff)
downloademacs-d48369db9c97b6f2accf702e5bbe0bda11cb92a1.tar.gz
emacs-d48369db9c97b6f2accf702e5bbe0bda11cb92a1.zip
Fix compilation with MinGW runtime 3.22.2 and w32api 3.18.2
* nt/inc/ms-w32.h (_WIN32_WINNT) [!MINGW_W64]: Undefine before defining to avoid redefinition warnings. * nt/inc/sys/stat.h (_SYS_STAT_H, _INC_STAT_H): Define, to avoid inclusion of sys/stat.h from the system headers, which could then lead to compilation errors due to redefinition of 'struct stat' etc. This is needed because latest versions of MinGW runtime include sys/stat.h from wchar.h. * src/image.c (__MINGW_MAJOR_VERSION) [WINDOWSNT]: Temporarily redefine to 4 to avoid conflict between 2 definitions of MemoryBarrier. (Bug#24613)
-rw-r--r--nt/inc/ms-w32.h1
-rw-r--r--nt/inc/sys/stat.h8
-rw-r--r--src/image.c20
3 files changed, 29 insertions, 0 deletions
diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h
index 8e3a8c2c226..24076a31eeb 100644
--- a/nt/inc/ms-w32.h
+++ b/nt/inc/ms-w32.h
@@ -146,6 +146,7 @@ extern char *getenv ();
146 in its system headers, and is not really compatible with values 146 in its system headers, and is not really compatible with values
147 lower than 0x0500, so leave it alone. */ 147 lower than 0x0500, so leave it alone. */
148#ifndef MINGW_W64 148#ifndef MINGW_W64
149# undef _WIN32_WINNT
149# define _WIN32_WINNT 0x0400 150# define _WIN32_WINNT 0x0400
150#endif 151#endif
151 152
diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h
index 45bc2ea1e0c..ea14f075471 100644
--- a/nt/inc/sys/stat.h
+++ b/nt/inc/sys/stat.h
@@ -30,6 +30,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
30# define __MINGW_NOTHROW 30# define __MINGW_NOTHROW
31#endif 31#endif
32 32
33/* Prevent the MinGW stat.h header from being included, ever. */
34#ifndef _SYS_STAT_H
35# define _SYS_STAT_H
36#endif
37#ifndef _INC_STAT_H
38# define _INC_STAT_H
39#endif
40
33#include <sys/types.h> 41#include <sys/types.h>
34#include <time.h> 42#include <time.h>
35 43
diff --git a/src/image.c b/src/image.c
index c3c526d2525..9bd245585c6 100644
--- a/src/image.c
+++ b/src/image.c
@@ -9013,10 +9013,30 @@ svg_image_p (Lisp_Object object)
9013 return fmt[SVG_FILE].count + fmt[SVG_DATA].count == 1; 9013 return fmt[SVG_FILE].count + fmt[SVG_DATA].count == 1;
9014} 9014}
9015 9015
9016/* Some versions of glib's gatomic.h define MemoryBarrier, but MinGW
9017 w32api 3.18 and later has its own definition. The following gross
9018 hack avoids the clash. */
9019# ifdef WINDOWSNT
9020# if (__W32API_MAJOR_VERSION + (__W32API_MINOR_VERSION >= 18)) >= 4
9021# define W32_SAVE_MINGW_VERSION __MINGW_MAJOR_VERSION
9022# undef __MINGW_MAJOR_VERSION
9023# define __MINGW_MAJOR_VERSION 4
9024# endif
9025# endif
9026
9016# include <librsvg/rsvg.h> 9027# include <librsvg/rsvg.h>
9017 9028
9018# ifdef WINDOWSNT 9029# ifdef WINDOWSNT
9019 9030
9031/* Restore the original definition of __MINGW_MAJOR_VERSION. */
9032# ifdef W32_SAVE_MINGW_VERSION
9033# undef __MINGW_MAJOR_VERSION
9034# define __MINGW_MAJOR_VERSION W32_SAVE_MINGW_VERSION
9035# ifdef __MINGW_MAJOR_VERSION
9036# undef W32_SAVE_MINGW_VERSION
9037# endif
9038# endif
9039
9020/* SVG library functions. */ 9040/* SVG library functions. */
9021DEF_DLL_FN (RsvgHandle *, rsvg_handle_new, (void)); 9041DEF_DLL_FN (RsvgHandle *, rsvg_handle_new, (void));
9022DEF_DLL_FN (void, rsvg_handle_get_dimensions, 9042DEF_DLL_FN (void, rsvg_handle_get_dimensions,