| 1 | dnl --------------------------------------------------------------------------- |
| 2 | dnl Compiler detection macros by David Elliott |
| 3 | dnl --------------------------------------------------------------------------- |
| 4 | |
| 5 | |
| 6 | dnl =========================================================================== |
| 7 | dnl Macros to detect non-GNU compilers (MetroWerks, XLC) |
| 8 | dnl =========================================================================== |
| 9 | |
| 10 | dnl Based on autoconf _AC_LANG_COMPILER_GNU |
| 11 | AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_MWERKS], |
| 12 | [AC_CACHE_CHECK([whether we are using the Metrowerks _AC_LANG compiler], |
| 13 | [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_mwerks], |
| 14 | [AC_TRY_COMPILE([],[#ifndef __MWERKS__ |
| 15 | choke me |
| 16 | #endif |
| 17 | ], |
| 18 | [bakefile_compiler_mwerks=yes], |
| 19 | [bakefile_compiler_mwerks=no]) |
| 20 | bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_mwerks=$bakefile_compiler_mwerks |
| 21 | ]) |
| 22 | ]) |
| 23 | |
| 24 | dnl Loosely based on autoconf AC_PROG_CC |
| 25 | dnl TODO: Maybe this should wrap the call to AC_PROG_CC and be used instead. |
| 26 | AC_DEFUN([AC_BAKEFILE_PROG_MWCC], |
| 27 | [AC_LANG_PUSH(C) |
| 28 | _AC_BAKEFILE_LANG_COMPILER_MWERKS |
| 29 | MWCC=`test $bakefile_cv_c_compiler_mwerks = yes && echo yes` |
| 30 | AC_LANG_POP(C) |
| 31 | ]) |
| 32 | |
| 33 | dnl Loosely based on autoconf AC_PROG_CXX |
| 34 | dnl TODO: Maybe this should wrap the call to AC_PROG_CXX and be used instead. |
| 35 | AC_DEFUN([AC_BAKEFILE_PROG_MWCXX], |
| 36 | [AC_LANG_PUSH(C++) |
| 37 | _AC_BAKEFILE_LANG_COMPILER_MWERKS |
| 38 | MWCXX=`test $bakefile_cv_cxx_compiler_mwerks = yes && echo yes` |
| 39 | AC_LANG_POP(C++) |
| 40 | ]) |
| 41 | |
| 42 | dnl Based on autoconf _AC_LANG_COMPILER_GNU |
| 43 | AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_XLC], |
| 44 | [AC_CACHE_CHECK([whether we are using the IBM xlC _AC_LANG compiler], |
| 45 | [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_xlc], |
| 46 | [AC_TRY_COMPILE([],[#ifndef __xlC__ |
| 47 | choke me |
| 48 | #endif |
| 49 | ], |
| 50 | [bakefile_compiler_xlc=yes], |
| 51 | [bakefile_compiler_xlc=no]) |
| 52 | bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_xlc=$bakefile_compiler_xlc |
| 53 | ]) |
| 54 | ]) |
| 55 | |
| 56 | dnl Loosely based on autoconf AC_PROG_CC |
| 57 | AC_DEFUN([AC_BAKEFILE_PROG_XLCC], |
| 58 | [AC_LANG_PUSH(C) |
| 59 | _AC_BAKEFILE_LANG_COMPILER_XLC |
| 60 | XLCC=`test $bakefile_cv_c_compiler_xlc = yes && echo yes` |
| 61 | AC_LANG_POP(C) |
| 62 | ]) |
| 63 | |
| 64 | dnl Loosely based on autoconf AC_PROG_CXX |
| 65 | AC_DEFUN([AC_BAKEFILE_PROG_XLCXX], |
| 66 | [AC_LANG_PUSH(C++) |
| 67 | _AC_BAKEFILE_LANG_COMPILER_XLC |
| 68 | XLCXX=`test $bakefile_cv_cxx_compiler_xlc = yes && echo yes` |
| 69 | AC_LANG_POP(C++) |
| 70 | ]) |
| 71 | |
| 72 | dnl Based on autoconf _AC_LANG_COMPILER_GNU |
| 73 | dnl _AC_BAKEFILE_LANG_COMPILER(NAME, LANG, SYMBOL, IF-YES, IF-NO) |
| 74 | AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER], |
| 75 | [ |
| 76 | AC_LANG_PUSH($2) |
| 77 | AC_CACHE_CHECK( |
| 78 | [whether we are using the $1 $2 compiler], |
| 79 | [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3], |
| 80 | [AC_TRY_COMPILE( |
| 81 | [], |
| 82 | [ |
| 83 | #ifndef $3 |
| 84 | choke me |
| 85 | #endif |
| 86 | ], |
| 87 | [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=yes], |
| 88 | [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=no] |
| 89 | ) |
| 90 | ] |
| 91 | ) |
| 92 | AC_LANG_POP($2) |
| 93 | if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3" = "xyes"; then |
| 94 | :; $4 |
| 95 | else |
| 96 | :; $5 |
| 97 | fi |
| 98 | ]) |
| 99 | |
| 100 | dnl recent versions of SGI mipsPro compiler define _SGI_COMPILER_VERSION |
| 101 | dnl |
| 102 | dnl NB: old versions define _COMPILER_VERSION but this could probably be |
| 103 | dnl defined by other compilers too so don't test for it to be safe |
| 104 | AC_DEFUN([AC_BAKEFILE_PROG_SGICC], |
| 105 | [ |
| 106 | _AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes) |
| 107 | ]) |
| 108 | |
| 109 | AC_DEFUN([AC_BAKEFILE_PROG_SGICXX], |
| 110 | [ |
| 111 | _AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes) |
| 112 | ]) |
| 113 | |
| 114 | dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC |
| 115 | AC_DEFUN([AC_BAKEFILE_PROG_SUNCC], |
| 116 | [ |
| 117 | _AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes) |
| 118 | ]) |
| 119 | |
| 120 | AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX], |
| 121 | [ |
| 122 | _AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes) |
| 123 | ]) |
| 124 | |
| 125 | dnl Intel icc compiler defines __INTEL_COMPILER for both C and C++ |
| 126 | AC_DEFUN([AC_BAKEFILE_PROG_INTELCC], |
| 127 | [ |
| 128 | _AC_BAKEFILE_LANG_COMPILER(Intel, C, __INTEL_COMPILER, INTELCC=yes) |
| 129 | ]) |
| 130 | |
| 131 | AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX], |
| 132 | [ |
| 133 | _AC_BAKEFILE_LANG_COMPILER(Intel, C++, __INTEL_COMPILER, INTELCXX=yes) |
| 134 | ]) |
| 135 | |
| 136 | dnl HP-UX aCC: see http://docs.hp.com/en/6162/preprocess.htm#macropredef |
| 137 | AC_DEFUN([AC_BAKEFILE_PROG_HPCC], |
| 138 | [ |
| 139 | _AC_BAKEFILE_LANG_COMPILER(HP, C, __HP_cc, HPCC=yes) |
| 140 | ]) |
| 141 | |
| 142 | AC_DEFUN([AC_BAKEFILE_PROG_HPCXX], |
| 143 | [ |
| 144 | _AC_BAKEFILE_LANG_COMPILER(HP, C++, __HP_aCC, HPCXX=yes) |
| 145 | ]) |
| 146 | |
| 147 | dnl Tru64 cc and cxx |
| 148 | AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCC], |
| 149 | [ |
| 150 | _AC_BAKEFILE_LANG_COMPILER(Compaq, C, __DECC, COMPAQCC=yes) |
| 151 | ]) |
| 152 | |
| 153 | AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCXX], |
| 154 | [ |
| 155 | _AC_BAKEFILE_LANG_COMPILER(Compaq, C++, __DECCXX, COMPAQCXX=yes) |
| 156 | ]) |
| 157 | |
| 158 | dnl =========================================================================== |
| 159 | dnl macros to detect specialty compiler options |
| 160 | dnl =========================================================================== |
| 161 | |
| 162 | dnl Figure out if we need to pass -ext o to compiler (MetroWerks) |
| 163 | AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO], |
| 164 | [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto, |
| 165 | dnl First create an empty conf test |
| 166 | [AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) |
| 167 | dnl Now remove .o and .c.o or .cc.o |
| 168 | rm -f conftest.$ac_objext conftest.$ac_ext.o |
| 169 | dnl Now compile the test |
| 170 | AS_IF([AC_TRY_EVAL(ac_compile)], |
| 171 | dnl If the test succeeded look for conftest.c.o or conftest.cc.o |
| 172 | [for ac_file in `(ls conftest.* 2>/dev/null)`; do |
| 173 | case $ac_file in |
| 174 | conftest.$ac_ext.o) |
| 175 | bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o" |
| 176 | ;; |
| 177 | *) |
| 178 | ;; |
| 179 | esac |
| 180 | done], |
| 181 | [AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile]) |
| 182 | ]) dnl AS_IF |
| 183 | |
| 184 | rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext |
| 185 | ]) dnl AC_CACHE_CHECK |
| 186 | |
| 187 | if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then |
| 188 | if test "[]_AC_LANG_ABBREV[]" = "c"; then |
| 189 | CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS" |
| 190 | fi |
| 191 | if test "[]_AC_LANG_ABBREV[]" = "cxx"; then |
| 192 | CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS" |
| 193 | fi |
| 194 | fi |
| 195 | ]) dnl AC_DEFUN |
| 196 | |
| 197 | |
| 198 | dnl =========================================================================== |
| 199 | dnl Macros to do all of the compiler detections as one macro |
| 200 | dnl =========================================================================== |
| 201 | |
| 202 | dnl check for different proprietary compilers depending on target platform |
| 203 | dnl _AC_BAKEFILE_PROG_COMPILER(LANG) |
| 204 | AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER], |
| 205 | [ |
| 206 | AC_PROG_$1 |
| 207 | AC_BAKEFILE_PROG_INTEL$1 |
| 208 | dnl if we're using gcc, we can't be using any of incompatible compilers |
| 209 | if test "x$G$1" != "xyes"; then |
| 210 | if test "x$1" = "xC"; then |
| 211 | AC_BAKEFILE_METROWERKS_EXTO |
| 212 | if test "x$bakefile_cv_c_exto" '!=' "x"; then |
| 213 | unset ac_cv_prog_cc_g |
| 214 | _AC_PROG_CC_G |
| 215 | fi |
| 216 | fi |
| 217 | |
| 218 | dnl most of these compilers are only used under well-defined OS so |
| 219 | dnl don't waste time checking for them on other ones |
| 220 | case `uname -s` in |
| 221 | AIX*) |
| 222 | AC_BAKEFILE_PROG_XL$1 |
| 223 | ;; |
| 224 | |
| 225 | Darwin) |
| 226 | AC_BAKEFILE_PROG_MW$1 |
| 227 | AC_BAKEFILE_PROG_XL$1 |
| 228 | ;; |
| 229 | |
| 230 | IRIX*) |
| 231 | AC_BAKEFILE_PROG_SGI$1 |
| 232 | ;; |
| 233 | |
| 234 | HP-UX*) |
| 235 | AC_BAKEFILE_PROG_HP$1 |
| 236 | ;; |
| 237 | |
| 238 | OSF1) |
| 239 | AC_BAKEFILE_PROG_COMPAQ$1 |
| 240 | ;; |
| 241 | |
| 242 | SunOS) |
| 243 | AC_BAKEFILE_PROG_SUN$1 |
| 244 | ;; |
| 245 | esac |
| 246 | fi |
| 247 | ]) |
| 248 | |
| 249 | AC_DEFUN([AC_BAKEFILE_PROG_CC], |
| 250 | [ |
| 251 | _AC_BAKEFILE_PROG_COMPILER(CC) |
| 252 | ]) |
| 253 | |
| 254 | AC_DEFUN([AC_BAKEFILE_PROG_CXX], |
| 255 | [ |
| 256 | _AC_BAKEFILE_PROG_COMPILER(CXX) |
| 257 | ]) |
| 258 | |