bakefile-lang.m4 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. dnl
  2. dnl This file is part of Bakefile (http://www.bakefile.org)
  3. dnl
  4. dnl Copyright (C) 2003-2007 Vaclav Slavik, David Elliott and others
  5. dnl
  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:
  12. dnl
  13. dnl The above copyright notice and this permission notice shall be included in
  14. dnl all copies or substantial portions of the Software.
  15. dnl
  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.
  23. dnl
  24. dnl Compiler detection macros by David Elliott and Vadim Zeitlin
  25. dnl
  26. dnl ===========================================================================
  27. dnl Macros to detect different C/C++ compilers
  28. dnl ===========================================================================
  29. dnl Based on autoconf _AC_LANG_COMPILER_GNU
  30. dnl _AC_BAKEFILE_LANG_COMPILER(NAME, LANG, SYMBOL, IF-YES, IF-NO)
  31. AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER],
  32. [
  33. AC_LANG_PUSH($2)
  34. AC_CACHE_CHECK(
  35. [whether we are using the $1 $2 compiler],
  36. [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3],
  37. [AC_TRY_COMPILE(
  38. [],
  39. [
  40. #ifndef $3
  41. choke me
  42. #endif
  43. ],
  44. [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=yes],
  45. [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3=no]
  46. )
  47. ]
  48. )
  49. if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3" = "xyes"; then
  50. :; $4
  51. else
  52. :; $5
  53. fi
  54. AC_LANG_POP($2)
  55. ])
  56. dnl More specific version of the above macro checking whether the compiler
  57. dnl version is at least the given one (assumes that we do use this compiler)
  58. dnl
  59. dnl _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(NAME, LANG, SYMBOL, VER, VERMSG, IF-YES, IF-NO)
  60. AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_LATER_THAN],
  61. [
  62. AC_LANG_PUSH($2)
  63. AC_CACHE_CHECK(
  64. [whether we are using $1 $2 compiler v$5 or later],
  65. [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4],
  66. [AC_TRY_COMPILE(
  67. [],
  68. [
  69. #ifndef $3 || $3 < $4
  70. choke me
  71. #endif
  72. ],
  73. [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=yes],
  74. [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4=no]
  75. )
  76. ]
  77. )
  78. if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_[]$3[]_lt_[]$4" = "xyes"; then
  79. :; $6
  80. else
  81. :; $7
  82. fi
  83. AC_LANG_POP($2)
  84. ])
  85. dnl CodeWarrior Metrowerks compiler defines __MWERKS__ for both C and C++
  86. AC_DEFUN([AC_BAKEFILE_PROG_MWCC],
  87. [
  88. _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C, __MWERKS__, MWCC=yes)
  89. ])
  90. AC_DEFUN([AC_BAKEFILE_PROG_MWCXX],
  91. [
  92. _AC_BAKEFILE_LANG_COMPILER(Metrowerks, C++, __MWERKS__, MWCXX=yes)
  93. ])
  94. dnl IBM xlC compiler defines __xlC__ for both C and C++
  95. AC_DEFUN([AC_BAKEFILE_PROG_XLCC],
  96. [
  97. _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C, __xlC__, XLCC=yes)
  98. ])
  99. AC_DEFUN([AC_BAKEFILE_PROG_XLCXX],
  100. [
  101. _AC_BAKEFILE_LANG_COMPILER([IBM xlC], C++, __xlC__, XLCXX=yes)
  102. ])
  103. dnl recent versions of SGI mipsPro compiler define _SGI_COMPILER_VERSION
  104. dnl
  105. dnl NB: old versions define _COMPILER_VERSION but this could probably be
  106. dnl defined by other compilers too so don't test for it to be safe
  107. AC_DEFUN([AC_BAKEFILE_PROG_SGICC],
  108. [
  109. _AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes)
  110. ])
  111. AC_DEFUN([AC_BAKEFILE_PROG_SGICXX],
  112. [
  113. _AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes)
  114. ])
  115. dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC
  116. AC_DEFUN([AC_BAKEFILE_PROG_SUNCC],
  117. [
  118. _AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes)
  119. ])
  120. AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX],
  121. [
  122. _AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes)
  123. ])
  124. dnl Intel icc compiler defines __INTEL_COMPILER for both C and C++
  125. AC_DEFUN([AC_BAKEFILE_PROG_INTELCC],
  126. [
  127. _AC_BAKEFILE_LANG_COMPILER(Intel, C, __INTEL_COMPILER, INTELCC=yes)
  128. ])
  129. AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX],
  130. [
  131. _AC_BAKEFILE_LANG_COMPILER(Intel, C++, __INTEL_COMPILER, INTELCXX=yes)
  132. ])
  133. dnl Intel compiler command line options changed in incompatible ways sometimes
  134. dnl before v8 (-KPIC was replaced with gcc-compatible -fPIC) and again in v10
  135. dnl (-create-pch deprecated in favour of -pch-create) so we need to test for
  136. dnl its exact version too
  137. AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_8],
  138. [
  139. _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 800, 8, INTELCC8=yes)
  140. ])
  141. AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_8],
  142. [
  143. _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 800, 8, INTELCXX8=yes)
  144. ])
  145. AC_DEFUN([AC_BAKEFILE_PROG_INTELCC_10],
  146. [
  147. _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C, __INTEL_COMPILER, 1000, 10, INTELCC10=yes)
  148. ])
  149. AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX_10],
  150. [
  151. _AC_BAKEFILE_LANG_COMPILER_LATER_THAN(Intel, C++, __INTEL_COMPILER, 1000, 10, INTELCXX10=yes)
  152. ])
  153. dnl HP-UX aCC: see http://docs.hp.com/en/6162/preprocess.htm#macropredef
  154. AC_DEFUN([AC_BAKEFILE_PROG_HPCC],
  155. [
  156. _AC_BAKEFILE_LANG_COMPILER(HP, C, __HP_cc, HPCC=yes)
  157. ])
  158. AC_DEFUN([AC_BAKEFILE_PROG_HPCXX],
  159. [
  160. _AC_BAKEFILE_LANG_COMPILER(HP, C++, __HP_aCC, HPCXX=yes)
  161. ])
  162. dnl Tru64 cc and cxx
  163. AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCC],
  164. [
  165. _AC_BAKEFILE_LANG_COMPILER(Compaq, C, __DECC, COMPAQCC=yes)
  166. ])
  167. AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCXX],
  168. [
  169. _AC_BAKEFILE_LANG_COMPILER(Compaq, C++, __DECCXX, COMPAQCXX=yes)
  170. ])
  171. dnl ===========================================================================
  172. dnl macros to detect specialty compiler options
  173. dnl ===========================================================================
  174. dnl Figure out if we need to pass -ext o to compiler (MetroWerks)
  175. AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO],
  176. [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto,
  177. dnl First create an empty conf test
  178. [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
  179. dnl Now remove .o and .c.o or .cc.o
  180. rm -f conftest.$ac_objext conftest.$ac_ext.o
  181. dnl Now compile the test
  182. AS_IF([AC_TRY_EVAL(ac_compile)],
  183. dnl If the test succeeded look for conftest.c.o or conftest.cc.o
  184. [for ac_file in `(ls conftest.* 2>/dev/null)`; do
  185. case $ac_file in
  186. conftest.$ac_ext.o)
  187. bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
  188. ;;
  189. *)
  190. ;;
  191. esac
  192. done],
  193. [AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile])
  194. ]) dnl AS_IF
  195. rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext
  196. ]) dnl AC_CACHE_CHECK
  197. if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
  198. if test "[]_AC_LANG_ABBREV[]" = "c"; then
  199. CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
  200. fi
  201. if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
  202. CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
  203. fi
  204. fi
  205. ]) dnl AC_DEFUN
  206. dnl ===========================================================================
  207. dnl Macros to do all of the compiler detections as one macro
  208. dnl ===========================================================================
  209. dnl check for different proprietary compilers depending on target platform
  210. dnl _AC_BAKEFILE_PROG_COMPILER(LANG)
  211. AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER],
  212. [
  213. AC_REQUIRE([AC_PROG_$1])
  214. dnl Intel compiler can be used under several different OS and even
  215. dnl different architectures (x86, amd64 and Itanium) so it's easier to just
  216. dnl always test for it
  217. AC_BAKEFILE_PROG_INTEL$1
  218. dnl If we use Intel compiler we also need to know its version
  219. if test "$INTEL$1" = "yes"; then
  220. AC_BAKEFILE_PROG_INTEL$1_8
  221. AC_BAKEFILE_PROG_INTEL$1_10
  222. fi
  223. dnl if we're using gcc, we can't be using any of incompatible compilers
  224. if test "x$G$1" != "xyes"; then
  225. if test "x$1" = "xC"; then
  226. AC_BAKEFILE_METROWERKS_EXTO
  227. if test "x$bakefile_cv_c_exto" '!=' "x"; then
  228. unset ac_cv_prog_cc_g
  229. _AC_PROG_CC_G
  230. fi
  231. fi
  232. dnl most of these compilers are only used under well-defined OS so
  233. dnl don't waste time checking for them on other ones
  234. case `uname -s` in
  235. AIX*)
  236. AC_BAKEFILE_PROG_XL$1
  237. ;;
  238. Darwin)
  239. AC_BAKEFILE_PROG_MW$1
  240. if test "$MW$1" != "yes"; then
  241. AC_BAKEFILE_PROG_XL$1
  242. fi
  243. ;;
  244. IRIX*)
  245. AC_BAKEFILE_PROG_SGI$1
  246. ;;
  247. Linux*)
  248. dnl Sun CC is now available under Linux too, test for it unless
  249. dnl we already found that we were using a different compiler
  250. if test "$INTEL$1" != "yes"; then
  251. AC_BAKEFILE_PROG_SUN$1
  252. fi
  253. ;;
  254. HP-UX*)
  255. AC_BAKEFILE_PROG_HP$1
  256. ;;
  257. OSF1)
  258. AC_BAKEFILE_PROG_COMPAQ$1
  259. ;;
  260. SunOS)
  261. AC_BAKEFILE_PROG_SUN$1
  262. ;;
  263. esac
  264. fi
  265. ])
  266. AC_DEFUN([AC_BAKEFILE_PROG_CC],
  267. [
  268. _AC_BAKEFILE_PROG_COMPILER(CC)
  269. ])
  270. AC_DEFUN([AC_BAKEFILE_PROG_CXX],
  271. [
  272. _AC_BAKEFILE_PROG_COMPILER(CXX)
  273. ])