| [1350] | 1 | dnl LX_C_IFDEF(MACRO-NAME, ACTION-IF-DEF, ACTION-IF-NOT-DEF) | 
|---|
|  | 2 | dnl | 
|---|
|  | 3 | dnl Check for the definition of macro MACRO-NAME using the current | 
|---|
|  | 4 | dnl language's compiler. | 
|---|
|  | 5 | dnl | 
|---|
|  | 6 | dnl Orignally written by Ludovic CourtÚs <ludo@chbouib.org> | 
|---|
|  | 7 | AC_DEFUN([LX_C_IFDEF], | 
|---|
|  | 8 | [AC_COMPILE_IFELSE([#ifndef $1 | 
|---|
|  | 9 | # error "Macro $1 is undefined!" | 
|---|
|  | 10 | /* For some compilers (eg. SGI's CC), #error is not | 
|---|
|  | 11 | enough...  */ | 
|---|
|  | 12 | please, do fail | 
|---|
|  | 13 | #endif], | 
|---|
|  | 14 | [$2], [$3])]) | 
|---|
|  | 15 |  | 
|---|
|  | 16 |  | 
|---|
|  | 17 | dnl LX_CXX_COMPILER_VENDOR(VENDOR-NAME, [NICKNAME]) | 
|---|
|  | 18 | dnl | 
|---|
|  | 19 | dnl Set VENDOR-NAME to the lower-case name of the compiler vendor or | 
|---|
|  | 20 | dnl `unknown' if the compiler's vendor is unknown. `compaq' means the | 
|---|
|  | 21 | dnl CXX compiler as available on Tru64/OSF1/Digital Unix on Alpha | 
|---|
|  | 22 | dnl machines. If NICKNAME is provided, set it to the compiler's usual | 
|---|
|  | 23 | dnl name (eg. `g++', `cxx', `aCC', etc.). | 
|---|
|  | 24 | dnl | 
|---|
|  | 25 | dnl Based on work of Ludovic CourtÚs <ludo@chbouib.org> | 
|---|
|  | 26 | AC_DEFUN([LX_CXX_COMPILER_VENDOR], | 
|---|
|  | 27 | [AC_REQUIRE([AC_PROG_CXX]) | 
|---|
|  | 28 | AC_REQUIRE([AC_PROG_CXXCPP]) | 
|---|
|  | 29 | AC_CACHE_CHECK([the C++ compiler vendor], | 
|---|
|  | 30 | [lx_cv_cxx_compiler_vendor], | 
|---|
|  | 31 |  | 
|---|
|  | 32 | [AC_LANG_PUSH([C++]) | 
|---|
|  | 33 |  | 
|---|
|  | 34 | dnl Intel's icpc | 
|---|
|  | 35 | LX_C_IFDEF([__INTEL_COMPILER], | 
|---|
|  | 36 | [lx_cv_cxx_compiler_vendor=intel], | 
|---|
|  | 37 | [dnl GNU C++ | 
|---|
|  | 38 | LX_C_IFDEF([__GNUG__], | 
|---|
|  | 39 | [lx_cv_cxx_compiler_vendor=gnu], | 
|---|
|  | 40 | [LX_C_IFDEF([__DECCXX], | 
|---|
|  | 41 | [lx_cv_cxx_compiler_vendor=compaq], | 
|---|
|  | 42 | [dnl HP's aCC | 
|---|
|  | 43 | LX_C_IFDEF([__HP_aCC], | 
|---|
|  | 44 | [lx_cv_cxx_compiler_vendor=hp], | 
|---|
|  | 45 | [dnl SGI CC | 
|---|
|  | 46 | LX_C_IFDEF([__sgi], | 
|---|
|  | 47 | [lx_cv_cxx_compiler_vendor=sgi], | 
|---|
|  | 48 | [dnl Note:  We are using the C compiler because VC++ doesn't | 
|---|
|  | 49 | dnl recognize `.cc'(which is used by `configure') as a C++ file | 
|---|
|  | 50 | dnl extension and requires `/TP' to be passed. | 
|---|
|  | 51 | AC_LANG_PUSH([C]) | 
|---|
|  | 52 | LX_C_IFDEF([_MSC_VER], | 
|---|
|  | 53 | [lx_cv_cxx_compiler_vendor=microsoft], | 
|---|
|  | 54 | [lx_cv_cxx_compiler_vendor=unknown]) | 
|---|
|  | 55 | AC_LANG_POP()])])])])]) | 
|---|
|  | 56 |  | 
|---|
|  | 57 | AC_LANG_POP()]) | 
|---|
|  | 58 | $1="$lx_cv_cxx_compiler_vendor" | 
|---|
|  | 59 |  | 
|---|
|  | 60 | dnl The compiler nickname | 
|---|
|  | 61 | ifelse([$2], , [], | 
|---|
|  | 62 | [case "$lx_cv_cxx_compiler_vendor" in | 
|---|
|  | 63 | intel)     $2=icpc;; | 
|---|
|  | 64 | gnu)       $2=g++;; | 
|---|
|  | 65 | compaq)    $2=cxx;; | 
|---|
|  | 66 | hp)        $2=aCC;; | 
|---|
|  | 67 | sgi)       $2=CC;; | 
|---|
|  | 68 | microsoft) $2=cl;; | 
|---|
|  | 69 | *)         $2=unknown;; | 
|---|
|  | 70 | esac])]) | 
|---|
|  | 71 |  | 
|---|
|  | 72 |  | 
|---|
|  | 73 | dnl Set some debugging and error reporting related compiler flags. | 
|---|
|  | 74 | dnl uses lx_user_cxxflags | 
|---|
|  | 75 | AC_DEFUN([LX_SET_CXXFLAGS], | 
|---|
|  | 76 | [AC_ARG_ENABLE([debug], | 
|---|
| [1369] | 77 | AS_HELP_STRING([--enable-debug@<:@=yes|no|full@:>@], [build with debugging support]) | 
|---|
|  | 78 | AS_HELP_STRING([--disable-debug], [build without debugging support @<:@default@:>@]), | 
|---|
| [1350] | 79 | [], [enable_debug=no]) | 
|---|
|  | 80 | LX_CXX_COMPILER_VENDOR([lx_cxx_compiler_vendor]) | 
|---|
|  | 81 | AC_MSG_CHECKING([whether to build with debugging support]) | 
|---|
|  | 82 | if test x"$enable_debug" != x"no"; then | 
|---|
|  | 83 | AC_DEFINE([DEBUG], [1], [Define for debugging support]) | 
|---|
|  | 84 |  | 
|---|
|  | 85 | lx_gnu_cxxflags="-ansi -pedantic -Wall -Wextra" | 
|---|
|  | 86 | lx_intel_cxxflags="-g" | 
|---|
|  | 87 | lx_unknown_cxxflags="-g" | 
|---|
|  | 88 |  | 
|---|
|  | 89 | if test x"$enable_debug" = x"yes"; then | 
|---|
|  | 90 | lx_gnu_cxxflags="-g $lx_gnu_cxxflags" | 
|---|
|  | 91 | AC_MSG_RESULT([yes]) | 
|---|
|  | 92 | else | 
|---|
|  | 93 | lx_gnu_cxxflags="-g3 --no-inline $lx_gnu_cxxflags" | 
|---|
|  | 94 | AC_MSG_RESULT([full]) | 
|---|
|  | 95 | fi | 
|---|
|  | 96 |  | 
|---|
|  | 97 | if test x"$lx_cxx_compiler_vendor" = x"gnu"; then | 
|---|
|  | 98 | CXXFLAGS="$lx_user_cxxflags $lx_gnu_cxxflags" | 
|---|
|  | 99 | elif test x"$lx_cxx_compiler_vendor" = x"intel"; then | 
|---|
|  | 100 | CXXFLAGS="$lx_user_cxxflags $lx_intel_cxxflags" | 
|---|
|  | 101 | else | 
|---|
|  | 102 | CXXFLAGS="$lx_user_cxxflags $lx_unknown_cxxflags" | 
|---|
|  | 103 | fi | 
|---|
|  | 104 | else | 
|---|
|  | 105 | AC_MSG_RESULT([no]) | 
|---|
|  | 106 | fi | 
|---|
|  | 107 |  | 
|---|
|  | 108 | AC_ARG_ENABLE([extra-warnings], | 
|---|
| [1369] | 109 | AS_HELP_STRING([--enable-extra-warnings], [enable extra warning messages]) | 
|---|
|  | 110 | AS_HELP_STRING([--disable-extra-warnings], [disable extra warning messages @<:@default@:>@]), | 
|---|
| [1350] | 111 | [],[enable_extra_warnings=no]) | 
|---|
|  | 112 | AC_MSG_CHECKING(whether to enable extra warning flags) | 
|---|
|  | 113 | if test x"$enable_extra_warnings" != x"no"; then | 
|---|
|  | 114 | if test x"$lx_cxx_compiler_vendor" = x"gnu"; then | 
|---|
|  | 115 | CXXFLAGS="$CXXFLAGS -ansi -pedantic -Wall -Wextra" | 
|---|
|  | 116 | CXXFLAGS="$CXXFLAGS -Wfloat-equal -Wundef -Wendif-labels -Wshadow" | 
|---|
|  | 117 | CXXFLAGS="$CXXFLAGS -Wpointer-arith -Wcast-qual -Wcast-align" | 
|---|
|  | 118 | CXXFLAGS="$CXXFLAGS -Wwrite-strings -Wconversion -Waggregate-return" | 
|---|
|  | 119 | CXXFLAGS="$CXXFLAGS -Wmissing-noreturn -Wmissing-format-attribute" | 
|---|
|  | 120 | CXXFLAGS="$CXXFLAGS -Wpacked -Wpadded -Wredundant-decls" | 
|---|
|  | 121 | CXXFLAGS="$CXXFLAGS -Wunreachable-code -Winline -Winvalid-pch" | 
|---|
|  | 122 | CXXFLAGS="$CXXFLAGS -Wlong-long -Wdisabled-optimization" | 
|---|
|  | 123 | CXXFLAGS="$CXXFLAGS -Wstack-protector" | 
|---|
|  | 124 | elif test x"$lx_cxx_compiler_vendor" = x"intel"; then | 
|---|
|  | 125 | CXXFLAGS="$CXXFLAGS -w2" | 
|---|
|  | 126 | fi | 
|---|
|  | 127 | AC_MSG_RESULT([yes]) | 
|---|
|  | 128 | else | 
|---|
|  | 129 | AC_MSG_RESULT([no]) | 
|---|
|  | 130 | fi]) | 
|---|