From b436a8ae5ccb04f8cf893d882d52ab5efc713307 Mon Sep 17 00:00:00 2001 From: Fabian Freyer Date: Thu, 9 Jun 2016 00:50:35 +0000 Subject: [PATCH] gnulib: add getopt module Unconditionally use gnulib's getopt module. This is needed by the bhyve driver to provide a reentrant interface for getopt. Several gnulib headers rely on features.h being included by ctype.h to provide __GNUC_PREREQ, but on systems without glibc, this is not provided. In these cases __GNUC_PREREQ gets redefined to 0, which causes build errors from checks in src/internal.h. Therefore, define __GNUC_PREREQ as early as possible. config-post.h is probably the first header that is included, before any other headers. --- bootstrap.conf | 1 + config-post.h | 18 ++++++++++++++++++ m4/virt-driver-bhyve.m4 | 3 +++ po/POTFILES.in | 1 + 4 files changed, 23 insertions(+) diff --git a/bootstrap.conf b/bootstrap.conf index 0db6b62d5f..edea8c33b1 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -54,6 +54,7 @@ func getaddrinfo getcwd-lgpl gethostname +getopt-posix getpass getpeername getsockname diff --git a/config-post.h b/config-post.h index f43521bd34..dd691976b8 100644 --- a/config-post.h +++ b/config-post.h @@ -69,3 +69,21 @@ # undef WITH_SECDRIVER_APPARMOR # undef WITH_CAPNG #endif /* LIBVIRT_NSS */ + +/* + * Define __GNUC__ to a sane default if it isn't yet defined. + * This is done here so that it's included as early as possible; gnulib relies + * on this to be defined in features.h, which should be included from ctype.h. + * This doesn't happen on many non-glibc systems. + * When __GNUC__ is not defined, gnulib defines it to 0, which breaks things. + */ +#ifdef __GNUC__ +# ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +# endif +#endif diff --git a/m4/virt-driver-bhyve.m4 b/m4/virt-driver-bhyve.m4 index c65b15d72a..bbdd8b2f0f 100644 --- a/m4/virt-driver-bhyve.m4 +++ b/m4/virt-driver-bhyve.m4 @@ -52,6 +52,9 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_BHYVE],[ AM_CONDITIONAL([WITH_BHYVE], [test "$with_bhyve" = "yes"]) ]) +dnl Build with gnulib's getopt which contains a reentrant interface +AC_DEFUN([gl_REPLACE_GETOPT_ALWAYS], []) + AC_DEFUN([LIBVIRT_DRIVER_RESULT_BHYVE],[ AC_MSG_NOTICE([ Bhyve: $with_bhyve]) ]) diff --git a/po/POTFILES.in b/po/POTFILES.in index 0539366972..ca07582e19 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -8,6 +8,7 @@ daemon/remote.c daemon/remote_dispatch.h daemon/stream.c gnulib/lib/gai_strerror.c +gnulib/lib/getopt.c gnulib/lib/regcomp.c src/access/viraccessdriverpolkit.c src/access/viraccessmanager.c