| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- dnl
- dnl This file is part of Bakefile (http://www.bakefile.org)
- 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
- dnl Compiler detection macros by David Elliott and Vadim Zeitlin
- dnl
- dnl ===========================================================================
- dnl Macros to detect different C/C++ compilers
- 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
- AC_LANG_POP($2)
- ])
- 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)
- ])
- 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)
- ])
- 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
- 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)
- ])
- dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC
- 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)
- ])
- 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)
- ])
- 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)
- ])
- 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)
- ])
- 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)
- ])
- 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],
- [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto,
- 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)
- bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
- ;;
- *)
- ;;
- 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
- if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
- if test "[]_AC_LANG_ABBREV[]" = "c"; then
- CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
- fi
- if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
- CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
- fi
- fi
- ]) dnl AC_DEFUN
- dnl ===========================================================================
- dnl Macros to do all of the compiler detections as one macro
- dnl ===========================================================================
- dnl check for different proprietary compilers depending on target platform
- dnl _AC_BAKEFILE_PROG_COMPILER(LANG)
- AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER],
- [
- AC_REQUIRE([AC_PROG_$1])
- 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
- AC_BAKEFILE_PROG_INTEL$1
- 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
- dnl if we're using gcc, we can't be using any of incompatible compilers
- if test "x$G$1" != "xyes"; then
- if test "x$1" = "xC"; then
- AC_BAKEFILE_METROWERKS_EXTO
- if test "x$bakefile_cv_c_exto" '!=' "x"; then
- unset ac_cv_prog_cc_g
- _AC_PROG_CC_G
- fi
- fi
- 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
- if test "$MW$1" != "yes"; then
- AC_BAKEFILE_PROG_XL$1
- fi
- ;;
- IRIX*)
- AC_BAKEFILE_PROG_SGI$1
- ;;
- Linux*)
- 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
- ;;
- HP-UX*)
- AC_BAKEFILE_PROG_HP$1
- ;;
- OSF1)
- AC_BAKEFILE_PROG_COMPAQ$1
- ;;
- SunOS)
- AC_BAKEFILE_PROG_SUN$1
- ;;
- esac
- fi
- ])
- AC_DEFUN([AC_BAKEFILE_PROG_CC],
- [
- _AC_BAKEFILE_PROG_COMPILER(CC)
- ])
- AC_DEFUN([AC_BAKEFILE_PROG_CXX],
- [
- _AC_BAKEFILE_PROG_COMPILER(CXX)
- ])
|