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.
24 dnl Compiler detection macros by David Elliott and Vadim Zeitlin
28 dnl ===========================================================================
29 dnl Macros to detect different C/C++ compilers
30 dnl ===========================================================================
32 dnl Based on autoconf _AC_LANG_COMPILER_GNU
33 dnl _AC_BAKEFILE_LANG_COMPILER(NAME, LANG, SYMBOL, IF-YES, IF-NO)
34 AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER],
38 [whether we are using the $1 $2 compiler],
39 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3],
47 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=yes],
48 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=no]
52 if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3" = "xyes"; then
60 dnl More specific version of the above macro checking whether the compiler
61 dnl version is at least the given one (assumes that we do use this compiler)
63 dnl _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(NAME, LANG, SYMBOL, VER, VERMSG, IF-YES, IF-NO)
64 AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_LATER_THAN],
68 [whether we are using $1 $2 compiler v$5 or later],
69 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4],
77 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=yes],
78 [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=no]
82 if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4" = "xyes"; then
90 dnl CodeWarrior Metrowerks compiler defines __MWERKS__ for both C and C++
91 AC_DEFUN([AC_BAKEFILE_PROG_MWCC],
93 _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C, __MWERKS__, MWCC=yes)
96 AC_DEFUN([AC_BAKEFILE_PROG_MWCXX],
98 _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C++, __MWERKS__, MWCXX=yes)
101 dnl IBM xlC compiler defines __xlC__ for both C and C++
102 AC_DEFUN([AC_BAKEFILE_PROG_XLCC],
104 _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C, __xlC__, XLCC=yes)
107 AC_DEFUN([AC_BAKEFILE_PROG_XLCXX],
109 _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C++, __xlC__, XLCXX=yes)
112 dnl recent versions of SGI mipsPro compiler define _SGI_COMPILER_VERSION
114 dnl NB: old versions define _COMPILER_VERSION but this could probably be
115 dnl defined by other compilers too so don't test for it to be safe
116 AC_DEFUN([AC_BAKEFILE_PROG_SGICC],
118 _AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes)
121 AC_DEFUN([AC_BAKEFILE_PROG_SGICXX],
123 _AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes)
126 dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC
127 AC_DEFUN([AC_BAKEFILE_PROG_SUNCC],
129 _AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes)
132 AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX],
134 _AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes)
137 dnl Intel icc compiler defines __INTEL_COMPILER for both C and C++
138 AC_DEFUN([AC_BAKEFILE_PROG_INTELCC],
140 _AC_BAKEFILE_LANG_COMPILER(Intel, C, __INTEL_COMPILER, INTELCC=yes)
143 AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX],
145 _AC_BAKEFILE_LANG_COMPILER(Intel, C++, __INTEL_COMPILER, INTELCXX=yes)
148 dnl Intel compiler command line options changed in incompatible ways sometimes
149 dnl before v8 (-KPIC was replaced with gcc-compatible -fPIC) and again in v10
150 dnl (-create-pch deprecated in favour of -pch-create) so we need to test for
151 dnl its exact version too
152 AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_8],
154 _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 800, 8, INTELCC8=yes)
156 AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_8],
158 _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 800, 8, INTELCXX8=yes)
161 AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_10],
163 _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 1000, 10, INTELCC10=yes)
166 AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_10],
168 _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 1000, 10, INTELCXX10=yes)
171 dnl HP-UX aCC: see http://docs.hp.com/en/6162/preprocess.htm#macropredef
172 AC_DEFUN([AC_BAKEFILE_PROG_HPCC],
174 _AC_BAKEFILE_LANG_COMPILER(HP, C, __HP_cc, HPCC=yes)
177 AC_DEFUN([AC_BAKEFILE_PROG_HPCXX],
179 _AC_BAKEFILE_LANG_COMPILER(HP, C++, __HP_aCC, HPCXX=yes)
183 AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCC],
185 _AC_BAKEFILE_LANG_COMPILER(Compaq, C, __DECC, COMPAQCC=yes)
188 AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCXX],
190 _AC_BAKEFILE_LANG_COMPILER(Compaq, C++, __DECCXX, COMPAQCXX=yes)
193 dnl ===========================================================================
194 dnl macros to detect specialty compiler options
195 dnl ===========================================================================
197 dnl Figure out if we need to pass -ext o to compiler (MetroWerks)
198 AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO],
199 [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto,
200 dnl First create an empty conf test
201 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
202 dnl Now remove .o and .c.o or .cc.o
203 rm -f conftest.$ac_objext conftest.$ac_ext.o
204 dnl Now compile the test
205 AS_IF([AC_TRY_EVAL(ac_compile)],
206 dnl If the test succeeded look for conftest.c.o or conftest.cc.o
207 [for ac_file in `(ls conftest.* 2>/dev/null)`; do
210 bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
216 [AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile])
219 rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext
220 ]) dnl AC_CACHE_CHECK
222 if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
223 if test "[]_AC_LANG_ABBREV[]" = "c"; then
224 CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
226 if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
227 CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
233 dnl ===========================================================================
234 dnl Macros to do all of the compiler detections as one macro
235 dnl ===========================================================================
237 dnl check for different proprietary compilers depending on target platform
238 dnl _AC_BAKEFILE_PROG_COMPILER(LANG)
239 AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER],
241 AC_REQUIRE([AC_PROG_$1])
243 dnl Intel compiler can be used under several different OS and even
244 dnl different architectures (x86, amd64 and Itanium) so it's easier to just
245 dnl always test for it
246 AC_BAKEFILE_PROG_INTEL$1
248 dnl If we use Intel compiler we also need to know its version
249 if test "$INTEL$1" = "yes"; then
250 AC_BAKEFILE_PROG_INTEL$1_8
251 AC_BAKEFILE_PROG_INTEL$1_10
254 dnl if we're using gcc, we can't be using any of incompatible compilers
255 if test "x$G$1" != "xyes"; then
256 if test "x$1" = "xC"; then
257 AC_BAKEFILE_METROWERKS_EXTO
258 if test "x$bakefile_cv_c_exto" '!=' "x"; then
259 unset ac_cv_prog_cc_g
264 dnl most of these compilers are only used under well-defined OS so
265 dnl don't waste time checking for them on other ones
268 AC_BAKEFILE_PROG_XL$1
272 AC_BAKEFILE_PROG_MW$1
273 if test "$MW$1" != "yes"; then
274 AC_BAKEFILE_PROG_XL$1
279 AC_BAKEFILE_PROG_SGI$1
283 dnl Sun CC is now available under Linux too, test for it unless
284 dnl we already found that we were using a different compiler
285 if test "$INTEL$1" != "yes"; then
286 AC_BAKEFILE_PROG_SUN$1
291 AC_BAKEFILE_PROG_HP$1
295 AC_BAKEFILE_PROG_COMPAQ$1
299 AC_BAKEFILE_PROG_SUN$1
305 AC_DEFUN([AC_BAKEFILE_PROG_CC],
307 _AC_BAKEFILE_PROG_COMPILER(CC)
310 AC_DEFUN([AC_BAKEFILE_PROG_CXX],
312 _AC_BAKEFILE_PROG_COMPILER(CXX)