config/cxxflags.m4
author alpar
Thu, 09 Jun 2005 16:23:16 +0000
changeset 1465 60c2961c75ca
parent 1350 fb794edbf04b
permissions -rw-r--r--
Akos' research pointed out that it is a must.
     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])