1#                                               -*- Autoconf -*-
2# Process this file with autoconf to produce a configure script.
3
4AC_PREREQ([2.61])
5AC_INIT([mosh], [1.3.2], [mosh-devel@mit.edu])
6AM_INIT_AUTOMAKE([foreign std-options -Wall -Werror])
7m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
8AC_CONFIG_SRCDIR([src/frontend/mosh-client.cc])
9AC_CONFIG_MACRO_DIR([m4])
10AC_CONFIG_HEADERS([config.h])
11
12# Checks for programs.
13AC_PROG_CC([cc gcc clang])
14AC_PROG_CXX([c++ g++ clang++])
15AC_PROG_RANLIB
16AC_PATH_PROG([PROTOC], [protoc], [])
17AS_IF([test x"$PROTOC" = x],
18  [AC_MSG_ERROR([cannot find protoc, the Protocol Buffers compiler])])
19
20# automake 1.12 seems to require this, but automake 1.11 doesn't recognize it
21m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
22
23WARNING_CXXFLAGS=""
24PICKY_CXXFLAGS=""
25DISTCHECK_CXXFLAGS=""
26AC_ARG_ENABLE([compile-warnings],
27  [AS_HELP_STRING([--enable-compile-warnings@<:@=no/yes/maximum/error/distcheck@:>@],
28     [Turn on compiler warnings])],
29  [case "$enableval" in
30     no)
31       ;;
32     '' | yes)
33       WARNING_CXXFLAGS="-Wall"
34       ;;
35     maximum)
36       WARNING_CXXFLAGS="-Wall"
37       PICKY_CXXFLAGS="-Wextra -pedantic -Wno-long-long -Weffc++ -Wmissing-declarations"
38       ;;
39     error)
40       WARNING_CXXFLAGS="-Wall -Werror"
41       PICKY_CXXFLAGS="-Wextra -pedantic -Wno-long-long -Weffc++ -Wmissing-declarations"
42       ;;
43     distcheck)
44       WARNING_CXXFLAGS="-Wall -Werror"
45       PICKY_CXXFLAGS="-Wextra -pedantic -Wno-long-long -Weffc++ -Wmissing-declarations"
46       AC_LANG_PUSH(C++)
47       AX_CHECK_COMPILE_FLAG([-Wno-error=unused-parameter],
48         [PICKY_CXXFLAGS="$PICKY_CXXFLAGS -Wno-error=unused-parameter"], [], [-Werror])
49       AX_CHECK_COMPILE_FLAG([-Wno-error=c++11-extensions],
50         [PICKY_CXXFLAGS="$PICKY_CXXFLAGS -Wno-error=c++11-extensions"], [], [-Werror])
51       AX_CHECK_COMPILE_FLAG([-Wno-error=deprecated-declarations],
52         [PICKY_CXXFLAGS="$PICKY_CXXFLAGS -Wno-error=deprecated-declarations"], [], [-Werror])
53       AC_LANG_POP(C++)
54       ;;
55     *)
56       AC_MSG_ERROR([Unknown argument '$enableval' to --enable-compile-warnings])
57       ;;
58   esac],
59  [WARNING_CXXFLAGS="-Wall"])
60AC_SUBST([WARNING_CXXFLAGS])
61AC_SUBST([PICKY_CXXFLAGS])
62
63# We want to check for compiler flag support, but there is no way to make
64# clang's "argument unused" warning fatal.  So we invoke the compiler through a
65# wrapper script that greps for this message.
66
67saved_CC="$CC"
68saved_CXX="$CXX"
69saved_LD="$LD"
70flag_wrap="$srcdir/scripts/wrap-compiler-for-flag-check"
71CC="$flag_wrap $CC"
72CXX="$flag_wrap $CXX"
73LD="$flag_wrap $LD"
74
75# We use the same hardening flags for C and C++.  We must check that each flag
76# is supported by both compilers.
77AC_DEFUN([check_cc_cxx_flag],
78 [AC_LANG_PUSH(C)
79  AX_CHECK_COMPILE_FLAG([$1],
80   [AC_LANG_PUSH(C++)
81    AX_CHECK_COMPILE_FLAG([$1], [$2], [$3], [-Werror $4])
82    AC_LANG_POP(C++)],
83   [$3], [-Werror $4])
84  AC_LANG_POP(C)])
85AC_DEFUN([check_link_flag],
86 [AX_CHECK_LINK_FLAG([$1], [$2], [$3], [-Werror $4])])
87
88AC_ARG_ENABLE([hardening],
89  [AS_HELP_STRING([--enable-hardening],
90    [Enable compiler and linker options to frustrate memory corruption exploits @<:@yes@:>@])],
91  [hardening="$enableval"],
92  [hardening="yes"])
93
94HARDEN_CFLAGS=""
95HARDEN_LDFLAGS=""
96AS_IF([test x"$hardening" != x"no"], [
97  check_cc_cxx_flag([-fno-strict-overflow], [HARDEN_CFLAGS="$HARDEN_CFLAGS -fno-strict-overflow"])
98
99  # This one will likely succeed, even on platforms where it does nothing.
100  check_cc_cxx_flag([-D_FORTIFY_SOURCE=2], [HARDEN_CFLAGS="$HARDEN_CFLAGS -D_FORTIFY_SOURCE=2"])
101
102  check_link_flag([-fstack-protector-all],
103   [HARDEN_CFLAGS="$HARDEN_CFLAGS -fstack-protector-all"
104    check_cc_cxx_flag([-Wstack-protector], [HARDEN_CFLAGS="$HARDEN_CFLAGS -Wstack-protector"],
105      [], [-fstack-protector-all])
106    check_cc_cxx_flag([--param ssp-buffer-size=1], [HARDEN_CFLAGS="$HARDEN_CFLAGS --param ssp-buffer-size=1"],
107      [], [-fstack-protector-all])])
108
109  check_cc_cxx_flag([-fPIE],
110   [check_link_flag([-fPIE -pie],
111     [HARDEN_CFLAGS="$HARDEN_CFLAGS -fPIE"
112      HARDEN_LDFLAGS="$HARDEN_LDFLAGS -pie"],
113     [check_link_flag([-fPIE -Wl,-pie],
114       [HARDEN_CFLAGS="$HARDEN_CFLAGS -fPIE"
115        HARDEN_LDFLAGS="$HARDEN_LDFLAGS -Wl,-pie"])])])
116
117  check_link_flag([-Wl,-z,relro],
118   [HARDEN_LDFLAGS="$HARDEN_LDFLAGS -Wl,-z,relro"
119    check_link_flag([-Wl,-z,now], [HARDEN_LDFLAGS="$HARDEN_LDFLAGS -Wl,-z,now"])])])
120AC_SUBST([HARDEN_CFLAGS])
121AC_SUBST([HARDEN_LDFLAGS])
122
123# Also check for a few non-hardening-related flags.
124MISC_CXXFLAGS=""
125AC_LANG_PUSH(C++)
126AX_CHECK_COMPILE_FLAG([-fno-default-inline],
127  [MISC_CXXFLAGS="$MISC_CXXFLAGS -fno-default-inline"], [], [-Werror])
128AX_CHECK_COMPILE_FLAG([-pipe],
129  [MISC_CXXFLAGS="$MISC_CXXFLAGS -pipe"], [], [-Werror])
130AC_LANG_POP(C++)
131AC_SUBST([MISC_CXXFLAGS])
132
133# End of flag tests.
134CC="$saved_CC"
135CXX="$saved_CXX"
136LD="$saved_LD"
137
138AC_ARG_ENABLE([client],
139  [AS_HELP_STRING([--enable-client], [Build the mosh-client program @<:@yes@:>@])],
140  [build_client="$enableval"],
141  [build_client="yes"])
142AM_CONDITIONAL([BUILD_CLIENT], [test x"$build_client" != xno])
143
144AC_ARG_ENABLE([server],
145  [AS_HELP_STRING([--enable-server], [Build the mosh-server program @<:@yes@:>@])],
146  [build_server="$enableval"],
147  [build_server="yes"])
148AM_CONDITIONAL([BUILD_SERVER], [test x"$build_server" != xno])
149
150AC_ARG_ENABLE([examples],
151  [AS_HELP_STRING([--enable-examples], [Build the miscellaneous programs in src/examples @<:@no@:>@])],
152  [build_examples="$enableval"],
153  [build_examples="no"])
154AM_CONDITIONAL([BUILD_EXAMPLES], [test x"$build_examples" != xno])
155
156AC_ARG_ENABLE([ufw],
157  [AS_HELP_STRING([--enable-ufw], [Install firewall profile for ufw (Uncomplicated Firewall) @<:@no@:>@])],
158  [install_ufw="$enableval"],
159  [install_ufw="no"])
160AM_CONDITIONAL([INSTALL_UFW], [test x"$install_ufw" != xno])
161
162AC_ARG_ENABLE([completion],
163  [AS_HELP_STRING([--enable-completion], [Install bash_completion rule @<:@no@:>@])],
164  [install_completion="$enableval"],
165  [install_completion="no"])
166AM_CONDITIONAL([INSTALL_COMPLETION], [test x"$install_completion" != xno])
167
168# Checks for libraries.
169AC_ARG_WITH([utempter],
170  [AS_HELP_STRING([--with-utempter], [write utmp entries using libutempter @<:@check@:>@])],
171  [with_utempter="$withval"],
172  [with_utempter="check"])
173AS_IF([test x"$with_utempter" != xno],
174  [AC_SEARCH_LIBS([utempter_remove_record], [utempter],
175    [AC_DEFINE([HAVE_UTEMPTER], [1], [Define if libutempter is available.])],
176    [AS_IF([test x"$with_utempter" = xcheck],
177      [AC_MSG_WARN([Unable to find libutempter; utmp entries will not be made.])],
178      [AC_MSG_ERROR([--with-utempter was given but libutempter was not found.])])])])
179
180AC_SEARCH_LIBS([compress], [z], , [AC_MSG_ERROR([Unable to find zlib.])])
181
182AC_SEARCH_LIBS([socket], [socket network])
183AC_SEARCH_LIBS([inet_addr], [nsl])
184
185AC_SEARCH_LIBS([clock_gettime], [rt])
186
187# Checks for header files.
188AC_CHECK_HEADERS(m4_normalize([
189  fcntl.h
190  langinfo.h
191  limits.h
192  locale.h
193  netdb.h
194  netinet/in.h
195  stddef.h
196  stdint.h
197  inttypes.h
198  stdlib.h
199  string.h
200  sys/ioctl.h
201  sys/resource.h
202  sys/socket.h
203  sys/stat.h
204  sys/time.h
205  termios.h
206  unistd.h
207  wchar.h
208  wctype.h
209  ]), [], [AC_MSG_ERROR([Missing required header file.])])
210
211AC_CHECK_HEADERS([pty.h util.h libutil.h paths.h])
212AC_CHECK_HEADERS([endian.h sys/endian.h])
213AC_CHECK_HEADERS([utmpx.h])
214AC_CHECK_HEADERS([termio.h])
215AC_CHECK_HEADERS([sys/uio.h])
216AC_LANG_PUSH(C++)
217AC_CHECK_HEADERS([memory tr1/memory])
218AC_LANG_POP(C++)
219
220# Checks for typedefs, structures, and compiler characteristics.
221AC_HEADER_STDBOOL
222AC_C_INLINE
223AC_TYPE_INT64_T
224AC_TYPE_PID_T
225AC_C_RESTRICT
226AC_TYPE_SIZE_T
227AC_TYPE_SSIZE_T
228AC_TYPE_UINT16_T
229AC_TYPE_UINT32_T
230AC_TYPE_UINT64_T
231AC_TYPE_UINT8_T
232AC_TYPE_UINTPTR_T
233
234# Checks for library functions.
235AC_FUNC_FORK
236AC_FUNC_MBRTOWC
237AC_CHECK_FUNCS(m4_normalize([
238  gettimeofday
239  setrlimit
240  iswprint
241  memchr
242  memset
243  nl_langinfo
244  posix_memalign
245  setenv
246  setlocale
247  sigaction
248  socket
249  strchr
250  strdup
251  strncasecmp
252  strtok
253  strerror
254  strtol
255  wcwidth
256  cfmakeraw
257  pselect
258  getaddrinfo
259  getnameinfo
260  pledge
261  ]))
262
263# Start by trying to find the needed tinfo parts by pkg-config
264PKG_CHECK_MODULES([TINFO], [tinfo],
265  [AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if <curses.h> is present])],
266  [PKG_CHECK_MODULES([TINFO], [ncurses],
267    [AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if <curses.h> is present])],
268    [AX_CHECK_LIBRARY([TINFO], [curses.h], [tinfo],
269      [AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if <curses.h> is present])
270        AC_SUBST([TINFO_CFLAGS], ["$TINFO_CPPFLAGS"])
271        AC_SUBST([TINFO_LIBS], ["$TINFO_LDFLAGS -ltinfo"])],)])])
272
273# Then try to find it in a specific install dir
274AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses=DIR], [Where curses is installed]),
275    [if test $withval != yes; then
276        cv_curses=$withval
277    fi
278    if test x$cv_curses != x/usr; then
279        CURSES_LDFLAGS="-L${cv_curses}/lib"
280        CURSES_CPPFLAGS="-I${cv_curses}/include"
281    fi])
282
283if test "x$ax_cv_have_TINFO" = xno ; then
284    # save away old LDFLAGS/CPPFLAGS and check for curses with cv_curses
285    old_LDFLAGS="$LDFLAGS"
286    old_CPPFLAGS="$CPPFLAGS"
287    LDFLAGS="$LDFLAGS $CURSES_LDFLAGS"
288    CPPFLAGS="$CPPFLAGS $CURSES_CPPFLAGS"
289
290    AX_WITH_CURSES
291    # restore old LDFLAGS/CPPFLAGS
292    LDFLAGS="$old_LDFLAGS"
293    CPPFLAGS="$old_CPPFLAGS"
294
295    if test "x$ax_cv_curses_which" = xno ; then
296        AC_MSG_ERROR([requires either tinfo, NcursesW or Ncurses library])
297    else
298        AC_SUBST([TINFO_LIBS], ["$CURSES_LDFLAGS $CURSES_LIB"])
299        AC_SUBST([TINFO_CFLAGS], ["$CURSES_CPPFLAGS"])
300    fi
301fi
302
303dnl Default to OpenSSL, or OS X crypto library if found
304AC_CHECK_HEADERS([CommonCrypto/CommonCrypto.h],
305  [default_crypto_library="apple-common-crypto"],
306  [default_crypto_library="openssl"]
307)
308
309dnl Allow user to select over the default.
310AC_ARG_WITH(
311  [crypto-library],
312  [AS_HELP_STRING([--with-crypto-library=library], [build with the given crypto library, TYPE=openssl|nettle|apple-common-crypto @<:@default=openssl@:>@])],
313  [
314    case "${withval}" in
315      openssl|nettle|apple-common-crypto) ;;
316      *) AC_MSG_ERROR([bad value ${withval} for --with-crypto-library]) ;;
317    esac
318  ],
319  [with_crypto_library="$default_crypto_library"]
320)
321
322dnl Checks for chosen crypto library
323case "${with_crypto_library}" in
324  openssl)
325    PKG_CHECK_MODULES([CRYPTO], [openssl],
326      [AC_DEFINE([USE_OPENSSL_AES], [1], [Use OpenSSL library])],
327      [AX_CHECK_LIBRARY([CRYPTO], [openssl/aes.h], [crypto],
328        [AC_DEFINE([USE_OPENSSL_AES], [1], [Use OpenSSL library])
329          AC_SUBST([CRYPTO_CFLAGS], ["$CRYPTO_CPPFLAGS"])
330          AC_SUBST([CRYPTO_LIBS], ["$CRYPTO_LDFLAGS -lcrypto"])],
331        [AC_MSG_ERROR([OpenSSL crypto library not found])])])
332        ;;
333  nettle)
334    PKG_CHECK_MODULES([CRYPTO], [nettle],
335      [],
336      [AC_MSG_ERROR([Nettle crypto library not found])])
337    AC_DEFINE([USE_NETTLE_AES], [1], [Use Nettle library])
338    ;;
339  apple-common-crypto)
340    dnl Common Crypto is in Apple's standard paths and base libraries.
341    dnl So just check for presence of the header.
342    AC_CHECK_HEADERS([CommonCrypto/CommonCrypto.h],
343      [],
344      [AC_MSG_ERROR([Apple Common Crypto header not found])])
345    AC_DEFINE([USE_APPLE_COMMON_CRYPTO_AES], [1], [Use Apple Common Crypto library])
346    ;;
347esac
348
349AC_CHECK_DECL([forkpty],
350  [AC_DEFINE([FORKPTY_IN_LIBUTIL], [1],
351     [Define if libutil.h necessary for forkpty().])],
352  , [[#include <sys/types.h>
353  #include <libutil.h>]])
354
355AC_SEARCH_LIBS([forkpty], [util bsd], [
356  AC_DEFINE([HAVE_FORKPTY],, [Define if you have forkpty().])
357])
358
359AC_MSG_CHECKING([whether pipe2(..., O_CLOEXEC) is supported])
360AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE
361#include <unistd.h>
362#include <fcntl.h>
363int pipefd[2];
364]], [[(void) pipe2(pipefd, O_CLOEXEC);]])],
365  [AC_DEFINE([HAVE_PIPE2_CLOEXEC], [1],
366     [Define if pipe2(..., O_CLOEXEC) is available.])
367   AC_MSG_RESULT([yes])],
368  [AC_MSG_RESULT([no])])
369
370AC_MSG_CHECKING([whether FD_ISSET() argument is const])
371AC_LANG_PUSH(C++)
372AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/select.h>
373class T {
374public:
375  fd_set fds;
376  bool Fun( void ) const { return FD_ISSET( 0, &fds ); } };]],
377[[T x; return x.Fun();]])],
378  [AC_DEFINE([FD_ISSET_IS_CONST], [1],
379     [Define if FD_ISSET() fd_set argument is const.])
380   AC_MSG_RESULT([yes])],
381  [AC_MSG_RESULT([no])])
382AC_LANG_POP(C++)
383
384AC_MSG_CHECKING([whether std::shared_ptr is available])
385AC_LANG_PUSH(C++)
386AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <memory>
387class T {
388public:
389  std::shared_ptr<int> Fun( void ) { return std::shared_ptr<int>( new int ( 0 ) ); } };]],
390[[T x; return !!x.Fun();]])],
391  [AC_DEFINE([HAVE_STD_SHARED_PTR], [1],
392     [Define if std::shared_ptr is available.])
393   AC_MSG_RESULT([yes])],
394  [AC_MSG_RESULT([no])])
395AC_LANG_POP(C++)
396
397AC_MSG_CHECKING([whether std::tr1::shared_ptr is available])
398AC_LANG_PUSH(C++)
399AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <tr1/memory>
400class T {
401public:
402  std::tr1::shared_ptr<int> Fun( void ) { return std::tr1::shared_ptr<int>( new int ( 0 ) ); } };]],
403[[T x; return !!x.Fun();]])],
404  [AC_DEFINE([HAVE_STD_TR1_SHARED_PTR], [1],
405     [Define if std::tr1::shared_ptr is available.])
406   AC_MSG_RESULT([yes])],
407  [AC_MSG_RESULT([no])])
408AC_LANG_POP(C++)
409
410AC_MSG_CHECKING([whether clock_gettime() is supported])
411AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>
412struct timespec ts;
413]], [[return clock_gettime(CLOCK_MONOTONIC, &ts);]])],
414  [AC_DEFINE([HAVE_CLOCK_GETTIME], [1],
415     [Define if clock_gettime() is available.])
416   AC_MSG_RESULT([yes])],
417  [AC_MSG_RESULT([no])])
418
419AC_CHECK_DECL([mach_absolute_time],
420  [AC_DEFINE([HAVE_MACH_ABSOLUTE_TIME], [1],
421     [Define if mach_absolute_time is available.])],
422  , [[#include <mach/mach_time.h>]])
423
424
425AC_CHECK_DECLS([__builtin_ctz])
426
427AC_CHECK_DECLS([ffs], [], [],
428  [[#include <strings.h>]])
429
430AC_CHECK_DECLS([be64toh, betoh64, bswap64, __builtin_bswap64], [], [],
431  [[#if defined(HAVE_ENDIAN_H)
432#include <endian.h>
433#elif defined(HAVE_SYS_ENDIAN_H)
434#include <sys/types.h>
435#include <sys/endian.h>
436#endif]])
437
438AS_IF([test x"$ac_cv_have_decl_be64toh" != xyes &&
439       test x"$ac_cv_have_decl_betoh64" != xyes],
440  [AC_CHECK_DECL([OSSwapHostToBigInt64],
441     [AC_DEFINE([HAVE_OSX_SWAP], [1],
442        [Define if OSSwapHostToBigInt64 and friends exist.])],
443     [AC_MSG_WARN([Unable to find byte swapping functions; using built-in routines.])],
444     [[#include <libkern/OSByteOrder.h>]])])
445
446AC_CHECK_DECL([IP_MTU_DISCOVER],
447  [AC_DEFINE([HAVE_IP_MTU_DISCOVER], [1],
448     [Define if IP_MTU_DISCOVER is a valid sockopt.])],
449  , [[#include <netinet/in.h>]])
450
451AC_CHECK_DECL([IP_RECVTOS],
452  [AC_DEFINE([HAVE_IP_RECVTOS], [1],
453     [Define if IP_RECVTOS is a valid sockopt.])],
454  , [[#include <netinet/in.h>]])
455
456AC_CHECK_DECL([__STDC_ISO_10646__],
457  [],
458  [AC_MSG_WARN([C library doesn't advertise wchar_t is Unicode (OS X works anyway with workaround).])],
459  [[#include <wchar.h>]])
460
461AC_CHECK_DECL([IUTF8],
462  [AC_DEFINE([HAVE_IUTF8], [1],
463     [Define if IUTF8 is a defined termios mode.])],
464  [AC_MSG_WARN([No IUTF8 termios mode; character-erase of multibyte character sequence probably does not work properly in canonical mode on this platform.])],
465  [[#include <termios.h>]])
466
467# Checks for protobuf
468PKG_CHECK_MODULES([protobuf], [protobuf])
469
470# On Debian Sid 2016-03-16ish at least, "pkgconfig --libs protobuf"
471# gives us the bogus "-lprotobuf -pthread -lpthread"; remove
472# "-lpthread" which misconfigures compile, causing a segfault in
473# mosh-server.
474AS_IF([echo "$protobuf_LIBS" | grep -q -- -pthread],
475  [protobuf_LIBS="`echo $protobuf_LIBS | sed 's/-lpthread//g'`"])
476
477# Bash completion needs to ask where it goes if >= 2.0 is installed.
478AS_IF([test "$install_completion" != no],
479  [PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0],
480     [if test "$prefix" = "NONE"; then
481        completions="`pkg-config --variable=completionsdir bash-completion`"
482      else
483        completions="`pkg-config --define-variable=prefix=$prefix --variable=completionsdir bash-completion`"
484      fi],
485     [completions="${sysconfdir}/bash_completion.d"])
486   AC_SUBST([completions])])
487
488AC_CONFIG_FILES([
489  Makefile
490  src/Makefile
491  src/crypto/Makefile
492  src/frontend/Makefile
493  src/network/Makefile
494  src/protobufs/Makefile
495  src/statesync/Makefile
496  src/terminal/Makefile
497  src/util/Makefile
498  scripts/Makefile
499  src/examples/Makefile
500  src/tests/Makefile
501  man/Makefile
502  conf/Makefile
503])
504AC_OUTPUT
505
506AC_MSG_NOTICE([ === Configuration results ===])
507AC_MSG_NOTICE([Version:             $PACKAGE_VERSION])
508AC_MSG_NOTICE([c++ compiler:        $CXX])
509AC_MSG_NOTICE([Warning CXXFLAGS:    $WARNING_CXXFLAGS])
510AC_MSG_NOTICE([Picky CXXFLAGS:      $PICKY_CXXFLAGS])
511AC_MSG_NOTICE([Harden CFLAGS:       $HARDEN_CFLAGS])
512AC_MSG_NOTICE([ =============================])
513