|
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]) |