[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-25 34b6df1: Fix compilation with MinGW runtime 3.22.
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] emacs-25 34b6df1: Fix compilation with MinGW runtime 3.22.2 and w32api 3.18.2 |
Date: |
Thu, 6 Oct 2016 15:09:55 +0000 (UTC) |
branch: emacs-25
commit 34b6df19a4dafe0227ab663c971079e68e17f393
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
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)
Do not merge to master!
---
nt/inc/ms-w32.h | 1 +
nt/inc/sys/stat.h | 8 ++++++++
src/image.c | 17 +++++++++++++++++
3 files changed, 26 insertions(+)
diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h
index d153433..b4eb562 100644
--- a/nt/inc/ms-w32.h
+++ b/nt/inc/ms-w32.h
@@ -146,6 +146,7 @@ extern char *getenv ();
in its system headers, and is not really compatible with values
lower than 0x0500, so leave it alone. */
#ifndef MINGW_W64
+# undef _WIN32_WINNT
# define _WIN32_WINNT 0x0400
#endif
diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h
index 45bc2ea..ea14f07 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/>. */
# define __MINGW_NOTHROW
#endif
+/* Prevent the MinGW stat.h header from being included, ever. */
+#ifndef _SYS_STAT_H
+# define _SYS_STAT_H
+#endif
+#ifndef _INC_STAT_H
+# define _INC_STAT_H
+#endif
+
#include <sys/types.h>
#include <time.h>
diff --git a/src/image.c b/src/image.c
index a85d514..78539d9 100644
--- a/src/image.c
+++ b/src/image.c
@@ -8994,10 +8994,27 @@ svg_image_p (Lisp_Object object)
return fmt[SVG_FILE].count + fmt[SVG_DATA].count == 1;
}
+/* Some versions of glib's gatomic.h define MemoryBarrier, but MinGW
+ w32api 3.18 and later has its own definition. The following gross
+ hack avoids the clash. */
+# ifdef WINDOWSNT
+# if (__W32API_MAJOR_VERSION + (__W32API_MINOR_VERSION >= 18)) >= 4
+# define W32_SAVE_MINGW_VERSION __MINGW_MAJOR_VERSION
+# undef __MINGW_MAJOR_VERSION
+# define __MINGW_MAJOR_VERSION 4
+# endif
+# endif
+
# include <librsvg/rsvg.h>
# ifdef WINDOWSNT
+# ifdef W32_SAVE_MINGW_VERSION
+# undef __MINGW_MAJOR_VERSION
+# define __MINGW_MAJOR_VERSION W32_SAVE_MINGW_VERSION
+# undef W32_SAVE_MINGW_VERSION
+# endif
+
/* SVG library functions. */
DEF_DLL_FN (RsvgHandle *, rsvg_handle_new, (void));
DEF_DLL_FN (void, rsvg_handle_get_dimensions,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-25 34b6df1: Fix compilation with MinGW runtime 3.22.2 and w32api 3.18.2,
Eli Zaretskii <=