Blame macros2/gnome-compiler-flags.m4

Packit d53d01
# gnome-compiler-flags.m4
Packit d53d01
#
Packit d53d01
# serial 4
Packit d53d01
#
Packit d53d01
Packit d53d01
dnl GNOME_COMPILE_WARNINGS
Packit d53d01
dnl Turn on many useful compiler warnings and substitute the result into
Packit d53d01
dnl WARN_CFLAGS
Packit d53d01
dnl For now, only works on GCC
Packit d53d01
dnl Pass the default value of the --enable-compile-warnings configure option as
Packit d53d01
dnl the first argument to the macro, defaulting to 'yes'.
Packit d53d01
dnl Additional warning/error flags can be passed as an optional second argument.
Packit d53d01
dnl
Packit d53d01
dnl For example: GNOME_COMPILE_WARNINGS([maximum],[-Werror=some-flag -Wfoobar])
Packit d53d01
AU_DEFUN([GNOME_COMPILE_WARNINGS],[
Packit d53d01
    dnl ******************************
Packit d53d01
    dnl More compiler warnings
Packit d53d01
    dnl ******************************
Packit d53d01
Packit d53d01
    AC_ARG_ENABLE(compile-warnings, 
Packit d53d01
                  AS_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
Packit d53d01
                                 [Turn on compiler warnings]),,
Packit d53d01
                  [enable_compile_warnings="m4_default([$1],[yes])"])
Packit d53d01
Packit d53d01
    if test "x$GCC" != xyes; then
Packit d53d01
	enable_compile_warnings=no
Packit d53d01
    fi
Packit d53d01
Packit d53d01
    warning_flags=
Packit d53d01
    realsave_CFLAGS="$CFLAGS"
Packit d53d01
Packit d53d01
    dnl These are warning flags that aren't marked as fatal.  Can be
Packit d53d01
    dnl overridden on a per-project basis with -Wno-foo.
Packit d53d01
    base_warn_flags=" \
Packit d53d01
        -Wall \
Packit d53d01
        -Wstrict-prototypes \
Packit d53d01
        -Wnested-externs \
Packit d53d01
    "
Packit d53d01
Packit d53d01
    dnl These compiler flags typically indicate very broken or suspicious
Packit d53d01
    dnl code.  Some of them such as implicit-function-declaration are
Packit d53d01
    dnl just not default because gcc compiles a lot of legacy code.
Packit d53d01
    dnl We choose to make this set into explicit errors.
Packit d53d01
    base_error_flags=" \
Packit d53d01
        -Werror=missing-prototypes \
Packit d53d01
        -Werror=implicit-function-declaration \
Packit d53d01
        -Werror=pointer-arith \
Packit d53d01
        -Werror=init-self \
Packit d53d01
        -Werror=format-security \
Packit d53d01
        -Werror=format=2 \
Packit d53d01
        -Werror=missing-include-dirs \
Packit d53d01
        -Werror=return-type \
Packit d53d01
    "
Packit d53d01
Packit d53d01
    dnl Additional warning or error flags provided by the module author to
Packit d53d01
    dnl allow stricter standards to be imposed on a per-module basis.
Packit d53d01
    dnl The author can pass -W or -Werror flags here as they see fit.
Packit d53d01
    additional_flags="m4_default([$2],[])"
Packit d53d01
Packit d53d01
    case "$enable_compile_warnings" in
Packit d53d01
    no)
Packit d53d01
        warning_flags="-w"
Packit d53d01
        ;;
Packit d53d01
    minimum)
Packit d53d01
        warning_flags="-Wall"
Packit d53d01
        ;;
Packit d53d01
    yes|maximum|error)
Packit d53d01
        warning_flags="$base_warn_flags $base_error_flags $additional_flags"
Packit d53d01
        ;;
Packit d53d01
    *)
Packit d53d01
        AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
Packit d53d01
        ;;
Packit d53d01
    esac
Packit d53d01
Packit d53d01
    if test "$enable_compile_warnings" = "error" ; then
Packit d53d01
        warning_flags="$warning_flags -Werror"
Packit d53d01
    fi
Packit d53d01
Packit d53d01
    dnl Check whether GCC supports the warning options
Packit d53d01
    for option in $warning_flags; do
Packit d53d01
	save_CFLAGS="$CFLAGS"
Packit d53d01
	CFLAGS="$CFLAGS $option"
Packit d53d01
	AC_MSG_CHECKING([whether gcc understands $option])
Packit d53d01
	AC_TRY_COMPILE([], [],
Packit d53d01
	    has_option=yes,
Packit d53d01
	    has_option=no,)
Packit d53d01
	CFLAGS="$save_CFLAGS"
Packit d53d01
	AC_MSG_RESULT([$has_option])
Packit d53d01
	if test $has_option = yes; then
Packit d53d01
	    tested_warning_flags="$tested_warning_flags $option"
Packit d53d01
	fi
Packit d53d01
	unset has_option
Packit d53d01
	unset save_CFLAGS
Packit d53d01
    done
Packit d53d01
    unset option
Packit d53d01
    CFLAGS="$realsave_CFLAGS"
Packit d53d01
    AC_MSG_CHECKING(what warning flags to pass to the C compiler)
