Blame macros2/gnome-compiler-flags.m4

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