config/cxxflags.m4
changeset 1357 8d9c47f31699
child 1369 f1cf6b807414
equal deleted inserted replaced
-1:000000000000 0:ffa0040164b8
       
     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],
       
    77 AS_HELP_STRING([--enable-debug@<:@=yes|no|full@:>@], [Build with debugging support])
       
    78 AS_HELP_STRING([--disable-debug], [Build without debugging support @<:@default@:>@]),
       
    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],
       
   109 AS_HELP_STRING([--enable-extra-warnings], [Enable extra warning messages])
       
   110 AS_HELP_STRING([--disable-extra-warnings], [Disable extra warning messages @<:@default@:>@]),
       
   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])