[libvirt] [PATCH] build: fix mingw ssize_t, syntax check

We are so close to a release that we don't want to pull in a gnulib submodule update and risk regressions, since there has been a lot of other gnulib churn upstream. However, there are a couple of gnulib issues that are worth fixing in isolation, by applying local patches to gnulib. There was an upstream gnulib bug in maint.mk that rendered most of our syntax checks ineffective (and fixing it flushed out a minor bug in our code): https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00194.html There is still an upstream bug where gnulib uses the wrong type for ssize_t on mingw; we need the fix now even though it has not yet been accepted into gnulib: https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00188.html * gnulib/local/top/maint.mk.diff: Pick up upstream gnulib maint.mk. * gnulib/local/m4/ssize_t.m4.diff: Work around gnulib bug. * src/libvirt.c: Remove unused header. --- Yes, I know reading a diff of a diff is hard. Any objections to this? I'd like to apply it before RC2 is built. I am not set up to easily test if the ssize_t fix works on mingw. I _did_ test it on Linux, including where I primed the configure cache to intentionally treat ssize_t as missing, so I'm confident the replacement mechanism works; I just don't know if it will silence the warnings that Dan reported here: https://www.redhat.com/archives/libvir-list/2012-March/msg01273.html And we still need _part_ of that patch (the conversion from fprintf to asprintf, in order to support %zd in the first place). gnulib/local/m4/ssize_t.m4.diff | 34 ++++++++++++++++++++++++++++++++++ gnulib/local/top/maint.mk.diff | 32 ++++++++++++++++++++++++++++++++ src/libvirt.c | 2 -- 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 gnulib/local/m4/ssize_t.m4.diff create mode 100644 gnulib/local/top/maint.mk.diff diff --git a/gnulib/local/m4/ssize_t.m4.diff b/gnulib/local/m4/ssize_t.m4.diff new file mode 100644 index 0000000..d0ae286 --- /dev/null +++ b/gnulib/local/m4/ssize_t.m4.diff @@ -0,0 +1,34 @@ +diff --git i/m4/ssize_t.m4 w/m4/ssize_t.m4 +index 209d64c..5ea72a1 100644 +--- i/m4/ssize_t.m4 ++++ w/m4/ssize_t.m4 +@@ -1,4 +1,4 @@ +-# ssize_t.m4 serial 5 (gettext-0.18.2) ++# ssize_t.m4 serial 6 (gettext-0.18.2) + dnl Copyright (C) 2001-2003, 2006, 2010-2012 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -17,7 +17,21 @@ AC_DEFUN([gt_TYPE_SSIZE_T], + return !x;]])], + [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) + if test $gt_cv_ssize_t = no; then +- AC_DEFINE([ssize_t], [int], +- [Define as a signed type of the same size as size_t.]) ++ AC_CACHE_CHECK([for rank of size_t], [gt_cv_size_t_rank], ++ [AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM( ++ [[#include <sys/types.h> ++ #ifdef __cplusplus ++ extern "C" { ++ #endif ++ int foo(unsigned long bar); ++ int foo(size_t bar); ++ #ifdef __cplusplus ++ } ++ #endif ++ ]])], ++ [gt_cv_size_t_rank=long], [gt_cv_size_t_rank=int])]) ++ AC_DEFINE_UNQUOTED([ssize_t], [$gt_cv_size_t_rank], ++ [Define as a signed type of the same size and rank as size_t.]) + fi + ]) diff --git a/gnulib/local/top/maint.mk.diff b/gnulib/local/top/maint.mk.diff new file mode 100644 index 0000000..85e97ae --- /dev/null +++ b/gnulib/local/top/maint.mk.diff @@ -0,0 +1,32 @@ +diff --git i/top/maint.mk w/top/maint.mk +index 4cbd5f4..2228a37 100644 +--- i/top/maint.mk ++++ w/top/maint.mk +@@ -279,7 +279,7 @@ define _sc_search_regexp + if test -n "$$files"; then \ + if test -n "$$prohibit"; then \ + grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \ +- | grep -vE "$${exclude-^$$}" \ ++ | grep -vE "$${exclude:-^$$}" \ + && { msg="$$halt" $(_sc_say_and_exit) } || :; \ + else \ + grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \ +@@ -455,7 +455,8 @@ sc_prohibit_quotearg_without_use: + + # Don't include quote.h unless you use one of its functions. + sc_prohibit_quote_without_use: +- @h='quote.h' re='\<quote(_n)? *\(' $(_sc_header_without_use) ++ @h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \ ++ $(_sc_header_without_use) + + # Don't include this header unless you use one of its functions. + sc_prohibit_long_options_without_use: +@@ -1332,7 +1333,7 @@ alpha beta stable: $(local-check) writable-files $(submodule-checks) + $(MAKE) vc-diff-check + $(MAKE) news-check + $(MAKE) distcheck +- $(MAKE) dist XZ_OPT=-9ev ++ $(MAKE) dist + $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ + $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ + diff --git a/src/libvirt.c b/src/libvirt.c index 8bca16d..16d1fd5 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -45,8 +45,6 @@ #include "virrandom.h" #include "viruri.h" -#include <ctype.h> - #ifndef WITH_DRIVER_MODULES # ifdef WITH_TEST # include "test/test_driver.h" -- 1.7.1

