On 8/8/19 8:08 AM, Eric Blake wrote:
Mingw includes a header that declares a struct typedef named
DATADIR,
pulled in when including <winsock2.h>; compilation fails if DATADIR
has already been defined as a macro expanding to a string prior to
that inclusion. Although the configmake module documents that it
should generally be included only after system headers, it is just as
easy to make configmake.h robust to this particular issue by including
the system header first if it exists.
* modules/configmake (Makefile.am): If the project uses
<winsock2.h>, include that header before defining DATADIR.
Reported by libvirt:
https://lists.gnu.org/archive/html/bug-gnulib/2019-07/msg00089.html
---
I'm pushing this under the gnulib maintenance rule, while working on
a further gnulib change to make configmake.h nicer on mingw.
Except I posted the wrong patch (the gnulib patch I'm still working on,
not the actual libvirt patch I pushed). That would be:
From 05fb5f5af29c0169243928a93bbdc48cc0e87e4d Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake(a)redhat.com>
Date: Thu, 8 Aug 2019 07:16:42 -0500
Subject: [PATCH] maint: Update to latest gnulib
Requires adjustments to use verify_expr() which replaces
verify_true(), and to disable the new syntax check
'sc_prohibit_gnu_make_extensions' since we require GNU make.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
src/util/viratomic.h | 18 +++++++++---------
.gnulib | 2 +-
cfg.mk | 1 +
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/util/viratomic.h b/src/util/viratomic.h
index 35800dafcd..9dfb77b992 100644
--- a/src/util/viratomic.h
+++ b/src/util/viratomic.h
@@ -157,58 +157,58 @@ VIR_STATIC unsigned int virAtomicIntXor(volatile
unsigned int *atomic,
# define virAtomicIntGet(atomic) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void)(0 ? *(atomic) ^ *(atomic) : 0); \
__sync_synchronize(); \
(int)*(atomic); \
}))
# define virAtomicIntSet(atomic, newval) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void)(0 ? *(atomic) ^ (newval) : 0); \
*(atomic) = (newval); \
__sync_synchronize(); \
}))
# define virAtomicIntInc(atomic) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void)(0 ? *(atomic) ^ *(atomic) : 0); \
__sync_add_and_fetch((atomic), 1); \
}))
# define virAtomicIntDecAndTest(atomic) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void)(0 ? *(atomic) ^ *(atomic) : 0); \
__sync_fetch_and_sub((atomic), 1) == 1; \
}))
# define virAtomicIntCompareExchange(atomic, oldval, newval) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void)(0 ? *(atomic) ^ (newval) ^ (oldval) : 0); \
(bool)__sync_bool_compare_and_swap((atomic), \
(oldval), (newval)); \
}))
# define virAtomicIntAdd(atomic, val) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void)(0 ? *(atomic) ^ (val) : 0); \
(int) __sync_fetch_and_add((atomic), (val)); \
}))
# define virAtomicIntAnd(atomic, val) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void) (0 ? *(atomic) ^ (val) : 0); \
(unsigned int) __sync_fetch_and_and((atomic), (val)); \
}))
# define virAtomicIntOr(atomic, val) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void) (0 ? *(atomic) ^ (val) : 0); \
(unsigned int) __sync_fetch_and_or((atomic), (val)); \
}))
# define virAtomicIntXor(atomic, val) \
(__extension__ ({ \
- (void)verify_true(sizeof(*(atomic)) == sizeof(int)); \
+ (void)verify_expr(sizeof(*(atomic)) == sizeof(int), 0); \
(void) (0 ? *(atomic) ^ (val) : 0); \
(unsigned int) __sync_fetch_and_xor((atomic), (val)); \
}))
diff --git a/.gnulib b/.gnulib
index 8089c00979..c8e2eee548 160000
--- a/.gnulib
+++ b/.gnulib
@@ -1 +1 @@
-Subproject commit 8089c00979a5b089cff592c6b91420e595657167
+Subproject commit c8e2eee548e6e81f3fccd31cf9f9a825db7fc8a8
diff --git a/cfg.mk b/cfg.mk
index cc1f79a051..85b5a0a5a2 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -59,6 +59,7 @@ local-checks-to-skip = \
sc_obsolete_symbols \
sc_prohibit_S_IS_definition \
sc_prohibit_atoi_atof \
+ sc_prohibit_gnu_make_extensions \
sc_prohibit_hash_without_use \
sc_prohibit_jm_in_m4 \
sc_prohibit_quote_without_use \
--
2.20.1
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org