| 1 | # =========================================================================== |
| 2 | # https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html |
| 3 | # =========================================================================== |
| 4 | # |
| 5 | # SYNOPSIS |
| 6 | # |
| 7 | # AX_COMPILER_FLAGS([CFLAGS-VARIABLE], [LDFLAGS-VARIABLE], [IS-RELEASE], [EXTRA-BASE-CFLAGS], [EXTRA-YES-CFLAGS], [UNUSED], [UNUSED], [UNUSED], [EXTRA-BASE-LDFLAGS], [EXTRA-YES-LDFLAGS], [UNUSED], [UNUSED], [UNUSED]) |
| 8 | # |
| 9 | # DESCRIPTION |
| 10 | # |
| 11 | # Check for the presence of an --enable-compile-warnings option to |
| 12 | # configure, defaulting to "error" in normal operation, or "yes" if |
| 13 | # IS-RELEASE is equal to "yes". Return the value in the variable |
| 14 | # $ax_enable_compile_warnings. |
| 15 | # |
| 16 | # Depending on the value of --enable-compile-warnings, different compiler |
| 17 | # warnings are checked to see if they work with the current compiler and, |
| 18 | # if so, are appended to CFLAGS-VARIABLE and LDFLAGS-VARIABLE. This |
| 19 | # allows a consistent set of baseline compiler warnings to be used across |
| 20 | # a code base, irrespective of any warnings enabled locally by individual |
| 21 | # developers. By standardising the warnings used by all developers of a |
| 22 | # project, the project can commit to a zero-warnings policy, using -Werror |
| 23 | # to prevent compilation if new warnings are introduced. This makes |
| 24 | # catching bugs which are flagged by warnings a lot easier. |
| 25 | # |
| 26 | # By providing a consistent --enable-compile-warnings argument across all |
| 27 | # projects using this macro, continuous integration systems can easily be |
| 28 | # configured the same for all projects. Automated systems or build |
| 29 | # systems aimed at beginners may want to pass the --disable-Werror |
| 30 | # argument to unconditionally prevent warnings being fatal. |
| 31 | # |
| 32 | # --enable-compile-warnings can take the values: |
| 33 | # |
| 34 | # * no: Base compiler warnings only; not even -Wall. |
| 35 | # * yes: The above, plus a broad range of useful warnings. |
| 36 | # * error: The above, plus -Werror so that all warnings are fatal. |
| 37 | # Use --disable-Werror to override this and disable fatal |
| 38 | # warnings. |
| 39 | # |
| 40 | # The set of base and enabled flags can be augmented using the |
| 41 | # EXTRA-*-CFLAGS and EXTRA-*-LDFLAGS variables, which are tested and |
| 42 | # appended to the output variable if --enable-compile-warnings is not |
| 43 | # "no". Flags should not be disabled using these arguments, as the entire |
| 44 | # point of AX_COMPILER_FLAGS is to enforce a consistent set of useful |
| 45 | # compiler warnings on code, using warnings which have been chosen for low |
| 46 | # false positive rates. If a compiler emits false positives for a |
| 47 | # warning, a #pragma should be used in the code to disable the warning |
| 48 | # locally. See: |
| 49 | # |
| 50 | # https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas |
| 51 | # |
| 52 | # The EXTRA-* variables should only be used to supply extra warning flags, |
| 53 | # and not general purpose compiler flags, as they are controlled by |
| 54 | # configure options such as --disable-Werror. |
| 55 | # |
| 56 | # IS-RELEASE can be used to disable -Werror when making a release, which |
| 57 | # is useful for those hairy moments when you just want to get the release |
| 58 | # done as quickly as possible. Set it to "yes" to disable -Werror. By |
| 59 | # default, it uses the value of $ax_is_release, so if you are using the |
| 60 | # AX_IS_RELEASE macro, there is no need to pass this parameter. For |
| 61 | # example: |
| 62 | # |
| 63 | # AX_IS_RELEASE([git-directory]) |
| 64 | # AX_COMPILER_FLAGS() |
| 65 | # |
| 66 | # CFLAGS-VARIABLE defaults to WARN_CFLAGS, and LDFLAGS-VARIABLE defaults |
| 67 | # to WARN_LDFLAGS. Both variables are AC_SUBST-ed by this macro, but must |
| 68 | # be manually added to the CFLAGS and LDFLAGS variables for each target in |
| 69 | # the code base. |
| 70 | # |
| 71 | # If C++ language support is enabled with AC_PROG_CXX, which must occur |
| 72 | # before this macro in configure.ac, warning flags for the C++ compiler |
| 73 | # are AC_SUBST-ed as WARN_CXXFLAGS, and must be manually added to the |
| 74 | # CXXFLAGS variables for each target in the code base. EXTRA-*-CFLAGS can |
| 75 | # be used to augment the base and enabled flags. |
| 76 | # |
| 77 | # Warning flags for g-ir-scanner (from GObject Introspection) are |
| 78 | # AC_SUBST-ed as WARN_SCANNERFLAGS. This variable must be manually added |
| 79 | # to the SCANNERFLAGS variable for each GIR target in the code base. If |
| 80 | # extra g-ir-scanner flags need to be enabled, the AX_COMPILER_FLAGS_GIR |
| 81 | # macro must be invoked manually. |
| 82 | # |
| 83 | # AX_COMPILER_FLAGS may add support for other tools in future, in addition |
| 84 | # to the compiler and linker. No extra EXTRA-* variables will be added |
| 85 | # for those tools, and all extra support will still use the single |
| 86 | # --enable-compile-warnings configure option. For finer grained control |
| 87 | # over the flags for individual tools, use AX_COMPILER_FLAGS_CFLAGS, |
| 88 | # AX_COMPILER_FLAGS_LDFLAGS and AX_COMPILER_FLAGS_* for new tools. |
| 89 | # |
| 90 | # The UNUSED variables date from a previous version of this macro, and are |
| 91 | # automatically appended to the preceding non-UNUSED variable. They should |
| 92 | # be left empty in new uses of the macro. |
| 93 | # |
| 94 | # LICENSE |
| 95 | # |
| 96 | # Copyright (c) 2014, 2015 Philip Withnall <philip@tecnocode.co.uk> |
| 97 | # Copyright (c) 2015 David King <amigadave@amigadave.com> |
| 98 | # |
| 99 | # Copying and distribution of this file, with or without modification, are |
| 100 | # permitted in any medium without royalty provided the copyright notice |
| 101 | # and this notice are preserved. This file is offered as-is, without any |
| 102 | # warranty. |
| 103 | |
| 104 | #serial 14 |
| 105 | |
| 106 | # _AX_COMPILER_FLAGS_LANG([LANGNAME]) |
| 107 | m4_defun([_AX_COMPILER_FLAGS_LANG], |
| 108 | [m4_ifdef([_AX_COMPILER_FLAGS_LANG_]$1[_enabled], [], |
| 109 | [m4_define([_AX_COMPILER_FLAGS_LANG_]$1[_enabled], [])dnl |
| 110 | AX_REQUIRE_DEFINED([AX_COMPILER_FLAGS_]$1[FLAGS])])dnl |
| 111 | ]) |
| 112 | |
| 113 | AC_DEFUN([AX_COMPILER_FLAGS],[ |
| 114 | # C support is enabled by default. |
| 115 | _AX_COMPILER_FLAGS_LANG([C]) |
| 116 | # Only enable C++ support if AC_PROG_CXX is called. The redefinition of |
| 117 | # AC_PROG_CXX is so that a fatal error is emitted if this macro is called |
| 118 | # before AC_PROG_CXX, which would otherwise cause no C++ warnings to be |
| 119 | # checked. |
| 120 | AC_PROVIDE_IFELSE([AC_PROG_CXX], |
| 121 | [_AX_COMPILER_FLAGS_LANG([CXX])], |
| 122 | [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AX_COMPILER_FLAGS_LANG([CXX])])]) |
| 123 | AX_REQUIRE_DEFINED([AX_COMPILER_FLAGS_LDFLAGS]) |
| 124 | |
| 125 | # Default value for IS-RELEASE is $ax_is_release |
| 126 | ax_compiler_flags_is_release=m4_tolower(m4_normalize(ifelse([$3],, |
| 127 | [$ax_is_release], |
| 128 | [$3]))) |
| 129 | |
| 130 | AC_ARG_ENABLE([compile-warnings], |
| 131 | AS_HELP_STRING([--enable-compile-warnings=@<:@no/yes/error@:>@], |
| 132 | [Enable compiler warnings and errors]),, |
| 133 | [AS_IF([test "$ax_compiler_flags_is_release" = "yes"], |
| 134 | [enable_compile_warnings="yes"], |
| 135 | [enable_compile_warnings="error"])]) |
| 136 | AC_ARG_ENABLE([Werror], |
| 137 | AS_HELP_STRING([--disable-Werror], |
| 138 | [Unconditionally make all compiler warnings non-fatal]),, |
| 139 | [enable_Werror=maybe]) |
| 140 | |
| 141 | # Return the user's chosen warning level |
| 142 | AS_IF([test "$enable_Werror" = "no" -a \ |
| 143 | "$enable_compile_warnings" = "error"],[ |
| 144 | enable_compile_warnings="yes" |
| 145 | ]) |
| 146 | |
| 147 | ax_enable_compile_warnings=$enable_compile_warnings |
| 148 | |
| 149 | AX_COMPILER_FLAGS_CFLAGS([$1],[$ax_compiler_flags_is_release], |
| 150 | [$4],[$5 $6 $7 $8]) |
| 151 | m4_ifdef([_AX_COMPILER_FLAGS_LANG_CXX_enabled], |
| 152 | [AX_COMPILER_FLAGS_CXXFLAGS([WARN_CXXFLAGS], |
| 153 | [$ax_compiler_flags_is_release], |
| 154 | [$4],[$5 $6 $7 $8])]) |
| 155 | AX_COMPILER_FLAGS_LDFLAGS([$2],[$ax_compiler_flags_is_release], |
| 156 | [$9],[$10 $11 $12 $13]) |
| 157 | AX_COMPILER_FLAGS_GIR([WARN_SCANNERFLAGS],[$ax_compiler_flags_is_release]) |
| 158 | ])dnl AX_COMPILER_FLAGS |