On Fri, Mar 30, 2012 at 10:35:41AM -0600, Eric Blake wrote:
We are so close to a release that we don't want to pull in a gnulib submodule update and risk regressions, since there has been a lot of other gnulib churn upstream. However, there are a couple of gnulib issues that are worth fixing in isolation, by applying local patches to gnulib.
There was an upstream gnulib bug in maint.mk that rendered most of our syntax checks ineffective (and fixing it flushed out a minor bug in our code): https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00194.html
There is still an upstream bug where gnulib uses the wrong type for ssize_t on mingw; we need the fix now even though it has not yet been accepted into gnulib: https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00188.html
* gnulib/local/top/maint.mk.diff: Pick up upstream gnulib maint.mk. * gnulib/local/m4/ssize_t.m4.diff: Work around gnulib bug. * src/libvirt.c: Remove unused header. ---
Yes, I know reading a diff of a diff is hard.
Any objections to this? I'd like to apply it before RC2 is built.
I am not set up to easily test if the ssize_t fix works on mingw. I _did_ test it on Linux, including where I primed the configure cache to intentionally treat ssize_t as missing, so I'm confident the replacement mechanism works; I just don't know if it will silence the warnings that Dan reported here: https://www.redhat.com/archives/libvir-list/2012-March/msg01273.html
And we still need _part_ of that patch (the conversion from fprintf to asprintf, in order to support %zd in the first place).
gnulib/local/m4/ssize_t.m4.diff | 34 ++++++++++++++++++++++++++++++++++ gnulib/local/top/maint.mk.diff | 32 ++++++++++++++++++++++++++++++++ src/libvirt.c | 2 -- 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 gnulib/local/m4/ssize_t.m4.diff create mode 100644 gnulib/local/top/maint.mk.diff
diff --git a/gnulib/local/m4/ssize_t.m4.diff b/gnulib/local/m4/ssize_t.m4.diff new file mode 100644 index 0000000..d0ae286 --- /dev/null +++ b/gnulib/local/m4/ssize_t.m4.diff @@ -0,0 +1,34 @@ +diff --git i/m4/ssize_t.m4 w/m4/ssize_t.m4 +index 209d64c..5ea72a1 100644 +--- i/m4/ssize_t.m4 ++++ w/m4/ssize_t.m4 +@@ -1,4 +1,4 @@ +-# ssize_t.m4 serial 5 (gettext-0.18.2) ++# ssize_t.m4 serial 6 (gettext-0.18.2) + dnl Copyright (C) 2001-2003, 2006, 2010-2012 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -17,7 +17,21 @@ AC_DEFUN([gt_TYPE_SSIZE_T], + return !x;]])], + [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) + if test $gt_cv_ssize_t = no; then +- AC_DEFINE([ssize_t], [int], +- [Define as a signed type of the same size as size_t.]) ++ AC_CACHE_CHECK([for rank of size_t], [gt_cv_size_t_rank], ++ [AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM( ++ [[#include <sys/types.h> ++ #ifdef __cplusplus ++ extern "C" { ++ #endif ++ int foo(unsigned long bar); ++ int foo(size_t bar); ++ #ifdef __cplusplus ++ } ++ #endif ++ ]])], ++ [gt_cv_size_t_rank=long], [gt_cv_size_t_rank=int])]) ++ AC_DEFINE_UNQUOTED([ssize_t], [$gt_cv_size_t_rank], ++ [Define as a signed type of the same size and rank as size_t.]) + fi + ]) diff --git a/gnulib/local/top/maint.mk.diff b/gnulib/local/top/maint.mk.diff new file mode 100644 index 0000000..85e97ae --- /dev/null +++ b/gnulib/local/top/maint.mk.diff @@ -0,0 +1,32 @@ +diff --git i/top/maint.mk w/top/maint.mk +index 4cbd5f4..2228a37 100644 +--- i/top/maint.mk ++++ w/top/maint.mk +@@ -279,7 +279,7 @@ define _sc_search_regexp + if test -n "$$files"; then \ + if test -n "$$prohibit"; then \ + grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \ +- | grep -vE "$${exclude-^$$}" \ ++ | grep -vE "$${exclude:-^$$}" \ + && { msg="$$halt" $(_sc_say_and_exit) } || :; \ + else \ + grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \ +@@ -455,7 +455,8 @@ sc_prohibit_quotearg_without_use: + + # Don't include quote.h unless you use one of its functions. + sc_prohibit_quote_without_use: +- @h='quote.h' re='\<quote(_n)? *\(' $(_sc_header_without_use) ++ @h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \ ++ $(_sc_header_without_use) + + # Don't include this header unless you use one of its functions. + sc_prohibit_long_options_without_use: +@@ -1332,7 +1333,7 @@ alpha beta stable: $(local-check) writable-files $(submodule-checks) + $(MAKE) vc-diff-check + $(MAKE) news-check + $(MAKE) distcheck +- $(MAKE) dist XZ_OPT=-9ev ++ $(MAKE) dist + $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ + $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ + diff --git a/src/libvirt.c b/src/libvirt.c index 8bca16d..16d1fd5 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -45,8 +45,6 @@ #include "virrandom.h" #include "viruri.h"
-#include <ctype.h> - #ifndef WITH_DRIVER_MODULES # ifdef WITH_TEST # include "test/test_driver.h"
ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 03/30/2012 10:54 AM, Daniel P. Berrange wrote:
On Fri, Mar 30, 2012 at 10:35:41AM -0600, Eric Blake wrote:
We are so close to a release that we don't want to pull in a gnulib submodule update and risk regressions, since there has been a lot of other gnulib churn upstream. However, there are a couple of gnulib issues that are worth fixing in isolation, by applying local patches to gnulib.
+ $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ + $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ + diff --git a/src/libvirt.c b/src/libvirt.c
This diff added a trailing blank line, as well as some space-tab indentation.
ACK
I made an additional tweak to cfg.mk to avoid syntax-check failures, as well as exempting gnulib/local/*/*.diff from whitespace checking, then pushed. I suspect we will revert the local diffs when we next update the .gnulib submodule, but that will be post-0.9.11. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
participants (2)
-
Daniel P. Berrange
-
Eric Blake