ladanyi@1350: dnl LX_C_IFDEF(MACRO-NAME, ACTION-IF-DEF, ACTION-IF-NOT-DEF) ladanyi@1350: dnl ladanyi@1350: dnl Check for the definition of macro MACRO-NAME using the current ladanyi@1350: dnl language's compiler. ladanyi@1350: dnl ladanyi@1350: dnl Orignally written by Ludovic Courtès ladanyi@1350: AC_DEFUN([LX_C_IFDEF], ladanyi@1350: [AC_COMPILE_IFELSE([#ifndef $1 ladanyi@1350: # error "Macro $1 is undefined!" ladanyi@1350: /* For some compilers (eg. SGI's CC), #error is not ladanyi@1350: enough... */ ladanyi@1350: please, do fail ladanyi@1350: #endif], ladanyi@1350: [$2], [$3])]) ladanyi@1350: ladanyi@1350: ladanyi@1350: dnl LX_CXX_COMPILER_VENDOR(VENDOR-NAME, [NICKNAME]) ladanyi@1350: dnl ladanyi@1350: dnl Set VENDOR-NAME to the lower-case name of the compiler vendor or ladanyi@1350: dnl `unknown' if the compiler's vendor is unknown. `compaq' means the ladanyi@1350: dnl CXX compiler as available on Tru64/OSF1/Digital Unix on Alpha ladanyi@1350: dnl machines. If NICKNAME is provided, set it to the compiler's usual ladanyi@1350: dnl name (eg. `g++', `cxx', `aCC', etc.). ladanyi@1350: dnl ladanyi@1350: dnl Based on work of Ludovic Courtès ladanyi@1350: AC_DEFUN([LX_CXX_COMPILER_VENDOR], ladanyi@1350: [AC_REQUIRE([AC_PROG_CXX]) ladanyi@1350: AC_REQUIRE([AC_PROG_CXXCPP]) ladanyi@1350: AC_CACHE_CHECK([the C++ compiler vendor], ladanyi@1350: [lx_cv_cxx_compiler_vendor], ladanyi@1350: ladanyi@1350: [AC_LANG_PUSH([C++]) ladanyi@1350: ladanyi@1350: dnl Intel's icpc ladanyi@1350: LX_C_IFDEF([__INTEL_COMPILER], ladanyi@1350: [lx_cv_cxx_compiler_vendor=intel], ladanyi@1350: [dnl GNU C++ ladanyi@1350: LX_C_IFDEF([__GNUG__], ladanyi@1350: [lx_cv_cxx_compiler_vendor=gnu], ladanyi@1350: [LX_C_IFDEF([__DECCXX], ladanyi@1350: [lx_cv_cxx_compiler_vendor=compaq], ladanyi@1350: [dnl HP's aCC ladanyi@1350: LX_C_IFDEF([__HP_aCC], ladanyi@1350: [lx_cv_cxx_compiler_vendor=hp], ladanyi@1350: [dnl SGI CC ladanyi@1350: LX_C_IFDEF([__sgi], ladanyi@1350: [lx_cv_cxx_compiler_vendor=sgi], ladanyi@1350: [dnl Note: We are using the C compiler because VC++ doesn't ladanyi@1350: dnl recognize `.cc'(which is used by `configure') as a C++ file ladanyi@1350: dnl extension and requires `/TP' to be passed. ladanyi@1350: AC_LANG_PUSH([C]) ladanyi@1350: LX_C_IFDEF([_MSC_VER], ladanyi@1350: [lx_cv_cxx_compiler_vendor=microsoft], ladanyi@1350: [lx_cv_cxx_compiler_vendor=unknown]) ladanyi@1350: AC_LANG_POP()])])])])]) ladanyi@1350: ladanyi@1350: AC_LANG_POP()]) ladanyi@1350: $1="$lx_cv_cxx_compiler_vendor" ladanyi@1350: ladanyi@1350: dnl The compiler nickname ladanyi@1350: ifelse([$2], , [], ladanyi@1350: [case "$lx_cv_cxx_compiler_vendor" in ladanyi@1350: intel) $2=icpc;; ladanyi@1350: gnu) $2=g++;; ladanyi@1350: compaq) $2=cxx;; ladanyi@1350: hp) $2=aCC;; ladanyi@1350: sgi) $2=CC;; ladanyi@1350: microsoft) $2=cl;; ladanyi@1350: *) $2=unknown;; ladanyi@1350: esac])]) ladanyi@1350: ladanyi@1350: ladanyi@1350: dnl Set some debugging and error reporting related compiler flags. ladanyi@1350: dnl uses lx_user_cxxflags ladanyi@1350: AC_DEFUN([LX_SET_CXXFLAGS], ladanyi@1350: [AC_ARG_ENABLE([debug], ladanyi@1369: AS_HELP_STRING([--enable-debug@<:@=yes|no|full@:>@], [build with debugging support]) ladanyi@1369: AS_HELP_STRING([--disable-debug], [build without debugging support @<:@default@:>@]), ladanyi@1350: [], [enable_debug=no]) ladanyi@1350: LX_CXX_COMPILER_VENDOR([lx_cxx_compiler_vendor]) ladanyi@1350: AC_MSG_CHECKING([whether to build with debugging support]) ladanyi@1350: if test x"$enable_debug" != x"no"; then ladanyi@1350: AC_DEFINE([DEBUG], [1], [Define for debugging support]) ladanyi@1350: ladanyi@1350: lx_gnu_cxxflags="-ansi -pedantic -Wall -Wextra" ladanyi@1350: lx_intel_cxxflags="-g" ladanyi@1350: lx_unknown_cxxflags="-g" ladanyi@1350: ladanyi@1350: if test x"$enable_debug" = x"yes"; then ladanyi@1350: lx_gnu_cxxflags="-g $lx_gnu_cxxflags" ladanyi@1350: AC_MSG_RESULT([yes]) ladanyi@1350: else ladanyi@1350: lx_gnu_cxxflags="-g3 --no-inline $lx_gnu_cxxflags" ladanyi@1350: AC_MSG_RESULT([full]) ladanyi@1350: fi ladanyi@1350: ladanyi@1350: if test x"$lx_cxx_compiler_vendor" = x"gnu"; then ladanyi@1350: CXXFLAGS="$lx_user_cxxflags $lx_gnu_cxxflags" ladanyi@1350: elif test x"$lx_cxx_compiler_vendor" = x"intel"; then ladanyi@1350: CXXFLAGS="$lx_user_cxxflags $lx_intel_cxxflags" ladanyi@1350: else ladanyi@1350: CXXFLAGS="$lx_user_cxxflags $lx_unknown_cxxflags" ladanyi@1350: fi ladanyi@1350: else ladanyi@1350: AC_MSG_RESULT([no]) ladanyi@1350: fi ladanyi@1350: ladanyi@1350: AC_ARG_ENABLE([extra-warnings], ladanyi@1369: AS_HELP_STRING([--enable-extra-warnings], [enable extra warning messages]) ladanyi@1369: AS_HELP_STRING([--disable-extra-warnings], [disable extra warning messages @<:@default@:>@]), ladanyi@1350: [],[enable_extra_warnings=no]) ladanyi@1350: AC_MSG_CHECKING(whether to enable extra warning flags) ladanyi@1350: if test x"$enable_extra_warnings" != x"no"; then ladanyi@1350: if test x"$lx_cxx_compiler_vendor" = x"gnu"; then ladanyi@1350: CXXFLAGS="$CXXFLAGS -ansi -pedantic -Wall -Wextra" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wfloat-equal -Wundef -Wendif-labels -Wshadow" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wpointer-arith -Wcast-qual -Wcast-align" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wwrite-strings -Wconversion -Waggregate-return" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wmissing-noreturn -Wmissing-format-attribute" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wpacked -Wpadded -Wredundant-decls" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wunreachable-code -Winline -Winvalid-pch" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wlong-long -Wdisabled-optimization" ladanyi@1350: CXXFLAGS="$CXXFLAGS -Wstack-protector" ladanyi@1350: elif test x"$lx_cxx_compiler_vendor" = x"intel"; then ladanyi@1350: CXXFLAGS="$CXXFLAGS -w2" ladanyi@1350: fi ladanyi@1350: AC_MSG_RESULT([yes]) ladanyi@1350: else ladanyi@1350: AC_MSG_RESULT([no]) ladanyi@1350: fi])