configure.ac 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658
  1. dnl configuration script for Guile
  2. dnl Process this file with autoconf to produce configure.
  3. dnl
  4. define(GUILE_CONFIGURE_COPYRIGHT,[[
  5. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
  6. 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
  7. This file is part of GUILE
  8. GUILE is free software; you can redistribute it and/or modify it under
  9. the terms of the GNU Lesser General Public License as published by the
  10. Free Software Foundation; either version 3, or (at your option) any
  11. later version.
  12. GUILE is distributed in the hope that it will be useful, but WITHOUT
  13. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
  15. License for more details.
  16. You should have received a copy of the GNU Lesser General Public
  17. License along with GUILE; see the file COPYING.LESSER. If not, write
  18. to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
  19. Floor, Boston, MA 02110-1301, USA.
  20. ]])
  21. AC_PREREQ(2.61)
  22. AC_INIT([GNU Guile],
  23. m4_esyscmd([build-aux/git-version-gen --match v2.\[12\].\* .tarball-version]),
  24. [bug-guile@gnu.org])
  25. AC_CONFIG_AUX_DIR([build-aux])
  26. AC_CONFIG_MACRO_DIR([m4])
  27. AC_CONFIG_SRCDIR(GUILE-VERSION)
  28. dnl Use `serial-tests' so the output `check-guile' is not hidden
  29. dnl (`parallel-tests' is the default in Automake 1.13.)
  30. dnl `serial-tests' was introduced in Automake 1.12.
  31. AM_INIT_AUTOMAKE([1.12 gnu no-define -Wall -Wno-override \
  32. serial-tests color-tests dist-xz])
  33. m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AC_SUBST([AM_DEFAULT_VERBOSITY],1)])
  34. AC_COPYRIGHT(GUILE_CONFIGURE_COPYRIGHT)
  35. AC_CONFIG_SRCDIR([GUILE-VERSION])
  36. . $srcdir/GUILE-VERSION
  37. GUILE_VERSION="$PACKAGE_VERSION"
  38. AC_CONFIG_HEADERS([config.h])
  39. AH_TOP(/*GUILE_CONFIGURE_COPYRIGHT*/)
  40. #--------------------------------------------------------------------
  41. AC_LANG([C])
  42. dnl Some more checks for Win32
  43. AC_CANONICAL_HOST
  44. AC_LIBTOOL_WIN32_DLL
  45. AC_PROG_INSTALL
  46. AC_PROG_CC
  47. gl_EARLY
  48. AC_PROG_CPP
  49. AC_PROG_SED
  50. AC_PROG_AWK
  51. AC_PROG_LN_S
  52. AM_PROG_AR
  53. dnl Gnulib.
  54. gl_INIT
  55. AC_PROG_CC_C89
  56. # for per-target cflags in the libguile subdir
  57. AM_PROG_CC_C_O
  58. AC_LIBTOOL_DLOPEN
  59. AC_PROG_LIBTOOL
  60. AM_CONDITIONAL([HAVE_SHARED_LIBRARIES], [test "x$enable_shared" = "xyes"])
  61. dnl Check for libltdl.
  62. AC_LIB_HAVE_LINKFLAGS([ltdl], [], [#include <ltdl.h>],
  63. [lt_dlopenext ("foo");])
  64. if test "x$HAVE_LIBLTDL" != "xyes"; then
  65. AC_MSG_ERROR([GNU libltdl (Libtool) not found, see README.])
  66. fi
  67. AC_CHECK_PROG(have_makeinfo, makeinfo, yes, no)
  68. AM_CONDITIONAL(HAVE_MAKEINFO, test "$have_makeinfo" = yes)
  69. AM_PATH_LISPDIR
  70. AC_DEFINE_UNQUOTED([HOST_TYPE], ["$host"],
  71. [Define to the host's GNU triplet.])
  72. #--------------------------------------------------------------------
  73. #
  74. # User options (after above tests that may set default CFLAGS etc.)
  75. #
  76. #--------------------------------------------------------------------
  77. GUILE_ERROR_ON_WARNING="no"
  78. AC_ARG_ENABLE(error-on-warning,
  79. [ --enable-error-on-warning treat compile warnings as errors],
  80. [case "${enableval}" in
  81. yes | y) GUILE_ERROR_ON_WARNING="yes" ;;
  82. no | n) GUILE_ERROR_ON_WARNING="no" ;;
  83. *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;;
  84. esac])
  85. AC_ARG_ENABLE(debug-malloc,
  86. [ --enable-debug-malloc include malloc debugging code],
  87. if test "$enable_debug_malloc" = y || test "$enable_debug_malloc" = yes; then
  88. AC_DEFINE([GUILE_DEBUG_MALLOC], 1,
  89. [Define this if you want to debug scm_must_malloc/realloc/free calls.])
  90. fi)
  91. SCM_I_GSC_GUILE_DEBUG=0
  92. AC_ARG_ENABLE(guile-debug,
  93. [AS_HELP_STRING([--enable-guile-debug],
  94. [include internal debugging functions])],
  95. if test "$enable_guile_debug" = y || test "$enable_guile_debug" = yes; then
  96. SCM_I_GSC_GUILE_DEBUG=1
  97. fi)
  98. AC_ARG_ENABLE(posix,
  99. [ --disable-posix omit non-essential POSIX interfaces],,
  100. enable_posix=yes)
  101. AC_ARG_ENABLE(networking,
  102. [ --disable-networking omit networking interfaces],,
  103. enable_networking=yes)
  104. AC_ARG_ENABLE(regex,
  105. [ --disable-regex omit regular expression interfaces],,
  106. enable_regex=yes)
  107. AC_ARG_ENABLE([deprecated],
  108. AS_HELP_STRING([--disable-deprecated],[omit deprecated features]))
  109. if test "$enable_deprecated" = no; then
  110. SCM_I_GSC_ENABLE_DEPRECATED=0
  111. warn_default=no
  112. else
  113. if test "$enable_deprecated" = yes || test "$enable_deprecated" = ""; then
  114. warn_default=summary
  115. elif test "$enable_deprecated" = shutup; then
  116. warn_default=no
  117. else
  118. warn_default=$enable_deprecated
  119. fi
  120. SCM_I_GSC_ENABLE_DEPRECATED=1
  121. fi
  122. AC_DEFINE_UNQUOTED([SCM_WARN_DEPRECATED_DEFAULT], "$warn_default",
  123. [Define this to control the default warning level for deprecated features.])
  124. dnl Added the following configure option in January 2008 following
  125. dnl investigation of problems with "64" system and library calls on
  126. dnl Darwin (MacOS X). The libguile code (_scm.h) assumes that if a
  127. dnl system has stat64, it will have all the other 64 APIs too; but on
  128. dnl Darwin, stat64 is there but other APIs are missing.
  129. dnl
  130. dnl It also appears, from the Darwin docs, that most system call APIs
  131. dnl there (i.e. the traditional ones _without_ "64" in their names) have
  132. dnl been 64-bit-capable for a long time now, so it isn't necessary to
  133. dnl use "64" versions anyway. For example, Darwin's off_t is 64-bit.
  134. dnl
  135. dnl A similar problem has been reported for HP-UX:
  136. dnl http://www.nabble.com/Building-guile-1.8.2-on-hpux-td13106681.html
  137. dnl
  138. dnl Therefore, and also because a Guile without LARGEFILE64 support is
  139. dnl better than no Guile at all, we provide this option to suppress
  140. dnl trying to use "64" calls.
  141. dnl
  142. dnl It may be that for some 64-bit function on Darwin/HP-UX we do need
  143. dnl to use a "64" call, and hence that by using --without-64-calls we're
  144. dnl missing out on that. If so, someone can work on that in the future.
  145. dnl For now, --without-64-calls allows Guile to build on OSs where it
  146. dnl wasn't building before.
  147. AC_MSG_CHECKING([whether to use system and library "64" calls])
  148. AC_ARG_WITH([64-calls],
  149. AS_HELP_STRING([--without-64-calls],
  150. [don't attempt to use system and library calls with "64" in their names]),
  151. [use_64_calls=$withval],
  152. [use_64_calls=yes
  153. case $host in
  154. *-apple-darwin* )
  155. use_64_calls=no
  156. ;;
  157. powerpc-ibm-aix* )
  158. use_64_calls=no
  159. ;;
  160. esac])
  161. AC_MSG_RESULT($use_64_calls)
  162. case "$use_64_calls" in
  163. y* )
  164. AC_DEFINE([GUILE_USE_64_CALLS], 1,
  165. [Define to 1 in order to try to use "64" versions of system and library calls.])
  166. ;;
  167. esac
  168. #--------------------------------------------------------------------
  169. dnl Check for dynamic linking
  170. use_modules=yes
  171. AC_ARG_WITH(modules,
  172. [ --with-modules[=FILES] Add support for dynamic modules],
  173. use_modules="$withval")
  174. test -z "$use_modules" && use_modules=yes
  175. DLPREOPEN=
  176. if test "$use_modules" != no; then
  177. if test "$use_modules" = yes; then
  178. DLPREOPEN="-dlpreopen force"
  179. else
  180. DLPREOPEN="-export-dynamic"
  181. for module in $use_modules; do
  182. DLPREOPEN="$DLPREOPEN -dlopen $module"
  183. done
  184. fi
  185. fi
  186. dnl files which are destined for separate modules.
  187. if test "$use_modules" != no; then
  188. AC_LIBOBJ([dynl])
  189. AC_DEFINE([HAVE_MODULES], 1,
  190. [Define this if you want support for dynamically loaded modules in Guile.])
  191. fi
  192. if test "$enable_posix" = yes; then
  193. AC_LIBOBJ([posix])
  194. AC_DEFINE([HAVE_POSIX], 1,
  195. [Define this if you want support for non-essential POSIX system calls in Guile.])
  196. fi
  197. if test "$enable_networking" = yes; then
  198. AC_LIBOBJ([net_db])
  199. AC_LIBOBJ([socket])
  200. AC_DEFINE([HAVE_NETWORKING], 1,
  201. [Define this if you want support for networking in Guile.])
  202. fi
  203. if test "$enable_debug_malloc" = yes; then
  204. AC_LIBOBJ([debug-malloc])
  205. fi
  206. AC_CHECK_LIB(uca, __uc_get_ar_bsp)
  207. AC_C_CONST
  208. # "volatile" is used in a couple of tests below.
  209. AC_C_VOLATILE
  210. AC_C_INLINE
  211. if test "$ac_cv_c_inline" != no; then
  212. SCM_I_GSC_C_INLINE="\"${ac_cv_c_inline}\""
  213. else
  214. SCM_I_GSC_C_INLINE=NULL
  215. fi
  216. AC_CHECK_LIB(uca, __uc_get_ar_bsp)
  217. AC_C_BIGENDIAN
  218. AC_C_LABELS_AS_VALUES
  219. AC_CHECK_SIZEOF(char)
  220. AC_CHECK_SIZEOF(unsigned char)
  221. AC_CHECK_SIZEOF(short)
  222. AC_CHECK_SIZEOF(unsigned short)
  223. AC_CHECK_SIZEOF(int)
  224. AC_CHECK_SIZEOF(unsigned int)
  225. AC_CHECK_SIZEOF(long)
  226. AC_CHECK_SIZEOF(unsigned long)
  227. AC_CHECK_SIZEOF(size_t)
  228. AC_CHECK_SIZEOF(long long)
  229. AC_CHECK_SIZEOF(unsigned long long)
  230. AC_CHECK_SIZEOF(__int64)
  231. AC_CHECK_SIZEOF(unsigned __int64)
  232. AC_CHECK_SIZEOF(void *)
  233. AC_CHECK_SIZEOF(intptr_t)
  234. AC_CHECK_SIZEOF(uintptr_t)
  235. AC_CHECK_SIZEOF(ptrdiff_t)
  236. AC_CHECK_SIZEOF(size_t)
  237. AC_CHECK_SIZEOF(off_t)
  238. if test "$ac_cv_sizeof_long" -gt "$ac_cv_sizeof_void_p"; then
  239. AC_MSG_ERROR(long does not fit into a void*)
  240. fi
  241. if test "$ac_cv_sizeof_ptrdiff_t" -ne 0; then
  242. SCM_I_GSC_T_PTRDIFF='"ptrdiff_t"'
  243. else
  244. SCM_I_GSC_T_PTRDIFF='"long"'
  245. fi
  246. AC_SUBST([SCM_I_GSC_T_PTRDIFF])
  247. AC_CHECK_HEADERS([stdint.h])
  248. AC_CHECK_HEADERS([inttypes.h])
  249. AC_CHECK_SIZEOF(intmax_t)
  250. SCM_I_GSC_NEEDS_STDINT_H=0
  251. SCM_I_GSC_NEEDS_INTTYPES_H=0
  252. ### intptr and uintptr (try not to use inttypes if we don't have to)
  253. if test "$ac_cv_header_inttypes_h" = yes; then
  254. if test "$ac_cv_sizeof_intptr_t" -eq 0; then
  255. AC_CHECK_SIZEOF([intptr_t],,[#include <inttypes.h>
  256. #include <stdio.h>])
  257. if test "$ac_cv_sizeof_intptr_t" -ne 0; then
  258. SCM_I_GSC_NEEDS_INTTYPES_H=1
  259. fi
  260. fi
  261. if test "$ac_cv_sizeof_uintptr_t" -eq 0; then
  262. AC_CHECK_SIZEOF([uintptr_t],,[#include <inttypes.h>
  263. #include <stdio.h>])
  264. if test "$ac_cv_sizeof_uintptr_t" -ne 0; then
  265. SCM_I_GSC_NEEDS_INTTYPES_H=1
  266. fi
  267. fi
  268. fi
  269. ### See what's provided by stdint.h
  270. if test "$ac_cv_header_stdint_h" = yes; then
  271. AC_CHECK_TYPE([int8_t],[scm_stdint_has_int8=1],,[#include <stdint.h>])
  272. AC_CHECK_TYPE([uint8_t],[scm_stdint_has_uint8=1],,[#include <stdint.h>])
  273. AC_CHECK_TYPE([int16_t],[scm_stdint_has_int16=1],,[#include <stdint.h>])
  274. AC_CHECK_TYPE([uint16_t],[scm_stdint_has_uint16=1],,[#include <stdint.h>])
  275. AC_CHECK_TYPE([int32_t],[scm_stdint_has_int32=1],,[#include <stdint.h>])
  276. AC_CHECK_TYPE([uint32_t],[scm_stdint_has_uint32=1],,[#include <stdint.h>])
  277. AC_CHECK_TYPE([int64_t],[scm_stdint_has_int64=1],,[#include <stdint.h>])
  278. AC_CHECK_TYPE([uint64_t],[scm_stdint_has_uint64=1],,[#include <stdint.h>])
  279. AC_CHECK_TYPE([intmax_t],[scm_stdint_has_intmax=1],,[#include <stdint.h>])
  280. AC_CHECK_TYPE([uintmax_t],[scm_stdint_has_uintmax=1],,[#include <stdint.h>])
  281. AC_CHECK_TYPE([intptr_t],[scm_stdint_has_intptr=1],,[#include <stdint.h>])
  282. AC_CHECK_TYPE([uintptr_t],[scm_stdint_has_uintptr=1],,[#include <stdint.h>])
  283. fi
  284. # so we don't get confused by the cache (wish there was a better way
  285. # to check particular headers for the same type...)
  286. unset ac_cv_type_int8_t
  287. unset ac_cv_type_uint8_t
  288. unset ac_cv_type_int16_t
  289. unset ac_cv_type_uint16_t
  290. unset ac_cv_type_int32_t
  291. unset ac_cv_type_uint32_t
  292. unset ac_cv_type_int64_t
  293. unset ac_cv_type_uint64_t
  294. unset ac_cv_type_intmax_t
  295. unset ac_cv_type_uintmax_t
  296. ### See what's provided by inttypes.h
  297. if test "$ac_cv_header_inttypes_h" = yes; then
  298. AC_CHECK_TYPE([int8_t],[scm_inttypes_has_int8=1],,[#include <inttypes.h>])
  299. AC_CHECK_TYPE([uint8_t],[scm_inttypes_has_uint8=1],,[#include <inttypes.h>])
  300. AC_CHECK_TYPE([int16_t],[scm_inttypes_has_int16=1],,[#include <inttypes.h>])
  301. AC_CHECK_TYPE([uint16_t],[scm_inttypes_has_uint16=1],,[#include <inttypes.h>])
  302. AC_CHECK_TYPE([int32_t],[scm_inttypes_has_int32=1],,[#include <inttypes.h>])
  303. AC_CHECK_TYPE([uint32_t],[scm_inttypes_has_uint32=1],,[#include <inttypes.h>])
  304. AC_CHECK_TYPE([int64_t],[scm_inttypes_has_int64=1],,[#include <inttypes.h>])
  305. AC_CHECK_TYPE([uint64_t],[scm_inttypes_has_uint64=1],,[#include <inttypes.h>])
  306. AC_CHECK_TYPE([intmax_t],[scm_inttypes_has_intmax=1],,[#include <inttypes.h>])
  307. AC_CHECK_TYPE([uintmax_t],[scm_inttypes_has_uintmax=1],,[#include <inttypes.h>])
  308. AC_CHECK_TYPE([intptr_t],[scm_inttypes_has_intptr=1],,[#include <inttypes.h>])
  309. AC_CHECK_TYPE([uintptr_t],[scm_inttypes_has_uintptr=1],,[#include <inttypes.h>])
  310. fi
  311. # Try hard to find definitions for some required scm_t_*int* types.
  312. ### Required type scm_t_int8
  313. if test "$scm_stdint_has_int8"; then
  314. SCM_I_GSC_T_INT8='"int8_t"'
  315. SCM_I_GSC_NEEDS_STDINT_H=1
  316. elif test "$scm_inttypes_has_int8"; then
  317. SCM_I_GSC_T_INT8='"int8_t"'
  318. SCM_I_GSC_NEEDS_INTTYPES_H=1
  319. elif test "$ac_cv_sizeof_char" -eq 1; then
  320. SCM_I_GSC_T_INT8='"signed char"'
  321. else
  322. AC_MSG_ERROR([Can't find appropriate type for scm_t_int8.])
  323. fi
  324. AC_SUBST([SCM_I_GSC_T_INT8])
  325. ### Required type scm_t_uint8
  326. if test "$scm_stdint_has_uint8"; then
  327. SCM_I_GSC_T_UINT8='"uint8_t"'
  328. SCM_I_GSC_NEEDS_STDINT_H=1
  329. elif test "$scm_inttypes_has_uint8"; then
  330. SCM_I_GSC_T_UINT8='"uint8_t"'
  331. SCM_I_GSC_NEEDS_INTTYPES_H=1
  332. elif test "$ac_cv_sizeof_unsigned_char" -eq 1; then
  333. SCM_I_GSC_T_UINT8='"unsigned char"'
  334. else
  335. AC_MSG_ERROR([Can't find appropriate type for scm_t_uint8.])
  336. fi
  337. AC_SUBST([SCM_I_GSC_T_UINT8])
  338. ### Required type scm_t_int16 (ANSI C says int or short might work)
  339. if test "$scm_stdint_has_int16"; then
  340. SCM_I_GSC_T_INT16='"int16_t"'
  341. SCM_I_GSC_NEEDS_STDINT_H=1
  342. elif test "$scm_inttypes_has_int16"; then
  343. SCM_I_GSC_T_INT16='"int16_t"'
  344. SCM_I_GSC_NEEDS_INTTYPES_H=1
  345. elif test "$ac_cv_sizeof_int" -eq 2; then
  346. SCM_I_GSC_T_INT16='"int"'
  347. elif test "$ac_cv_sizeof_short" -eq 2; then
  348. SCM_I_GSC_T_INT16='"short"'
  349. else
  350. AC_MSG_ERROR([Can't find appropriate type for scm_t_int16.])
  351. fi
  352. AC_SUBST([SCM_I_GSC_T_INT16])
  353. ### Required type scm_t_uint16 (ANSI C says int or short might work)
  354. if test "$scm_stdint_has_uint16"; then
  355. SCM_I_GSC_T_UINT16='"uint16_t"'
  356. SCM_I_GSC_NEEDS_STDINT_H=1
  357. elif test "$scm_inttypes_has_uint16"; then
  358. SCM_I_GSC_T_UINT16='"uint16_t"'
  359. SCM_I_GSC_NEEDS_INTTYPES_H=1
  360. elif test "$ac_cv_sizeof_unsigned_int" -eq 2; then
  361. SCM_I_GSC_T_UINT16='"unsigned int"'
  362. elif test "$ac_cv_sizeof_unsigned_short" -eq 2; then
  363. SCM_I_GSC_T_UINT16='"unsigned short"'
  364. else
  365. AC_MSG_ERROR([Can't find appropriate type for scm_t_uint16.])
  366. fi
  367. AC_SUBST([SCM_I_GSC_T_UINT16])
  368. ### Required type scm_t_int32 (ANSI C says int, short, or long might work)
  369. if test "$scm_stdint_has_int32"; then
  370. SCM_I_GSC_T_INT32='"int32_t"'
  371. SCM_I_GSC_NEEDS_STDINT_H=1
  372. elif test "$scm_inttypes_has_int32"; then
  373. SCM_I_GSC_T_INT32='"int32_t"'
  374. SCM_I_GSC_NEEDS_INTTYPES_H=1
  375. elif test "$ac_cv_sizeof_int" -eq 4; then
  376. SCM_I_GSC_T_INT32='"int"'
  377. elif test "$ac_cv_sizeof_long" -eq 4; then
  378. SCM_I_GSC_T_INT32='"long"'
  379. elif test "$ac_cv_sizeof_short" -eq 4; then
  380. SCM_I_GSC_T_INT32='"short"'
  381. else
  382. AC_MSG_ERROR([Can't find appropriate type for scm_t_int32.])
  383. fi
  384. AC_SUBST([SCM_I_GSC_T_INT32])
  385. ### Required type scm_t_uint32 (ANSI C says int, short, or long might work)
  386. if test "$scm_stdint_has_uint32"; then
  387. SCM_I_GSC_T_UINT32='"uint32_t"'
  388. SCM_I_GSC_NEEDS_STDINT_H=1
  389. elif test "$scm_inttypes_has_uint32"; then
  390. SCM_I_GSC_T_UINT32='"uint32_t"'
  391. SCM_I_GSC_NEEDS_INTTYPES_H=1
  392. elif test "$ac_cv_sizeof_unsigned_int" -eq 4; then
  393. SCM_I_GSC_T_UINT32='"unsigned int"'
  394. elif test "$ac_cv_sizeof_unsigned_long" -eq 4; then
  395. SCM_I_GSC_T_UINT32='"unsigned long"'
  396. elif test "$ac_cv_sizeof_unsigned_short" -eq 4; then
  397. SCM_I_GSC_T_UINT32='"unsigned short"'
  398. else
  399. AC_MSG_ERROR([Can't find appropriate type for scm_t_uint32.])
  400. fi
  401. AC_SUBST([SCM_I_GSC_T_UINT32])
  402. ### Optional type scm_t_int64 (ANSI C says int, short, or long might work)
  403. ### Also try 'long long' and '__int64' if we have it.
  404. SCM_I_GSC_T_INT64=0
  405. if test "$scm_stdint_has_int64"; then
  406. SCM_I_GSC_T_INT64='"int64_t"'
  407. SCM_I_GSC_NEEDS_STDINT_H=1
  408. elif test "$scm_inttypes_has_int64"; then
  409. SCM_I_GSC_T_INT64='"int64_t"'
  410. SCM_I_GSC_NEEDS_INTTYPES_H=1
  411. elif test "$ac_cv_sizeof_int" -eq 8; then
  412. SCM_I_GSC_T_INT64='"int"'
  413. elif test "$ac_cv_sizeof_long" -eq 8; then
  414. SCM_I_GSC_T_INT64='"long"'
  415. elif test "$ac_cv_sizeof_short" -eq 8; then
  416. SCM_I_GSC_T_INT64='"short"'
  417. elif test "$ac_cv_sizeof_long_long" -eq 8; then
  418. SCM_I_GSC_T_INT64='"long long"'
  419. elif test "$ac_cv_sizeof___int64" -eq 8; then
  420. SCM_I_GSC_T_INT64='"__int64"'
  421. else
  422. AC_MSG_ERROR([Can't find appropriate type for scm_t_int64.])
  423. fi
  424. AC_SUBST([SCM_I_GSC_T_INT64])
  425. ### Optional type scm_t_uint64 (ANSI C says int, short, or long might work)
  426. ### Also try 'long long' and '__int64' if we have it.
  427. SCM_I_GSC_T_UINT64=0
  428. if test "$scm_stdint_has_uint64"; then
  429. SCM_I_GSC_T_UINT64='"uint64_t"'
  430. SCM_I_GSC_NEEDS_STDINT_H=1
  431. elif test "$scm_inttypes_has_uint64"; then
  432. SCM_I_GSC_T_UINT64='"uint64_t"'
  433. SCM_I_GSC_NEEDS_INTTYPES_H=1
  434. elif test "$ac_cv_sizeof_unsigned_int" -eq 8; then
  435. SCM_I_GSC_T_UINT64='"unsigned int"'
  436. elif test "$ac_cv_sizeof_unsigned_long" -eq 8; then
  437. SCM_I_GSC_T_UINT64='"unsigned long"'
  438. elif test "$ac_cv_sizeof_unsigned_short" -eq 8; then
  439. SCM_I_GSC_T_UINT64='"unsigned short"'
  440. elif test "$ac_cv_sizeof_unsigned_long_long" -eq 8; then
  441. SCM_I_GSC_T_UINT64='"unsigned long long"'
  442. elif test "$ac_cv_sizeof_unsigned___int64" -eq 8; then
  443. SCM_I_GSC_T_UINT64='"unsigned __int64"'
  444. else
  445. AC_MSG_ERROR([Can't find appropriate type for scm_t_uint64.])
  446. fi
  447. AC_SUBST([SCM_I_GSC_T_UINT64])
  448. ### Required type scm_t_intmax
  449. ###
  450. ### We try 'intmax_t', '__int64', 'long long' in this order. When
  451. ### none of them is available, we use 'long'.
  452. ###
  453. SCM_I_GSC_T_INTMAX=0
  454. if test "$scm_stdint_has_intmax"; then
  455. SCM_I_GSC_T_INTMAX='"intmax_t"'
  456. SCM_I_GSC_NEEDS_STDINT_H=1
  457. elif test "$scm_inttypes_has_intmax"; then
  458. SCM_I_GSC_T_INTMAX='"intmax_t"'
  459. SCM_I_GSC_NEEDS_INTTYPES_H=1
  460. elif test "$ac_cv_sizeof___int64" -ne 0; then
  461. SCM_I_GSC_T_INTMAX='"__int64"'
  462. elif test "$ac_cv_sizeof_long_long" -ne 0; then
  463. SCM_I_GSC_T_INTMAX='"long long"'
  464. else
  465. SCM_I_GSC_T_INTMAX='"long"'
  466. fi
  467. AC_SUBST([SCM_I_GSC_T_INTMAX])
  468. ### Required type scm_t_uintmax
  469. ###
  470. ### We try 'uintmax_t', 'unsigned __int64', 'unsigned long long' in
  471. ### this order. When none of them is available, we use 'unsigned long'.
  472. ###
  473. SCM_I_GSC_T_UINTMAX=0
  474. if test "$scm_stdint_has_uintmax"; then
  475. SCM_I_GSC_T_UINTMAX='"uintmax_t"'
  476. SCM_I_GSC_NEEDS_STDINT_H=1
  477. elif test "$scm_inttypes_has_uintmax"; then
  478. SCM_I_GSC_T_UINTMAX='"uintmax_t"'
  479. SCM_I_GSC_NEEDS_INTTYPES_H=1
  480. elif test "$ac_cv_sizeof_unsigned___int64" -ne 0; then
  481. SCM_I_GSC_T_UINTMAX='"unsigned __int64"'
  482. elif test "$ac_cv_sizeof_unsigned_long_long" -ne 0; then
  483. SCM_I_GSC_T_UINTMAX='"unsigned long long"'
  484. else
  485. SCM_I_GSC_T_UINTMAX='"unsigned long"'
  486. fi
  487. AC_SUBST([SCM_I_GSC_T_UINTMAX])
  488. ### Required type scm_t_intptr
  489. ###
  490. SCM_I_GSC_T_INTPTR=0
  491. if test "$scm_stdint_has_intptr"; then
  492. SCM_I_GSC_T_INTPTR='"intptr_t"'
  493. SCM_I_GSC_NEEDS_STDINT_H=1
  494. elif test "$scm_inttypes_has_intptr"; then
  495. SCM_I_GSC_T_INTPTR='"intptr_t"'
  496. SCM_I_GSC_NEEDS_INTTYPES_H=1
  497. elif test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_void_p"; then
  498. SCM_I_GSC_T_INTPTR='"int"'
  499. elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_void_p"; then
  500. SCM_I_GSC_T_INTPTR='"long"'
  501. elif test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_void_p"; then
  502. SCM_I_GSC_T_INTPTR='"long long"'
  503. else
  504. AC_MSG_ERROR([Can't find appropriate type for `scm_t_intptr'.])
  505. fi
  506. AC_SUBST([SCM_I_GSC_T_INTPTR])
  507. ### Required type scm_t_uintptr
  508. ###
  509. SCM_I_GSC_T_UINTPTR=0
  510. if test "$scm_stdint_has_uintptr"; then
  511. SCM_I_GSC_T_UINTPTR='"uintptr_t"'
  512. SCM_I_GSC_NEEDS_STDINT_H=1
  513. elif test "$scm_inttypes_has_uintptr"; then
  514. SCM_I_GSC_T_UINTPTR='"uintptr_t"'
  515. SCM_I_GSC_NEEDS_INTTYPES_H=1
  516. elif test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_void_p"; then
  517. SCM_I_GSC_T_UINTPTR='"unsigned int"'
  518. elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_void_p"; then
  519. SCM_I_GSC_T_UINTPTR='"unsigned long"'
  520. elif test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_void_p"; then
  521. SCM_I_GSC_T_UINTPTR='"unsigned long long"'
  522. else
  523. AC_MSG_ERROR([Can't find appropriate type for `scm_t_uintptr'.])
  524. fi
  525. AC_SUBST([SCM_I_GSC_T_UINTPTR])
  526. AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H])
  527. AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H])
  528. AC_HEADER_STDC
  529. AC_HEADER_TIME
  530. AC_HEADER_SYS_WAIT
  531. AC_HEADER_DIRENT
  532. # Reason for checking:
  533. #
  534. # HP-UX 11.11 (at least) doesn't provide `struct dirent64', even
  535. # with `_LARGEFILE64_SOURCE', so check whether it's available.
  536. #
  537. AC_CHECK_MEMBER([struct dirent64.d_name],
  538. [SCM_I_GSC_HAVE_STRUCT_DIRENT64=1], [SCM_I_GSC_HAVE_STRUCT_DIRENT64=0],
  539. [ #ifndef _LARGEFILE64_SOURCE
  540. # define _LARGEFILE64_SOURCE
  541. #endif
  542. /* Per Autoconf manual. */
  543. #include <sys/types.h>
  544. #ifdef HAVE_DIRENT_H
  545. # include <dirent.h>
  546. #else
  547. # define dirent direct
  548. # ifdef HAVE_SYS_NDIR_H
  549. # include <sys/ndir.h>
  550. # endif
  551. # ifdef HAVE_SYS_DIR_H
  552. # include <sys/dir.h>
  553. # endif
  554. # ifdef HAVE_NDIR_H
  555. # include <ndir.h>
  556. # endif
  557. #endif ])
  558. AC_SUBST([SCM_I_GSC_HAVE_STRUCT_DIRENT64])
  559. # Reasons for testing:
  560. # complex.h - new in C99
  561. # fenv.h - available in C99, but not older systems
  562. # machine/fpu.h - on Tru64 5.1b, the declaration of fesetround(3) is in
  563. # this file instead of <fenv.h>
  564. # process.h - mingw specific
  565. # sched.h - missing on MinGW
  566. # sys/sendfile.h - non-POSIX, found in glibc
  567. #
  568. AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h memory.h process.h string.h \
  569. sys/dir.h sys/ioctl.h sys/select.h \
  570. sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
  571. sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
  572. direct.h machine/fpu.h sched.h sys/sendfile.h])
  573. # "complex double" is new in C99, and "complex" is only a keyword if
  574. # <complex.h> is included
  575. AC_CHECK_TYPES(complex double,,,
  576. [#if HAVE_COMPLEX_H
  577. #include <complex.h>
  578. #endif])
  579. # On MacOS X <sys/socklen.h> contains socklen_t, so must include that
  580. # when testing.
  581. AC_CHECK_TYPE(socklen_t, ,
  582. [AC_DEFINE_UNQUOTED([socklen_t], int,
  583. [Define to `int' if <sys/socket.h> does not define.])],
  584. [#if HAVE_SYS_TYPES_H
  585. #include <sys/types.h>
  586. #endif
  587. #include <sys/socket.h>
  588. ])
  589. AC_CHECK_TYPES([struct ip_mreq], , , [#include <netinet/in.h>])
  590. GUILE_HEADER_LIBC_WITH_UNISTD
  591. AC_TYPE_GETGROUPS
  592. AC_TYPE_SIGNAL
  593. AC_TYPE_MODE_T
  594. # On mingw -lm is empty, so this test is unnecessary, but it's
  595. # harmless so we don't hard-code to suppress it.
  596. #
  597. AC_CHECK_LIB(m, cos)
  598. AC_CHECK_FUNCS(gethostbyname)
  599. if test $ac_cv_func_gethostbyname = no; then
  600. AC_CHECK_LIB(nsl, gethostbyname)
  601. fi
  602. AC_CHECK_FUNCS(connect)
  603. if test $ac_cv_func_connect = no; then
  604. AC_CHECK_LIB(socket, connect)
  605. fi
  606. dnl
  607. dnl Check for Winsock and other functionality on Win32 (*not* CygWin)
  608. dnl
  609. EXTRA_DEFS=""
  610. case $host in
  611. *-*-mingw*)
  612. AC_CHECK_HEADER(winsock2.h, [AC_DEFINE([HAVE_WINSOCK2_H], 1,
  613. [Define if you have the <winsock2.h> header file.])])
  614. AC_CHECK_LIB(ws2_32, main)
  615. AC_LIBOBJ([win32-uname])
  616. if test "$enable_shared" = yes ; then
  617. EXTRA_DEFS="-DSCM_IMPORT"
  618. AC_DEFINE([USE_DLL_IMPORT], 1,
  619. [Define if you need additional CPP macros on Win32 platforms.])
  620. fi
  621. ;;
  622. esac
  623. AC_SUBST(EXTRA_DEFS)
  624. # Reasons for testing:
  625. # crt_externs.h - Darwin specific
  626. #
  627. AC_CHECK_HEADERS([assert.h crt_externs.h])
  628. # Reasons for testing:
  629. # DINFINITY - OSF specific
  630. # DQNAN - OSF specific
  631. # (DINFINITY and DQNAN are actually global variables, not functions)
  632. # chsize - an MS-DOS-ism, found in mingw
  633. # cexp, clog - not in various pre-c99 systems, and note that it's possible
  634. # for gcc to provide the "complex double" type but the system to not
  635. # have functions like cexp and clog
  636. # clog10 - not in mingw (though others like clog and csqrt are)
  637. # fesetround - available in C99, but not older systems
  638. # ftruncate - posix, but probably not older systems (current mingw
  639. # has it as an inline for chsize)
  640. # ioctl - not in mingw.
  641. # gmtime_r - recent posix, not on old systems
  642. # readdir_r - recent posix, not on old systems
  643. # readdir64_r - not available on HP-UX 11.11
  644. # stat64 - SuS largefile stuff, not on old systems
  645. # sysconf - not on old systems
  646. # truncate - not in mingw
  647. # isblank - available as a GNU extension or in C99
  648. # _NSGetEnviron - Darwin specific
  649. # strcoll_l, newlocale - GNU extensions (glibc), also available on Darwin
  650. # fork - unavailable on Windows
  651. # utimensat - posix.1-2008
  652. # sched_getaffinity, sched_setaffinity - GNU extensions (glibc)
  653. # sendfile - non-POSIX, found in glibc
  654. #
  655. AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid \
  656. fesetround ftime ftruncate fchown fchmod getcwd geteuid getsid \
  657. gettimeofday gmtime_r ioctl lstat mkdir mknod nice \
  658. readdir_r readdir64_r readlink rename rmdir setegid seteuid \
  659. setlocale setpgid setsid sigaction siginterrupt stat64 \
  660. strptime symlink sync sysconf tcgetpgrp tcsetpgrp uname waitpid \
  661. strdup system usleep atexit on_exit chown link fcntl ttyname getpwent \
  662. getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp \
  663. index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron \
  664. strcoll strcoll_l newlocale utimensat sched_getaffinity \
  665. sched_setaffinity sendfile])
  666. AM_CONDITIONAL([BUILD_ICE_9_POPEN],
  667. [test "x$enable_posix" = "xyes" && test "x$ac_cv_func_fork" = "xyes"])
  668. # Reasons for testing:
  669. # netdb.h - not in mingw
  670. # sys/param.h - not in mingw
  671. # pthread.h - only available with pthreads. ACX_PTHREAD doesn't
  672. # check this specifically, we need it for the timespec test below.
  673. # pthread_np.h - available on FreeBSD
  674. # sethostname - the function itself check because it's not in mingw,
  675. # the DECL is checked because Solaris 10 doens't have in any header
  676. # hstrerror - on Tru64 5.1b the symbol is available in libc but the
  677. # declaration isn't anywhere.
  678. # cuserid - on Tru64 5.1b the declaration is documented to be available
  679. # only with `_XOPEN_SOURCE' or some such.
  680. #
  681. AC_CHECK_HEADERS([crypt.h netdb.h pthread.h pthread_np.h sys/param.h sys/resource.h sys/file.h sys/mman.h])
  682. AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname)
  683. AC_CHECK_DECLS([sethostname, hstrerror, cuserid])
  684. # crypt() may or may not be available, for instance in some countries there
  685. # are restrictions on cryptography.
  686. #
  687. # crypt() might be in libc (eg. OpenBSD), or it might be in a separate
  688. # -lcrypt library (eg. Debian GNU/Linux).
  689. #
  690. # On HP-UX 11, crypt() is in libc and there's a dummy libcrypt.a. We must
  691. # be careful to avoid -lcrypt in this case, since libtool will see there's
  692. # only a static libcrypt and decide to build only a static libguile.
  693. #
  694. # AC_SEARCH_LIBS lets us add -lcrypt to LIBS only if crypt() is not in the
  695. # libraries already in that list.
  696. #
  697. AC_SEARCH_LIBS(crypt, crypt,
  698. [AC_DEFINE([HAVE_CRYPT],1,
  699. [Define to 1 if you have the `crypt' function.])])
  700. # When compiling with GCC on some OSs (Solaris, AIX), _Complex_I doesn't
  701. # work; in the reported cases so far, 1.0fi works well instead. According
  702. # to the C99 spec, the complex.h header must provide a working definition
  703. # of _Complex_I, so we always try _Complex_I first. The 1.0fi fallback
  704. # is a workaround for the failure of some systems to conform to C99.
  705. if test "$ac_cv_type_complex_double" = yes; then
  706. AC_MSG_CHECKING([for i])
  707. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  708. #if HAVE_COMPLEX_H
  709. #include <complex.h>
  710. #endif
  711. complex double z;
  712. ]], [[
  713. z = _Complex_I;
  714. ]])],
  715. [AC_DEFINE([GUILE_I],_Complex_I,[The imaginary unit (positive square root of -1).])
  716. AC_MSG_RESULT([_Complex_I])],
  717. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  718. #if HAVE_COMPLEX_H
  719. #include <complex.h>
  720. #endif
  721. complex double z;
  722. ]],[[
  723. z = 1.0fi;
  724. ]])],
  725. [AC_DEFINE([GUILE_I],1.0fi)
  726. AC_MSG_RESULT([1.0fi])],
  727. [ac_cv_type_complex_double=no
  728. AC_MSG_RESULT([not available])])])
  729. fi
  730. # glibc 2.3.6 (circa 2006) and various prior versions had a bug where
  731. # csqrt(-i) returned a negative real part, when it should be positive
  732. # for the principal root.
  733. #
  734. if test "$ac_cv_type_complex_double" = yes; then
  735. AC_CACHE_CHECK([whether csqrt is usable],
  736. guile_cv_use_csqrt,
  737. [AC_RUN_IFELSE([AC_LANG_SOURCE([[
  738. #include <complex.h>
  739. /* "volatile" is meant to prevent gcc from calculating the sqrt as a
  740. constant, we want to test libc. */
  741. volatile complex double z = - _Complex_I;
  742. int
  743. main (void)
  744. {
  745. z = csqrt (z);
  746. if (creal (z) > 0.0)
  747. return 0; /* good */
  748. else
  749. return 1; /* bad */
  750. }]])],
  751. [guile_cv_use_csqrt=yes],
  752. [guile_cv_use_csqrt="no, glibc 2.3 bug"],
  753. [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
  754. case $guile_cv_use_csqrt in
  755. yes*)
  756. AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free])
  757. ;;
  758. esac
  759. fi
  760. AC_CACHE_SAVE
  761. dnl GMP tests
  762. AC_LIB_HAVE_LINKFLAGS([gmp],
  763. [],
  764. [#include <gmp.h>],
  765. [mpz_import (0, 0, 0, 0, 0, 0, 0);])
  766. if test "x$HAVE_LIBGMP" != "xyes"; then
  767. AC_MSG_ERROR([GNU MP 4.1 or greater not found, see README])
  768. fi
  769. dnl `mpz_inits' and `mpz_clears' appeared in GMP 5.0.0.
  770. save_CPPFLAGS="$CPPFLAGS"
  771. if test "x$LIBGMP_PREFIX" != "x"; then
  772. CPPFLAGS="-I$LIBGMP_PREFIX $CPPFLAGS"
  773. fi
  774. AC_CHECK_DECLS([mpz_inits], [], [], [[#include <gmp.h>]])
  775. CPPFLAGS="$save_CPPFLAGS"
  776. dnl GNU libunistring is checked for by Gnulib's `libunistring' module.
  777. if test "x$LTLIBUNISTRING" = "x"; then
  778. AC_MSG_ERROR([GNU libunistring is required, please install it.])
  779. fi
  780. GUILE_LIBUNISTRING_WITH_ICONV_SUPPORT
  781. if test "x$ac_cv_libunistring_with_iconv_support" != "xyes"; then
  782. AC_MSG_ERROR([No iconv support. Please recompile libunistring with iconv enabled.])
  783. fi
  784. dnl Libffi is needed to compile Guile's foreign function interface, but its
  785. dnl interface isn't exposed in Guile's API.
  786. PKG_CHECK_MODULES(LIBFFI, libffi)
  787. AC_SUBST(LIBFFI_CFLAGS)
  788. AC_SUBST(LIBFFI_LIBS)
  789. dnl figure out approriate ffi type for size_t
  790. AC_CHECK_SIZEOF(size_t)
  791. AC_CHECK_SIZEOF(ssize_t)
  792. ffi_size_type=uint$(($ac_cv_sizeof_size_t*8))
  793. ffi_ssize_type=sint$(($ac_cv_sizeof_ssize_t*8))
  794. AC_DEFINE_UNQUOTED([ffi_type_size_t], ffi_type_${ffi_size_type},
  795. [ffi type for size_t])
  796. AC_DEFINE_UNQUOTED([ffi_type_ssize_t], ffi_type_${ffi_ssize_type},
  797. [ffi type for ssize_t])
  798. dnl i18n tests
  799. #AC_CHECK_HEADERS([libintl.h])
  800. #AC_CHECK_FUNCS(gettext)
  801. #if test $ac_cv_func_gettext = no; then
  802. # AC_CHECK_LIB(intl, gettext)
  803. #fi
  804. #AC_CHECK_FUNCS([bindtextdomain textdomain])
  805. AM_GNU_GETTEXT([external], [need-ngettext])
  806. ### Some systems don't declare some functions. On such systems, we
  807. ### need to at least provide our own K&R-style declarations.
  808. ### GUILE_FUNC_DECLARED(function, headerfile)
  809. ### Check for a declaration of FUNCTION in HEADERFILE; if it is
  810. ### not there, #define MISSING_FUNCTION_DECL.
  811. AC_DEFUN([GUILE_FUNC_DECLARED], [
  812. AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
  813. AC_EGREP_HEADER($1, $2,
  814. guile_cv_func_$1_declared=yes,
  815. guile_cv_func_$1_declared=no))
  816. if test [x$guile_cv_func_]$1[_declared] = xno; then
  817. AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL], 1,
  818. [Define if the operating system supplies $1 without declaring it.])
  819. fi
  820. ])
  821. GUILE_FUNC_DECLARED(sleep, unistd.h)
  822. GUILE_FUNC_DECLARED(usleep, unistd.h)
  823. AC_CHECK_DECLS([getlogin, alarm])
  824. AC_CHECK_DECLS([strptime],,,
  825. [#define _GNU_SOURCE /* ask glibc to give strptime prototype */
  826. #include <time.h>])
  827. ### On some systems usleep has no return value. If it does have one,
  828. ### we'd like to return it; otherwise, we'll fake it.
  829. AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
  830. [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
  831. unistd.h,
  832. [guile_cv_func_usleep_return_type=void],
  833. [guile_cv_func_usleep_return_type=int])])
  834. case "$guile_cv_func_usleep_return_type" in
  835. "void" )
  836. AC_DEFINE([USLEEP_RETURNS_VOID], 1,
  837. [Define if the system headers declare usleep to return void.])
  838. ;;
  839. esac
  840. AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
  841. if test -n "$have_sys_un_h" ; then
  842. AC_DEFINE([HAVE_UNIX_DOMAIN_SOCKETS], 1,
  843. [Define if the system supports Unix-domain (file-domain) sockets.])
  844. fi
  845. AC_CHECK_FUNCS(getrlimit setrlimit)
  846. AC_CHECK_FUNCS(socketpair getgroups setgroups setpwent pause tzset)
  847. AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
  848. setnetent getnetent endnetent dnl
  849. setprotoent getprotoent endprotoent dnl
  850. setservent getservent endservent dnl
  851. getnetbyaddr getnetbyname dnl
  852. inet_lnaof inet_makeaddr inet_netof hstrerror)
  853. AC_CHECK_MEMBERS([struct sockaddr_in.sin_len],,,
  854. [#ifdef HAVE_SYS_TYPES_H
  855. #include <sys/types.h>
  856. #endif
  857. #include <netinet/in.h>])
  858. AC_MSG_CHECKING(for __libc_stack_end)
  859. AC_CACHE_VAL(guile_cv_have_libc_stack_end,
  860. [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
  861. extern char *__libc_stack_end;]],
  862. [[printf("%p", (char*) __libc_stack_end);]])],
  863. [guile_cv_have_libc_stack_end=yes],
  864. [guile_cv_have_libc_stack_end=no])])
  865. AC_MSG_RESULT($guile_cv_have_libc_stack_end)
  866. if test $guile_cv_have_libc_stack_end = yes; then
  867. AC_DEFINE([HAVE_LIBC_STACK_END], 1,
  868. [Define if you have the __libc_stack_end variable.])
  869. fi
  870. dnl Some systems do not declare this. Some systems do declare it, as a
  871. dnl macro. With cygwin it may be in a DLL.
  872. AC_MSG_CHECKING(whether netdb.h declares h_errno)
  873. AC_CACHE_VAL(guile_cv_have_h_errno,
  874. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
  875. [[int a = h_errno;]])],
  876. [guile_cv_have_h_errno=yes],
  877. [guile_cv_have_h_errno=no])])
  878. AC_MSG_RESULT($guile_cv_have_h_errno)
  879. if test $guile_cv_have_h_errno = yes; then
  880. AC_DEFINE([HAVE_H_ERRNO], 1, [Define if h_errno is declared in netdb.h.])
  881. fi
  882. AC_MSG_CHECKING(whether uint32_t is defined)
  883. AC_CACHE_VAL(guile_cv_have_uint32_t,
  884. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
  885. #if HAVE_STDINT_H
  886. #include <stdint.h>
  887. #endif
  888. #ifndef HAVE_NETDB_H
  889. #include <netdb.h>
  890. #endif]],
  891. [[uint32_t a;]])],
  892. [guile_cv_have_uint32_t=yes],
  893. [guile_cv_have_uint32_t=no])])
  894. AC_MSG_RESULT($guile_cv_have_uint32_t)
  895. if test $guile_cv_have_uint32_t = yes; then
  896. AC_DEFINE([HAVE_UINT32_T], 1,
  897. [Define if uint32_t typedef is defined when netdb.h is include.])
  898. fi
  899. AC_MSG_CHECKING(for working IPv6 support)
  900. AC_CACHE_VAL(guile_cv_have_ipv6,
  901. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  902. #ifdef HAVE_SYS_TYPES_H
  903. #include <sys/types.h>
  904. #endif
  905. #include <netinet/in.h>
  906. #include <sys/socket.h>]],
  907. [[struct sockaddr_in6 a; a.sin6_family = AF_INET6;]])],
  908. [guile_cv_have_ipv6=yes],
  909. [guile_cv_have_ipv6=no])])
  910. AC_MSG_RESULT($guile_cv_have_ipv6)
  911. if test $guile_cv_have_ipv6 = yes; then
  912. AC_DEFINE([HAVE_IPV6], 1, [Define if you want support for IPv6.])
  913. fi
  914. # included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.
  915. AC_MSG_CHECKING(whether sockaddr_in6 has sin6_scope_id)
  916. AC_CACHE_VAL(guile_cv_have_sin6_scope_id,
  917. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  918. #ifdef HAVE_SYS_TYPES_H
  919. #include <sys/types.h>
  920. #endif
  921. #include <netinet/in.h>]],
  922. [[struct sockaddr_in6 sok; sok.sin6_scope_id = 0;]])],
  923. [guile_cv_have_sin6_scope_id=yes],
  924. [guile_cv_have_sin6_scope_id=no])])
  925. AC_MSG_RESULT($guile_cv_have_sin6_scope_id)
  926. if test $guile_cv_have_sin6_scope_id = yes; then
  927. AC_DEFINE([HAVE_SIN6_SCOPE_ID], 1,
  928. [Define this if your IPv6 has sin6_scope_id in sockaddr_in6 struct.])
  929. fi
  930. # struct sockaddr_in6 field sin_len is only present on BSD systems
  931. AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len],,,
  932. [#ifdef HAVE_SYS_TYPES_H
  933. #include <sys/types.h>
  934. #endif
  935. #include <netinet/in.h>])
  936. AC_MSG_CHECKING(whether localtime caches TZ)
  937. AC_CACHE_VAL(guile_cv_localtime_cache,
  938. [if test x$ac_cv_func_tzset = xyes; then
  939. AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
  940. #if STDC_HEADERS
  941. # include <stdlib.h>
  942. #endif
  943. extern char **environ;
  944. unset_TZ ()
  945. {
  946. char **from, **to;
  947. for (to = from = environ; (*to = *from); from++)
  948. if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
  949. to++;
  950. }
  951. char TZ_GMT0[] = "TZ=GMT0";
  952. char TZ_PST8[] = "TZ=PST8";
  953. main()
  954. {
  955. time_t now = time ((time_t *) 0);
  956. int hour_GMT0, hour_unset;
  957. if (putenv (TZ_GMT0) != 0)
  958. exit (1);
  959. hour_GMT0 = localtime (&now)->tm_hour;
  960. unset_TZ ();
  961. hour_unset = localtime (&now)->tm_hour;
  962. if (putenv (TZ_PST8) != 0)
  963. exit (1);
  964. if (localtime (&now)->tm_hour == hour_GMT0)
  965. exit (1);
  966. unset_TZ ();
  967. if (localtime (&now)->tm_hour != hour_unset)
  968. exit (1);
  969. exit (0);
  970. }]])],
  971. [guile_cv_localtime_cache=no],
  972. [guile_cv_localtime_cache=yes],
  973. [# If we have tzset, assume the worst when cross-compiling.
  974. guile_cv_localtime_cache=yes])
  975. else
  976. # If we lack tzset, report that localtime does not cache TZ,
  977. # since we can't invalidate the cache if we don't have tzset.
  978. guile_cv_localtime_cache=no
  979. fi])dnl
  980. AC_MSG_RESULT($guile_cv_localtime_cache)
  981. if test $guile_cv_localtime_cache = yes; then
  982. AC_DEFINE([LOCALTIME_CACHE], 1, [Define if localtime caches the TZ setting.])
  983. fi
  984. if test "$enable_regex" = yes; then
  985. AC_LIBOBJ([regex-posix])
  986. AC_DEFINE([ENABLE_REGEX], 1, [Define when regex support is enabled.])
  987. fi
  988. AC_REPLACE_FUNCS([strerror memmove mkstemp])
  989. # Reasons for testing:
  990. # asinh, acosh, atanh, trunc - C99 standard, generally not available on
  991. # older systems
  992. # sincos - GLIBC extension
  993. #
  994. AC_CHECK_FUNCS(asinh acosh atanh copysign finite sincos trunc)
  995. # C99 specifies isinf and isnan as macros.
  996. # HP-UX provides only macros, no functions.
  997. # glibc 2.3.2 provides both macros and functions.
  998. # IRIX 6.5 and Solaris 8 only provide functions.
  999. #
  1000. # The following tests detect isinf and isnan either as functions or as
  1001. # macros from <math.h>. Plain AC_CHECK_FUNCS is insufficient, it doesn't
  1002. # use <math.h> so doesn't detect on macro-only systems like HP-UX.
  1003. #
  1004. AC_MSG_CHECKING([for isinf])
  1005. AC_LINK_IFELSE([AC_LANG_SOURCE(
  1006. [[#include <math.h>
  1007. volatile double x = 0.0;
  1008. int main () { return (isinf(x) != 0); }]])],
  1009. [AC_MSG_RESULT([yes])
  1010. AC_DEFINE([HAVE_ISINF], 1,
  1011. [Define to 1 if you have the `isinf' macro or function.])],
  1012. [AC_MSG_RESULT([no])])
  1013. AC_MSG_CHECKING([for isnan])
  1014. AC_LINK_IFELSE([AC_LANG_SOURCE([[
  1015. #include <math.h>
  1016. volatile double x = 0.0;
  1017. int main () { return (isnan(x) != 0); }]])],
  1018. [AC_MSG_RESULT([yes])
  1019. AC_DEFINE([HAVE_ISNAN], 1,
  1020. [Define to 1 if you have the `isnan' macro or function.])],
  1021. [AC_MSG_RESULT([no])])
  1022. # Reasons for checking:
  1023. #
  1024. # st_rdev
  1025. # st_blksize
  1026. # st_blocks not in mingw
  1027. # tm_gmtoff BSD+GNU, not in C99
  1028. #
  1029. # Note AC_STRUCT_ST_BLOCKS is not used here because we don't want the
  1030. # AC_LIBOBJ(fileblocks) replacement which that macro gives.
  1031. #
  1032. AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize, struct stat.st_blocks, struct stat.st_atim, struct stat.st_mtim, struct stat.st_ctim],,,
  1033. [#define _GNU_SOURCE
  1034. AC_INCLUDES_DEFAULT
  1035. ])
  1036. AC_STRUCT_TIMEZONE
  1037. AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,
  1038. [#include <time.h>
  1039. #ifdef TIME_WITH_SYS_TIME
  1040. # include <sys/time.h>
  1041. # include <time.h>
  1042. #else
  1043. # if HAVE_SYS_TIME_H
  1044. # include <sys/time.h>
  1045. # else
  1046. # include <time.h>
  1047. # endif
  1048. #endif
  1049. ])
  1050. GUILE_STRUCT_UTIMBUF
  1051. #--------------------------------------------------------------------
  1052. #
  1053. # What values do the iconv error handlers have?
  1054. #
  1055. # The only place that we need iconv in our public interfaces is for
  1056. # the error handlers, which are just ints. So we weaken our
  1057. # dependency by looking up those values at configure-time.
  1058. #--------------------------------------------------------------------
  1059. GUILE_UNISTRING_ICONVEH_VALUES
  1060. #--------------------------------------------------------------------
  1061. #
  1062. # Which way does the stack grow?
  1063. #
  1064. # Following code comes from Autoconf 2.69's internal _AC_LIBOBJ_ALLOCA
  1065. # macro (/usr/share/autoconf/autoconf/functions.m4). Gnulib has
  1066. # very similar code, so in future we could look at using that.
  1067. #
  1068. # An important detail is that the code involves find_stack_direction
  1069. # calling _itself_ - which means that find_stack_direction (or at
  1070. # least the second find_stack_direction() call) cannot be inlined.
  1071. # If the code could be inlined, that might cause the test to give
  1072. # an incorrect answer.
  1073. #--------------------------------------------------------------------
  1074. SCM_I_GSC_STACK_GROWS_UP=0
  1075. AC_RUN_IFELSE([AC_LANG_SOURCE(
  1076. [AC_INCLUDES_DEFAULT
  1077. int
  1078. find_stack_direction (int *addr, int depth)
  1079. {
  1080. int dir, dummy = 0;
  1081. if (! addr)
  1082. addr = &dummy;
  1083. *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
  1084. dir = depth ? find_stack_direction (addr, depth - 1) : 0;
  1085. return dir + dummy;
  1086. }
  1087. int
  1088. main (int argc, char **argv)
  1089. {
  1090. return find_stack_direction (0, argc + !argv + 20) < 0;
  1091. }])],
  1092. [SCM_I_GSC_STACK_GROWS_UP=1],
  1093. [],
  1094. [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)])
  1095. #--------------------------------------------------------------------
  1096. #
  1097. # Boehm's GC library
  1098. #
  1099. #--------------------------------------------------------------------
  1100. PKG_CHECK_MODULES([BDW_GC], [bdw-gc >= 7.2])
  1101. save_LIBS="$LIBS"
  1102. LIBS="$BDW_GC_LIBS $LIBS"
  1103. CFLAGS="$BDW_GC_CFLAGS $CFLAGS"
  1104. # Functions that might not be defined, depending on configuration.
  1105. AC_CHECK_FUNCS([GC_pthread_exit GC_pthread_cancel GC_pthread_sigmask])
  1106. # Functions from GC 7.3.
  1107. AC_CHECK_FUNCS([GC_move_disappearing_link])
  1108. LIBS="$save_LIBS"
  1109. AC_CHECK_SIZEOF(float)
  1110. if test "$ac_cv_sizeof_float" -le "$ac_cv_sizeof_long"; then
  1111. AC_DEFINE([SCM_SINGLES], 1,
  1112. [Define this if floats are the same size as longs.])
  1113. fi
  1114. AC_MSG_CHECKING(for struct linger)
  1115. AC_CACHE_VAL(scm_cv_struct_linger,
  1116. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  1117. #include <sys/types.h>
  1118. #include <sys/socket.h>]],
  1119. [[struct linger lgr; lgr.l_linger = 100]])],
  1120. [scm_cv_struct_linger="yes"],
  1121. [scm_cv_struct_linger="no"]))
  1122. AC_MSG_RESULT($scm_cv_struct_linger)
  1123. if test $scm_cv_struct_linger = yes; then
  1124. AC_DEFINE([HAVE_STRUCT_LINGER], 1,
  1125. [Define this if your system defines struct linger, for use with the
  1126. getsockopt and setsockopt system calls.])
  1127. fi
  1128. dnl Check for `struct timespec', for the sake of `gen-scmconfig'. When
  1129. dnl building Guile, we always have it, thanks to Gnulib; but scmconfig.h
  1130. dnl must tell whether the system has it.
  1131. dnl
  1132. dnl On MinGW, struct timespec is in <pthread.h>.
  1133. AC_MSG_CHECKING(for struct timespec)
  1134. AC_CACHE_VAL(scm_cv_struct_timespec,
  1135. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  1136. #include <time.h>
  1137. #if HAVE_PTHREAD_H
  1138. #include <pthread.h>
  1139. #endif]], [[struct timespec t; t.tv_nsec = 100]])],
  1140. [scm_cv_struct_timespec="yes"],
  1141. [scm_cv_struct_timespec="no"]))
  1142. AC_MSG_RESULT($scm_cv_struct_timespec)
  1143. if test $scm_cv_struct_timespec = yes; then
  1144. dnl Don't call it `HAVE_STRUCT_TIMESPEC' because pthread-win32's
  1145. dnl <pthread.h> checks whether that macro is defined.
  1146. AC_DEFINE([HAVE_SYSTEM_STRUCT_TIMESPEC], 1,
  1147. [Define this if your system defines struct timespec via either <time.h> or <pthread.h>.])
  1148. fi
  1149. #--------------------------------------------------------------------
  1150. #
  1151. # Flags for thread support
  1152. #
  1153. #--------------------------------------------------------------------
  1154. SCM_I_GSC_USE_PTHREAD_THREADS=0
  1155. SCM_I_GSC_USE_NULL_THREADS=0
  1156. AC_SUBST([SCM_I_GSC_USE_PTHREAD_THREADS])
  1157. AC_SUBST([SCM_I_GSC_USE_NULL_THREADS])
  1158. ### What thread package has the user asked for?
  1159. AC_ARG_WITH(threads, [ --with-threads thread interface],
  1160. , with_threads=yes)
  1161. AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT, 0)
  1162. AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER, 0)
  1163. case "$with_threads" in
  1164. "yes" | "pthread" | "pthreads" | "pthread-threads" | "")
  1165. build_pthread_support="yes"
  1166. ACX_PTHREAD([CC="$PTHREAD_CC"
  1167. LIBS="$PTHREAD_LIBS $LIBS"
  1168. SCM_I_GSC_USE_PTHREAD_THREADS=1
  1169. with_threads="pthreads"],
  1170. [with_threads="null"
  1171. build_pthread_support="no"])
  1172. old_CFLAGS="$CFLAGS"
  1173. CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
  1174. # Reasons for testing:
  1175. # pthread_getattr_np - "np" meaning "non portable" says it
  1176. # all; not present on MacOS X or Solaris 10
  1177. # pthread_get_stackaddr_np - "np" meaning "non portable" says it
  1178. # all; specific to MacOS X
  1179. # pthread_attr_get_np - "np" meaning "non portable" says it
  1180. # all; specific to FreeBSD
  1181. # pthread_sigmask - not available on mingw
  1182. #
  1183. AC_CHECK_FUNCS(pthread_attr_getstack pthread_getattr_np pthread_get_stackaddr_np pthread_attr_get_np pthread_sigmask)
  1184. # On past versions of Solaris, believe 8 through 10 at least, you
  1185. # had to write "pthread_once_t foo = { PTHREAD_ONCE_INIT };".
  1186. # This is contrary to POSIX:
  1187. # http://www.opengroup.org/onlinepubs/000095399/functions/pthread_once.html
  1188. # Check here if this style is required.
  1189. #
  1190. # glibc (2.3.6 at least) works both with or without braces, so the
  1191. # test checks whether it works without.
  1192. #
  1193. if test "$GCC" = "yes"; then
  1194. # Since GCC only issues a warning for missing braces, so we need
  1195. # `-Werror' to catch it.
  1196. CFLAGS="-Werror -Wmissing-braces $CFLAGS"
  1197. fi
  1198. AC_CACHE_CHECK([whether PTHREAD_ONCE_INIT needs braces],
  1199. guile_cv_need_braces_on_pthread_once_init,
  1200. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>
  1201. pthread_once_t foo = PTHREAD_ONCE_INIT;]])],
  1202. [guile_cv_need_braces_on_pthread_once_init=no],
  1203. [guile_cv_need_braces_on_pthread_once_init=yes])])
  1204. if test "$guile_cv_need_braces_on_pthread_once_init" = yes; then
  1205. SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT=1
  1206. fi
  1207. # Same problem with `PTHREAD_MUTEX_INITIALIZER', e.g., on IRIX
  1208. # 6.5.30m with GCC 3.3.
  1209. AC_CACHE_CHECK([whether PTHREAD_MUTEX_INITIALIZER needs braces],
  1210. guile_cv_need_braces_on_pthread_mutex_initializer,
  1211. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>
  1212. pthread_mutex_t foo = PTHREAD_MUTEX_INITIALIZER;]])],
  1213. [guile_cv_need_braces_on_pthread_mutex_initializer=no],
  1214. [guile_cv_need_braces_on_pthread_mutex_initializer=yes])])
  1215. if test "$guile_cv_need_braces_on_pthread_mutex_initializer" = yes; then
  1216. SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER=1
  1217. fi
  1218. CFLAGS="$old_CFLAGS"
  1219. # On Solaris, sched_yield lives in -lrt.
  1220. AC_SEARCH_LIBS(sched_yield, rt)
  1221. ;;
  1222. esac
  1223. case "$with_threads" in
  1224. "pthreads")
  1225. ;;
  1226. "no" | "null")
  1227. SCM_I_GSC_USE_NULL_THREADS=1
  1228. SCM_I_GSC_HAVE_THREAD_STORAGE_CLASS=0
  1229. with_threads="null-threads"
  1230. ;;
  1231. * )
  1232. AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
  1233. ;;
  1234. esac
  1235. AC_MSG_CHECKING(what kind of threads to support)
  1236. AC_MSG_RESULT($with_threads)
  1237. AM_CONDITIONAL([BUILD_PTHREAD_SUPPORT],
  1238. [test "x$build_pthread_support" = "xyes"])
  1239. ## Check whether pthread_attr_getstack works for the main thread
  1240. if test "$with_threads" = pthreads; then
  1241. AC_MSG_CHECKING([whether pthread_attr_getstack works for the main thread])
  1242. old_CFLAGS="$CFLAGS"
  1243. CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
  1244. if test "$cross_compiling" = "no"; then
  1245. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  1246. #if HAVE_PTHREAD_ATTR_GETSTACK
  1247. #include <pthread.h>
  1248. int main ()
  1249. {
  1250. pthread_attr_t attr;
  1251. void *start, *end;
  1252. size_t size;
  1253. pthread_getattr_np (pthread_self (), &attr);
  1254. pthread_attr_getstack (&attr, &start, &size);
  1255. end = (char *)start + size;
  1256. if ((void *)&attr < start || (void *)&attr >= end)
  1257. return 1;
  1258. else
  1259. return 0;
  1260. }
  1261. #else
  1262. int main ()
  1263. {
  1264. return 1;
  1265. }
  1266. #endif
  1267. ]])],
  1268. [works=yes
  1269. AC_DEFINE([PTHREAD_ATTR_GETSTACK_WORKS], [1], [Define when pthread_att_get_stack works for the main thread])],
  1270. [works=no],
  1271. [])
  1272. else
  1273. works="assuming it doesn't"
  1274. fi
  1275. CFLAGS="$old_CFLAGS"
  1276. AC_MSG_RESULT($works)
  1277. GUILE_THREAD_LOCAL_STORAGE
  1278. fi # with_threads=pthreads
  1279. ## Cross building
  1280. if test "$cross_compiling" = "yes"; then
  1281. AC_MSG_CHECKING(cc for build)
  1282. ## /usr/bin/cc still uses wrong assembler
  1283. ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bincc}"
  1284. CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}"
  1285. else
  1286. CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
  1287. fi
  1288. ## AC_MSG_CHECKING("if we are cross compiling")
  1289. ## AC_MSG_RESULT($cross_compiling)
  1290. if test "$cross_compiling" = "yes"; then
  1291. AC_MSG_RESULT($CC_FOR_BUILD)
  1292. fi
  1293. ## No need as yet to be more elaborate
  1294. CCLD_FOR_BUILD="$CC_FOR_BUILD"
  1295. AC_SUBST(cross_compiling)
  1296. AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
  1297. AC_SUBST(CCLD_FOR_BUILD)
  1298. ## libtool erroneously calls CC_FOR_BUILD HOST_CC;
  1299. ## --HOST is the platform that PACKAGE is compiled for.
  1300. HOST_CC="$CC_FOR_BUILD"
  1301. AC_SUBST(HOST_CC)
  1302. GUILE_CHECK_GUILE_FOR_BUILD
  1303. ## If we're using GCC, ask for aggressive warnings.
  1304. GCC_CFLAGS=""
  1305. case "$GCC" in
  1306. yes )
  1307. ## We had -Wstrict-prototypes in here for a bit, but Guile does too
  1308. ## much stuff with generic function pointers for that to really be
  1309. ## less than exasperating.
  1310. ## -Wundef was removed because Gnulib prevented it (see
  1311. ## <http://thread.gmane.org/gmane.lisp.guile.bugs/5329>.)
  1312. ## Build with `-fno-strict-aliasing' to prevent miscompilation on
  1313. ## some platforms. See
  1314. ## <http://lists.gnu.org/archive/html/guile-devel/2012-01/msg00487.html>.
  1315. POTENTIAL_GCC_CFLAGS="-Wall -Wmissing-prototypes \
  1316. -Wdeclaration-after-statement -Wpointer-arith \
  1317. -Wswitch-enum -fno-strict-aliasing"
  1318. # Do this here so we don't screw up any of the tests above that might
  1319. # not be "warning free"
  1320. if test "${GUILE_ERROR_ON_WARNING}" = yes
  1321. then
  1322. POTENTIAL_GCC_CFLAGS="${POTENTIAL_GCC_CFLAGS} -Werror"
  1323. enable_compile_warnings=no
  1324. fi
  1325. for flag in $POTENTIAL_GCC_CFLAGS
  1326. do
  1327. gl_WARN_ADD([$flag], [GCC_CFLAGS])
  1328. done
  1329. ;;
  1330. esac
  1331. AC_SUBST(GCC_CFLAGS)
  1332. # Check for GNU ld's "-z relro".
  1333. GUILE_GNU_LD_RELRO
  1334. LIBLOBJS=""
  1335. for file in $LIBOBJS; do
  1336. file=`echo "$file" | sed 's,\.[[^.]]*$,.lo,'`
  1337. LIBLOBJS="$LIBLOBJS libguile_${GUILE_EFFECTIVE_VERSION}_la-$file"
  1338. done
  1339. ## We also need to create corresponding .doc and .x files
  1340. EXTRA_DOT_DOC_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.doc ,g;s,\.[[^.]]*$,.doc,'`"
  1341. EXTRA_DOT_X_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.x ,g;s,\.[[^.]]*$,.x,'`"
  1342. # GNU Readline bindings.
  1343. GUILE_READLINE
  1344. AC_SUBST(GUILE_MAJOR_VERSION)
  1345. AC_SUBST(GUILE_MINOR_VERSION)
  1346. AC_SUBST(GUILE_MICRO_VERSION)
  1347. AC_SUBST(GUILE_EFFECTIVE_VERSION)
  1348. AC_SUBST(GUILE_VERSION)
  1349. #######################################################################
  1350. # library versioning
  1351. AC_SUBST(LIBGUILE_INTERFACE_CURRENT)
  1352. AC_SUBST(LIBGUILE_INTERFACE_REVISION)
  1353. AC_SUBST(LIBGUILE_INTERFACE_AGE)
  1354. AC_SUBST(LIBGUILE_INTERFACE)
  1355. AC_SUBST(LIBGUILE_I18N_MAJOR)
  1356. AC_SUBST(LIBGUILE_I18N_INTERFACE_CURRENT)
  1357. AC_SUBST(LIBGUILE_I18N_INTERFACE_REVISION)
  1358. AC_SUBST(LIBGUILE_I18N_INTERFACE_AGE)
  1359. AC_SUBST(LIBGUILE_I18N_INTERFACE)
  1360. #######################################################################
  1361. dnl Tell guile-config what flags guile users should compile and link
  1362. dnl with, keeping only `-I' flags from $CPPFLAGS.
  1363. GUILE_CFLAGS=""
  1364. next_is_includedir=false
  1365. for flag in $CPPFLAGS
  1366. do
  1367. if $next_is_includedir; then
  1368. GUILE_CFLAGS="$GUILE_CFLAGS -I $flag"
  1369. next_is_includedir=false
  1370. else
  1371. case "$flag" in
  1372. -I) next_is_includedir=true;;
  1373. -I*) GUILE_CFLAGS="$GUILE_CFLAGS $flag";;
  1374. *) ;;
  1375. esac
  1376. fi
  1377. done
  1378. GUILE_CFLAGS="$GUILE_CFLAGS $PTHREAD_CFLAGS"
  1379. GUILE_LIBS="$LDFLAGS $LIBS"
  1380. AC_SUBST(GUILE_LIBS)
  1381. AC_SUBST(GUILE_CFLAGS)
  1382. AC_SUBST(AWK)
  1383. AC_SUBST(LIBLOBJS)
  1384. AC_SUBST(EXTRA_DOT_DOC_FILES)
  1385. AC_SUBST(EXTRA_DOT_X_FILES)
  1386. dnl See also top_builddir in info node: (libtool)AC_PROG_LIBTOOL
  1387. top_builddir_absolute=`pwd`
  1388. AC_SUBST(top_builddir_absolute)
  1389. top_srcdir_absolute=`(cd $srcdir && pwd)`
  1390. AC_SUBST(top_srcdir_absolute)
  1391. dnl `sitedir' goes into libpath.h and the pkg-config file.
  1392. pkgdatadir="$datadir/$PACKAGE_TARNAME"
  1393. sitedir="$pkgdatadir/site/$GUILE_EFFECTIVE_VERSION"
  1394. AC_SUBST([sitedir])
  1395. dnl Name of the `guile' program.
  1396. guile_program_name="`echo guile | "$SED" "$program_transform_name"`"
  1397. AC_SUBST([guile_program_name])
  1398. # Additional SCM_I_GSC definitions are above.
  1399. AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
  1400. AC_SUBST([SCM_I_GSC_ENABLE_DEPRECATED])
  1401. AC_SUBST([SCM_I_GSC_STACK_GROWS_UP])
  1402. AC_SUBST([SCM_I_GSC_C_INLINE])
  1403. AC_CONFIG_FILES([libguile/gen-scmconfig.h])
  1404. AC_CONFIG_FILES([
  1405. Makefile
  1406. am/Makefile
  1407. lib/Makefile
  1408. benchmark-suite/Makefile
  1409. gc-benchmarks/Makefile
  1410. doc/Makefile
  1411. doc/r5rs/Makefile
  1412. doc/ref/Makefile
  1413. emacs/Makefile
  1414. examples/Makefile
  1415. libguile/Makefile
  1416. libguile/version.h
  1417. guile-readline/Makefile
  1418. test-suite/Makefile
  1419. test-suite/standalone/Makefile
  1420. test-suite/vm/Makefile
  1421. meta/Makefile
  1422. module/Makefile
  1423. ])
  1424. AC_CONFIG_FILES([meta/guile-2.2.pc])
  1425. AC_CONFIG_FILES([meta/guile-2.2-uninstalled.pc])
  1426. GUILE_CONFIG_SCRIPT([check-guile])
  1427. GUILE_CONFIG_SCRIPT([benchmark-guile])
  1428. GUILE_CONFIG_SCRIPT([meta/guile])
  1429. GUILE_CONFIG_SCRIPT([meta/uninstalled-env])
  1430. GUILE_CONFIG_SCRIPT([meta/gdb-uninstalled-guile])
  1431. GUILE_CONFIG_SCRIPT([meta/guild])
  1432. GUILE_CONFIG_SCRIPT([libguile/guile-snarf])
  1433. GUILE_CONFIG_SCRIPT([libguile/guile-snarf-docs])
  1434. GUILE_CONFIG_SCRIPT([test-suite/standalone/test-use-srfi])
  1435. GUILE_CONFIG_SCRIPT([test-suite/standalone/test-fast-slot-ref])
  1436. AC_OUTPUT
  1437. dnl Local Variables:
  1438. dnl comment-start: "dnl "
  1439. dnl comment-end: ""
  1440. dnl comment-start-skip: "\\bdnl\\b\\s *"
  1441. dnl End: