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