Include <libguile/__scm.h> in "foreign.h".
[bpt/guile.git] / configure.ac
CommitLineData
777b022a
JB
1dnl configuration script for Guile
2dnl Process this file with autoconf to produce configure.
50848747 3dnl
a73256d0
KR
4
5define(GUILE_CONFIGURE_COPYRIGHT,[[
6
75c242a2 7Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
a73256d0
KR
8
9This file is part of GUILE
10
53befeb7
NJ
11GUILE is free software; you can redistribute it and/or modify it under
12the terms of the GNU Lesser General Public License as published by the
13Free Software Foundation; either version 3, or (at your option) any
14later version.
a73256d0 15
53befeb7
NJ
16GUILE is distributed in the hope that it will be useful, but WITHOUT
17ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
19License for more details.
a73256d0 20
53befeb7
NJ
21You should have received a copy of the GNU Lesser General Public
22License along with GUILE; see the file COPYING.LESSER. If not, write
23to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
24Floor, Boston, MA 02110-1301, USA.
a73256d0
KR
25
26]])
50848747 27
4bdc8fb5 28AC_PREREQ(2.61)
237b3247 29
b3aa4626
KR
30dnl `patsubst' here deletes the newline which "echo" prints. We can't use
31dnl "echo -n" since -n is not portable (see autoconf manual "Limitations of
32dnl Builtins"), in particular on solaris it results in a literal "-n" in
33dnl the output.
34dnl
0c1eb9b6 35AC_INIT([GNU Guile],
b3aa4626
KR
36 patsubst(m4_esyscmd(. ./GUILE-VERSION && echo ${GUILE_VERSION}),[
37]),
2039f7be 38 [bug-guile@gnu.org])
f6b4d9b4
LC
39AC_CONFIG_AUX_DIR([build-aux])
40AC_CONFIG_MACRO_DIR([m4])
5ae51dad 41AC_CONFIG_SRCDIR(GUILE-VERSION)
f6b4d9b4 42
47871d5a 43AM_INIT_AUTOMAKE([gnu no-define check-news -Wall -Wno-override])
5ae51dad 44
a73256d0 45AC_COPYRIGHT(GUILE_CONFIGURE_COPYRIGHT)
8907576f 46AC_CONFIG_SRCDIR([GUILE-VERSION])
5ae51dad 47
2d26def0 48. $srcdir/GUILE-VERSION
5ae51dad 49
4bdc8fb5 50AC_CONFIG_HEADERS([config.h])
a73256d0 51AH_TOP(/*GUILE_CONFIGURE_COPYRIGHT*/)
2d26def0 52
a6be66ed
RB
53#--------------------------------------------------------------------
54
4bdc8fb5
LC
55AC_LANG([C])
56
a6be66ed 57dnl Some more checks for Win32
4bdc8fb5
LC
58AC_CANONICAL_HOST
59
a6be66ed
RB
60AC_LIBTOOL_WIN32_DLL
61
62AC_PROG_INSTALL
63AC_PROG_CC
6caac03c 64gl_EARLY
a6be66ed 65AC_PROG_CPP
c2be4e89 66AC_PROG_SED
a6be66ed
RB
67AC_PROG_AWK
68
6caac03c
LC
69dnl Gnulib.
70gl_INIT
a6be66ed 71
4bdc8fb5
LC
72AC_PROG_CC_C89
73
45c0ff10
KR
74# for per-target cflags in the libguile subdir
75AM_PROG_CC_C_O
a6be66ed
RB
76
77AC_LIBTOOL_DLOPEN
c78a96e0 78AC_PROG_LIBTOOL
a98dbc87
MV
79AC_CHECK_LIB([ltdl], [lt_dlinit], ,
80 [AC_MSG_ERROR([libltdl not found. See README.])])
96e3f63a
LC
81AC_CHECK_HEADER([ltdl.h], [],
82 [AC_MSG_ERROR([<ltdl.h> not found. See README.])])
a6be66ed
RB
83
84AC_CHECK_PROG(have_makeinfo, makeinfo, yes, no)
85AM_CONDITIONAL(HAVE_MAKEINFO, test "$have_makeinfo" = yes)
86
d995da7f
NJ
87AM_PATH_LISPDIR
88
d7a22073
LC
89AC_DEFINE_UNQUOTED([HOST_TYPE], ["$host"],
90 [Define to the host's GNU triplet.])
91
0e8a8468 92#--------------------------------------------------------------------
3a629497 93#
a6be66ed 94# User options (after above tests that may set default CFLAGS etc.)
3a629497
JB
95#
96#--------------------------------------------------------------------
86789f9b 97
13922e3f 98GUILE_ERROR_ON_WARNING="no"
bdcccc18 99
8afd1a2a
RB
100AC_ARG_ENABLE(error-on-warning,
101 [ --enable-error-on-warning treat compile warnings as errors],
102 [case "${enableval}" in
bdcccc18
RB
103 yes | y) GUILE_ERROR_ON_WARNING="yes" ;;
104 no | n) GUILE_ERROR_ON_WARNING="no" ;;
8afd1a2a
RB
105 *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;;
106 esac])
107
9a52bc2a 108SCM_I_GSC_GUILE_DEBUG_FREELIST=0
52b3923a 109AC_ARG_ENABLE(debug-freelist,
e73dd549 110 [ --enable-debug-freelist include garbage collector freelist debugging code],
9a52bc2a
RB
111 if test "$enable_debug_freelist" = y \
112 || test "$enable_debug_freelist" = yes; then
113 SCM_I_GSC_GUILE_DEBUG_FREELIST=1
52b3923a
GB
114 fi)
115
cf890744 116AC_ARG_ENABLE(debug-malloc,
e73dd549 117 [ --enable-debug-malloc include malloc debugging code],
cf890744 118 if test "$enable_debug_malloc" = y || test "$enable_debug_malloc" = yes; then
feef98f2 119 AC_DEFINE([GUILE_DEBUG_MALLOC], 1,
eede3dbc 120 [Define this if you want to debug scm_must_malloc/realloc/free calls.])
cf890744
MD
121 fi)
122
9a52bc2a 123SCM_I_GSC_GUILE_DEBUG=0
62002dcb 124AC_ARG_ENABLE(guile-debug,
4bdc8fb5 125 [AS_HELP_STRING([--enable-guile-debug],
9a52bc2a 126 [include internal debugging functions])],
62002dcb 127 if test "$enable_guile_debug" = y || test "$enable_guile_debug" = yes; then
9a52bc2a 128 SCM_I_GSC_GUILE_DEBUG=1
62002dcb
MD
129 fi)
130
52cfc69b
GH
131AC_ARG_ENABLE(posix,
132 [ --disable-posix omit posix interfaces],,
133 enable_posix=yes)
134
135AC_ARG_ENABLE(networking,
dc914156 136 [ --disable-networking omit networking interfaces],,
52cfc69b
GH
137 enable_networking=yes)
138
139AC_ARG_ENABLE(regex,
140 [ --disable-regex omit regular expression interfaces],,
141 enable_regex=yes)
142
f5922e27 143AC_ARG_ENABLE([discouraged],
4bdc8fb5 144 AS_HELP_STRING([--disable-discouraged],[omit discouraged features]))
f5922e27
MV
145
146if test "$enable_discouraged" = no; then
147 SCM_I_GSC_ENABLE_DISCOURAGED=0
148else
149 SCM_I_GSC_ENABLE_DISCOURAGED=1
150fi
151
9a52bc2a 152AC_ARG_ENABLE([deprecated],
4bdc8fb5 153 AS_HELP_STRING([--disable-deprecated],[omit deprecated features]))
eede3dbc 154
e73dd549 155if test "$enable_deprecated" = no; then
9a52bc2a 156 SCM_I_GSC_ENABLE_DEPRECATED=0
6ab8238d 157 warn_default=no
e73dd549
MV
158else
159 if test "$enable_deprecated" = yes || test "$enable_deprecated" = ""; then
94a0d885
MV
160 warn_default=summary
161 elif test "$enable_deprecated" = shutup; then
162 warn_default=no
163 else
164 warn_default=$enable_deprecated
e73dd549 165 fi
9a52bc2a 166 SCM_I_GSC_ENABLE_DEPRECATED=1
e73dd549 167fi
feef98f2 168AC_DEFINE_UNQUOTED([SCM_WARN_DEPRECATED_DEFAULT], "$warn_default",
6ab8238d 169[Define this to control the default warning level for deprecated features.])
e73dd549 170
3d1a89b9
NJ
171AC_ARG_ENABLE(elisp,
172 [ --disable-elisp omit Emacs Lisp support],,
173 enable_elisp=yes)
174
d05bcb2e
NJ
175dnl Added the following configure option in January 2008 following
176dnl investigation of problems with "64" system and library calls on
177dnl Darwin (MacOS X). The libguile code (_scm.h) assumes that if a
178dnl system has stat64, it will have all the other 64 APIs too; but on
179dnl Darwin, stat64 is there but other APIs are missing.
180dnl
181dnl It also appears, from the Darwin docs, that most system call APIs
182dnl there (i.e. the traditional ones _without_ "64" in their names) have
183dnl been 64-bit-capable for a long time now, so it isn't necessary to
184dnl use "64" versions anyway. For example, Darwin's off_t is 64-bit.
185dnl
186dnl A similar problem has been reported for HP-UX:
187dnl http://www.nabble.com/Building-guile-1.8.2-on-hpux-td13106681.html
188dnl
189dnl Therefore, and also because a Guile without LARGEFILE64 support is
190dnl better than no Guile at all, we provide this option to suppress
191dnl trying to use "64" calls.
192dnl
193dnl It may be that for some 64-bit function on Darwin/HP-UX we do need
194dnl to use a "64" call, and hence that by using --without-64-calls we're
195dnl missing out on that. If so, someone can work on that in the future.
196dnl For now, --without-64-calls allows Guile to build on OSs where it
197dnl wasn't building before.
4b26c03e 198AC_MSG_CHECKING([whether to use system and library "64" calls])
d05bcb2e 199AC_ARG_WITH([64-calls],
4bdc8fb5 200 AS_HELP_STRING([--without-64-calls],
d05bcb2e
NJ
201 [don't attempt to use system and library calls with "64" in their names]),
202 [use_64_calls=$withval],
203 [use_64_calls=yes
204 case $host in
205 *-apple-darwin* )
206 use_64_calls=no
207 ;;
32b164aa
NJ
208 powerpc-ibm-aix* )
209 use_64_calls=no
210 ;;
d05bcb2e 211 esac])
4b26c03e 212AC_MSG_RESULT($use_64_calls)
d05bcb2e
NJ
213case "$use_64_calls" in
214 y* )
feef98f2 215 AC_DEFINE([GUILE_USE_64_CALLS], 1,
d05bcb2e
NJ
216 [Define to 1 in order to try to use "64" versions of system and library calls.])
217 ;;
218esac
219
a44e61ac
MV
220#--------------------------------------------------------------------
221
4f6f9ae3
GH
222dnl Check for dynamic linking
223
224use_modules=yes
225AC_ARG_WITH(modules,
226[ --with-modules[=FILES] Add support for dynamic modules],
227use_modules="$withval")
228test -z "$use_modules" && use_modules=yes
229DLPREOPEN=
230if test "$use_modules" != no; then
4f6f9ae3
GH
231 if test "$use_modules" = yes; then
232 DLPREOPEN="-dlpreopen force"
233 else
234 DLPREOPEN="-export-dynamic"
235 for module in $use_modules; do
236 DLPREOPEN="$DLPREOPEN -dlopen $module"
237 done
238 fi
239fi
240
52cfc69b
GH
241dnl files which are destined for separate modules.
242
4f6f9ae3
GH
243if test "$use_modules" != no; then
244 AC_LIBOBJ([dynl])
245fi
246
52cfc69b 247if test "$enable_posix" = yes; then
eede3dbc
RB
248 AC_LIBOBJ([filesys])
249 AC_LIBOBJ([posix])
feef98f2 250 AC_DEFINE([HAVE_POSIX], 1,
eede3dbc 251 [Define this if you want support for POSIX system calls in Guile.])
52cfc69b
GH
252fi
253
254if test "$enable_networking" = yes; then
eede3dbc
RB
255 AC_LIBOBJ([net_db])
256 AC_LIBOBJ([socket])
feef98f2 257 AC_DEFINE([HAVE_NETWORKING], 1,
eede3dbc 258 [Define this if you want support for networking in Guile.])
52cfc69b
GH
259fi
260
cf890744 261if test "$enable_debug_malloc" = yes; then
eede3dbc 262 AC_LIBOBJ([debug-malloc])
cf890744
MD
263fi
264
3d1a89b9 265if test "$enable_elisp" = yes; then
9a52bc2a
RB
266 SCM_I_GSC_ENABLE_ELISP=1
267else
268 SCM_I_GSC_ENABLE_ELISP=0
3d1a89b9 269fi
9a5fa6e9 270AC_CHECK_LIB(uca, __uc_get_ar_bsp)
3d1a89b9 271
3a629497 272AC_C_CONST
5b079b46 273
b3aa4626
KR
274# "volatile" is used in a couple of tests below.
275AC_C_VOLATILE
276
9a52bc2a 277AC_C_INLINE
5bd732c9 278if test "$ac_cv_c_inline" != no; then
9a52bc2a
RB
279 SCM_I_GSC_C_INLINE="\"${ac_cv_c_inline}\""
280else
281 SCM_I_GSC_C_INLINE=NULL
5bd732c9 282fi
9a5fa6e9 283AC_CHECK_LIB(uca, __uc_get_ar_bsp)
5bd732c9 284
9a52bc2a
RB
285AC_C_BIGENDIAN
286
659b4611
AW
287AC_C_LABELS_AS_VALUES
288
9a52bc2a
RB
289AC_CHECK_SIZEOF(char)
290AC_CHECK_SIZEOF(unsigned char)
813b3dd4 291AC_CHECK_SIZEOF(short)
9a52bc2a 292AC_CHECK_SIZEOF(unsigned short)
9dec9737 293AC_CHECK_SIZEOF(int)
9a52bc2a 294AC_CHECK_SIZEOF(unsigned int)
9dec9737 295AC_CHECK_SIZEOF(long)
9a52bc2a 296AC_CHECK_SIZEOF(unsigned long)
813b3dd4 297AC_CHECK_SIZEOF(size_t)
813b3dd4 298AC_CHECK_SIZEOF(long long)
9a52bc2a 299AC_CHECK_SIZEOF(unsigned long long)
fcc5d734
SJ
300AC_CHECK_SIZEOF(__int64)
301AC_CHECK_SIZEOF(unsigned __int64)
1be6b49c 302AC_CHECK_SIZEOF(void *)
9a52bc2a
RB
303AC_CHECK_SIZEOF(intptr_t)
304AC_CHECK_SIZEOF(uintptr_t)
305AC_CHECK_SIZEOF(ptrdiff_t)
d20008c0 306AC_CHECK_SIZEOF(size_t)
4f416616 307AC_CHECK_SIZEOF(off_t)
1be6b49c 308
f3f70257
ML
309if test "$ac_cv_sizeof_long" -ne "$ac_cv_sizeof_void_p"; then
310 AC_MSG_ERROR(sizes of long and void* are not identical)
9dec9737 311fi
3a629497 312
c134fe9d 313if test "$ac_cv_sizeof_ptrdiff_t" -ne 0; then
9a52bc2a
RB
314 SCM_I_GSC_T_PTRDIFF='"ptrdiff_t"'
315else
316 SCM_I_GSC_T_PTRDIFF='"long"'
317fi
318AC_SUBST([SCM_I_GSC_T_PTRDIFF])
319
320AC_CHECK_HEADERS([stdint.h])
321AC_CHECK_HEADERS([inttypes.h])
322
d20008c0
MV
323AC_CHECK_SIZEOF(intmax_t)
324
9a52bc2a
RB
325SCM_I_GSC_NEEDS_STDINT_H=0
326SCM_I_GSC_NEEDS_INTTYPES_H=0
327
328### intptr and uintptr (try not to use inttypes if we don't have to)
329if test "$ac_cv_header_inttypes_h" = yes; then
330 if test "$ac_cv_sizeof_intptr_t" -eq 0; then
331 AC_CHECK_SIZEOF([intptr_t],,[#include <inttypes.h>
332#include <stdio.h>])
333 if test "$ac_cv_sizeof_intptr_t" -ne 0; then
334 SCM_I_GSC_NEEDS_INTTYPES_H=1
335 fi
336 fi
337 if test "$ac_cv_sizeof_uintptr_t" -eq 0; then
338 AC_CHECK_SIZEOF([uintptr_t],,[#include <inttypes.h>
339#include <stdio.h>])
340 if test "$ac_cv_sizeof_uintptr_t" -ne 0; then
341 SCM_I_GSC_NEEDS_INTTYPES_H=1
342 fi
343 fi
344fi
345
346### See what's provided by stdint.h
347if test "$ac_cv_header_stdint_h" = yes; then
348 AC_CHECK_TYPE([int8_t],[scm_stdint_has_int8=1],,[#include <stdint.h>])
349 AC_CHECK_TYPE([uint8_t],[scm_stdint_has_uint8=1],,[#include <stdint.h>])
350 AC_CHECK_TYPE([int16_t],[scm_stdint_has_int16=1],,[#include <stdint.h>])
351 AC_CHECK_TYPE([uint16_t],[scm_stdint_has_uint16=1],,[#include <stdint.h>])
352 AC_CHECK_TYPE([int32_t],[scm_stdint_has_int32=1],,[#include <stdint.h>])
353 AC_CHECK_TYPE([uint32_t],[scm_stdint_has_uint32=1],,[#include <stdint.h>])
354 AC_CHECK_TYPE([int64_t],[scm_stdint_has_int64=1],,[#include <stdint.h>])
355 AC_CHECK_TYPE([uint64_t],[scm_stdint_has_uint64=1],,[#include <stdint.h>])
eb1f89f6
MV
356 AC_CHECK_TYPE([intmax_t],[scm_stdint_has_intmax=1],,[#include <stdint.h>])
357 AC_CHECK_TYPE([uintmax_t],[scm_stdint_has_uintmax=1],,[#include <stdint.h>])
114bc68a
LC
358 AC_CHECK_TYPE([intptr_t],[scm_stdint_has_intptr=1],,[#include <stdint.h>])
359 AC_CHECK_TYPE([uintptr_t],[scm_stdint_has_uintptr=1],,[#include <stdint.h>])
9a52bc2a
RB
360fi
361
362# so we don't get confused by the cache (wish there was a better way
363# to check particular headers for the same type...)
364
365unset ac_cv_type_int8_t
366unset ac_cv_type_uint8_t
367unset ac_cv_type_int16_t
368unset ac_cv_type_uint16_t
369unset ac_cv_type_int32_t
370unset ac_cv_type_uint32_t
371unset ac_cv_type_int64_t
372unset ac_cv_type_uint64_t
eb1f89f6
MV
373unset ac_cv_type_intmax_t
374unset ac_cv_type_uintmax_t
9a52bc2a
RB
375
376### See what's provided by inttypes.h
377if test "$ac_cv_header_inttypes_h" = yes; then
378 AC_CHECK_TYPE([int8_t],[scm_inttypes_has_int8=1],,[#include <inttypes.h>])
379 AC_CHECK_TYPE([uint8_t],[scm_inttypes_has_uint8=1],,[#include <inttypes.h>])
380 AC_CHECK_TYPE([int16_t],[scm_inttypes_has_int16=1],,[#include <inttypes.h>])
381 AC_CHECK_TYPE([uint16_t],[scm_inttypes_has_uint16=1],,[#include <inttypes.h>])
382 AC_CHECK_TYPE([int32_t],[scm_inttypes_has_int32=1],,[#include <inttypes.h>])
383 AC_CHECK_TYPE([uint32_t],[scm_inttypes_has_uint32=1],,[#include <inttypes.h>])
384 AC_CHECK_TYPE([int64_t],[scm_inttypes_has_int64=1],,[#include <inttypes.h>])
385 AC_CHECK_TYPE([uint64_t],[scm_inttypes_has_uint64=1],,[#include <inttypes.h>])
eb1f89f6
MV
386 AC_CHECK_TYPE([intmax_t],[scm_inttypes_has_intmax=1],,[#include <inttypes.h>])
387 AC_CHECK_TYPE([uintmax_t],[scm_inttypes_has_uintmax=1],,[#include <inttypes.h>])
114bc68a
LC
388 AC_CHECK_TYPE([intptr_t],[scm_inttypes_has_intptr=1],,[#include <inttypes.h>])
389 AC_CHECK_TYPE([uintptr_t],[scm_inttypes_has_uintptr=1],,[#include <inttypes.h>])
9a52bc2a
RB
390fi
391
392# Try hard to find definitions for some required scm_t_*int* types.
393
394### Required type scm_t_int8
6aa84fdd 395if test "$scm_stdint_has_int8"; then
9a52bc2a
RB
396 SCM_I_GSC_T_INT8='"int8_t"'
397 SCM_I_GSC_NEEDS_STDINT_H=1
398elif test "$scm_inttypes_has_int8"; then
399 SCM_I_GSC_T_INT8='"int8_t"'
400 SCM_I_GSC_NEEDS_INTTYPES_H=1
6aa84fdd
MV
401elif test "$ac_cv_sizeof_char" -eq 1; then
402 SCM_I_GSC_T_INT8='"signed char"'
9a52bc2a
RB
403else
404 AC_MSG_ERROR([Can't find appropriate type for scm_t_int8.])
405fi
406AC_SUBST([SCM_I_GSC_T_INT8])
407
408### Required type scm_t_uint8
6aa84fdd 409if test "$scm_stdint_has_uint8"; then
9a52bc2a
RB
410 SCM_I_GSC_T_UINT8='"uint8_t"'
411 SCM_I_GSC_NEEDS_STDINT_H=1
412elif test "$scm_inttypes_has_uint8"; then
413 SCM_I_GSC_T_UINT8='"uint8_t"'
414 SCM_I_GSC_NEEDS_INTTYPES_H=1
6aa84fdd
MV
415elif test "$ac_cv_sizeof_unsigned_char" -eq 1; then
416 SCM_I_GSC_T_UINT8='"unsigned char"'
9a52bc2a
RB
417else
418 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint8.])
419fi
420AC_SUBST([SCM_I_GSC_T_UINT8])
9a52bc2a
RB
421
422### Required type scm_t_int16 (ANSI C says int or short might work)
6aa84fdd 423if test "$scm_stdint_has_int16"; then
9a52bc2a
RB
424 SCM_I_GSC_T_INT16='"int16_t"'
425 SCM_I_GSC_NEEDS_STDINT_H=1
426elif test "$scm_inttypes_has_int16"; then
427 SCM_I_GSC_T_INT16='"int16_t"'
428 SCM_I_GSC_NEEDS_INTTYPES_H=1
6aa84fdd
MV
429elif test "$ac_cv_sizeof_int" -eq 2; then
430 SCM_I_GSC_T_INT16='"int"'
6aa84fdd
MV
431elif test "$ac_cv_sizeof_short" -eq 2; then
432 SCM_I_GSC_T_INT16='"short"'
9a52bc2a
RB
433else
434 AC_MSG_ERROR([Can't find appropriate type for scm_t_int16.])
435fi
436AC_SUBST([SCM_I_GSC_T_INT16])
437
438### Required type scm_t_uint16 (ANSI C says int or short might work)
6aa84fdd 439if test "$scm_stdint_has_uint16"; then
9a52bc2a
RB
440 SCM_I_GSC_T_UINT16='"uint16_t"'
441 SCM_I_GSC_NEEDS_STDINT_H=1
442elif test "$scm_inttypes_has_uint16"; then
443 SCM_I_GSC_T_UINT16='"uint16_t"'
444 SCM_I_GSC_NEEDS_INTTYPES_H=1
6aa84fdd
MV
445elif test "$ac_cv_sizeof_unsigned_int" -eq 2; then
446 SCM_I_GSC_T_UINT16='"unsigned int"'
6aa84fdd
MV
447elif test "$ac_cv_sizeof_unsigned_short" -eq 2; then
448 SCM_I_GSC_T_UINT16='"unsigned short"'
9a52bc2a
RB
449else
450 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint16.])
451fi
452AC_SUBST([SCM_I_GSC_T_UINT16])
453
454
455### Required type scm_t_int32 (ANSI C says int, short, or long might work)
6aa84fdd 456if test "$scm_stdint_has_int32"; then
9a52bc2a
RB
457 SCM_I_GSC_T_INT32='"int32_t"'
458 SCM_I_GSC_NEEDS_STDINT_H=1
459elif test "$scm_inttypes_has_int32"; then
460 SCM_I_GSC_T_INT32='"int32_t"'
461 SCM_I_GSC_NEEDS_INTTYPES_H=1
6aa84fdd
MV
462elif test "$ac_cv_sizeof_int" -eq 4; then
463 SCM_I_GSC_T_INT32='"int"'
6aa84fdd
MV
464elif test "$ac_cv_sizeof_long" -eq 4; then
465 SCM_I_GSC_T_INT32='"long"'
6aa84fdd
MV
466elif test "$ac_cv_sizeof_short" -eq 4; then
467 SCM_I_GSC_T_INT32='"short"'
9a52bc2a
RB
468else
469 AC_MSG_ERROR([Can't find appropriate type for scm_t_int32.])
470fi
471AC_SUBST([SCM_I_GSC_T_INT32])
472
473### Required type scm_t_uint32 (ANSI C says int, short, or long might work)
6aa84fdd 474if test "$scm_stdint_has_uint32"; then
9a52bc2a
RB
475 SCM_I_GSC_T_UINT32='"uint32_t"'
476 SCM_I_GSC_NEEDS_STDINT_H=1
477elif test "$scm_inttypes_has_uint32"; then
478 SCM_I_GSC_T_UINT32='"uint32_t"'
479 SCM_I_GSC_NEEDS_INTTYPES_H=1
6aa84fdd
MV
480elif test "$ac_cv_sizeof_unsigned_int" -eq 4; then
481 SCM_I_GSC_T_UINT32='"unsigned int"'
6aa84fdd
MV
482elif test "$ac_cv_sizeof_unsigned_long" -eq 4; then
483 SCM_I_GSC_T_UINT32='"unsigned long"'
6aa84fdd
MV
484elif test "$ac_cv_sizeof_unsigned_short" -eq 4; then
485 SCM_I_GSC_T_UINT32='"unsigned short"'
9a52bc2a
RB
486else
487 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint32.])
488fi
489AC_SUBST([SCM_I_GSC_T_UINT32])
490
a6be66ed 491### Optional type scm_t_int64 (ANSI C says int, short, or long might work)
fcc5d734 492### Also try 'long long' and '__int64' if we have it.
9a52bc2a 493SCM_I_GSC_T_INT64=0
6aa84fdd
MV
494if test "$scm_stdint_has_int64"; then
495 SCM_I_GSC_T_INT64='"int64_t"'
6aa84fdd
MV
496 SCM_I_GSC_NEEDS_STDINT_H=1
497elif test "$scm_inttypes_has_int64"; then
498 SCM_I_GSC_T_INT64='"int64_t"'
6aa84fdd
MV
499 SCM_I_GSC_NEEDS_INTTYPES_H=1
500elif test "$ac_cv_sizeof_int" -eq 8; then
9a52bc2a
RB
501 SCM_I_GSC_T_INT64='"int"'
502elif test "$ac_cv_sizeof_long" -eq 8; then
503 SCM_I_GSC_T_INT64='"long"'
504elif test "$ac_cv_sizeof_short" -eq 8; then
505 SCM_I_GSC_T_INT64='"short"'
506elif test "$ac_cv_sizeof_long_long" -eq 8; then
507 SCM_I_GSC_T_INT64='"long long"'
fcc5d734
SJ
508elif test "$ac_cv_sizeof___int64" -eq 8; then
509 SCM_I_GSC_T_INT64='"__int64"'
9a52bc2a
RB
510else
511 AC_MSG_ERROR([Can't find appropriate type for scm_t_int64.])
512fi
513AC_SUBST([SCM_I_GSC_T_INT64])
6aa84fdd 514
9a52bc2a 515
a6be66ed 516### Optional type scm_t_uint64 (ANSI C says int, short, or long might work)
fcc5d734 517### Also try 'long long' and '__int64' if we have it.
9a52bc2a 518SCM_I_GSC_T_UINT64=0
6aa84fdd
MV
519if test "$scm_stdint_has_uint64"; then
520 SCM_I_GSC_T_UINT64='"uint64_t"'
6aa84fdd
MV
521 SCM_I_GSC_NEEDS_STDINT_H=1
522elif test "$scm_inttypes_has_uint64"; then
523 SCM_I_GSC_T_UINT64='"uint64_t"'
6aa84fdd
MV
524 SCM_I_GSC_NEEDS_INTTYPES_H=1
525elif test "$ac_cv_sizeof_unsigned_int" -eq 8; then
9a52bc2a
RB
526 SCM_I_GSC_T_UINT64='"unsigned int"'
527elif test "$ac_cv_sizeof_unsigned_long" -eq 8; then
528 SCM_I_GSC_T_UINT64='"unsigned long"'
529elif test "$ac_cv_sizeof_unsigned_short" -eq 8; then
530 SCM_I_GSC_T_UINT64='"unsigned short"'
531elif test "$ac_cv_sizeof_unsigned_long_long" -eq 8; then
532 SCM_I_GSC_T_UINT64='"unsigned long long"'
fcc5d734
SJ
533elif test "$ac_cv_sizeof_unsigned___int64" -eq 8; then
534 SCM_I_GSC_T_UINT64='"unsigned __int64"'
9a52bc2a
RB
535else
536 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint64.])
537fi
538AC_SUBST([SCM_I_GSC_T_UINT64])
539
eb1f89f6
MV
540### Required type scm_t_intmax
541###
542### We try 'intmax_t', '__int64', 'long long' in this order. When
543### none of them is available, we use 'long'.
544###
545SCM_I_GSC_T_INTMAX=0
546if test "$scm_stdint_has_intmax"; then
547 SCM_I_GSC_T_INTMAX='"intmax_t"'
548 SCM_I_GSC_NEEDS_STDINT_H=1
549elif test "$scm_inttypes_has_intmax"; then
550 SCM_I_GSC_T_INTMAX='"intmax_t"'
551 SCM_I_GSC_NEEDS_INTTYPES_H=1
552elif test "$ac_cv_sizeof___int64" -ne 0; then
553 SCM_I_GSC_T_INTMAX='"__int64"'
554elif test "$ac_cv_sizeof_long_long" -ne 0; then
555 SCM_I_GSC_T_INTMAX='"long long"'
556else
557 SCM_I_GSC_T_INTMAX='"long"'
558fi
559AC_SUBST([SCM_I_GSC_T_INTMAX])
560
561### Required type scm_t_uintmax
562###
563### We try 'uintmax_t', 'unsigned __int64', 'unsigned long long' in
564### this order. When none of them is available, we use 'unsigned long'.
565###
566SCM_I_GSC_T_UINTMAX=0
567if test "$scm_stdint_has_uintmax"; then
568 SCM_I_GSC_T_UINTMAX='"uintmax_t"'
569 SCM_I_GSC_NEEDS_STDINT_H=1
570elif test "$scm_inttypes_has_uintmax"; then
571 SCM_I_GSC_T_UINTMAX='"uintmax_t"'
572 SCM_I_GSC_NEEDS_INTTYPES_H=1
573elif test "$ac_cv_sizeof_unsigned___int64" -ne 0; then
574 SCM_I_GSC_T_UINTMAX='"unsigned __int64"'
575elif test "$ac_cv_sizeof_unsigned_long_long" -ne 0; then
576 SCM_I_GSC_T_UINTMAX='"unsigned long long"'
577else
578 SCM_I_GSC_T_UINTMAX='"unsigned long"'
579fi
580AC_SUBST([SCM_I_GSC_T_UINTMAX])
581
114bc68a
LC
582### Required type scm_t_intptr
583###
584SCM_I_GSC_T_INTPTR=0
585if test "$scm_stdint_has_intptr"; then
586 SCM_I_GSC_T_INTPTR='"intptr_t"'
587 SCM_I_GSC_NEEDS_STDINT_H=1
588elif test "$scm_inttypes_has_intptr"; then
589 SCM_I_GSC_T_INTPTR='"intptr_t"'
590 SCM_I_GSC_NEEDS_INTTYPES_H=1
591elif test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_void_p"; then
592 SCM_I_GSC_T_INTPTR='"int"'
593elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_void_p"; then
594 SCM_I_GSC_T_INTPTR='"long"'
595elif test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_void_p"; then
596 SCM_I_GSC_T_INTPTR='"long long"'
597else
598 AC_MSG_ERROR([Can't find appropriate type for `scm_t_intptr'.])
599fi
600AC_SUBST([SCM_I_GSC_T_INTPTR])
601
602### Required type scm_t_uintptr
603###
604SCM_I_GSC_T_UINTPTR=0
605if test "$scm_stdint_has_uintptr"; then
606 SCM_I_GSC_T_UINTPTR='"uintptr_t"'
607 SCM_I_GSC_NEEDS_STDINT_H=1
608elif test "$scm_inttypes_has_uintptr"; then
609 SCM_I_GSC_T_UINTPTR='"uintptr_t"'
610 SCM_I_GSC_NEEDS_INTTYPES_H=1
611elif test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_void_p"; then
612 SCM_I_GSC_T_UINTPTR='"unsigned int"'
613elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_void_p"; then
614 SCM_I_GSC_T_UINTPTR='"unsigned long"'
615elif test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_void_p"; then
616 SCM_I_GSC_T_UINTPTR='"unsigned long long"'
617else
618 AC_MSG_ERROR([Can't find appropriate type for `scm_t_uintptr'.])
619fi
620AC_SUBST([SCM_I_GSC_T_UINTPTR])
621
9a52bc2a
RB
622
623AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H])
624AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H])
625
3a629497 626AC_HEADER_STDC
3a629497
JB
627AC_HEADER_TIME
628AC_HEADER_SYS_WAIT
450be18d
LC
629AC_HEADER_DIRENT
630
631# Reason for checking:
632#
633# HP-UX 11.11 (at least) doesn't provide `struct dirent64', even
634# with `_LARGEFILE64_SOURCE', so check whether it's available.
635#
636AC_CHECK_MEMBER([struct dirent64.d_name],
637 [SCM_I_GSC_HAVE_STRUCT_DIRENT64=1], [SCM_I_GSC_HAVE_STRUCT_DIRENT64=0],
638 [ #ifndef _LARGEFILE64_SOURCE
639 # define _LARGEFILE64_SOURCE
640 #endif
641
642 /* Per Autoconf manual. */
643 #include <sys/types.h>
644 #ifdef HAVE_DIRENT_H
645 # include <dirent.h>
646 #else
647 # define dirent direct
648 # ifdef HAVE_SYS_NDIR_H
649 # include <sys/ndir.h>
650 # endif
651 # ifdef HAVE_SYS_DIR_H
652 # include <sys/dir.h>
653 # endif
654 # ifdef HAVE_NDIR_H
655 # include <ndir.h>
656 # endif
657 #endif ])
658AC_SUBST([SCM_I_GSC_HAVE_STRUCT_DIRENT64])
bdcccc18 659
63177e46 660# Reasons for testing:
8ab3d8a0 661# complex.h - new in C99
63177e46 662# fenv.h - available in C99, but not older systems
66818dbb
LC
663# machine/fpu.h - on Tru64 5.1b, the declaration of fesetround(3) is in
664# this file instead of <fenv.h>
45c0ff10 665# process.h - mingw specific
a2f00b9b 666# langinfo.h, nl_types.h - SuS v2
63177e46 667#
45c0ff10 668AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h malloc.h memory.h process.h string.h \
bdcccc18
RB
669regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
670sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
671sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
66818dbb 672direct.h langinfo.h nl_types.h machine/fpu.h])
bdcccc18 673
56d288b8
LC
674# Reasons for testing:
675# nl_item - lacking on Cygwin
676AC_CHECK_TYPES([nl_item], [], [],
677 [[#ifdef HAVE_LANGINFO_H
678 # include <langinfo.h>
679 #endif
680 #ifdef HAVE_NL_TYPES_H
681 # include <nl_types.h>
682 #endif]])
683
8ab3d8a0
KR
684# "complex double" is new in C99, and "complex" is only a keyword if
685# <complex.h> is included
686AC_CHECK_TYPES(complex double,,,
687[#if HAVE_COMPLEX_H
688#include <complex.h>
689#endif])
690
4f416616
KR
691# On MacOS X <sys/socklen.h> contains socklen_t, so must include that
692# when testing.
693AC_CHECK_TYPE(socklen_t, ,
feef98f2 694 [AC_DEFINE_UNQUOTED([socklen_t], int,
4f416616
KR
695 [Define to `int' if <sys/socket.h> does not define.])],
696 [#if HAVE_SYS_TYPES_H
697#include <sys/types.h>
698#endif
699#include <sys/socket.h>
700])
701AC_CHECK_TYPE(struct ip_mreq)
702
3a629497
JB
703GUILE_HEADER_LIBC_WITH_UNISTD
704
705AC_TYPE_GETGROUPS
706AC_TYPE_SIGNAL
707AC_TYPE_MODE_T
708
45c0ff10
KR
709# On mingw -lm is empty, so this test is unnecessary, but it's
710# harmless so we don't hard-code to suppress it.
711#
712AC_CHECK_LIB(m, cos)
713
4c787b52 714AC_CHECK_FUNCS(gethostbyname)
5852c051
JB
715if test $ac_cv_func_gethostbyname = no; then
716 AC_CHECK_LIB(nsl, gethostbyname)
717fi
39e8f371 718
4c787b52 719AC_CHECK_FUNCS(connect)
5852c051
JB
720if test $ac_cv_func_connect = no; then
721 AC_CHECK_LIB(socket, connect)
722fi
5ee74cec 723
f9e5e096
MV
724dnl
725dnl Check for Winsock and other functionality on Win32 (*not* CygWin)
726dnl
727EXTRA_DEFS=""
45c0ff10
KR
728case $host in
729 *-*-mingw*)
6812c28f 730 AC_CHECK_HEADER(winsock2.h, [AC_DEFINE([HAVE_WINSOCK2_H], 1,
f9e5e096
MV
731 [Define if you have the <winsock2.h> header file.])])
732 AC_CHECK_LIB(ws2_32, main)
eede3dbc
RB
733 AC_LIBOBJ([win32-uname])
734 AC_LIBOBJ([win32-dirent])
b4e15479 735 if test "$enable_networking" = yes ; then
eede3dbc 736 AC_LIBOBJ([win32-socket])
b4e15479
SJ
737 fi
738 if test "$enable_shared" = yes ; then
8f99e3f3 739 EXTRA_DEFS="-DSCM_IMPORT"
feef98f2 740 AC_DEFINE([USE_DLL_IMPORT], 1,
8f99e3f3 741 [Define if you need additional CPP macros on Win32 platforms.])
f9e5e096 742 fi
45c0ff10
KR
743 ;;
744esac
f9e5e096 745AC_SUBST(EXTRA_DEFS)
f9e5e096 746
ef73a2a0
KR
747# Reasons for testing:
748# crt_externs.h - Darwin specific
749#
750AC_CHECK_HEADERS([assert.h crt_externs.h])
bdcccc18 751
ef73a2a0 752# Reasons for testing:
1df72834
KR
753# DINFINITY - OSF specific
754# DQNAN - OSF specific
755# (DINFINITY and DQNAN are actually global variables, not functions)
8ab3d8a0 756# chsize - an MS-DOS-ism, found in mingw
b69471c1
KR
757# cexp, clog - not in various pre-c99 systems, and note that it's possible
758# for gcc to provide the "complex double" type but the system to not
759# have functions like cexp and clog
8ab3d8a0 760# clog10 - not in mingw (though others like clog and csqrt are)
63177e46 761# fesetround - available in C99, but not older systems
8ab3d8a0
KR
762# ftruncate - posix, but probably not older systems (current mingw
763# has it as an inline for chsize)
23f2b9a3 764# ioctl - not in mingw.
c9d1dcc0 765# gmtime_r - recent posix, not on old systems
45c0ff10
KR
766# pipe - not in mingw
767# _pipe - specific to mingw, taking 3 args
66ec83c9 768# readdir_r - recent posix, not on old systems
450be18d 769# readdir64_r - not available on HP-UX 11.11
4f416616 770# stat64 - SuS largefile stuff, not on old systems
6b01eac9 771# sysconf - not on old systems
8ab3d8a0 772# truncate - not in mingw
a17d2654 773# isblank - available as a GNU extension or in C99
ef73a2a0 774# _NSGetEnviron - Darwin specific
a2f00b9b
LC
775# strcoll_l, newlocale - GNU extensions (glibc), also available on Darwin
776# nl_langinfo - X/Open, not available on Windows.
06bfe276 777# utimensat: posix.1-2008
ef73a2a0 778#
06bfe276 779AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid getsid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readdir64_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strcoll strcoll_l newlocale nl_langinfo utimensat])
64e121dc 780
6b01eac9
KR
781# Reasons for testing:
782# netdb.h - not in mingw
783# sys/param.h - not in mingw
45c0ff10
KR
784# pthread.h - only available with pthreads. ACX_PTHREAD doesn't
785# check this specifically, we need it for the timespec test below.
8ab3d8a0
KR
786# sethostname - the function itself check because it's not in mingw,
787# the DECL is checked because Solaris 10 doens't have in any header
ca329120
LC
788# hstrerror - on Tru64 5.1b the symbol is available in libc but the
789# declaration isn't anywhere.
5f380d71
LC
790# cuserid - on Tru64 5.1b the declaration is documented to be available
791# only with `_XOPEN_SOURCE' or some such.
6b01eac9 792#
414e4441 793AC_CHECK_HEADERS([crypt.h netdb.h pthread.h sys/param.h sys/resource.h sys/file.h])
94e6d793 794AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname)
5f380d71 795AC_CHECK_DECLS([sethostname, hstrerror, cuserid])
63271ac5
KR
796
797# crypt() may or may not be available, for instance in some countries there
798# are restrictions on cryptography.
799#
800# crypt() might be in libc (eg. OpenBSD), or it might be in a separate
801# -lcrypt library (eg. Debian GNU/Linux).
802#
803# On HP-UX 11, crypt() is in libc and there's a dummy libcrypt.a. We must
804# be careful to avoid -lcrypt in this case, since libtool will see there's
805# only a static libcrypt and decide to build only a static libguile.
806#
807# AC_SEARCH_LIBS lets us add -lcrypt to LIBS only if crypt() is not in the
808# libraries already in that list.
809#
810AC_SEARCH_LIBS(crypt, crypt,
feef98f2 811 [AC_DEFINE([HAVE_CRYPT],1,
63271ac5 812 [Define to 1 if you have the `crypt' function.])])
94e6d793 813
8cd5eae9
NJ
814# When compiling with GCC on some OSs (Solaris, AIX), _Complex_I doesn't
815# work; in the reported cases so far, 1.0fi works well instead. According
816# to the C99 spec, the complex.h header must provide a working definition
817# of _Complex_I, so we always try _Complex_I first. The 1.0fi fallback
818# is a workaround for the failure of some systems to conform to C99.
4b26c03e
NJ
819if test "$ac_cv_type_complex_double" = yes; then
820 AC_MSG_CHECKING([for i])
4bdc8fb5 821 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4b26c03e
NJ
822#if HAVE_COMPLEX_H
823#include <complex.h>
824#endif
825complex double z;
4bdc8fb5 826]], [[
4b26c03e 827z = _Complex_I;
4bdc8fb5 828]])],
feef98f2 829 [AC_DEFINE([GUILE_I],_Complex_I,[The imaginary unit (positive square root of -1).])
4bdc8fb5
LC
830 AC_MSG_RESULT([_Complex_I])],
831 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4b26c03e
NJ
832#if HAVE_COMPLEX_H
833#include <complex.h>
834#endif
835complex double z;
4bdc8fb5 836]],[[
4b26c03e 837z = 1.0fi;
4bdc8fb5 838]])],
feef98f2 839 [AC_DEFINE([GUILE_I],1.0fi)
4bdc8fb5
LC
840 AC_MSG_RESULT([1.0fi])],
841 [ac_cv_type_complex_double=no
842 AC_MSG_RESULT([not available])])])
4b26c03e
NJ
843fi
844
8ab3d8a0
KR
845# glibc 2.3.6 (circa 2006) and various prior versions had a bug where
846# csqrt(-i) returned a negative real part, when it should be positive
847# for the principal root.
848#
849if test "$ac_cv_type_complex_double" = yes; then
1d8ce4c0 850
8ab3d8a0
KR
851 AC_CACHE_CHECK([whether csqrt is usable],
852 guile_cv_use_csqrt,
4bdc8fb5 853 [AC_RUN_IFELSE([AC_LANG_SOURCE([[
8ab3d8a0
KR
854#include <complex.h>
855/* "volatile" is meant to prevent gcc from calculating the sqrt as a
856 constant, we want to test libc. */
857volatile complex double z = - _Complex_I;
858int
859main (void)
860{
861 z = csqrt (z);
862 if (creal (z) > 0.0)
863 return 0; /* good */
864 else
865 return 1; /* bad */
4bdc8fb5 866}]])],
8ab3d8a0
KR
867 [guile_cv_use_csqrt=yes],
868 [guile_cv_use_csqrt="no, glibc 2.3 bug"],
869 [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
870 case $guile_cv_use_csqrt in
871 yes*)
feef98f2 872 AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free])
8ab3d8a0
KR
873 ;;
874 esac
875fi
876
877
a6be66ed 878dnl GMP tests
f4863880 879AC_LIB_HAVE_LINKFLAGS(gmp,
4bdc8fb5 880 [],
f4863880
AW
881 [#include <gmp.h>],
882 [mpz_import (0, 0, 0, 0, 0, 0, 0);],
883 AC_MSG_ERROR([GNU MP 4.1 or greater not found, see README]))
9f1555fe 884
18c73f8e 885dnl GNU libunistring is checked for by Gnulib's `libunistring' module.
b7b93288
LC
886if test "x$LTLIBUNISTRING" != "x"; then
887 LIBS="$LTLIBUNISTRING $LIBS"
888else
889 AC_MSG_ERROR([GNU libunistring is required, please install it.])
890fi
9f1555fe 891
75c242a2
AW
892dnl Libffi is needed to compile Guile's foreign function interface, but its
893dnl interface isn't exposed in Guile's API.
894PKG_CHECK_MODULES(LIBFFI, libffi)
895AC_SUBST(LIBFFI_CFLAGS)
896AC_SUBST(LIBFFI_LIBS)
897
898dnl figure out approriate ffi type for size_t
899AC_CHECK_SIZEOF(size_t)
900AC_CHECK_SIZEOF(ssize_t)
901ffi_size_type=uint$(($ac_cv_sizeof_size_t*8))
902ffi_ssize_type=sint$(($ac_cv_sizeof_ssize_t*8))
903AC_DEFINE_UNQUOTED(ffi_type_size_t, ffi_type_${ffi_size_type},
904 [ffi type for size_t])
905AC_DEFINE_UNQUOTED(ffi_type_ssize_t, ffi_type_${ffi_ssize_type},
906 [ffi type for ssize_t])
907
83cd507c 908dnl i18n tests
b6540274
MV
909#AC_CHECK_HEADERS([libintl.h])
910#AC_CHECK_FUNCS(gettext)
911#if test $ac_cv_func_gettext = no; then
912# AC_CHECK_LIB(intl, gettext)
913#fi
914#AC_CHECK_FUNCS([bindtextdomain textdomain])
915AM_GNU_GETTEXT([external], [need-ngettext])
83cd507c 916
777b022a
JB
917### Some systems don't declare some functions. On such systems, we
918### need to at least provide our own K&R-style declarations.
919
920### GUILE_FUNC_DECLARED(function, headerfile)
921
922### Check for a declaration of FUNCTION in HEADERFILE; if it is
923### not there, #define MISSING_FUNCTION_DECL.
d70e0619 924AC_DEFUN([GUILE_FUNC_DECLARED], [
fc342a63 925 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
777b022a 926 AC_EGREP_HEADER($1, $2,
01e5e07e 927 guile_cv_func_$1_declared=yes,
fc342a63
JB
928 guile_cv_func_$1_declared=no))
929 if test [x$guile_cv_func_]$1[_declared] = xno; then
eede3dbc
RB
930 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL], 1,
931 [Define if the operating system supplies $1 without declaring it.])
777b022a
JB
932 fi
933])
934
c31bfb85 935GUILE_FUNC_DECLARED(sleep, unistd.h)
777b022a 936GUILE_FUNC_DECLARED(usleep, unistd.h)
e1a191a8 937
0777022d
KR
938AC_CHECK_DECLS([strptime],,,
939[#define _GNU_SOURCE /* ask glibc to give strptime prototype */
940#include <time.h>])
941
da753252
JB
942### On some systems usleep has no return value. If it does have one,
943### we'd like to return it; otherwise, we'll fake it.
fc342a63 944AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
c43f86c1 945 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
4874dfc8 946 unistd.h,
fc342a63
JB
947 [guile_cv_func_usleep_return_type=void],
948 [guile_cv_func_usleep_return_type=int])])
949case "$guile_cv_func_usleep_return_type" in
950 "void" )
feef98f2 951 AC_DEFINE([USLEEP_RETURNS_VOID], 1,
eede3dbc 952 [Define if the system headers declare usleep to return void.])
fc342a63
JB
953 ;;
954esac
955
da88f0cb
JB
956AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
957if test -n "$have_sys_un_h" ; then
feef98f2 958 AC_DEFINE([HAVE_UNIX_DOMAIN_SOCKETS], 1,
eede3dbc 959 [Define if the system supports Unix-domain (file-domain) sockets.])
da88f0cb
JB
960fi
961
4ea9429e
AW
962AC_CHECK_FUNCS(getrlimit setrlimit)
963
d707b9df 964AC_CHECK_FUNCS(socketpair getgroups setgroups setpwent pause tzset)
da88f0cb 965
219a5a5b
JB
966AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
967 setnetent getnetent endnetent dnl
968 setprotoent getprotoent endprotoent dnl
969 setservent getservent endservent dnl
5c11cc9d 970 getnetbyaddr getnetbyname dnl
8912421c 971 inet_lnaof inet_makeaddr inet_netof hstrerror)
da88f0cb 972
feef329e
KR
973# struct sockaddr field sin_len is only present on BSD systems.
974# On 4.4BSD apparently a #define SIN_LEN exists, but on other BSD systems
975# (eg. FreeBSD 4.9) it doesn't and we must use this configure check
976AC_CHECK_MEMBERS([struct sockaddr.sin_len],,,
977[#ifdef HAVE_SYS_TYPES_H
978#include <sys/types.h>
979#endif
980#include <netinet/in.h>])
981
d19c9767 982AC_MSG_CHECKING(for __libc_stack_end)
2e945bcc 983AC_CACHE_VAL(guile_cv_have_libc_stack_end,
4bdc8fb5
LC
984[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
985extern char *__libc_stack_end;]],
986 [[printf("%p", (char*) __libc_stack_end);]])],
987 [guile_cv_have_libc_stack_end=yes],
988 [guile_cv_have_libc_stack_end=no])])
2e945bcc
SJ
989AC_MSG_RESULT($guile_cv_have_libc_stack_end)
990
991if test $guile_cv_have_libc_stack_end = yes; then
feef98f2 992 AC_DEFINE([HAVE_LIBC_STACK_END], 1,
d19c9767
MV
993 [Define if you have the __libc_stack_end variable.])
994fi
995
08f980a4
GH
996dnl Some systems do not declare this. Some systems do declare it, as a
997dnl macro. With cygwin it may be in a DLL.
998
999AC_MSG_CHECKING(whether netdb.h declares h_errno)
1000AC_CACHE_VAL(guile_cv_have_h_errno,
4bdc8fb5
LC
1001 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
1002 [[int a = h_errno;]])],
1003 [guile_cv_have_h_errno=yes],
1004 [guile_cv_have_h_errno=no])])
08f980a4
GH
1005AC_MSG_RESULT($guile_cv_have_h_errno)
1006if test $guile_cv_have_h_errno = yes; then
feef98f2 1007 AC_DEFINE([HAVE_H_ERRNO], 1, [Define if h_errno is declared in netdb.h.])
08f980a4 1008fi
da88f0cb 1009
4f522b6f 1010AC_MSG_CHECKING(whether uint32_t is defined)
c5316ea3 1011AC_CACHE_VAL(guile_cv_have_uint32_t,
4bdc8fb5 1012 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
af68e5e5
SJ
1013 #if HAVE_STDINT_H
1014 #include <stdint.h>
1015 #endif
45c0ff10 1016 #ifndef HAVE_NETDB_H
af68e5e5 1017 #include <netdb.h>
4bdc8fb5
LC
1018 #endif]],
1019 [[uint32_t a;]])],
1020 [guile_cv_have_uint32_t=yes],
1021 [guile_cv_have_uint32_t=no])])
c5316ea3
GH
1022AC_MSG_RESULT($guile_cv_have_uint32_t)
1023if test $guile_cv_have_uint32_t = yes; then
feef98f2 1024 AC_DEFINE([HAVE_UINT32_T], 1,
eede3dbc 1025 [Define if uint32_t typedef is defined when netdb.h is include.])
c5316ea3
GH
1026fi
1027
018a53a1
GH
1028AC_MSG_CHECKING(for working IPv6 support)
1029AC_CACHE_VAL(guile_cv_have_ipv6,
4bdc8fb5 1030[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
8f16fe5a
MV
1031#ifdef HAVE_SYS_TYPES_H
1032#include <sys/types.h>
1033#endif
1034#include <netinet/in.h>
4bdc8fb5
LC
1035#include <sys/socket.h>]],
1036[[struct sockaddr_in6 a; a.sin6_family = AF_INET6;]])],
1037[guile_cv_have_ipv6=yes],
1038[guile_cv_have_ipv6=no])])
018a53a1
GH
1039AC_MSG_RESULT($guile_cv_have_ipv6)
1040if test $guile_cv_have_ipv6 = yes; then
feef98f2 1041 AC_DEFINE([HAVE_IPV6], 1, [Define if you want support for IPv6.])
018a53a1
GH
1042fi
1043
67641981
GH
1044# included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.
1045AC_MSG_CHECKING(whether sockaddr_in6 has sin6_scope_id)
1046AC_CACHE_VAL(guile_cv_have_sin6_scope_id,
4bdc8fb5 1047[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
8f16fe5a
MV
1048#ifdef HAVE_SYS_TYPES_H
1049#include <sys/types.h>
1050#endif
4bdc8fb5
LC
1051#include <netinet/in.h>]],
1052[[struct sockaddr_in6 sok; sok.sin6_scope_id = 0;]])],
1053[guile_cv_have_sin6_scope_id=yes],
1054[guile_cv_have_sin6_scope_id=no])])
67641981
GH
1055AC_MSG_RESULT($guile_cv_have_sin6_scope_id)
1056if test $guile_cv_have_sin6_scope_id = yes; then
feef98f2 1057 AC_DEFINE([HAVE_SIN6_SCOPE_ID], 1,
eede3dbc 1058 [Define this if your IPv6 has sin6_scope_id in sockaddr_in6 struct.])
67641981
GH
1059fi
1060
feef329e
KR
1061# struct sockaddr_in6 field sin_len is only present on BSD systems
1062AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len],,,
1063[#ifdef HAVE_SYS_TYPES_H
1064#include <sys/types.h>
1065#endif
1066#include <netinet/in.h>])
1067
38c1d3c4
GH
1068AC_MSG_CHECKING(whether localtime caches TZ)
1069AC_CACHE_VAL(guile_cv_localtime_cache,
1070[if test x$ac_cv_func_tzset = xyes; then
4bdc8fb5 1071AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
38c1d3c4
GH
1072#if STDC_HEADERS
1073# include <stdlib.h>
1074#endif
1075extern char **environ;
1076unset_TZ ()
1077{
1078 char **from, **to;
1079 for (to = from = environ; (*to = *from); from++)
1080 if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
1081 to++;
1082}
1083char TZ_GMT0[] = "TZ=GMT0";
1084char TZ_PST8[] = "TZ=PST8";
1085main()
1086{
1087 time_t now = time ((time_t *) 0);
1088 int hour_GMT0, hour_unset;
1089 if (putenv (TZ_GMT0) != 0)
1090 exit (1);
1091 hour_GMT0 = localtime (&now)->tm_hour;
1092 unset_TZ ();
1093 hour_unset = localtime (&now)->tm_hour;
1094 if (putenv (TZ_PST8) != 0)
1095 exit (1);
1096 if (localtime (&now)->tm_hour == hour_GMT0)
1097 exit (1);
1098 unset_TZ ();
1099 if (localtime (&now)->tm_hour != hour_unset)
1100 exit (1);
1101 exit (0);
4bdc8fb5
LC
1102}]])],
1103[guile_cv_localtime_cache=no],
1104[guile_cv_localtime_cache=yes],
38c1d3c4
GH
1105[# If we have tzset, assume the worst when cross-compiling.
1106guile_cv_localtime_cache=yes])
1107else
1108 # If we lack tzset, report that localtime does not cache TZ,
1109 # since we can't invalidate the cache if we don't have tzset.
1110 guile_cv_localtime_cache=no
1111fi])dnl
1112AC_MSG_RESULT($guile_cv_localtime_cache)
1113if test $guile_cv_localtime_cache = yes; then
feef98f2 1114 AC_DEFINE([LOCALTIME_CACHE], 1, [Define if localtime caches the TZ setting.])
38c1d3c4
GH
1115fi
1116
52cfc69b
GH
1117if test "$enable_regex" = yes; then
1118 if test "$ac_cv_header_regex_h" = yes ||
1119 test "$ac_cv_header_rxposix_h" = yes ||
1120 test "$ac_cv_header_rx_rxposix_h" = yes; then
eede3dbc 1121 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [AC_LIBOBJ([regex-posix])],
52cfc69b 1122 [AC_CHECK_LIB(rx, main)
eede3dbc 1123 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [AC_LIBOBJ([regex-posix])],
f9e5e096 1124 [AC_CHECK_LIB(regex, main)
eede3dbc 1125 GUILE_NAMED_CHECK_FUNC(regcomp, regex, [AC_LIBOBJ([regex-posix])])])]
52cfc69b
GH
1126 )
1127 dnl The following should not be necessary, but for some reason
1128 dnl autoheader misses it if we don't include it!
1129 if test "$ac_cv_func_regcomp_norx" = yes ||
f9e5e096 1130 test "$ac_cv_func_regcomp_regex" = yes ||
52cfc69b 1131 test "$ac_cv_func_regcomp_rx" = yes; then
feef98f2 1132 AC_DEFINE([HAVE_REGCOMP], 1,
eede3dbc 1133 [This is included as part of a workaround for a autoheader bug.])
52cfc69b
GH
1134 fi
1135 fi
da88f0cb 1136fi
8e1bfcd0 1137
1bf291e4 1138AC_REPLACE_FUNCS([strerror memmove mkstemp])
3a629497 1139
594e69b7
MV
1140AC_CHECK_HEADERS(floatingpoint.h ieeefp.h nan.h)
1141
21b860c8
KR
1142# Reasons for testing:
1143# asinh, acosh, atanh, trunc - C99 standard, generally not available on
1144# older systems
1145# sincos - GLIBC extension
9af31eed 1146#
8ab3d8a0 1147AC_CHECK_FUNCS(asinh acosh atanh copysign finite sincos trunc)
4d0bfea1
KR
1148
1149# C99 specifies isinf and isnan as macros.
1150# HP-UX provides only macros, no functions.
c80bab35
KR
1151# glibc 2.3.2 provides both macros and functions.
1152# IRIX 6.5 and Solaris 8 only provide functions.
4d0bfea1 1153#
c80bab35
KR
1154# The following tests detect isinf and isnan either as functions or as
1155# macros from <math.h>. Plain AC_CHECK_FUNCS is insufficient, it doesn't
1156# use <math.h> so doesn't detect on macro-only systems like HP-UX.
4d0bfea1
KR
1157#
1158AC_MSG_CHECKING([for isinf])
b3aa4626
KR
1159AC_LINK_IFELSE(AC_LANG_SOURCE(
1160[[#include <math.h>
1161volatile double x = 0.0;
1162int main () { return (isinf(x) != 0); }]]),
4d0bfea1 1163 [AC_MSG_RESULT([yes])
feef98f2 1164 AC_DEFINE([HAVE_ISINF], 1,
4d0bfea1
KR
1165 [Define to 1 if you have the `isinf' macro or function.])],
1166 [AC_MSG_RESULT([no])])
1167AC_MSG_CHECKING([for isnan])
b3aa4626
KR
1168AC_LINK_IFELSE(AC_LANG_SOURCE(
1169[[#include <math.h>
1170volatile double x = 0.0;
1171int main () { return (isnan(x) != 0); }]]),
4d0bfea1 1172 [AC_MSG_RESULT([yes])
feef98f2 1173 AC_DEFINE([HAVE_ISNAN], 1,
4d0bfea1
KR
1174 [Define to 1 if you have the `isnan' macro or function.])],
1175 [AC_MSG_RESULT([no])])
594e69b7 1176
23f2b9a3
KR
1177# Reasons for checking:
1178#
1179# st_rdev
1180# st_blksize
1181# st_blocks not in mingw
8ab3d8a0 1182# tm_gmtoff BSD+GNU, not in C99
23f2b9a3
KR
1183#
1184# Note AC_STRUCT_ST_BLOCKS is not used here because we don't want the
1185# AC_LIBOBJ(fileblocks) replacement which that macro gives.
1186#
06bfe276
AW
1187AC_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],,,
1188 [#define _GNU_SOURCE
1189AC_INCLUDES_DEFAULT
1190])
fd02f2ad 1191
3a629497 1192AC_STRUCT_TIMEZONE
8ab3d8a0
KR
1193AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,
1194[#include <time.h>
1195#ifdef TIME_WITH_SYS_TIME
1196# include <sys/time.h>
1197# include <time.h>
1198#else
1199# if HAVE_SYS_TIME_H
1200# include <sys/time.h>
1201# else
1202# include <time.h>
1203# endif
1204#endif
1205])
3a629497
JB
1206GUILE_STRUCT_UTIMBUF
1207
8ab3d8a0 1208
3a629497
JB
1209#--------------------------------------------------------------------
1210#
1211# Which way does the stack grow?
1212#
4696a666
NJ
1213# Following code comes from Autoconf 2.61's internal _AC_LIBOBJ_ALLOCA
1214# macro (/usr/share/autoconf/autoconf/functions.m4). Gnulib has
1215# very similar code, so in future we could look at using that.
1216#
1217# An important detail is that the code involves find_stack_direction
1218# calling _itself_ - which means that find_stack_direction (or at
1219# least the second find_stack_direction() call) cannot be inlined.
1220# If the code could be inlined, that might cause the test to give
1221# an incorrect answer.
3a629497
JB
1222#--------------------------------------------------------------------
1223
9a52bc2a 1224SCM_I_GSC_STACK_GROWS_UP=0
5ea8e76e 1225AC_RUN_IFELSE([AC_LANG_SOURCE(
4696a666
NJ
1226[AC_INCLUDES_DEFAULT
1227int
1228find_stack_direction ()
1229{
1230 static char *addr = 0;
1231 auto char dummy;
1232 if (addr == 0)
1233 {
1234 addr = &dummy;
1235 return find_stack_direction ();
1236 }
1237 else
1238 return (&dummy > addr) ? 1 : -1;
1239}
1240
1241int
1242main ()
1243{
1244 return find_stack_direction () < 0;
1245}])],
1246 [SCM_I_GSC_STACK_GROWS_UP=1],
1247 [],
5ea8e76e 1248 [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)])
eede3dbc 1249
26224b3f
LC
1250#--------------------------------------------------------------------
1251#
1252# Boehm's GC library
1253#
1254#--------------------------------------------------------------------
1f26b531
LC
1255PKG_CHECK_MODULES([BDW_GC], [bdw-gc])
1256
1257CFLAGS="$BDW_GC_CFLAGS $CFLAGS"
1258LIBS="$BDW_GC_LIBS $LIBS"
26224b3f 1259
9625c900
LC
1260# `GC_do_blocking ()' is available in GC 7.1 but not declared.
1261AC_CHECK_FUNCS([GC_do_blocking])
1262AC_CHECK_DECL([GC_do_blocking],
1263 [AC_DEFINE([HAVE_DECL_GC_DO_BLOCKING], [1],
1264 [Define this if the `GC_do_blocking ()' function is declared])],
1265 [],
1266 [#include <gc/gc.h>])
1267
3d1af79f
LC
1268# `GC_fn_type' is not available in GC 7.1 and earlier.
1269AC_CHECK_TYPE([GC_fn_type],
1270 [AC_DEFINE([HAVE_GC_FN_TYPE], [1],
1271 [Define this if the `GC_fn_type' type is available.])],
1272 [],
1273 [#include <gc/gc.h>])
1274
26224b3f 1275
a9e0a8af
KR
1276AC_CHECK_SIZEOF(float)
1277if test "$ac_cv_sizeof_float" -le "$ac_cv_sizeof_long"; then
feef98f2 1278 AC_DEFINE([SCM_SINGLES], 1,
a9e0a8af
KR
1279 [Define this if floats are the same size as longs.])
1280fi
3a629497
JB
1281
1282AC_MSG_CHECKING(for struct linger)
1283AC_CACHE_VAL(scm_cv_struct_linger,
4bdc8fb5 1284 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3a629497 1285#include <sys/types.h>
4bdc8fb5
LC
1286#include <sys/socket.h>]],
1287 [[struct linger lgr; lgr.l_linger = 100]])],
1288 [scm_cv_struct_linger="yes"],
1289 [scm_cv_struct_linger="no"]))
3a629497
JB
1290AC_MSG_RESULT($scm_cv_struct_linger)
1291if test $scm_cv_struct_linger = yes; then
feef98f2 1292 AC_DEFINE([HAVE_STRUCT_LINGER], 1,
eede3dbc
RB
1293 [Define this if your system defines struct linger, for use with the
1294 getsockopt and setsockopt system calls.])
3a629497 1295fi
3a629497 1296
7534dfdc 1297
45c0ff10
KR
1298# On mingw, struct timespec is in <pthread.h>.
1299#
7534dfdc
MD
1300AC_MSG_CHECKING(for struct timespec)
1301AC_CACHE_VAL(scm_cv_struct_timespec,
4bdc8fb5 1302 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
45c0ff10
KR
1303#include <time.h>
1304#if HAVE_PTHREAD_H
1305#include <pthread.h>
4bdc8fb5
LC
1306#endif]], [[struct timespec t; t.tv_nsec = 100]])],
1307 [scm_cv_struct_timespec="yes"],
1308 [scm_cv_struct_timespec="no"]))
7534dfdc
MD
1309AC_MSG_RESULT($scm_cv_struct_timespec)
1310if test $scm_cv_struct_timespec = yes; then
feef98f2 1311 AC_DEFINE([HAVE_STRUCT_TIMESPEC], 1,
45c0ff10 1312 [Define this if your system defines struct timespec via either <time.h> or <pthread.h>.])
7534dfdc
MD
1313fi
1314
3a629497
JB
1315#--------------------------------------------------------------------
1316#
1317# Flags for thread support
1318#
1319#--------------------------------------------------------------------
1320
9a52bc2a
RB
1321SCM_I_GSC_USE_PTHREAD_THREADS=0
1322SCM_I_GSC_USE_NULL_THREADS=0
9a52bc2a
RB
1323AC_SUBST([SCM_I_GSC_USE_PTHREAD_THREADS])
1324AC_SUBST([SCM_I_GSC_USE_NULL_THREADS])
9a52bc2a 1325
539c89a1
JB
1326### What thread package has the user asked for?
1327AC_ARG_WITH(threads, [ --with-threads thread interface],
18622c4e 1328 , with_threads=yes)
539c89a1 1329
8ab3d8a0 1330AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT, 0)
66302618 1331AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER, 0)
8ab3d8a0 1332
539c89a1 1333case "$with_threads" in
9bc4701c 1334 "yes" | "pthread" | "pthreads" | "pthread-threads" | "")
56ae2148
LC
1335
1336 build_pthread_support="yes"
1337
345b17e9
LC
1338 ACX_PTHREAD([CC="$PTHREAD_CC"
1339 LIBS="$PTHREAD_LIBS $LIBS"
1340 SCM_I_GSC_USE_PTHREAD_THREADS=1
1341 with_threads="pthreads"],
1342 [with_threads="null"
1343 build_pthread_support="no"])
49aaa6d2
MV
1344
1345 old_CFLAGS="$CFLAGS"
1346 CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
8ab3d8a0
KR
1347
1348 # Reasons for testing:
1349 # pthread_getattr_np - "np" meaning "non portable" says it
1350 # all; not present on MacOS X or Solaris 10
45c0ff10
KR
1351 # pthread_get_stackaddr_np - "np" meaning "non portable" says it
1352 # all; specific to MacOS X
1353 # pthread_sigmask - not available on mingw
8ab3d8a0 1354 #
45c0ff10 1355 AC_CHECK_FUNCS(pthread_attr_getstack pthread_getattr_np pthread_get_stackaddr_np pthread_sigmask)
8ab3d8a0
KR
1356
1357 # On past versions of Solaris, believe 8 through 10 at least, you
1358 # had to write "pthread_once_t foo = { PTHREAD_ONCE_INIT };".
66302618 1359 # This is contrary to POSIX:
8ab3d8a0
KR
1360 # http://www.opengroup.org/onlinepubs/000095399/functions/pthread_once.html
1361 # Check here if this style is required.
1362 #
1363 # glibc (2.3.6 at least) works both with or without braces, so the
1364 # test checks whether it works without.
1365 #
66302618
LC
1366
1367 if test "$GCC" = "yes"; then
1368 # Since GCC only issues a warning for missing braces, so we need
1369 # `-Werror' to catch it.
1370 CFLAGS="-Werror -Wmissing-braces $CFLAGS"
1371 fi
1372
8ab3d8a0
KR
1373 AC_CACHE_CHECK([whether PTHREAD_ONCE_INIT needs braces],
1374 guile_cv_need_braces_on_pthread_once_init,
66302618
LC
1375 [AC_COMPILE_IFELSE([#include <pthread.h>
1376 pthread_once_t foo = PTHREAD_ONCE_INIT;],
8ab3d8a0
KR
1377 [guile_cv_need_braces_on_pthread_once_init=no],
1378 [guile_cv_need_braces_on_pthread_once_init=yes])])
1379 if test "$guile_cv_need_braces_on_pthread_once_init" = yes; then
1380 SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT=1
1381 fi
1382
66302618
LC
1383 # Same problem with `PTHREAD_MUTEX_INITIALIZER', e.g., on IRIX
1384 # 6.5.30m with GCC 3.3.
1385 AC_CACHE_CHECK([whether PTHREAD_MUTEX_INITIALIZER needs braces],
1386 guile_cv_need_braces_on_pthread_mutex_initializer,
1387 [AC_COMPILE_IFELSE([#include <pthread.h>
1388 pthread_mutex_t foo = PTHREAD_MUTEX_INITIALIZER;],
1389 [guile_cv_need_braces_on_pthread_mutex_initializer=no],
1390 [guile_cv_need_braces_on_pthread_mutex_initializer=yes])])
1391 if test "$guile_cv_need_braces_on_pthread_mutex_initializer" = yes; then
1392 SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER=1
1393 fi
1394
49aaa6d2
MV
1395 CFLAGS="$old_CFLAGS"
1396
d707b9df
MV
1397 # On Solaris, sched_yield lives in -lrt.
1398 AC_SEARCH_LIBS(sched_yield, rt)
1399
539c89a1 1400 ;;
539c89a1 1401esac
3a629497 1402
18622c4e 1403case "$with_threads" in
9bc4701c 1404 "pthreads")
585356dc 1405 ;;
18622c4e 1406 "no" | "null")
9a52bc2a 1407 SCM_I_GSC_USE_NULL_THREADS=1
81adf76a 1408 SCM_I_GSC_HAVE_THREAD_STORAGE_CLASS=0
18622c4e 1409 with_threads="null-threads"
18306183 1410 ;;
585356dc 1411 * )
18622c4e 1412 AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
585356dc
MV
1413 ;;
1414esac
539c89a1 1415
18622c4e
MV
1416AC_MSG_CHECKING(what kind of threads to support)
1417AC_MSG_RESULT($with_threads)
933a7411 1418
56ae2148
LC
1419AM_CONDITIONAL([BUILD_PTHREAD_SUPPORT],
1420 [test "x$build_pthread_support" = "xyes"])
1421
1422
4f416616
KR
1423## Check whether pthread_attr_getstack works for the main thread
1424
23f2b9a3
KR
1425if test "$with_threads" = pthreads; then
1426
4f416616
KR
1427AC_MSG_CHECKING(whether pthread_attr_getstack works for the main thread)
1428old_CFLAGS="$CFLAGS"
1429CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
4bdc8fb5 1430AC_RUN_IFELSE([AC_LANG_SOURCE([[
4f416616
KR
1431#if HAVE_PTHREAD_ATTR_GETSTACK
1432#include <pthread.h>
1433
1434int main ()
1435{
1436 pthread_attr_t attr;
1437 void *start, *end;
1438 size_t size;
1439
1440 pthread_getattr_np (pthread_self (), &attr);
1441 pthread_attr_getstack (&attr, &start, &size);
1442 end = (char *)start + size;
1443
1444 if ((void *)&attr < start || (void *)&attr >= end)
1445 return 1;
1446 else
1447 return 0;
1448}
1449#else
1450int main ()
1451{
1452 return 1;
1453}
1454#endif
4bdc8fb5 1455]])],
4f416616 1456[works=yes
feef98f2 1457AC_DEFINE([PTHREAD_ATTR_GETSTACK_WORKS], [1], [Define when pthread_att_get_stack works for the main thread])],
4bdc8fb5
LC
1458[works=no],
1459[])
4f416616
KR
1460CFLAGS="$old_CFLAGS"
1461AC_MSG_RESULT($works)
1462
705edb95
LC
1463GUILE_THREAD_LOCAL_STORAGE
1464
23f2b9a3
KR
1465fi # with_threads=pthreads
1466
1467
0db83c04
MV
1468## Cross building
1469if test "$cross_compiling" = "yes"; then
1470 AC_MSG_CHECKING(cc for build)
1471 ## /usr/bin/cc still uses wrong assembler
1472 ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bincc}"
1473 CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}"
1474else
1475 CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
1476fi
0db83c04
MV
1477
1478## AC_MSG_CHECKING("if we are cross compiling")
1479## AC_MSG_RESULT($cross_compiling)
1480if test "$cross_compiling" = "yes"; then
1481 AC_MSG_RESULT($CC_FOR_BUILD)
1482fi
1483
1484## No need as yet to be more elaborate
1485CCLD_FOR_BUILD="$CC_FOR_BUILD"
1486
1487AC_SUBST(cross_compiling)
457a4e81 1488AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
0db83c04
MV
1489AC_SUBST(CCLD_FOR_BUILD)
1490
1491## libtool erroneously calls CC_FOR_BUILD HOST_CC;
1492## --HOST is the platform that PACKAGE is compiled for.
1493HOST_CC="$CC_FOR_BUILD"
1494AC_SUBST(HOST_CC)
1495
1496if test "$cross_compiling" = "yes"; then
1497 AC_MSG_CHECKING(guile for build)
1498 GUILE_FOR_BUILD="${GUILE_FOR_BUILD-guile}"
1499else
1500 GUILE_FOR_BUILD='$(preinstguile)'
1501fi
0db83c04
MV
1502
1503## AC_MSG_CHECKING("if we are cross compiling")
1504## AC_MSG_RESULT($cross_compiling)
1505if test "$cross_compiling" = "yes"; then
1506 AC_MSG_RESULT($GUILE_FOR_BUILD)
1507fi
89f69c52 1508AC_ARG_VAR(GUILE_FOR_BUILD,[guile for build system])
0db83c04
MV
1509AC_SUBST(GUILE_FOR_BUILD)
1510
3a629497 1511## If we're using GCC, ask for aggressive warnings.
f29ded4b 1512GCC_CFLAGS=""
3a629497 1513case "$GCC" in
99be3450 1514 yes )
0a1b8b15
JB
1515 ## We had -Wstrict-prototypes in here for a bit, but Guile does too
1516 ## much stuff with generic function pointers for that to really be
1517 ## less than exasperating.
aee8ca3f
GH
1518 ## -Wpointer-arith was here too, but something changed in gcc/glibc
1519 ## and it became equally exasperating (gcc 2.95 and/or glibc 2.1.2).
8bcecbd3
LC
1520 POTENTIAL_GCC_CFLAGS="-Wall -Wmissing-prototypes \
1521 -Wdeclaration-after-statement -Wundef \
1522 -Wswitch-enum"
5c07af6e
MV
1523 # Do this here so we don't screw up any of the tests above that might
1524 # not be "warning free"
1525 if test "${GUILE_ERROR_ON_WARNING}" = yes
1526 then
f29ded4b 1527 POTENTIAL_GCC_CFLAGS="${POTENTIAL_GCC_CFLAGS} -Werror"
5c07af6e
MV
1528 enable_compile_warnings=no
1529 fi
f29ded4b
LC
1530
1531 for flag in $POTENTIAL_GCC_CFLAGS
1532 do
1533 gl_WARN_ADD([$flag], [GCC_CFLAGS])
1534 done
5c07af6e 1535 ;;
3a629497
JB
1536esac
1537
582a4997
LC
1538AC_SUBST(GCC_CFLAGS)
1539
9d19a9d6
LC
1540# Check for GNU ld's "-z relro".
1541GUILE_GNU_LD_RELRO
1542
1543
3a629497
JB
1544## If we're creating a shared library (using libtool!), then we'll
1545## need to generate a list of .lo files corresponding to the .o files
1546## given in LIBOBJS. We'll call it LIBLOBJS.
eede3dbc 1547LIBLOBJS="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`"
3a629497 1548
e9e225e5 1549## We also need to create corresponding .doc and .x files
eede3dbc
RB
1550EXTRA_DOT_DOC_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.doc ,g;s,\.[[^.]]*$,.doc,'`"
1551EXTRA_DOT_X_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.x ,g;s,\.[[^.]]*$,.x,'`"
91411868 1552
7a5ab369
LC
1553# GNU Readline bindings.
1554GUILE_READLINE
1555
7c86ae05
JB
1556AC_SUBST(GUILE_MAJOR_VERSION)
1557AC_SUBST(GUILE_MINOR_VERSION)
df4a8db0 1558AC_SUBST(GUILE_MICRO_VERSION)
9e6e154e 1559AC_SUBST(GUILE_EFFECTIVE_VERSION)
7c86ae05 1560AC_SUBST(GUILE_VERSION)
9e202853 1561
22b7f585
RB
1562#######################################################################
1563# library versioning
1564
9e202853
RB
1565AC_SUBST(LIBGUILE_INTERFACE_CURRENT)
1566AC_SUBST(LIBGUILE_INTERFACE_REVISION)
1567AC_SUBST(LIBGUILE_INTERFACE_AGE)
1568AC_SUBST(LIBGUILE_INTERFACE)
539c89a1 1569
b8b9ec68 1570AC_SUBST(LIBGUILE_SRFI_SRFI_1_MAJOR)
cfc7c7c0
MD
1571AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_CURRENT)
1572AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_REVISION)
1573AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_AGE)
1574AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE)
1575
b8b9ec68 1576AC_SUBST(LIBGUILE_SRFI_SRFI_4_MAJOR)
22b7f585
RB
1577AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_CURRENT)
1578AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_REVISION)
1579AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_AGE)
1580AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE)
1581
b8b9ec68 1582AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_MAJOR)
22b7f585
RB
1583AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_CURRENT)
1584AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_REVISION)
1585AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_AGE)
1586AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE)
1587
6bba4fad
KR
1588AC_SUBST(LIBGUILE_SRFI_SRFI_60_MAJOR)
1589AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_CURRENT)
1590AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_REVISION)
1591AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_AGE)
1592AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE)
1593
b89c4943
LC
1594AC_SUBST(LIBGUILE_I18N_MAJOR)
1595AC_SUBST(LIBGUILE_I18N_INTERFACE_CURRENT)
1596AC_SUBST(LIBGUILE_I18N_INTERFACE_REVISION)
1597AC_SUBST(LIBGUILE_I18N_INTERFACE_AGE)
1598AC_SUBST(LIBGUILE_I18N_INTERFACE)
1599
1600
22b7f585
RB
1601#######################################################################
1602
d8b1bb93 1603dnl Tell guile-config what flags guile users should compile and link with.
a8d7ba11 1604GUILE_LIBS="$LDFLAGS $LIBS"
25a640ca 1605GUILE_CFLAGS="$CPPFLAGS $PTHREAD_CFLAGS"
daa4f38c 1606AC_SUBST(GUILE_LIBS)
d8b1bb93 1607AC_SUBST(GUILE_CFLAGS)
7c86ae05 1608
3a629497
JB
1609AC_SUBST(AWK)
1610AC_SUBST(LIBLOBJS)
91411868 1611AC_SUBST(EXTRA_DOT_DOC_FILES)
e9e225e5 1612AC_SUBST(EXTRA_DOT_X_FILES)
3a629497 1613
6812c28f
TTN
1614dnl See also top_builddir in info node: (libtool)AC_PROG_LIBTOOL
1615top_builddir_absolute=`pwd`
1616AC_SUBST(top_builddir_absolute)
9e6e154e 1617top_srcdir_absolute=`(cd $srcdir && pwd)`
2f13db9a 1618AC_SUBST(top_srcdir_absolute)
6812c28f 1619
92826dd0
LC
1620dnl We need `sitedir' in `guile-1.8.pc'.
1621dnl Note: `sitedir' must be kept in sync with `GUILE_SITE_DIR' in `guile.m4'.
0c1eb9b6 1622pkgdatadir="$datadir/$PACKAGE_TARNAME"
92826dd0
LC
1623sitedir="$pkgdatadir/site"
1624AC_SUBST([sitedir])
1625
9a52bc2a
RB
1626# Additional SCM_I_GSC definitions are above.
1627AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
1628AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST])
f5922e27 1629AC_SUBST([SCM_I_GSC_ENABLE_DISCOURAGED])
9a52bc2a
RB
1630AC_SUBST([SCM_I_GSC_ENABLE_DEPRECATED])
1631AC_SUBST([SCM_I_GSC_ENABLE_ELISP])
9a52bc2a
RB
1632AC_SUBST([SCM_I_GSC_STACK_GROWS_UP])
1633AC_SUBST([SCM_I_GSC_C_INLINE])
1634AC_CONFIG_FILES([libguile/gen-scmconfig.h])
1635
237b3247
RB
1636AC_CONFIG_FILES([
1637 Makefile
6812c28f 1638 am/Makefile
6caac03c 1639 lib/Makefile
9e6e154e
RB
1640 benchmark-suite/Makefile
1641 doc/Makefile
9e6e154e
RB
1642 doc/r5rs/Makefile
1643 doc/ref/Makefile
1e2346ae 1644 emacs/Makefile
9e6e154e 1645 examples/Makefile
9e6e154e 1646 libguile/Makefile
237b3247 1647 srfi/Makefile
7a5ab369 1648 guile-readline/Makefile
849f29a4
RB
1649 test-suite/Makefile
1650 test-suite/standalone/Makefile
0b6d8fdc 1651 meta/Makefile
e610dc38 1652 module/Makefile
e610dc38 1653 testsuite/Makefile
849f29a4 1654])
9e6e154e 1655
c1a15f3d
LC
1656AC_CONFIG_FILES([meta/guile-2.0.pc])
1657AC_CONFIG_FILES([meta/guile-2.0-uninstalled.pc])
9e6e154e
RB
1658AC_CONFIG_FILES([check-guile], [chmod +x check-guile])
1659AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile])
0b6d8fdc
AW
1660AC_CONFIG_FILES([meta/guile], [chmod +x meta/guile])
1661AC_CONFIG_FILES([meta/uninstalled-env], [chmod +x meta/uninstalled-env])
1662AC_CONFIG_FILES([meta/gdb-uninstalled-guile], [chmod +x meta/gdb-uninstalled-guile])
54b38caf 1663AC_CONFIG_FILES([meta/guile-tools], [chmod +x meta/guile-tools])
9e6e154e
RB
1664AC_CONFIG_FILES([libguile/guile-snarf],
1665 [chmod +x libguile/guile-snarf])
1666AC_CONFIG_FILES([libguile/guile-doc-snarf],
1667 [chmod +x libguile/guile-doc-snarf])
1668AC_CONFIG_FILES([libguile/guile-func-name-check],
1669 [chmod +x libguile/guile-func-name-check])
1670AC_CONFIG_FILES([libguile/guile-snarf-docs],
1671 [chmod +x libguile/guile-snarf-docs])
d8b6e191
NJ
1672AC_CONFIG_FILES([test-suite/standalone/test-use-srfi],
1673 [chmod +x test-suite/standalone/test-use-srfi])
a9931e4e
NJ
1674AC_CONFIG_FILES([test-suite/standalone/test-fast-slot-ref],
1675 [chmod +x test-suite/standalone/test-fast-slot-ref])
22b5f518 1676AC_CONFIG_FILES([doc/ref/effective-version.texi])
237b3247
RB
1677
1678AC_OUTPUT
0f2d19dd 1679
3a629497
JB
1680dnl Local Variables:
1681dnl comment-start: "dnl "
1682dnl comment-end: ""
1683dnl comment-start-skip: "\\bdnl\\b\\s *"
d67c13f6 1684dnl End: