1 # Public macros for the TeX Live (TL) tree.
2 # Copyright (C) 2009-2015 Peter Breitenlohner <tex-live@tug.org>
4 # This file is free software; the copyright holder
5 # gives unlimited permission to copy and/or distribute it,
6 # with or without modifications, as long as this notice is preserved.
8 # KPSE_COMPILER_WARNINGS
9 # ----------------------
10 # Set up compiler warnings for (Objective) C and (Objective) C++.
11 # This macro determines and substitutes WARNING_CFLAGS for the C compiler
12 # and, if applicable, WARNING_CXXFLAGS for the C++ compiler. To activate
13 # them a Makefile.am must use them, e.g., in AM_CFLAGS or AM_CXXFLAGS.
14 AC_DEFUN([KPSE_COMPILER_WARNINGS],
15 [AC_REQUIRE([_KPSE_COMPILER_WARNINGS_OPTION])[]dnl
16 dnl arrange that AC_PROG_CC uses _KPSE_WARNING_CFLAGS etc.
17 AC_PROVIDE_IFELSE([AC_PROG_CC],
18 [_KPSE_WARNING_CFLAGS],
19 [m4_define([AC_PROG_CC],
20 m4_defn([AC_PROG_CC])[_KPSE_WARNING_CFLAGS
22 AC_PROVIDE_IFELSE([AC_PROG_CXX],
23 [_KPSE_WARNING_CXXFLAGS],
24 [m4_define([AC_PROG_CXX],
25 m4_defn([AC_PROG_CXX])[_KPSE_WARNING_CXXFLAGS
27 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
28 [_KPSE_WARNING_OBJCFLAGS],
29 [m4_define([AC_PROG_OBJC],
30 m4_defn([AC_PROG_OBJC])[_KPSE_WARNING_OBJCFLAGS
32 AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
33 [_KPSE_WARNING_OBJCXXFLAGS],
34 [m4_define([AC_PROG_OBJCXX],
35 m4_defn([AC_PROG_OBJCXX])[_KPSE_WARNING_OBJCXXFLAGS
37 ]) # KPSE_COMPILER_WARNINGS
39 # _KPSE_COMPILER_WARNINGS_OPTION
40 # ------------------------------
41 # Internal subroutine.
42 # Provide configure option `--enable-compiler-warnings=[no|min|yes|max|all]'
43 # to enable various degrees of compiler warnings.
44 AC_DEFUN([_KPSE_COMPILER_WARNINGS_OPTION],
45 [AC_ARG_ENABLE([compiler-warnings],
46 AS_HELP_STRING([--enable-compiler-warnings=@<:@no|min|yes|max|all@:>@],
47 [Turn on compiler warnings @<:@default: yes if maintainer-mode,
48 min otherwise@:>@]))[]dnl
49 AS_CASE([$enable_compiler_warnings],
50 [no | min | yes | max | all], [],
51 [AS_IF([test "x$enable_maintainer_mode" = xyes],
52 [enable_compiler_warnings=yes],
53 [enable_compiler_warnings=min])])
54 ]) # _KPSE_COMPILER_WARNINGS_OPTION
58 # Internal subroutine.
59 # Determine and substitute WARNING_CFLAGS for C compiler.
60 AC_DEFUN([_KPSE_WARNING_CFLAGS],
61 [AC_REQUIRE([_KPSE_COMPILER_WARNINGS_OPTION])[]dnl
62 AC_REQUIRE([AC_PROG_CC])[]dnl
63 AC_CACHE_CHECK([what warning flags to pass to the C compiler],
64 [kpse_cv_warning_cflags],
66 if test "x$GCC" = xyes; then
67 _KPSE_WARNING_GNU_CFLAGS([CC], [cflags])[]dnl
68 elif test "x$enable_compiler_warnings" = xno; then
69 kpse_cv_warning_cflags=
71 kpse_cv_warning_cflags= # FIXME: warning flags for non-GNU C compilers
73 WARNING_CFLAGS=$kpse_cv_warning_cflags
74 AC_SUBST([WARNING_CFLAGS])
75 m4_define([_KPSE_WARNING_CFLAGS], [])[]dnl
76 ]) # _KPSE_WARNING_CFLAGS
78 # _KPSE_WARNING_CXXFLAGS
79 # ----------------------
80 # Internal subroutine.
81 # Determine and substitute WARNING_CXXFLAGS for C++ compiler.
82 m4_define([_KPSE_WARNING_CXXFLAGS],
83 [AC_CACHE_CHECK([what warning flags to pass to the C++ compiler],
84 [kpse_cv_warning_cxxflags],
86 if test "x$GXX" = xyes; then
87 _KPSE_WARNING_GNU_CXXFLAGS([CXX], [cxxflags])[]dnl
88 elif test "x$enable_compiler_warnings" = xno; then
89 kpse_cv_warning_cxxflags=
91 kpse_cv_warning_cxxflags= # FIXME: warning flags for non-GNU C++ compilers
93 WARNING_CXXFLAGS=$kpse_cv_warning_cxxflags
94 AC_SUBST([WARNING_CXXFLAGS])
95 m4_define([_KPSE_WARNING_CXXFLAGS], [])[]dnl
96 ]) # _KPSE_WARNING_CXXFLAGS
98 _KPSE_WARNING_OBJCFLAGS
99 # ---------------------
100 # Internal subroutine.
101 # Determine and substitute WARNING_OBJCFLAGS for Objective C compiler.
102 AC_DEFUN([_KPSE_WARNING_OBJCFLAGS],
103 [AC_REQUIRE([_KPSE_COMPILER_WARNINGS_OPTION])[]dnl
104 AC_REQUIRE([AC_PROG_OBJC])[]dnl
105 AC_CACHE_CHECK([what warning flags to pass to the Objective C compiler],
106 [kpse_cv_warning_objcflags],
108 if test "x$GOBJC" = xyes; then
109 _KPSE_WARNING_GNU_CFLAGS([OBJC], [objcflags])[]dnl
110 elif test "x$enable_compiler_warnings" = xno; then
111 kpse_cv_warning_objcflags=
113 kpse_cv_warning_objcflags= # FIXME: warning flags for non-GNU Objective C compilers
115 WARNING_OBJCFLAGS=$kpse_cv_warning_objcflags
116 AC_SUBST([WARNING_OBJCFLAGS])
117 m4_define([_KPSE_WARNING_OBJCFLAGS], [])[]dnl
118 ]) # _KPSE_WARNING_OBJCFLAGS
120 _KPSE_WARNING_OBJCXXFLAGS
121 # -----------------------
122 # Internal subroutine.
123 # Determine and substitute WARNING_OBJCXXFLAGS for Objective C++ compiler.
124 AC_DEFUN([_KPSE_WARNING_OBJCXXFLAGS],
125 [AC_REQUIRE([_KPSE_COMPILER_WARNINGS_OPTION])[]dnl
126 AC_REQUIRE([AC_PROG_OBJCXX])[]dnl
127 AC_CACHE_CHECK([what warning flags to pass to the Objective C++ compiler],
128 [kpse_cv_warning_objcxxflags],
130 if test "x$GOBJCXX" = xyes; then
131 _KPSE_WARNING_GNU_CXXFLAGS([OBJCXX], [objcxxflags])[]dnl
132 elif test "x$enable_compiler_warnings" = xno; then
133 kpse_cv_warning_objcxxflags=
135 kpse_cv_warning_objcxxflags= # FIXME: warning flags for non-GNU Objective C++ compilers
137 WARNING_OBJCXXFLAGS=$kpse_cv_warning_objcxxflags
138 AC_SUBST([WARNING_OBJCXXFLAGS])
139 m4_define([_KPSE_WARNING_OBJCXXFLAGS], [])[]dnl
140 ]) # _KPSE_WARNING_OBJCXXFLAGS
142 # _KPSE_WARNING_GNU_CFLAGS(COMPILER, TAG)
143 # ---------------------------------------
144 # Internal subroutine.
145 # Determine warning flags for GNU (Objective) C compiler.
146 m4_define([_KPSE_WARNING_GNU_CFLAGS],
148 if test "x$enable_compiler_warnings" != xno; then
149 kpse_cv_warning_$2="-Wimplicit -Wreturn-type"
150 AS_CASE([`$[]$1 -dumpversion`],
152 [kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wdeclaration-after-statement"])
153 AS_CASE([`$[]$1 -dumpversion`],
154 [3.@<:@234@:>@.* | 4.* | 5.*],
155 [kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wno-unknown-pragmas"])
156 if test "x$enable_compiler_warnings" != xmin; then
157 kpse_cv_warning_$2="-Wall -Wunused $kpse_cv_warning_$2"
158 kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wmissing-prototypes -Wmissing-declarations"
159 if test "x$enable_compiler_warnings" != xyes; then
160 kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wparentheses -Wswitch -Wtrigraphs -Wpointer-arith"
161 kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wcast-qual -Wcast-align -Wwrite-strings"
162 AS_CASE([`$[]$1 -dumpversion`],
164 [kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wold-style-definition"])
165 if test "x$enable_compiler_warnings" != xmax; then
166 kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wshadow"
171 ]) # _KPSE_WARNING_GNU_CFLAGS
173 # _KPSE_WARNING_GNU_CXXFLAGS(COMPILER, TAG)
174 # -----------------------------------------
175 # Internal subroutine.
176 # Determine warning flags for GNU (Objective) C++ compiler.
177 m4_define([_KPSE_WARNING_GNU_CXXFLAGS],
179 kpse_warn_strings="-Wno-write-strings"
180 if test "x$enable_compiler_warnings" != xno; then
181 kpse_cv_warning_$2="-Wreturn-type"
182 AS_CASE([`$[]$1 -dumpversion`],
183 [3.* | 4.@<:@012345@:>@.*],
184 [kpse_cv_warning_$2="-Wimplicit $kpse_cv_warning_$2"])
185 AS_CASE([`$[]$1 -dumpversion`],
186 [3.@<:@234@:>@.* | 4.* | 5.*],
187 [kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wno-unknown-pragmas"])
188 if test "x$enable_compiler_warnings" != xmin; then
189 kpse_cv_warning_$2="-Wall -Wunused $kpse_cv_warning_$2"
190 if test "x$enable_compiler_warnings" != xyes; then
191 kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wparentheses -Wswitch -Wtrigraphs -Wpointer-arith"
192 kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wcast-qual -Wcast-align"
193 kpse_warn_strings="-Wwrite-strings"
194 if test "x$enable_compiler_warnings" != xmax; then
195 kpse_cv_warning_$2="$kpse_cv_warning_$2 -Wshadow"
200 kpse_cv_warning_$2="$kpse_cv_warning_$2 $kpse_warn_strings"
201 ]) # _KPSE_WARNING_GNU_CXXFLAGS