Imported Upstream version 3.3.3
[debian/amanda] / config / amanda / flags.m4
1 # OVERVIEW/BACKGROUND
2 #
3 #   This file manages flags in CFLAGS, CPPFLAGS, LDFLAGS, and LIBS.
4 #
5 #   Flags can come from two several sources:
6 #    - entry to ./configure or on the configure command line (they are
7 #      `precious' variables)
8 #    - added by autoconf tests during the execution of configure
9 #
10 #   Although Automake supports overriding variables when invoking 'make',
11 #   we don't support it (mostly because autoconf doesn't).  Instead, users
12 #   should specify such variables when invoking ./configure.
13 #
14 #   CFLAGS are a little bit more complicated: Amanda has two categories,
15 #   mandatory CFLAGS, which should be used everywhere, and warning CFLAGS,
16 #   which are only used on Amanda code (not gnulib or yacc-generated code).
17 #   To accomplish this, mandatory CFLAGS go directl into CFLAGS, while
18 #   warwnings go in AMANDA_WARNING_CFLAGS; these are then added to 
19 #   AM_CFLAGS by the Makefiles.
20
21 # SYNOPSIS
22 #
23 #   AMANDA_INIT_FLAGS()
24 #
25 # DESCRIPTION
26 #
27 #   Process variables given by the user on the command line,
28 #   either as environment variables:
29 #       CPPFLAGS=-Dfoo ./configure ...
30 #   as assignments in the configure command line:
31 #       ./configure LIBS=-lfoo ...
32 #   or with the deprecated flags --with-cflags, --with-includes, and
33 #   --with-libraries
34 #
35 AC_DEFUN([AMANDA_INIT_FLAGS],
36 [
37     # support deprecated ./configure flags to set various compiler flags
38
39     AC_ARG_WITH(cflags,
40         AS_HELP_STRING([--with-cflags=FLAGS],
41                        [deprecated; use ./configure CFLAGS=... ]),
42         [
43             case "$withval" in
44             "" | y | ye | yes | n | no)
45                 AC_MSG_ERROR([*** You must supply an argument to the --with-cflags option.])
46                 ;;
47             esac
48
49             CFLAGS="$withval"
50         ])
51
52     AC_ARG_WITH(includes,
53         AS_HELP_STRING([--with-includes=INCLUDE-DIRS],
54                        [deprecated; use ./configure CPPFLAGS='-I.. -I..']),
55         [
56             case "$withval" in
57             "" | y | ye | yes | n | no)
58                 AC_MSG_ERROR([*** You must supply an argument to the --with-includes option.])
59               ;;
60             esac
61
62             for dir in $withval; do
63                 if test -d "$dir"; then
64                     CPPFLAGS="$CPPFLAGS -I$dir"
65                 else
66                     AMANDA_MSG_WARN([Include directory $dir does not exist.])
67                 fi
68             done
69         ])
70
71     AC_ARG_WITH(libraries,
72         AS_HELP_STRING([--with-libraries=LIBRARY-DIRS],
73                        [deprecated; use ./configure LDFLAGS='-L.. -L..' (add -R on Solaris, NetBSD)]),
74         [
75             case "$withval" in
76             "" | y | ye | yes | n | no)
77                 AC_MSG_ERROR([*** You must supply an argument to the --with-libraries option.])
78               ;;
79             esac
80
81             for dir in $withval; do
82                 if test -d "$dir"; then
83                     case "$host" in
84                       *-solaris2*,*-netbsd*)
85                             LDFLAGS="$LDFLAGS -R$dir"
86                             ;;
87                     esac
88                     LDFLAGS="$LDFLAGS -L$dir"
89                 else
90                     AMANDA_MSG_WARN([Library directory $dir does not exist.])
91                 fi
92             done
93         ])
94
95     # Disable strict-aliasing optimizations
96     AMANDA_DISABLE_GCC_FEATURE(strict-aliasing)
97
98     # Warn for just about everything
99     AMANDA_ENABLE_GCC_WARNING(all)
100     
101     # And add any extra warnings too
102     AMANDA_TEST_GCC_FLAG(-Wextra, [
103         AMANDA_ADD_WARNING_CFLAG(-Wextra)
104     ], [
105         AMANDA_TEST_GCC_FLAG(-W, [
106             AMANDA_ADD_WARNING_CFLAG(-W)
107         ])
108     ])
109     AC_SUBST([AMANDA_WARNING_CFLAGS])
110 ])
111
112 # SYNOPSIS
113 #
114 #   AMANDA_STATIC_FLAGS(new_flags)
115 #
116 # DESCRIPTION
117 #
118 #   Set AMANDA_STATIC_LDFLAGS to -static if --enable-static-binary
119 #
120 AC_DEFUN([AMANDA_STATIC_FLAGS],
121 [
122     AC_ARG_ENABLE(static-binary,
123         AS_HELP_STRING([--enable-static-binary],
124                        [To build statically linked binaries]),
125         [
126             case "$enableval" in
127             "" | y | ye | yes)
128                 AMANDA_STATIC_LDFLAGS=-static
129                 if test x"$enable_static" = x"no"; then
130                         AC_MSG_ERROR([*** --enable-static-binary is incompatible with --disable-static])
131                 fi
132                 ;;
133             *n | no)
134                 AMANDA_STATIC_LDFLAGS=
135                 ;;
136             esac
137         ])
138     AC_SUBST([AMANDA_STATIC_LDFLAGS])
139 ])
140
141 # SYNOPSIS
142 #
143 #   AMANDA_WERROR_FLAGS
144 #
145 # DESCRIPTION
146 #
147 #   Set AMANDA_WERROR_FLAGS
148 #
149 AC_DEFUN([AMANDA_WERROR_FLAGS],
150 [
151     AC_ARG_ENABLE(werror,
152         AS_HELP_STRING([--enable-werror],
153                        [To compile with -Werror compiler flag]),
154         [
155             case "$enableval" in
156             "" | y | ye | yes)
157                 AMANDA_ENABLE_GCC_WARNING(error)
158                 ;;
159             esac
160         ])
161 ])
162
163 # SYNOPSIS
164 #
165 #   AMANDA_SWIG_ERROR
166 #
167 # DESCRIPTION
168 #
169 #   Set AMANDA_SWIG_ERROR
170 #
171 AC_DEFUN([AMANDA_SWIG_ERROR],
172 [
173     AC_ARG_ENABLE(swig-error,
174         AS_HELP_STRING([--enable-swig-error],
175                        [To compile swiged C file with -Werror compiler flag]),
176         [
177             case "$enableval" in
178             "" | y | ye | yes)
179                 AMANDA_SWIG_PERL_CFLAGS=-Werror -Wno-deprecated-declarations
180                 ;;
181             *n | no)
182                 AMANDA_SWIG_PERL_CFLAGS=
183                 ;;
184             esac
185         ])
186     AC_SUBST([AMANDA_SWIG_PERL_CFLAGS])
187 ])
188
189 # SYNOPSIS
190 #
191 #   AMANDA_ADD_CFLAGS(new_flags)
192 #
193 # DESCRIPTION
194 #
195 #   Add 'new_flags' to CFLAGS.
196 #
197 #   'new_flags' will be enclosed in double quotes in the resulting
198 #   shell assignment.
199 #
200 AC_DEFUN([AMANDA_ADD_CFLAGS],
201     [CFLAGS="$CFLAGS $1"]
202 )
203
204 # SYNOPSIS
205 #
206 #   AMANDA_ADD_CPPFLAGS(new_flags)
207 #
208 # DESCRIPTION
209 #
210 #   Add 'new_flags' to CPPFLAGS.
211 #
212 #   'new_flags' will be enclosed in double quotes in the resulting
213 #   shell assignment.
214 #
215 AC_DEFUN([AMANDA_ADD_CPPFLAGS],
216     [CPPFLAGS="$CPPFLAGS $1"]
217 )
218
219 # SYNOPSIS
220 #
221 #   AMANDA_ADD_LDFLAGS(new_flags)
222 #
223 # DESCRIPTION
224 #
225 #   Add 'new_flags' to LDFLAGS.
226 #
227 #   'new_flags' will be enclosed in double quotes in the resulting
228 #   shell assignment.
229 #
230 AC_DEFUN([AMANDA_ADD_LDFLAGS],
231     [LDFLAGS="$LDFLAGS $1"]
232 )
233
234 # SYNOPSIS
235 #
236 #   AMANDA_ADD_LIBS(new_flags)
237 #
238 # DESCRIPTION
239 #
240 #   Add 'new_flags' to LIBS.
241 #
242 #   'new_flags' will be enclosed in double quotes in the resulting
243 #   shell assignment.
244 #
245 AC_DEFUN([AMANDA_ADD_LIBS],
246     [LIBS="$1 $LIBS"]
247 )
248
249 # SYNOPSIS
250 #
251 #   AMANDA_DISABLE_GCC_FEATURE(feature)
252 #
253 # OVERVIEW
254 #
255 #   Disable feature 'feature' by adding flag -Wno-'feature' to 
256 #   AMANDA_FEATURE_CFLAGS.
257 #
258 AC_DEFUN([AMANDA_DISABLE_GCC_FEATURE],
259 [
260     # test for -W'feature', then add the 'no-' version.
261     AMANDA_TEST_GCC_FLAG(-f$1,
262     [
263         AMANDA_ADD_CFLAGS(-fno-$1)
264         AMANDA_ADD_CPPFLAGS(-fno-$1)
265     ])
266 ])
267
268 # SYNOPSIS
269 #
270 #   AMANDA_ADD_WARNING_CFLAG(flag)
271 #
272 # DESCRIPTION
273 #
274 #   Add 'flag' to AMANDA_WARNING_CFLAGS
275 #
276 AC_DEFUN([AMANDA_ADD_WARNING_CFLAG],
277     [AMANDA_WARNING_CFLAGS="$AMANDA_WARNING_CFLAGS $1"]
278 )
279
280 # SYNOPSIS
281 #
282 #   AMANDA_ENABLE_GCC_WARNING(warning)
283 #
284 # OVERVIEW
285 #
286 #   Enable warning 'warning' by adding flag -W'warning' to 
287 #   AMANDA_WARNING_CFLAGS.
288 #
289 AC_DEFUN([AMANDA_ENABLE_GCC_WARNING],
290 [
291     AMANDA_TEST_GCC_FLAG(-W$1,
292     [
293         AMANDA_ADD_WARNING_CFLAG(-W$1)
294     ])
295 ])
296
297 # SYNOPSIS
298 #
299 #   AMANDA_DISABLE_GCC_WARNING(warning)
300 #
301 # OVERVIEW
302 #
303 #   Disable warning 'warning' by adding flag -Wno-'warning' to 
304 #   AMANDA_WARNING_CFLAGS.
305 #
306 AC_DEFUN([AMANDA_DISABLE_GCC_WARNING],
307 [
308     # test for -W'warning', then add the 'no-' version.
309     AMANDA_TEST_GCC_FLAG(-W$1,
310     [
311         AMANDA_ADD_WARNING_CFLAG(-Wno-$1)
312     ])
313 ])
314
315 # SYNOPSIS
316 #
317 #   AMANDA_TEST_GCC_FLAG(flag, action-if-found, action-if-not-found)
318 #
319 # OVERVIEW
320 #
321 #   See if CC is gcc, and if gcc -v --help contains the given flag.  If so,
322 #   run action-if-found; otherwise, run action-if-not-found.
323 #
324 #   Intended for internal use in this file.
325 #
326 AC_DEFUN([AMANDA_TEST_GCC_FLAG],
327 [
328     AC_REQUIRE([AC_PROG_CC])
329     AC_REQUIRE([AC_PROG_EGREP])
330     AC_MSG_CHECKING(for gcc flag $1)
331     if test "x$GCC" = "xyes"; then
332         changequote(,)dnl
333         (gcc --help={target,optimizers,warnings,undocumented,params,c} 2>&1 || 
334            $CC -v --help 2>&1) | 
335          $EGREP -- '[^[:alnum:]]$1[^[:alnum:]-]' 2>&1 > /dev/null
336         changequote([,])dnl
337         if test $? -eq 0; then
338             found_warning=yes
339             AC_MSG_RESULT(yes)
340         else
341             found_warning=no
342             AC_MSG_RESULT(no)
343         fi
344     else
345         found_warning=no
346         AC_MSG_RESULT(no (not using gcc))
347     fi
348
349     if test x"$found_warning" = x"yes"; then
350         ifelse($2, [], [:], $2)
351     else
352         ifelse($3, [], [:], $3)
353     fi
354 ])
355
356 # SYNOPSIS
357 #
358 #   AMANDA_SHOW_FLAGS_SUMMARY
359 #
360 # OVERVIEW
361 #
362 #   Show a summary of the flags with which Amanda was configured
363 #
364 AC_DEFUN([AMANDA_SHOW_FLAGS_SUMMARY],
365 [
366     echo "Compiler Flags:"
367     echo "  CFLAGS: ${CFLAGS-(none)}"
368     echo "  CPPFLAGS: ${CPPFLAGS-(none)}"
369     echo "  LDFLAGS: ${LDFLAGS-(none)}"
370     echo "  LIBS: ${LIBS-(none)}"
371 ])