2 dnl This file is part of Bakefile (http://www.bakefile.org)
4 dnl Copyright (C) 2003-2007 Vaclav Slavik, David Elliott and others
6 dnl Permission is hereby granted, free of charge, to any person obtaining a
7 dnl copy of this software and associated documentation files (the "Software"),
8 dnl to deal in the Software without restriction, including without limitation
9 dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 dnl and/or sell copies of the Software, and to permit persons to whom the
11 dnl Software is furnished to do so, subject to the following conditions:
13 dnl The above copyright notice and this permission notice shall be included in
14 dnl all copies or substantial portions of the Software.
16 dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 dnl DEALINGS IN THE SOFTWARE.
26 dnl Compiler detection macros by David Elliott and Vadim Zeitlin
30 dnl ===========================================================================
31 dnl Macros to detect different C/C++ compilers
32 dnl ===========================================================================
34 dnl Based on autoconf _AC_LANG_COMPILER_GNU
35 dnl _AC_BAKEFILE_LANG_COMPILER(NAME, LANG, SYMBOL, IF-YES, IF-NO)
36 AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER],
40 [whether we are using the $1 $2 compiler],
41 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3],
49 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=yes],
50 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=no]
54 if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3" = "xyes"; then
62 dnl CodeWarrior Metrowerks compiler defines __MWERKS__ for both C and C++
63 AC_DEFUN([AC_BAKEFILE_PROG_MWCC],
65 _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C, __MWERKS__, MWCC=yes)
68 AC_DEFUN([AC_BAKEFILE_PROG_MWCXX],
70 _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C++, __MWERKS__, MWCXX=yes)
73 dnl IBM xlC compiler defines __xlC__ for both C and C++
74 AC_DEFUN([AC_BAKEFILE_PROG_XLCC],
76 _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C, __xlC__, XLCC=yes)
79 AC_DEFUN([AC_BAKEFILE_PROG_XLCXX],
81 _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C++, __xlC__, XLCXX=yes)
84 dnl recent versions of SGI mipsPro compiler define _SGI_COMPILER_VERSION
86 dnl NB: old versions define _COMPILER_VERSION but this could probably be
87 dnl defined by other compilers too so don't test for it to be safe
88 AC_DEFUN([AC_BAKEFILE_PROG_SGICC],
90 _AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes)
93 AC_DEFUN([AC_BAKEFILE_PROG_SGICXX],
95 _AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes)
98 dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC
99 AC_DEFUN([AC_BAKEFILE_PROG_SUNCC],
101 _AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes)
104 AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX],
106 _AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes)
109 dnl Intel icc compiler defines __INTEL_COMPILER for both C and C++
110 AC_DEFUN([AC_BAKEFILE_PROG_INTELCC],
112 _AC_BAKEFILE_LANG_COMPILER(Intel, C, __INTEL_COMPILER, INTELCC=yes)
115 AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX],
117 _AC_BAKEFILE_LANG_COMPILER(Intel, C++, __INTEL_COMPILER, INTELCXX=yes)
120 dnl HP-UX aCC: see http://docs.hp.com/en/6162/preprocess.htm#macropredef
121 AC_DEFUN([AC_BAKEFILE_PROG_HPCC],
123 _AC_BAKEFILE_LANG_COMPILER(HP, C, __HP_cc, HPCC=yes)
126 AC_DEFUN([AC_BAKEFILE_PROG_HPCXX],
128 _AC_BAKEFILE_LANG_COMPILER(HP, C++, __HP_aCC, HPCXX=yes)
132 AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCC],
134 _AC_BAKEFILE_LANG_COMPILER(Compaq, C, __DECC, COMPAQCC=yes)
137 AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCXX],
139 _AC_BAKEFILE_LANG_COMPILER(Compaq, C++, __DECCXX, COMPAQCXX=yes)
142 dnl ===========================================================================
143 dnl macros to detect specialty compiler options
144 dnl ===========================================================================
146 dnl Figure out if we need to pass -ext o to compiler (MetroWerks)
147 AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO],
148 [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto,
149 dnl First create an empty conf test
150 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
151 dnl Now remove .o and .c.o or .cc.o
152 rm -f conftest.$ac_objext conftest.$ac_ext.o
153 dnl Now compile the test
154 AS_IF([AC_TRY_EVAL(ac_compile)],
155 dnl If the test succeeded look for conftest.c.o or conftest.cc.o
156 [for ac_file in `(ls conftest.* 2>/dev/null)`; do
159 bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
165 [AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile])
168 rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext
169 ]) dnl AC_CACHE_CHECK
171 if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
172 if test "[]_AC_LANG_ABBREV[]" = "c"; then
173 CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
175 if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
176 CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
182 dnl ===========================================================================
183 dnl Macros to do all of the compiler detections as one macro
184 dnl ===========================================================================
186 dnl check for different proprietary compilers depending on target platform
187 dnl _AC_BAKEFILE_PROG_COMPILER(LANG)
188 AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER],
192 dnl Intel compiler can be used under several different OS and even
193 dnl different architectures (x86, amd64 and Itanium) so it's easier to just
194 dnl always test for it
195 AC_BAKEFILE_PROG_INTEL$1
197 dnl if we're using gcc, we can't be using any of incompatible compilers
198 if test "x$G$1" != "xyes"; then
199 if test "x$1" = "xC"; then
200 AC_BAKEFILE_METROWERKS_EXTO
201 if test "x$bakefile_cv_c_exto" '!=' "x"; then
202 unset ac_cv_prog_cc_g
207 dnl most of these compilers are only used under well-defined OS so
208 dnl don't waste time checking for them on other ones
211 AC_BAKEFILE_PROG_XL$1
215 AC_BAKEFILE_PROG_MW$1
216 AC_BAKEFILE_PROG_XL$1
220 AC_BAKEFILE_PROG_SGI$1
224 dnl Sun CC is now available under Linux too
225 AC_BAKEFILE_PROG_SUN$1
229 AC_BAKEFILE_PROG_HP$1
233 AC_BAKEFILE_PROG_COMPAQ$1
237 AC_BAKEFILE_PROG_SUN$1
243 AC_DEFUN([AC_BAKEFILE_PROG_CC],
245 _AC_BAKEFILE_PROG_COMPILER(CC)
248 AC_DEFUN([AC_BAKEFILE_PROG_CXX],
250 _AC_BAKEFILE_PROG_COMPILER(CXX)