1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
dnl Autoconf support for C++
AC_DEFUN([ID3_CXX_WARNINGS],[
AC_ARG_ENABLE(cxx-warnings,
[ --enable-cxx-warnings=[no/minimum/yes] Turn on compiler warnings.],,enable_cxx_warnings=minimum)
AC_MSG_CHECKING(what warning flags to pass to the C++ compiler)
warnCXXFLAGS=
if test "x$GCC" != xyes; then
enable_compile_warnings=no
fi
if test "x$enable_cxx_warnings" != "xno"; then
if test "x$GCC" = "xyes"; then
case " $CXXFLAGS " in
*[\ \ ]-Wall[\ \ ]*) ;;
*) warnCXXFLAGS="-Wall -Wno-unused -Wno-inline -Woverloaded-virtual -Wmissing-declarations" ;;
esac
## -W is not all that useful. And it cannot be controlled
## with individual -Wno-xxx flags, unlike -Wall
if test "x$enable_cxx_warnings" = "xyes"; then
warnCXXFLAGS="$warnCXXFLAGS -Wmissing-prototypes -Wmissing-declarations -Woverloaded-virtual"
fi
fi
fi
AC_MSG_RESULT($warnCXXFLAGS)
AC_ARG_ENABLE(iso-cxx,
[ --enable-iso-cxx Try to warn if code is not ISO C++ ],,
enable_iso_cxx=no)
AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler)
complCXXFLAGS=
if test "x$enable_iso_cxx" != "xno"; then
if test "x$GCC" = "xyes"; then
case " $CXXFLAGS " in
*[\ \ ]-ansi[\ \ ]*) ;;
*) complCXXFLAGS="$complCXXFLAGS -ansi" ;;
esac
case " $CXXFLAGS " in
*[\ \ ]-pedantic[\ \ ]*) ;;
*) complCXXFLAGS="$complCXXFLAGS -pedantic" ;;
esac
fi
fi
AC_MSG_RESULT($complCXXFLAGS)
if test "x$cxxflags_set" != "xyes"; then
CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS"
cxxflags_set=yes
AC_SUBST(cxxflags_set)
fi
])
# -----------------------------------------------------------------------
# This macro tests the C++ compiler for various portability problem.
# 1. Defines CXX_HAS_NO_BOOL if the compiler does not support the bool
# data type
# 2. Defines CXX_HAS_BUGGY_FOR_LOOPS if the compiler has buggy
# scoping for the for-loop
# Seperately we provide some config.h.bot code to be added to acconfig.h
# that implements work-arounds for these problems.
# -----------------------------------------------------------------------
dnl ACCONFIG TEMPLATE
dnl #undef CXX_HAS_BUGGY_FOR_LOOPS
dnl #undef CXX_HAS_NO_BOOL
dnl END ACCONFIG
AC_DEFUN(ID3_CXX_PORTABILITY,[
AC_PROVIDE([$0])
dnl
dnl Check for common C++ portability problems
dnl
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
dnl Check whether we have bool
AC_MSG_CHECKING(whether C++ has bool)
AC_TRY_RUN([main() { bool b1=true; bool b2=false; }],
[ AC_MSG_RESULT(yes) ],
[ AC_MSG_RESULT(no)
AC_DEFINE(CXX_HAS_NO_BOOL) ],
[ AC_MSG_WARN(Don't cross-compile)]
)
dnl Test whether C++ has buggy for-loops
AC_MSG_CHECKING(whether C++ has correct scoping in for-loops)
AC_TRY_COMPILE([#include <iostream.h>], [
for (int i=0;i<10;i++) { }
for (int i=0;i<10;i++) { }
], [ AC_MSG_RESULT(yes) ],
[ AC_MSG_RESULT(no)
AC_DEFINE(CXX_HAS_BUGGY_FOR_LOOPS) ])
dnl Done with the portability checks
AC_LANG_RESTORE
])
dnl ACCONFIG BOTTOM
dnl
dnl // This file defines portability work-arounds for various proprietory
dnl // C++ compilers
dnl
dnl // Workaround for compilers with buggy for-loop scoping
dnl // That's quite a few compilers actually including recent versions of
dnl // Dec Alpha cxx, HP-UX CC and SGI CC.
dnl // The trivial "if" statement provides the correct scoping to the
dnl // for loop
dnl
dnl #ifdef CXX_HAS_BUGGY_FOR_LOOPS
dnl #undef for
dnl #define for if(1) for
dnl #endif
dnl
dnl //
dnl // If the C++ compiler we use doesn't have bool, then
dnl // the following is a near-perfect work-around.
dnl // You must make sure your code does not depend on "int" and "bool"
dnl // being two different types, in overloading for instance.
dnl //
dnl
dnl #ifdef CXX_HAS_NO_BOOL
dnl #define bool int
dnl #define true 1
dnl #define false 0
dnl #endif
dnl
dnl END ACCONFIG
|