diff --git a/configure.ac b/configure.ac index 2dcb17eb7..f5303a0a2 100644 --- a/configure.ac +++ b/configure.ac @@ -96,167 +96,8 @@ dnl Check for external programs required to either build or run dnl libguestfs. m4_include([m4/guestfs_progs.m4]) -dnl Define the host CPU architecture (defines 'host_cpu') -AC_CANONICAL_HOST - -dnl Check for basic C environment. -AC_PROG_CC_STDC -AC_PROG_INSTALL -AC_PROG_CPP - -AC_ARG_ENABLE([werror], - [AS_HELP_STRING([--enable-werror], - [turn GCC warnings into errors (for developers)])], - [case $enableval in - yes|no) ;; - *) AC_MSG_ERROR([bad value $enableval for werror option]) ;; - esac - gl_gcc_werror=$enableval], - [gl_gcc_werror=no] -) - -if test "$gl_gcc_werror" = yes; then - gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) - AC_SUBST([WERROR_CFLAGS]) -fi - -dnl This, $nw, is the list of warnings we disable. -nw= -nw="$nw -Waggregate-return" # anachronistic -nw="$nw -Wc++-compat" # We don't care about C++ compilers -nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib -nw="$nw -Wtraditional" # Warns on #elif which we use often -nw="$nw -Wcast-qual" # Too many warnings for now -nw="$nw -Wconversion" # Too many warnings for now -nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings -nw="$nw -Wsign-conversion" # Not an error -nw="$nw -Wtraditional-conversion" # Don't care about pre-ANSI compilers -nw="$nw -Wpadded" # Our structs are not padded -nw="$nw -Wvla" # two warnings in mount.c -dnl things I might fix soon: -nw="$nw -Wmissing-format-attribute" # daemon.h's asprintf_nowarn -nw="$nw -Winline" # daemon.h's asprintf_nowarn -nw="$nw -Wshadow" # numerous, plus we're not unanimous -nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization - # was not possible, safe to ignore -nw="$nw -Wpacked" # Allow attribute((packed)) on structs -nw="$nw -Wlong-long" # Allow long long since it's required - # by Python, Ruby and xstrtoll. -nw="$nw -Wsuggest-attribute=pure" # Don't suggest pure functions. -nw="$nw -Wsuggest-attribute=const" # Don't suggest const functions. -nw="$nw -Wunsuffixed-float-constants" # Don't care about these. -nw="$nw -Wswitch-default" # This warning is actively dangerous. -nw="$nw -Woverlength-strings" # Who cares about stupid ISO C99 limit. - -gl_MANYWARN_ALL_GCC([ws]) -gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw]) -for w in $ws; do - gl_WARN_ADD([$w]) -done - -dnl Normally we disable warnings in $nw above. However $nw only -dnl filters out exact matching warning strings from a list inside -dnl gnulib (see m4/manywarnings.m4). So we need to explicitly list a -dnl few disabled warnings below. - -dnl Unused parameters are not a bug. -gl_WARN_ADD([-Wno-unused-parameter]) - -dnl Missing field initializers is not a bug in C. -gl_WARN_ADD([-Wno-missing-field-initializers]) - -dnl Display the name of the warning option with the warning. -gl_WARN_ADD([-fdiagnostics-show-option]) - -dnl Now some warnings we want to enable and/or customize ... - -dnl Warn about large stack allocations. 10000 happens to be the -dnl same size as Coverity warns about. -gl_WARN_ADD([-Wframe-larger-than=10000]) - -AC_SUBST([WARN_CFLAGS]) - -AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) -AC_DEFINE([GNULIB_PORTCHECK], [1], [Enable some gnulib portability checks.]) -AH_VERBATIM([FORTIFY_SOURCE],[ -/* Enable compile-time and run-time bounds-checking, and some warnings. */ -#if __OPTIMIZE__ && (! defined (_FORTIFY_SOURCE) || _FORTIFY_SOURCE < 2) -# undef _FORTIFY_SOURCE -# define _FORTIFY_SOURCE 2 -#endif]) - -AC_C_PROTOTYPES -test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant]) - -AM_PROG_CC_C_O - -# Provide a global place to set CFLAGS. (Note that setting AM_CFLAGS -# is no use because it doesn't override target_CFLAGS). -#--- -# Kill -fstrict-overflow which is a license for the C compiler to make -# dubious and often unsafe optimizations, in a time-wasting attempt to -# deal with CPU architectures that do not exist. -CFLAGS="$CFLAGS -fno-strict-overflow -Wno-strict-overflow" - -dnl Work out how to specify the linker script to the linker. -VERSION_SCRIPT_FLAGS=-Wl,--version-script= -`/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \ - VERSION_SCRIPT_FLAGS="-Wl,-M -Wl," -AC_SUBST(VERSION_SCRIPT_FLAGS) - -dnl Use -fvisibility=hidden by default in the library. -dnl http://gcc.gnu.org/wiki/Visibility -AS_IF([test -n "$GCC"], - [AC_SUBST([GCC_VISIBILITY_HIDDEN], [-fvisibility=hidden])], - [AC_SUBST([GCC_VISIBILITY_HIDDEN], [:])]) - -dnl Check support for 64 bit file offsets. -AC_SYS_LARGEFILE - -dnl Check sizeof long. -AC_CHECK_SIZEOF([long]) - -dnl Check if __attribute__((cleanup(...))) works. -dnl XXX It would be nice to use AC_COMPILE_IFELSE here, but gcc just -dnl emits a warning for attributes that it doesn't understand. -AC_MSG_CHECKING([if __attribute__((cleanup(...))) works with this compiler]) -AC_RUN_IFELSE([ -AC_LANG_SOURCE([[ -#include -#include - -void -freep (void *ptr) -{ - exit (EXIT_SUCCESS); -} - -void -test (void) -{ - __attribute__((cleanup(freep))) char *ptr = malloc (100); -} - -int -main (int argc, char *argv[]) -{ - test (); - exit (EXIT_FAILURE); -} -]]) - ],[ - AC_MSG_RESULT([yes]) - AC_DEFINE([HAVE_ATTRIBUTE_CLEANUP],[1],[Define to 1 if '__attribute__((cleanup(...)))' works with this compiler.]) - ],[ - AC_MSG_WARN( -['__attribute__((cleanup(...)))' does not work. - -You may not be using a sufficiently recent version of GCC or CLANG, or -you may be using a C compiler which does not support this attribute, -or the configure test may be wrong. - -The code will still compile, but is likely to leak memory and other -resources when it runs.])]) +dnl The C compiler environment. +m4_include([m4/guestfs_c.m4]) dnl Check if dirent (readdir) supports d_type member. AC_STRUCT_DIRENT_D_TYPE @@ -840,15 +681,6 @@ dnl For search paths. AC_DEFINE_UNQUOTED([PATH_SEPARATOR],["$PATH_SEPARATOR"], [Character that separates path elements in search paths]) -AC_MSG_CHECKING([if we should run the GNUlib tests]) -AC_ARG_ENABLE([gnulib-tests], - [AS_HELP_STRING([--disable-gnulib-tests], - [disable running GNU Portability library tests @<:@default=yes@:>@])], - [ENABLE_GNULIB_TESTS="$enableval"], - [ENABLE_GNULIB_TESTS=yes]) -AM_CONDITIONAL([ENABLE_GNULIB_TESTS],[test "x$ENABLE_GNULIB_TESTS" = "xyes"]) -AC_MSG_RESULT([$ENABLE_GNULIB_TESTS]) - dnl Library versioning. MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR` AC_SUBST(MAX_PROC_NR) diff --git a/m4/guestfs_c.m4 b/m4/guestfs_c.m4 new file mode 100644 index 000000000..e91446ff4 --- /dev/null +++ b/m4/guestfs_c.m4 @@ -0,0 +1,189 @@ +# libguestfs +# Copyright (C) 2009-2015 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +dnl The C compiler environment. +dnl Define the host CPU architecture (defines 'host_cpu') +AC_CANONICAL_HOST + +dnl Check for basic C environment. +AC_PROG_CC_STDC +AC_PROG_INSTALL +AC_PROG_CPP + +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--enable-werror], + [turn GCC warnings into errors (for developers)])], + [case $enableval in + yes|no) ;; + *) AC_MSG_ERROR([bad value $enableval for werror option]) ;; + esac + gl_gcc_werror=$enableval], + [gl_gcc_werror=no] +) + +if test "$gl_gcc_werror" = yes; then + gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) + AC_SUBST([WERROR_CFLAGS]) +fi + +dnl This, $nw, is the list of warnings we disable. +nw= +nw="$nw -Waggregate-return" # anachronistic +nw="$nw -Wc++-compat" # We don't care about C++ compilers +nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib +nw="$nw -Wtraditional" # Warns on #elif which we use often +nw="$nw -Wcast-qual" # Too many warnings for now +nw="$nw -Wconversion" # Too many warnings for now +nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings +nw="$nw -Wsign-conversion" # Not an error +nw="$nw -Wtraditional-conversion" # Don't care about pre-ANSI compilers +nw="$nw -Wpadded" # Our structs are not padded +nw="$nw -Wvla" # two warnings in mount.c +dnl things I might fix soon: +nw="$nw -Wmissing-format-attribute" # daemon.h's asprintf_nowarn +nw="$nw -Winline" # daemon.h's asprintf_nowarn +nw="$nw -Wshadow" # numerous, plus we're not unanimous +nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization + # was not possible, safe to ignore +nw="$nw -Wpacked" # Allow attribute((packed)) on structs +nw="$nw -Wlong-long" # Allow long long since it's required + # by Python, Ruby and xstrtoll. +nw="$nw -Wsuggest-attribute=pure" # Don't suggest pure functions. +nw="$nw -Wsuggest-attribute=const" # Don't suggest const functions. +nw="$nw -Wunsuffixed-float-constants" # Don't care about these. +nw="$nw -Wswitch-default" # This warning is actively dangerous. +nw="$nw -Woverlength-strings" # Who cares about stupid ISO C99 limit. + +gl_MANYWARN_ALL_GCC([ws]) +gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw]) +for w in $ws; do + gl_WARN_ADD([$w]) +done + +dnl Normally we disable warnings in $nw above. However $nw only +dnl filters out exact matching warning strings from a list inside +dnl gnulib (see m4/manywarnings.m4). So we need to explicitly list a +dnl few disabled warnings below. + +dnl Unused parameters are not a bug. +gl_WARN_ADD([-Wno-unused-parameter]) + +dnl Missing field initializers is not a bug in C. +gl_WARN_ADD([-Wno-missing-field-initializers]) + +dnl Display the name of the warning option with the warning. +gl_WARN_ADD([-fdiagnostics-show-option]) + +dnl Now some warnings we want to enable and/or customize ... + +dnl Warn about large stack allocations. 10000 happens to be the +dnl same size as Coverity warns about. +gl_WARN_ADD([-Wframe-larger-than=10000]) + +AC_SUBST([WARN_CFLAGS]) + +AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) +AC_DEFINE([GNULIB_PORTCHECK], [1], [Enable some gnulib portability checks.]) +AH_VERBATIM([FORTIFY_SOURCE],[ +/* Enable compile-time and run-time bounds-checking, and some warnings. */ +#if __OPTIMIZE__ && (! defined (_FORTIFY_SOURCE) || _FORTIFY_SOURCE < 2) +# undef _FORTIFY_SOURCE +# define _FORTIFY_SOURCE 2 +#endif]) + +AC_C_PROTOTYPES +test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant]) + +AM_PROG_CC_C_O + +# Provide a global place to set CFLAGS. (Note that setting AM_CFLAGS +# is no use because it doesn't override target_CFLAGS). +#--- +# Kill -fstrict-overflow which is a license for the C compiler to make +# dubious and often unsafe optimizations, in a time-wasting attempt to +# deal with CPU architectures that do not exist. +CFLAGS="$CFLAGS -fno-strict-overflow -Wno-strict-overflow" + +dnl Work out how to specify the linker script to the linker. +VERSION_SCRIPT_FLAGS=-Wl,--version-script= +`/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \ + VERSION_SCRIPT_FLAGS="-Wl,-M -Wl," +AC_SUBST(VERSION_SCRIPT_FLAGS) + +dnl Use -fvisibility=hidden by default in the library. +dnl http://gcc.gnu.org/wiki/Visibility +AS_IF([test -n "$GCC"], + [AC_SUBST([GCC_VISIBILITY_HIDDEN], [-fvisibility=hidden])], + [AC_SUBST([GCC_VISIBILITY_HIDDEN], [:])]) + +dnl Check support for 64 bit file offsets. +AC_SYS_LARGEFILE + +dnl Check sizeof long. +AC_CHECK_SIZEOF([long]) + +dnl Check if __attribute__((cleanup(...))) works. +dnl XXX It would be nice to use AC_COMPILE_IFELSE here, but gcc just +dnl emits a warning for attributes that it doesn't understand. +AC_MSG_CHECKING([if __attribute__((cleanup(...))) works with this compiler]) +AC_RUN_IFELSE([ +AC_LANG_SOURCE([[ +#include +#include + +void +freep (void *ptr) +{ + exit (EXIT_SUCCESS); +} + +void +test (void) +{ + __attribute__((cleanup(freep))) char *ptr = malloc (100); +} + +int +main (int argc, char *argv[]) +{ + test (); + exit (EXIT_FAILURE); +} +]]) + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_ATTRIBUTE_CLEANUP],[1],[Define to 1 if '__attribute__((cleanup(...)))' works with this compiler.]) + ],[ + AC_MSG_WARN( +['__attribute__((cleanup(...)))' does not work. + +You may not be using a sufficiently recent version of GCC or CLANG, or +you may be using a C compiler which does not support this attribute, +or the configure test may be wrong. + +The code will still compile, but is likely to leak memory and other +resources when it runs.])]) + +dnl Should we run the gnulib tests? +AC_MSG_CHECKING([if we should run the GNUlib tests]) +AC_ARG_ENABLE([gnulib-tests], + [AS_HELP_STRING([--disable-gnulib-tests], + [disable running GNU Portability library tests @<:@default=yes@:>@])], + [ENABLE_GNULIB_TESTS="$enableval"], + [ENABLE_GNULIB_TESTS=yes]) +AM_CONDITIONAL([ENABLE_GNULIB_TESTS],[test "x$ENABLE_GNULIB_TESTS" = "xyes"]) +AC_MSG_RESULT([$ENABLE_GNULIB_TESTS])