2007-03-07 16:50:47 -05:00
|
|
|
dnl
|
2007-06-22 10:25:10 -04:00
|
|
|
dnl This file is part of Bakefile (http://www.bakefile.org)
|
2007-03-07 16:50:47 -05:00
|
|
|
dnl
|
|
|
|
dnl Copyright (C) 2003-2007 Vaclav Slavik, David Elliott and others
|
|
|
|
dnl
|
|
|
|
dnl Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
dnl copy of this software and associated documentation files (the "Software"),
|
|
|
|
dnl to deal in the Software without restriction, including without limitation
|
|
|
|
dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
dnl and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
dnl Software is furnished to do so, subject to the following conditions:
|
|
|
|
dnl
|
|
|
|
dnl The above copyright notice and this permission notice shall be included in
|
|
|
|
dnl all copies or substantial portions of the Software.
|
|
|
|
dnl
|
|
|
|
dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
dnl DEALINGS IN THE SOFTWARE.
|
|
|
|
dnl
|
2007-06-22 13:17:30 -04:00
|
|
|
dnl Compiler detection macros by David Elliott and Vadim Zeitlin
|
2007-03-07 16:50:47 -05:00
|
|
|
dnl
|
2005-09-18 09:24:14 -04:00
|
|
|
|
|
|
|
|
|
|
|
dnl ===========================================================================
|
2007-06-22 13:17:30 -04:00
|
|
|
dnl Macros to detect different C/C++ compilers
|
2005-09-18 09:24:14 -04:00
|
|
|
dnl ===========================================================================
|
|
|
|
|
|
|
|
dnl Based on autoconf _AC_LANG_COMPILER_GNU
|
|
|
|
dnl _AC_BAKEFILE_LANG_COMPILER(NAME, LANG, SYMBOL, IF-YES, IF-NO)
|
|
|
|
AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER],
|
|
|
|
[
|
|
|
|
AC_LANG_PUSH($2)
|
|
|
|
AC_CACHE_CHECK(
|
|
|
|
[whether we are using the $1 $2 compiler],
|
|
|
|
[bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3],
|
|
|
|
[AC_TRY_COMPILE(
|
|
|
|
[],
|
|
|
|
[
|
|
|
|
#ifndef $3
|
|
|
|
choke me
|
|
|
|
#endif
|
|
|
|
],
|
|
|
|
[bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=yes],
|
|
|
|
[bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=no]
|
|
|
|
)
|
|
|
|
]
|
|
|
|
)
|
|
|
|
if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3" = "xyes"; then
|
|
|
|
:; $4
|
|
|
|
else
|
|
|
|
:; $5
|
|
|
|
fi
|
2007-06-22 13:17:30 -04:00
|
|
|
AC_LANG_POP($2)
|
|
|
|
])
|
|
|
|
|
2008-11-17 17:29:05 -05:00
|
|
|
dnl More specific version of the above macro checking whether the compiler
|
|
|
|
dnl version is at least the given one (assumes that we do use this compiler)
|
|
|
|
dnl
|
|
|
|
dnl _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(NAME, LANG, SYMBOL, VER, VERMSG, IF-YES, IF-NO)
|
|
|
|
AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_LATER_THAN],
|
|
|
|
[
|
|
|
|
AC_LANG_PUSH($2)
|
|
|
|
AC_CACHE_CHECK(
|
|
|
|
[whether we are using $1 $2 compiler v$5 or later],
|
|
|
|
[bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4],
|
|
|
|
[AC_TRY_COMPILE(
|
|
|
|
[],
|
|
|
|
[
|
|
|
|
#ifndef $3 || $3 < $4
|
|
|
|
choke me
|
|
|
|
#endif
|
|
|
|
],
|
|
|
|
[bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=yes],
|
|
|
|
[bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=no]
|
|
|
|
)
|
|
|
|
]
|
|
|
|
)
|
|
|
|
if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4" = "xyes"; then
|
|
|
|
:; $6
|
|
|
|
else
|
|
|
|
:; $7
|
|
|
|
fi
|
|
|
|
AC_LANG_POP($2)
|
|
|
|
])
|
|
|
|
|
2007-06-22 13:17:30 -04:00
|
|
|
dnl CodeWarrior Metrowerks compiler defines __MWERKS__ for both C and C++
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_MWCC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Metrowerks, C, __MWERKS__, MWCC=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_MWCXX],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Metrowerks, C++, __MWERKS__, MWCXX=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
dnl IBM xlC compiler defines __xlC__ for both C and C++
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_XLCC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER([IBM xlC], C, __xlC__, XLCC=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_XLCXX],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER([IBM xlC], C++, __xlC__, XLCXX=yes)
|
2005-09-18 09:24:14 -04:00
|
|
|
])
|
|
|
|
|
2005-09-25 10:31:09 -04:00
|
|
|
dnl recent versions of SGI mipsPro compiler define _SGI_COMPILER_VERSION
|
|
|
|
dnl
|
|
|
|
dnl NB: old versions define _COMPILER_VERSION but this could probably be
|
|
|
|
dnl defined by other compilers too so don't test for it to be safe
|
2005-09-18 09:24:14 -04:00
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_SGICC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_SGICXX],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes)
|
|
|
|
])
|
|
|
|
|
2005-09-25 10:31:09 -04:00
|
|
|
dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC
|
2005-09-18 09:24:14 -04:00
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_SUNCC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes)
|
|
|
|
])
|
|
|
|
|
2005-09-25 10:31:09 -04:00
|
|
|
dnl Intel icc compiler defines __INTEL_COMPILER for both C and C++
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_INTELCC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Intel, C, __INTEL_COMPILER, INTELCC=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Intel, C++, __INTEL_COMPILER, INTELCXX=yes)
|
|
|
|
])
|
2005-09-18 09:24:14 -04:00
|
|
|
|
2008-11-17 17:29:05 -05:00
|
|
|
dnl Intel compiler command line options changed in incompatible ways sometimes
|
|
|
|
dnl before v8 (-KPIC was replaced with gcc-compatible -fPIC) and again in v10
|
|
|
|
dnl (-create-pch deprecated in favour of -pch-create) so we need to test for
|
|
|
|
dnl its exact version too
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_8],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 800, 8, INTELCC8=yes)
|
|
|
|
])
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_8],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 800, 8, INTELCXX8=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_10],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 1000, 10, INTELCC10=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_10],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 1000, 10, INTELCXX10=yes)
|
|
|
|
])
|
|
|
|
|
2005-10-07 11:39:34 -04:00
|
|
|
dnl HP-UX aCC: see http://docs.hp.com/en/6162/preprocess.htm#macropredef
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_HPCC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(HP, C, __HP_cc, HPCC=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_HPCXX],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(HP, C++, __HP_aCC, HPCXX=yes)
|
|
|
|
])
|
|
|
|
|
2005-10-08 11:33:10 -04:00
|
|
|
dnl Tru64 cc and cxx
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Compaq, C, __DECC, COMPAQCC=yes)
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCXX],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_LANG_COMPILER(Compaq, C++, __DECCXX, COMPAQCXX=yes)
|
|
|
|
])
|
|
|
|
|
2005-09-18 09:24:14 -04:00
|
|
|
dnl ===========================================================================
|
|
|
|
dnl macros to detect specialty compiler options
|
|
|
|
dnl ===========================================================================
|
|
|
|
|
|
|
|
dnl Figure out if we need to pass -ext o to compiler (MetroWerks)
|
|
|
|
AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO],
|
2005-10-08 11:33:10 -04:00
|
|
|
[AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto,
|
2005-09-18 09:24:14 -04:00
|
|
|
dnl First create an empty conf test
|
|
|
|
[AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
|
|
|
|
dnl Now remove .o and .c.o or .cc.o
|
|
|
|
rm -f conftest.$ac_objext conftest.$ac_ext.o
|
|
|
|
dnl Now compile the test
|
|
|
|
AS_IF([AC_TRY_EVAL(ac_compile)],
|
|
|
|
dnl If the test succeeded look for conftest.c.o or conftest.cc.o
|
|
|
|
[for ac_file in `(ls conftest.* 2>/dev/null)`; do
|
|
|
|
case $ac_file in
|
|
|
|
conftest.$ac_ext.o)
|
2005-10-08 11:33:10 -04:00
|
|
|
bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
|
2005-09-18 09:24:14 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done],
|
|
|
|
[AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile])
|
|
|
|
]) dnl AS_IF
|
|
|
|
|
|
|
|
rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext
|
|
|
|
]) dnl AC_CACHE_CHECK
|
|
|
|
|
2005-10-08 11:33:10 -04:00
|
|
|
if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
|
2005-09-18 09:24:14 -04:00
|
|
|
if test "[]_AC_LANG_ABBREV[]" = "c"; then
|
2005-10-08 11:33:10 -04:00
|
|
|
CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
|
2005-09-18 09:24:14 -04:00
|
|
|
fi
|
|
|
|
if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
|
2005-10-08 11:33:10 -04:00
|
|
|
CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
|
2005-09-18 09:24:14 -04:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
]) dnl AC_DEFUN
|
|
|
|
|
|
|
|
|
|
|
|
dnl ===========================================================================
|
|
|
|
dnl Macros to do all of the compiler detections as one macro
|
|
|
|
dnl ===========================================================================
|
2005-10-07 16:27:47 -04:00
|
|
|
|
|
|
|
dnl check for different proprietary compilers depending on target platform
|
|
|
|
dnl _AC_BAKEFILE_PROG_COMPILER(LANG)
|
|
|
|
AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER],
|
2005-09-18 09:24:14 -04:00
|
|
|
[
|
2010-06-17 18:30:27 -04:00
|
|
|
AC_REQUIRE([AC_PROG_$1])
|
2007-06-22 10:25:10 -04:00
|
|
|
|
|
|
|
dnl Intel compiler can be used under several different OS and even
|
|
|
|
dnl different architectures (x86, amd64 and Itanium) so it's easier to just
|
|
|
|
dnl always test for it
|
2005-10-07 16:27:47 -04:00
|
|
|
AC_BAKEFILE_PROG_INTEL$1
|
2007-06-22 10:25:10 -04:00
|
|
|
|
2008-11-17 17:29:05 -05:00
|
|
|
dnl If we use Intel compiler we also need to know its version
|
|
|
|
if test "$INTEL$1" = "yes"; then
|
|
|
|
AC_BAKEFILE_PROG_INTEL$1_8
|
|
|
|
AC_BAKEFILE_PROG_INTEL$1_10
|
|
|
|
fi
|
|
|
|
|
2005-09-25 10:31:09 -04:00
|
|
|
dnl if we're using gcc, we can't be using any of incompatible compilers
|
2005-10-07 16:27:47 -04:00
|
|
|
if test "x$G$1" != "xyes"; then
|
|
|
|
if test "x$1" = "xC"; then
|
|
|
|
AC_BAKEFILE_METROWERKS_EXTO
|
2005-10-08 11:33:10 -04:00
|
|
|
if test "x$bakefile_cv_c_exto" '!=' "x"; then
|
2005-10-07 16:27:47 -04:00
|
|
|
unset ac_cv_prog_cc_g
|
|
|
|
_AC_PROG_CC_G
|
|
|
|
fi
|
2005-09-25 10:31:09 -04:00
|
|
|
fi
|
2005-10-07 16:27:47 -04:00
|
|
|
|
|
|
|
dnl most of these compilers are only used under well-defined OS so
|
|
|
|
dnl don't waste time checking for them on other ones
|
|
|
|
case `uname -s` in
|
|
|
|
AIX*)
|
|
|
|
AC_BAKEFILE_PROG_XL$1
|
|
|
|
;;
|
|
|
|
|
|
|
|
Darwin)
|
|
|
|
AC_BAKEFILE_PROG_MW$1
|
2008-11-17 17:29:05 -05:00
|
|
|
if test "$MW$1" != "yes"; then
|
|
|
|
AC_BAKEFILE_PROG_XL$1
|
|
|
|
fi
|
2005-10-07 16:27:47 -04:00
|
|
|
;;
|
|
|
|
|
|
|
|
IRIX*)
|
|
|
|
AC_BAKEFILE_PROG_SGI$1
|
|
|
|
;;
|
|
|
|
|
2007-06-22 10:25:10 -04:00
|
|
|
Linux*)
|
2008-11-17 17:29:05 -05:00
|
|
|
dnl Sun CC is now available under Linux too, test for it unless
|
|
|
|
dnl we already found that we were using a different compiler
|
|
|
|
if test "$INTEL$1" != "yes"; then
|
|
|
|
AC_BAKEFILE_PROG_SUN$1
|
|
|
|
fi
|
2007-06-22 10:25:10 -04:00
|
|
|
;;
|
|
|
|
|
2005-10-07 16:27:47 -04:00
|
|
|
HP-UX*)
|
|
|
|
AC_BAKEFILE_PROG_HP$1
|
|
|
|
;;
|
2005-10-08 11:33:10 -04:00
|
|
|
|
|
|
|
OSF1)
|
|
|
|
AC_BAKEFILE_PROG_COMPAQ$1
|
|
|
|
;;
|
|
|
|
|
|
|
|
SunOS)
|
|
|
|
AC_BAKEFILE_PROG_SUN$1
|
|
|
|
;;
|
2005-10-07 16:27:47 -04:00
|
|
|
esac
|
2005-09-18 09:24:14 -04:00
|
|
|
fi
|
|
|
|
])
|
|
|
|
|
2005-10-07 16:27:47 -04:00
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_CC],
|
|
|
|
[
|
|
|
|
_AC_BAKEFILE_PROG_COMPILER(CC)
|
|
|
|
])
|
|
|
|
|
2005-09-18 09:24:14 -04:00
|
|
|
AC_DEFUN([AC_BAKEFILE_PROG_CXX],
|
|
|
|
[
|
2005-10-07 16:27:47 -04:00
|
|
|
_AC_BAKEFILE_PROG_COMPILER(CXX)
|
2005-09-18 09:24:14 -04:00
|
|
|
])
|
|
|
|
|