Packit d53d01
    AC_MSG_RESULT($tested_warning_flags)
Packit d53d01
Packit d53d01
    AC_ARG_ENABLE(iso-c,
Packit d53d01
                  AS_HELP_STRING([--enable-iso-c],
Packit d53d01
                                 [Try to warn if code is not ISO C ]),,
Packit d53d01
                  [enable_iso_c=no])
Packit d53d01
Packit d53d01
    AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
Packit d53d01
    complCFLAGS=
Packit d53d01
    if test "x$enable_iso_c" != "xno"; then
Packit d53d01
	if test "x$GCC" = "xyes"; then
Packit d53d01
	case " $CFLAGS " in
Packit d53d01
	    *[\ \	]-ansi[\ \	]*) ;;
Packit d53d01
	    *) complCFLAGS="$complCFLAGS -ansi" ;;
Packit d53d01
	esac
Packit d53d01
	case " $CFLAGS " in
Packit d53d01
	    *[\ \	]-pedantic[\ \	]*) ;;
Packit d53d01
	    *) complCFLAGS="$complCFLAGS -pedantic" ;;
Packit d53d01
	esac
Packit d53d01
	fi
Packit d53d01
    fi
Packit d53d01
    AC_MSG_RESULT($complCFLAGS)
Packit d53d01
Packit d53d01
    WARN_CFLAGS="$tested_warning_flags $complCFLAGS"
Packit d53d01
    AC_SUBST(WARN_CFLAGS)
Packit d53d01
],
Packit d53d01
[[$0: This macro is deprecated. You should use AX_COMPILER_FLAGS instead and
Packit d53d01
eliminate use of --enable-iso-c.
Packit d53d01
See: http://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html#ax_compiler_flags]])
Packit d53d01
Packit d53d01
dnl For C++, do basically the same thing.
Packit d53d01
Packit d53d01
AU_DEFUN([GNOME_CXX_WARNINGS],[
Packit d53d01
  AC_ARG_ENABLE(cxx-warnings,
Packit d53d01
                AS_HELP_STRING([--enable-cxx-warnings=@<:@no/minimum/yes@:>@]
Packit d53d01
                               [Turn on compiler warnings.]),,
Packit d53d01
                [enable_cxx_warnings="m4_default([$1],[minimum])"])
Packit d53d01
Packit d53d01
  AC_MSG_CHECKING(what warning flags to pass to the C++ compiler)
Packit d53d01
  warnCXXFLAGS=
Packit d53d01
  if test "x$GXX" != xyes; then
Packit d53d01
    enable_cxx_warnings=no
Packit d53d01
  fi
Packit d53d01
  if test "x$enable_cxx_warnings" != "xno"; then
Packit d53d01
    if test "x$GXX" = "xyes"; then
Packit d53d01
      case " $CXXFLAGS " in
Packit d53d01
      *[\ \	]-Wall[\ \	]*) ;;
Packit d53d01
      *) warnCXXFLAGS="-Wall -Wno-unused" ;;
Packit d53d01
      esac
Packit d53d01
Packit d53d01
      ## -W is not all that useful.  And it cannot be controlled
Packit d53d01
      ## with individual -Wno-xxx flags, unlike -Wall
Packit d53d01
      if test "x$enable_cxx_warnings" = "xyes"; then
Packit d53d01
	warnCXXFLAGS="$warnCXXFLAGS -Wshadow -Woverloaded-virtual"
Packit d53d01
      fi
Packit d53d01
    fi
Packit d53d01
  fi
Packit d53d01
  AC_MSG_RESULT($warnCXXFLAGS)
Packit d53d01
Packit d53d01
   AC_ARG_ENABLE(iso-cxx,
Packit d53d01
                 AS_HELP_STRING([--enable-iso-cxx],
Packit d53d01
                                [Try to warn if code is not ISO C++ ]),,
Packit d53d01
                 [enable_iso_cxx=no])
Packit d53d01
Packit d53d01
   AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler)
Packit d53d01
   complCXXFLAGS=
Packit d53d01
   if test "x$enable_iso_cxx" != "xno"; then
Packit d53d01
     if test "x$GXX" = "xyes"; then
Packit d53d01
      case " $CXXFLAGS " in
Packit d53d01
      *[\ \	]-ansi[\ \	]*) ;;
Packit d53d01
      *) complCXXFLAGS="$complCXXFLAGS -ansi" ;;
Packit d53d01
      esac
Packit d53d01
Packit d53d01
      case " $CXXFLAGS " in
Packit d53d01
      *[\ \	]-pedantic[\ \	]*) ;;
Packit d53d01
      *) complCXXFLAGS="$complCXXFLAGS -pedantic" ;;
Packit d53d01
      esac
Packit d53d01
     fi
Packit d53d01
   fi
Packit d53d01
  AC_MSG_RESULT($complCXXFLAGS)
Packit d53d01
Packit d53d01
  WARN_CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS"
Packit d53d01
  AC_SUBST(WARN_CXXFLAGS)
Packit d53d01
],
Packit d53d01
[[$0: This macro is deprecated. You should use AX_COMPILER_FLAGS instead and
Packit d53d01
eliminate use of --enable-iso-cxx.
Packit d53d01
See: http://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html#ax_compiler_flags]])