fix (class-of #u32())
[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
6c59f901 7Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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
8ab3d8a0
KR
674# "complex double" is new in C99, and "complex" is only a keyword if
675# <complex.h> is included
676AC_CHECK_TYPES(complex double,,,
677[#if HAVE_COMPLEX_H
678#include <complex.h>
679#endif])
680
4f416616
KR
681# On MacOS X <sys/socklen.h> contains socklen_t, so must include that
682# when testing.
683AC_CHECK_TYPE(socklen_t, ,
feef98f2 684 [AC_DEFINE_UNQUOTED([socklen_t], int,
4f416616
KR
685 [Define to `int' if <sys/socket.h> does not define.])],
686 [#if HAVE_SYS_TYPES_H
687#include <sys/types.h>
688#endif
689#include <sys/socket.h>
690])
691AC_CHECK_TYPE(struct ip_mreq)
692
3a629497
JB
693GUILE_HEADER_LIBC_WITH_UNISTD
694
695AC_TYPE_GETGROUPS
696AC_TYPE_SIGNAL
697AC_TYPE_MODE_T
698
45c0ff10
KR
699# On mingw -lm is empty, so this test is unnecessary, but it's
700# harmless so we don't hard-code to suppress it.
701#
702AC_CHECK_LIB(m, cos)
703
4c787b52 704AC_CHECK_FUNCS(gethostbyname)
5852c051
JB
705if test $ac_cv_func_gethostbyname = no; then
706 AC_CHECK_LIB(nsl, gethostbyname)
707fi
39e8f371 708
4c787b52 709AC_CHECK_FUNCS(connect)
5852c051
JB
710if test $ac_cv_func_connect = no; then
711 AC_CHECK_LIB(socket, connect)
712fi
5ee74cec 713
f9e5e096
MV
714dnl
715dnl Check for Winsock and other functionality on Win32 (*not* CygWin)
716dnl
717EXTRA_DEFS=""
45c0ff10
KR
718case $host in
719 *-*-mingw*)
6812c28f 720 AC_CHECK_HEADER(winsock2.h, [AC_DEFINE([HAVE_WINSOCK2_H], 1,
f9e5e096
MV
721 [Define if you have the <winsock2.h> header file.])])
722 AC_CHECK_LIB(ws2_32, main)
eede3dbc
RB
723 AC_LIBOBJ([win32-uname])
724 AC_LIBOBJ([win32-dirent])
b4e15479 725 if test "$enable_networking" = yes ; then
eede3dbc 726 AC_LIBOBJ([win32-socket])
b4e15479
SJ
727 fi
728 if test "$enable_shared" = yes ; then
8f99e3f3 729 EXTRA_DEFS="-DSCM_IMPORT"
feef98f2 730 AC_DEFINE([USE_DLL_IMPORT], 1,
8f99e3f3 731 [Define if you need additional CPP macros on Win32 platforms.])
f9e5e096 732 fi
45c0ff10
KR
733 ;;
734esac
f9e5e096 735AC_SUBST(EXTRA_DEFS)
f9e5e096 736
ef73a2a0
KR
737# Reasons for testing:
738# crt_externs.h - Darwin specific
739#
740AC_CHECK_HEADERS([assert.h crt_externs.h])
bdcccc18 741
ef73a2a0 742# Reasons for testing:
1df72834
KR
743# DINFINITY - OSF specific
744# DQNAN - OSF specific
745# (DINFINITY and DQNAN are actually global variables, not functions)
8ab3d8a0 746# chsize - an MS-DOS-ism, found in mingw
b69471c1
KR
747# cexp, clog - not in various pre-c99 systems, and note that it's possible
748# for gcc to provide the "complex double" type but the system to not
749# have functions like cexp and clog
8ab3d8a0 750# clog10 - not in mingw (though others like clog and csqrt are)
63177e46 751# fesetround - available in C99, but not older systems
8ab3d8a0
KR
752# ftruncate - posix, but probably not older systems (current mingw
753# has it as an inline for chsize)
23f2b9a3 754# ioctl - not in mingw.
c9d1dcc0 755# gmtime_r - recent posix, not on old systems
45c0ff10
KR
756# pipe - not in mingw
757# _pipe - specific to mingw, taking 3 args
66ec83c9 758# readdir_r - recent posix, not on old systems
450be18d 759# readdir64_r - not available on HP-UX 11.11
4f416616 760# stat64 - SuS largefile stuff, not on old systems
6b01eac9 761# sysconf - not on old systems
8ab3d8a0 762# truncate - not in mingw
a17d2654 763# isblank - available as a GNU extension or in C99
ef73a2a0 764# _NSGetEnviron - Darwin specific
a2f00b9b
LC
765# strcoll_l, newlocale - GNU extensions (glibc), also available on Darwin
766# nl_langinfo - X/Open, not available on Windows.
ef73a2a0 767#
3e5aed1c 768AC_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])
64e121dc 769
6b01eac9
KR
770# Reasons for testing:
771# netdb.h - not in mingw
772# sys/param.h - not in mingw
45c0ff10
KR
773# pthread.h - only available with pthreads. ACX_PTHREAD doesn't
774# check this specifically, we need it for the timespec test below.
8ab3d8a0
KR
775# sethostname - the function itself check because it's not in mingw,
776# the DECL is checked because Solaris 10 doens't have in any header
ca329120
LC
777# hstrerror - on Tru64 5.1b the symbol is available in libc but the
778# declaration isn't anywhere.
5f380d71
LC
779# cuserid - on Tru64 5.1b the declaration is documented to be available
780# only with `_XOPEN_SOURCE' or some such.
6b01eac9 781#
414e4441 782AC_CHECK_HEADERS([crypt.h netdb.h pthread.h sys/param.h sys/resource.h sys/file.h])
94e6d793 783AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname)
5f380d71 784AC_CHECK_DECLS([sethostname, hstrerror, cuserid])
63271ac5
KR
785
786# crypt() may or may not be available, for instance in some countries there
787# are restrictions on cryptography.
788#
789# crypt() might be in libc (eg. OpenBSD), or it might be in a separate
790# -lcrypt library (eg. Debian GNU/Linux).
791#
792# On HP-UX 11, crypt() is in libc and there's a dummy libcrypt.a. We must
793# be careful to avoid -lcrypt in this case, since libtool will see there's
794# only a static libcrypt and decide to build only a static libguile.
795#
796# AC_SEARCH_LIBS lets us add -lcrypt to LIBS only if crypt() is not in the
797# libraries already in that list.
798#
799AC_SEARCH_LIBS(crypt, crypt,
feef98f2 800 [AC_DEFINE([HAVE_CRYPT],1,
63271ac5 801 [Define to 1 if you have the `crypt' function.])])
94e6d793 802
8cd5eae9
NJ
803# When compiling with GCC on some OSs (Solaris, AIX), _Complex_I doesn't
804# work; in the reported cases so far, 1.0fi works well instead. According
805# to the C99 spec, the complex.h header must provide a working definition
806# of _Complex_I, so we always try _Complex_I first. The 1.0fi fallback
807# is a workaround for the failure of some systems to conform to C99.
4b26c03e
NJ
808if test "$ac_cv_type_complex_double" = yes; then
809 AC_MSG_CHECKING([for i])
4bdc8fb5 810 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4b26c03e
NJ
811#if HAVE_COMPLEX_H
812#include <complex.h>
813#endif
814complex double z;
4bdc8fb5 815]], [[
4b26c03e 816z = _Complex_I;
4bdc8fb5 817]])],
feef98f2 818 [AC_DEFINE([GUILE_I],_Complex_I,[The imaginary unit (positive square root of -1).])
4bdc8fb5
LC
819 AC_MSG_RESULT([_Complex_I])],
820 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4b26c03e
NJ
821#if HAVE_COMPLEX_H
822#include <complex.h>
823#endif
824complex double z;
4bdc8fb5 825]],[[
4b26c03e 826z = 1.0fi;
4bdc8fb5 827]])],
feef98f2 828 [AC_DEFINE([GUILE_I],1.0fi)
4bdc8fb5
LC
829 AC_MSG_RESULT([1.0fi])],
830 [ac_cv_type_complex_double=no
831 AC_MSG_RESULT([not available])])])
4b26c03e
NJ
832fi
833
8ab3d8a0
KR
834# glibc 2.3.6 (circa 2006) and various prior versions had a bug where
835# csqrt(-i) returned a negative real part, when it should be positive
836# for the principal root.
837#
838if test "$ac_cv_type_complex_double" = yes; then
1d8ce4c0 839
8ab3d8a0
KR
840 AC_CACHE_CHECK([whether csqrt is usable],
841 guile_cv_use_csqrt,
4bdc8fb5 842 [AC_RUN_IFELSE([AC_LANG_SOURCE([[
8ab3d8a0
KR
843#include <complex.h>
844/* "volatile" is meant to prevent gcc from calculating the sqrt as a
845 constant, we want to test libc. */
846volatile complex double z = - _Complex_I;
847int
848main (void)
849{
850 z = csqrt (z);
851 if (creal (z) > 0.0)
852 return 0; /* good */
853 else
854 return 1; /* bad */
4bdc8fb5 855}]])],
8ab3d8a0
KR
856 [guile_cv_use_csqrt=yes],
857 [guile_cv_use_csqrt="no, glibc 2.3 bug"],
858 [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
859 case $guile_cv_use_csqrt in
860 yes*)
feef98f2 861 AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free])
8ab3d8a0
KR
862 ;;
863 esac
864fi
865
866
a6be66ed 867dnl GMP tests
f4863880 868AC_LIB_HAVE_LINKFLAGS(gmp,
4bdc8fb5 869 [],
f4863880
AW
870 [#include <gmp.h>],
871 [mpz_import (0, 0, 0, 0, 0, 0, 0);],
872 AC_MSG_ERROR([GNU MP 4.1 or greater not found, see README]))
9f1555fe 873
18c73f8e 874dnl GNU libunistring is checked for by Gnulib's `libunistring' module.
b7b93288
LC
875if test "x$LTLIBUNISTRING" != "x"; then
876 LIBS="$LTLIBUNISTRING $LIBS"
877else
878 AC_MSG_ERROR([GNU libunistring is required, please install it.])
879fi
9f1555fe 880
83cd507c 881dnl i18n tests
b6540274
MV
882#AC_CHECK_HEADERS([libintl.h])
883#AC_CHECK_FUNCS(gettext)
884#if test $ac_cv_func_gettext = no; then
885# AC_CHECK_LIB(intl, gettext)
886#fi
887#AC_CHECK_FUNCS([bindtextdomain textdomain])
888AM_GNU_GETTEXT([external], [need-ngettext])
83cd507c 889
777b022a
JB
890### Some systems don't declare some functions. On such systems, we
891### need to at least provide our own K&R-style declarations.
892
893### GUILE_FUNC_DECLARED(function, headerfile)
894
895### Check for a declaration of FUNCTION in HEADERFILE; if it is
896### not there, #define MISSING_FUNCTION_DECL.
d70e0619 897AC_DEFUN([GUILE_FUNC_DECLARED], [
fc342a63 898 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
777b022a 899 AC_EGREP_HEADER($1, $2,
01e5e07e 900 guile_cv_func_$1_declared=yes,
fc342a63
JB
901 guile_cv_func_$1_declared=no))
902 if test [x$guile_cv_func_]$1[_declared] = xno; then
eede3dbc
RB
903 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL], 1,
904 [Define if the operating system supplies $1 without declaring it.])
777b022a
JB
905 fi
906])
907
c31bfb85 908GUILE_FUNC_DECLARED(sleep, unistd.h)
777b022a 909GUILE_FUNC_DECLARED(usleep, unistd.h)
e1a191a8 910
0777022d
KR
911AC_CHECK_DECLS([strptime],,,
912[#define _GNU_SOURCE /* ask glibc to give strptime prototype */
913#include <time.h>])
914
da753252
JB
915### On some systems usleep has no return value. If it does have one,
916### we'd like to return it; otherwise, we'll fake it.
fc342a63 917AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
c43f86c1 918 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
4874dfc8 919 unistd.h,
fc342a63
JB
920 [guile_cv_func_usleep_return_type=void],
921 [guile_cv_func_usleep_return_type=int])])
922case "$guile_cv_func_usleep_return_type" in
923 "void" )
feef98f2 924 AC_DEFINE([USLEEP_RETURNS_VOID], 1,
eede3dbc 925 [Define if the system headers declare usleep to return void.])
fc342a63
JB
926 ;;
927esac
928
da88f0cb
JB
929AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
930if test -n "$have_sys_un_h" ; then
feef98f2 931 AC_DEFINE([HAVE_UNIX_DOMAIN_SOCKETS], 1,
eede3dbc 932 [Define if the system supports Unix-domain (file-domain) sockets.])
da88f0cb
JB
933fi
934
4ea9429e
AW
935AC_CHECK_FUNCS(getrlimit setrlimit)
936
d707b9df 937AC_CHECK_FUNCS(socketpair getgroups setgroups setpwent pause tzset)
da88f0cb 938
219a5a5b
JB
939AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
940 setnetent getnetent endnetent dnl
941 setprotoent getprotoent endprotoent dnl
942 setservent getservent endservent dnl
5c11cc9d 943 getnetbyaddr getnetbyname dnl
8912421c 944 inet_lnaof inet_makeaddr inet_netof hstrerror)
da88f0cb 945
feef329e
KR
946# struct sockaddr field sin_len is only present on BSD systems.
947# On 4.4BSD apparently a #define SIN_LEN exists, but on other BSD systems
948# (eg. FreeBSD 4.9) it doesn't and we must use this configure check
949AC_CHECK_MEMBERS([struct sockaddr.sin_len],,,
950[#ifdef HAVE_SYS_TYPES_H
951#include <sys/types.h>
952#endif
953#include <netinet/in.h>])
954
d19c9767 955AC_MSG_CHECKING(for __libc_stack_end)
2e945bcc 956AC_CACHE_VAL(guile_cv_have_libc_stack_end,
4bdc8fb5
LC
957[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
958extern char *__libc_stack_end;]],
959 [[printf("%p", (char*) __libc_stack_end);]])],
960 [guile_cv_have_libc_stack_end=yes],
961 [guile_cv_have_libc_stack_end=no])])
2e945bcc
SJ
962AC_MSG_RESULT($guile_cv_have_libc_stack_end)
963
964if test $guile_cv_have_libc_stack_end = yes; then
feef98f2 965 AC_DEFINE([HAVE_LIBC_STACK_END], 1,
d19c9767
MV
966 [Define if you have the __libc_stack_end variable.])
967fi
968
08f980a4
GH
969dnl Some systems do not declare this. Some systems do declare it, as a
970dnl macro. With cygwin it may be in a DLL.
971
972AC_MSG_CHECKING(whether netdb.h declares h_errno)
973AC_CACHE_VAL(guile_cv_have_h_errno,
4bdc8fb5
LC
974 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
975 [[int a = h_errno;]])],
976 [guile_cv_have_h_errno=yes],
977 [guile_cv_have_h_errno=no])])
08f980a4
GH
978AC_MSG_RESULT($guile_cv_have_h_errno)
979if test $guile_cv_have_h_errno = yes; then
feef98f2 980 AC_DEFINE([HAVE_H_ERRNO], 1, [Define if h_errno is declared in netdb.h.])
08f980a4 981fi
da88f0cb 982
4f522b6f 983AC_MSG_CHECKING(whether uint32_t is defined)
c5316ea3 984AC_CACHE_VAL(guile_cv_have_uint32_t,
4bdc8fb5 985 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
af68e5e5
SJ
986 #if HAVE_STDINT_H
987 #include <stdint.h>
988 #endif
45c0ff10 989 #ifndef HAVE_NETDB_H
af68e5e5 990 #include <netdb.h>
4bdc8fb5
LC
991 #endif]],
992 [[uint32_t a;]])],
993 [guile_cv_have_uint32_t=yes],
994 [guile_cv_have_uint32_t=no])])
c5316ea3
GH
995AC_MSG_RESULT($guile_cv_have_uint32_t)
996if test $guile_cv_have_uint32_t = yes; then
feef98f2 997 AC_DEFINE([HAVE_UINT32_T], 1,
eede3dbc 998 [Define if uint32_t typedef is defined when netdb.h is include.])
c5316ea3
GH
999fi
1000
018a53a1
GH
1001AC_MSG_CHECKING(for working IPv6 support)
1002AC_CACHE_VAL(guile_cv_have_ipv6,
4bdc8fb5 1003[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
8f16fe5a
MV
1004#ifdef HAVE_SYS_TYPES_H
1005#include <sys/types.h>
1006#endif
1007#include <netinet/in.h>
4bdc8fb5
LC
1008#include <sys/socket.h>]],
1009[[struct sockaddr_in6 a; a.sin6_family = AF_INET6;]])],
1010[guile_cv_have_ipv6=yes],
1011[guile_cv_have_ipv6=no])])
018a53a1
GH
1012AC_MSG_RESULT($guile_cv_have_ipv6)
1013if test $guile_cv_have_ipv6 = yes; then
feef98f2 1014 AC_DEFINE([HAVE_IPV6], 1, [Define if you want support for IPv6.])
018a53a1
GH
1015fi
1016
67641981
GH
1017# included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.
1018AC_MSG_CHECKING(whether sockaddr_in6 has sin6_scope_id)
1019AC_CACHE_VAL(guile_cv_have_sin6_scope_id,
4bdc8fb5 1020[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
8f16fe5a
MV
1021#ifdef HAVE_SYS_TYPES_H
1022#include <sys/types.h>
1023#endif
4bdc8fb5
LC
1024#include <netinet/in.h>]],
1025[[struct sockaddr_in6 sok; sok.sin6_scope_id = 0;]])],
1026[guile_cv_have_sin6_scope_id=yes],
1027[guile_cv_have_sin6_scope_id=no])])
67641981
GH
1028AC_MSG_RESULT($guile_cv_have_sin6_scope_id)
1029if test $guile_cv_have_sin6_scope_id = yes; then
feef98f2 1030 AC_DEFINE([HAVE_SIN6_SCOPE_ID], 1,
eede3dbc 1031 [Define this if your IPv6 has sin6_scope_id in sockaddr_in6 struct.])
67641981
GH
1032fi
1033
feef329e
KR
1034# struct sockaddr_in6 field sin_len is only present on BSD systems
1035AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len],,,
1036[#ifdef HAVE_SYS_TYPES_H
1037#include <sys/types.h>
1038#endif
1039#include <netinet/in.h>])
1040
38c1d3c4
GH
1041AC_MSG_CHECKING(whether localtime caches TZ)
1042AC_CACHE_VAL(guile_cv_localtime_cache,
1043[if test x$ac_cv_func_tzset = xyes; then
4bdc8fb5 1044AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
38c1d3c4
GH
1045#if STDC_HEADERS
1046# include <stdlib.h>
1047#endif
1048extern char **environ;
1049unset_TZ ()
1050{
1051 char **from, **to;
1052 for (to = from = environ; (*to = *from); from++)
1053 if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
1054 to++;
1055}
1056char TZ_GMT0[] = "TZ=GMT0";
1057char TZ_PST8[] = "TZ=PST8";
1058main()
1059{
1060 time_t now = time ((time_t *) 0);
1061 int hour_GMT0, hour_unset;
1062 if (putenv (TZ_GMT0) != 0)
1063 exit (1);
1064 hour_GMT0 = localtime (&now)->tm_hour;
1065 unset_TZ ();
1066 hour_unset = localtime (&now)->tm_hour;
1067 if (putenv (TZ_PST8) != 0)
1068 exit (1);
1069 if (localtime (&now)->tm_hour == hour_GMT0)
1070 exit (1);
1071 unset_TZ ();
1072 if (localtime (&now)->tm_hour != hour_unset)
1073 exit (1);
1074 exit (0);
4bdc8fb5
LC
1075}]])],
1076[guile_cv_localtime_cache=no],
1077[guile_cv_localtime_cache=yes],
38c1d3c4
GH
1078[# If we have tzset, assume the worst when cross-compiling.
1079guile_cv_localtime_cache=yes])
1080else
1081 # If we lack tzset, report that localtime does not cache TZ,
1082 # since we can't invalidate the cache if we don't have tzset.
1083 guile_cv_localtime_cache=no
1084fi])dnl
1085AC_MSG_RESULT($guile_cv_localtime_cache)
1086if test $guile_cv_localtime_cache = yes; then
feef98f2 1087 AC_DEFINE([LOCALTIME_CACHE], 1, [Define if localtime caches the TZ setting.])
38c1d3c4
GH
1088fi
1089
52cfc69b
GH
1090if test "$enable_regex" = yes; then
1091 if test "$ac_cv_header_regex_h" = yes ||
1092 test "$ac_cv_header_rxposix_h" = yes ||
1093 test "$ac_cv_header_rx_rxposix_h" = yes; then
eede3dbc 1094 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [AC_LIBOBJ([regex-posix])],
52cfc69b 1095 [AC_CHECK_LIB(rx, main)
eede3dbc 1096 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [AC_LIBOBJ([regex-posix])],
f9e5e096 1097 [AC_CHECK_LIB(regex, main)
eede3dbc 1098 GUILE_NAMED_CHECK_FUNC(regcomp, regex, [AC_LIBOBJ([regex-posix])])])]
52cfc69b
GH
1099 )
1100 dnl The following should not be necessary, but for some reason
1101 dnl autoheader misses it if we don't include it!
1102 if test "$ac_cv_func_regcomp_norx" = yes ||
f9e5e096 1103 test "$ac_cv_func_regcomp_regex" = yes ||
52cfc69b 1104 test "$ac_cv_func_regcomp_rx" = yes; then
feef98f2 1105 AC_DEFINE([HAVE_REGCOMP], 1,
eede3dbc 1106 [This is included as part of a workaround for a autoheader bug.])
52cfc69b
GH
1107 fi
1108 fi
da88f0cb 1109fi
8e1bfcd0 1110
1bf291e4 1111AC_REPLACE_FUNCS([strerror memmove mkstemp])
3a629497 1112
594e69b7
MV
1113AC_CHECK_HEADERS(floatingpoint.h ieeefp.h nan.h)
1114
21b860c8
KR
1115# Reasons for testing:
1116# asinh, acosh, atanh, trunc - C99 standard, generally not available on
1117# older systems
1118# sincos - GLIBC extension
9af31eed 1119#
8ab3d8a0 1120AC_CHECK_FUNCS(asinh acosh atanh copysign finite sincos trunc)
4d0bfea1
KR
1121
1122# C99 specifies isinf and isnan as macros.
1123# HP-UX provides only macros, no functions.
c80bab35
KR
1124# glibc 2.3.2 provides both macros and functions.
1125# IRIX 6.5 and Solaris 8 only provide functions.
4d0bfea1 1126#
c80bab35
KR
1127# The following tests detect isinf and isnan either as functions or as
1128# macros from <math.h>. Plain AC_CHECK_FUNCS is insufficient, it doesn't
1129# use <math.h> so doesn't detect on macro-only systems like HP-UX.
4d0bfea1
KR
1130#
1131AC_MSG_CHECKING([for isinf])
b3aa4626
KR
1132AC_LINK_IFELSE(AC_LANG_SOURCE(
1133[[#include <math.h>
1134volatile double x = 0.0;
1135int main () { return (isinf(x) != 0); }]]),
4d0bfea1 1136 [AC_MSG_RESULT([yes])
feef98f2 1137 AC_DEFINE([HAVE_ISINF], 1,
4d0bfea1
KR
1138 [Define to 1 if you have the `isinf' macro or function.])],
1139 [AC_MSG_RESULT([no])])
1140AC_MSG_CHECKING([for isnan])
b3aa4626
KR
1141AC_LINK_IFELSE(AC_LANG_SOURCE(
1142[[#include <math.h>
1143volatile double x = 0.0;
1144int main () { return (isnan(x) != 0); }]]),
4d0bfea1 1145 [AC_MSG_RESULT([yes])
feef98f2 1146 AC_DEFINE([HAVE_ISNAN], 1,
4d0bfea1
KR
1147 [Define to 1 if you have the `isnan' macro or function.])],
1148 [AC_MSG_RESULT([no])])
594e69b7 1149
23f2b9a3
KR
1150# Reasons for checking:
1151#
1152# st_rdev
1153# st_blksize
1154# st_blocks not in mingw
8ab3d8a0 1155# tm_gmtoff BSD+GNU, not in C99
23f2b9a3
KR
1156#
1157# Note AC_STRUCT_ST_BLOCKS is not used here because we don't want the
1158# AC_LIBOBJ(fileblocks) replacement which that macro gives.
1159#
1160AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize, struct stat.st_blocks])
fd02f2ad 1161
3a629497 1162AC_STRUCT_TIMEZONE
8ab3d8a0
KR
1163AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,
1164[#include <time.h>
1165#ifdef TIME_WITH_SYS_TIME
1166# include <sys/time.h>
1167# include <time.h>
1168#else
1169# if HAVE_SYS_TIME_H
1170# include <sys/time.h>
1171# else
1172# include <time.h>
1173# endif
1174#endif
1175])
3a629497
JB
1176GUILE_STRUCT_UTIMBUF
1177
8ab3d8a0 1178
3a629497
JB
1179#--------------------------------------------------------------------
1180#
1181# Which way does the stack grow?
1182#
4696a666
NJ
1183# Following code comes from Autoconf 2.61's internal _AC_LIBOBJ_ALLOCA
1184# macro (/usr/share/autoconf/autoconf/functions.m4). Gnulib has
1185# very similar code, so in future we could look at using that.
1186#
1187# An important detail is that the code involves find_stack_direction
1188# calling _itself_ - which means that find_stack_direction (or at
1189# least the second find_stack_direction() call) cannot be inlined.
1190# If the code could be inlined, that might cause the test to give
1191# an incorrect answer.
3a629497
JB
1192#--------------------------------------------------------------------
1193
9a52bc2a 1194SCM_I_GSC_STACK_GROWS_UP=0
5ea8e76e 1195AC_RUN_IFELSE([AC_LANG_SOURCE(
4696a666
NJ
1196[AC_INCLUDES_DEFAULT
1197int
1198find_stack_direction ()
1199{
1200 static char *addr = 0;
1201 auto char dummy;
1202 if (addr == 0)
1203 {
1204 addr = &dummy;
1205 return find_stack_direction ();
1206 }
1207 else
1208 return (&dummy > addr) ? 1 : -1;
1209}
1210
1211int
1212main ()
1213{
1214 return find_stack_direction () < 0;
1215}])],
1216 [SCM_I_GSC_STACK_GROWS_UP=1],
1217 [],
5ea8e76e 1218 [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)])
eede3dbc 1219
26224b3f
LC
1220#--------------------------------------------------------------------
1221#
1222# Boehm's GC library
1223#
1224#--------------------------------------------------------------------
1f26b531
LC
1225PKG_CHECK_MODULES([BDW_GC], [bdw-gc])
1226
1227CFLAGS="$BDW_GC_CFLAGS $CFLAGS"
1228LIBS="$BDW_GC_LIBS $LIBS"
26224b3f 1229
9625c900
LC
1230# `GC_do_blocking ()' is available in GC 7.1 but not declared.
1231AC_CHECK_FUNCS([GC_do_blocking])
1232AC_CHECK_DECL([GC_do_blocking],
1233 [AC_DEFINE([HAVE_DECL_GC_DO_BLOCKING], [1],
1234 [Define this if the `GC_do_blocking ()' function is declared])],
1235 [],
1236 [#include <gc/gc.h>])
1237
3d1af79f
LC
1238# `GC_fn_type' is not available in GC 7.1 and earlier.
1239AC_CHECK_TYPE([GC_fn_type],
1240 [AC_DEFINE([HAVE_GC_FN_TYPE], [1],
1241 [Define this if the `GC_fn_type' type is available.])],
1242 [],
1243 [#include <gc/gc.h>])
1244
26224b3f 1245
a9e0a8af
KR
1246AC_CHECK_SIZEOF(float)
1247if test "$ac_cv_sizeof_float" -le "$ac_cv_sizeof_long"; then
feef98f2 1248 AC_DEFINE([SCM_SINGLES], 1,
a9e0a8af
KR
1249 [Define this if floats are the same size as longs.])
1250fi
3a629497
JB
1251
1252AC_MSG_CHECKING(for struct linger)
1253AC_CACHE_VAL(scm_cv_struct_linger,
4bdc8fb5 1254 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3a629497 1255#include <sys/types.h>
4bdc8fb5
LC
1256#include <sys/socket.h>]],
1257 [[struct linger lgr; lgr.l_linger = 100]])],
1258 [scm_cv_struct_linger="yes"],
1259 [scm_cv_struct_linger="no"]))
3a629497
JB
1260AC_MSG_RESULT($scm_cv_struct_linger)
1261if test $scm_cv_struct_linger = yes; then
feef98f2 1262 AC_DEFINE([HAVE_STRUCT_LINGER], 1,
eede3dbc
RB
1263 [Define this if your system defines struct linger, for use with the
1264 getsockopt and setsockopt system calls.])
3a629497 1265fi
3a629497 1266
7534dfdc 1267
45c0ff10
KR
1268# On mingw, struct timespec is in <pthread.h>.
1269#
7534dfdc
MD
1270AC_MSG_CHECKING(for struct timespec)
1271AC_CACHE_VAL(scm_cv_struct_timespec,
4bdc8fb5 1272 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
45c0ff10
KR
1273#include <time.h>
1274#if HAVE_PTHREAD_H
1275#include <pthread.h>
4bdc8fb5
LC
1276#endif]], [[struct timespec t; t.tv_nsec = 100]])],
1277 [scm_cv_struct_timespec="yes"],
1278 [scm_cv_struct_timespec="no"]))
7534dfdc
MD
1279AC_MSG_RESULT($scm_cv_struct_timespec)
1280if test $scm_cv_struct_timespec = yes; then
feef98f2 1281 AC_DEFINE([HAVE_STRUCT_TIMESPEC], 1,
45c0ff10 1282 [Define this if your system defines struct timespec via either <time.h> or <pthread.h>.])
7534dfdc
MD
1283fi
1284
3a629497
JB
1285#--------------------------------------------------------------------
1286#
1287# Flags for thread support
1288#
1289#--------------------------------------------------------------------
1290
9a52bc2a
RB
1291SCM_I_GSC_USE_PTHREAD_THREADS=0
1292SCM_I_GSC_USE_NULL_THREADS=0
9a52bc2a
RB
1293AC_SUBST([SCM_I_GSC_USE_PTHREAD_THREADS])
1294AC_SUBST([SCM_I_GSC_USE_NULL_THREADS])
9a52bc2a 1295
539c89a1
JB
1296### What thread package has the user asked for?
1297AC_ARG_WITH(threads, [ --with-threads thread interface],
18622c4e 1298 , with_threads=yes)
539c89a1 1299
8ab3d8a0 1300AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT, 0)
66302618 1301AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER, 0)
8ab3d8a0 1302
539c89a1 1303case "$with_threads" in
9bc4701c 1304 "yes" | "pthread" | "pthreads" | "pthread-threads" | "")
56ae2148
LC
1305
1306 build_pthread_support="yes"
1307
345b17e9
LC
1308 ACX_PTHREAD([CC="$PTHREAD_CC"
1309 LIBS="$PTHREAD_LIBS $LIBS"
1310 SCM_I_GSC_USE_PTHREAD_THREADS=1
1311 with_threads="pthreads"],
1312 [with_threads="null"
1313 build_pthread_support="no"])
49aaa6d2
MV
1314
1315 old_CFLAGS="$CFLAGS"
1316 CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
8ab3d8a0
KR
1317
1318 # Reasons for testing:
1319 # pthread_getattr_np - "np" meaning "non portable" says it
1320 # all; not present on MacOS X or Solaris 10
45c0ff10
KR
1321 # pthread_get_stackaddr_np - "np" meaning "non portable" says it
1322 # all; specific to MacOS X
1323 # pthread_sigmask - not available on mingw
8ab3d8a0 1324 #
45c0ff10 1325 AC_CHECK_FUNCS(pthread_attr_getstack pthread_getattr_np pthread_get_stackaddr_np pthread_sigmask)
8ab3d8a0
KR
1326
1327 # On past versions of Solaris, believe 8 through 10 at least, you
1328 # had to write "pthread_once_t foo = { PTHREAD_ONCE_INIT };".
66302618 1329 # This is contrary to POSIX:
8ab3d8a0
KR
1330 # http://www.opengroup.org/onlinepubs/000095399/functions/pthread_once.html
1331 # Check here if this style is required.
1332 #
1333 # glibc (2.3.6 at least) works both with or without braces, so the
1334 # test checks whether it works without.
1335 #
66302618
LC
1336
1337 if test "$GCC" = "yes"; then
1338 # Since GCC only issues a warning for missing braces, so we need
1339 # `-Werror' to catch it.
1340 CFLAGS="-Werror -Wmissing-braces $CFLAGS"
1341 fi
1342
8ab3d8a0
KR
1343 AC_CACHE_CHECK([whether PTHREAD_ONCE_INIT needs braces],
1344 guile_cv_need_braces_on_pthread_once_init,
66302618
LC
1345 [AC_COMPILE_IFELSE([#include <pthread.h>
1346 pthread_once_t foo = PTHREAD_ONCE_INIT;],
8ab3d8a0
KR
1347 [guile_cv_need_braces_on_pthread_once_init=no],
1348 [guile_cv_need_braces_on_pthread_once_init=yes])])
1349 if test "$guile_cv_need_braces_on_pthread_once_init" = yes; then
1350 SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT=1
1351 fi
1352
66302618
LC
1353 # Same problem with `PTHREAD_MUTEX_INITIALIZER', e.g., on IRIX
1354 # 6.5.30m with GCC 3.3.
1355 AC_CACHE_CHECK([whether PTHREAD_MUTEX_INITIALIZER needs braces],
1356 guile_cv_need_braces_on_pthread_mutex_initializer,
1357 [AC_COMPILE_IFELSE([#include <pthread.h>
1358 pthread_mutex_t foo = PTHREAD_MUTEX_INITIALIZER;],
1359 [guile_cv_need_braces_on_pthread_mutex_initializer=no],
1360 [guile_cv_need_braces_on_pthread_mutex_initializer=yes])])
1361 if test "$guile_cv_need_braces_on_pthread_mutex_initializer" = yes; then
1362 SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER=1
1363 fi
1364
49aaa6d2
MV
1365 CFLAGS="$old_CFLAGS"
1366
d707b9df
MV
1367 # On Solaris, sched_yield lives in -lrt.
1368 AC_SEARCH_LIBS(sched_yield, rt)
1369
539c89a1 1370 ;;
539c89a1 1371esac
3a629497 1372
18622c4e 1373case "$with_threads" in
9bc4701c 1374 "pthreads")
585356dc 1375 ;;
18622c4e 1376 "no" | "null")
9a52bc2a 1377 SCM_I_GSC_USE_NULL_THREADS=1
81adf76a 1378 SCM_I_GSC_HAVE_THREAD_STORAGE_CLASS=0
18622c4e 1379 with_threads="null-threads"
18306183 1380 ;;
585356dc 1381 * )
18622c4e 1382 AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
585356dc
MV
1383 ;;
1384esac
539c89a1 1385
18622c4e
MV
1386AC_MSG_CHECKING(what kind of threads to support)
1387AC_MSG_RESULT($with_threads)
933a7411 1388
56ae2148
LC
1389AM_CONDITIONAL([BUILD_PTHREAD_SUPPORT],
1390 [test "x$build_pthread_support" = "xyes"])
1391
1392
4f416616
KR
1393## Check whether pthread_attr_getstack works for the main thread
1394
23f2b9a3
KR
1395if test "$with_threads" = pthreads; then
1396
4f416616
KR
1397AC_MSG_CHECKING(whether pthread_attr_getstack works for the main thread)
1398old_CFLAGS="$CFLAGS"
1399CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
4bdc8fb5 1400AC_RUN_IFELSE([AC_LANG_SOURCE([[
4f416616
KR
1401#if HAVE_PTHREAD_ATTR_GETSTACK
1402#include <pthread.h>
1403
1404int main ()
1405{
1406 pthread_attr_t attr;
1407 void *start, *end;
1408 size_t size;
1409
1410 pthread_getattr_np (pthread_self (), &attr);
1411 pthread_attr_getstack (&attr, &start, &size);
1412 end = (char *)start + size;
1413
1414 if ((void *)&attr < start || (void *)&attr >= end)
1415 return 1;
1416 else
1417 return 0;
1418}
1419#else
1420int main ()
1421{
1422 return 1;
1423}
1424#endif
4bdc8fb5 1425]])],
4f416616 1426[works=yes
feef98f2 1427AC_DEFINE([PTHREAD_ATTR_GETSTACK_WORKS], [1], [Define when pthread_att_get_stack works for the main thread])],
4bdc8fb5
LC
1428[works=no],
1429[])
4f416616
KR
1430CFLAGS="$old_CFLAGS"
1431AC_MSG_RESULT($works)
1432
705edb95
LC
1433GUILE_THREAD_LOCAL_STORAGE
1434
23f2b9a3
KR
1435fi # with_threads=pthreads
1436
1437
0db83c04
MV
1438## Cross building
1439if test "$cross_compiling" = "yes"; then
1440 AC_MSG_CHECKING(cc for build)
1441 ## /usr/bin/cc still uses wrong assembler
1442 ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bincc}"
1443 CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}"
1444else
1445 CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
1446fi
0db83c04
MV
1447
1448## AC_MSG_CHECKING("if we are cross compiling")
1449## AC_MSG_RESULT($cross_compiling)
1450if test "$cross_compiling" = "yes"; then
1451 AC_MSG_RESULT($CC_FOR_BUILD)
1452fi
1453
1454## No need as yet to be more elaborate
1455CCLD_FOR_BUILD="$CC_FOR_BUILD"
1456
1457AC_SUBST(cross_compiling)
457a4e81 1458AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
0db83c04
MV
1459AC_SUBST(CCLD_FOR_BUILD)
1460
1461## libtool erroneously calls CC_FOR_BUILD HOST_CC;
1462## --HOST is the platform that PACKAGE is compiled for.
1463HOST_CC="$CC_FOR_BUILD"
1464AC_SUBST(HOST_CC)
1465
1466if test "$cross_compiling" = "yes"; then
1467 AC_MSG_CHECKING(guile for build)
1468 GUILE_FOR_BUILD="${GUILE_FOR_BUILD-guile}"
1469else
1470 GUILE_FOR_BUILD='$(preinstguile)'
1471fi
0db83c04
MV
1472
1473## AC_MSG_CHECKING("if we are cross compiling")
1474## AC_MSG_RESULT($cross_compiling)
1475if test "$cross_compiling" = "yes"; then
1476 AC_MSG_RESULT($GUILE_FOR_BUILD)
1477fi
89f69c52 1478AC_ARG_VAR(GUILE_FOR_BUILD,[guile for build system])
0db83c04
MV
1479AC_SUBST(GUILE_FOR_BUILD)
1480
3a629497 1481## If we're using GCC, ask for aggressive warnings.
f29ded4b 1482GCC_CFLAGS=""
3a629497 1483case "$GCC" in
99be3450 1484 yes )
0a1b8b15
JB
1485 ## We had -Wstrict-prototypes in here for a bit, but Guile does too
1486 ## much stuff with generic function pointers for that to really be
1487 ## less than exasperating.
aee8ca3f
GH
1488 ## -Wpointer-arith was here too, but something changed in gcc/glibc
1489 ## and it became equally exasperating (gcc 2.95 and/or glibc 2.1.2).
8bcecbd3
LC
1490 POTENTIAL_GCC_CFLAGS="-Wall -Wmissing-prototypes \
1491 -Wdeclaration-after-statement -Wundef \
1492 -Wswitch-enum"
5c07af6e
MV
1493 # Do this here so we don't screw up any of the tests above that might
1494 # not be "warning free"
1495 if test "${GUILE_ERROR_ON_WARNING}" = yes
1496 then
f29ded4b 1497 POTENTIAL_GCC_CFLAGS="${POTENTIAL_GCC_CFLAGS} -Werror"
5c07af6e
MV
1498 enable_compile_warnings=no
1499 fi
f29ded4b
LC
1500
1501 for flag in $POTENTIAL_GCC_CFLAGS
1502 do
1503 gl_WARN_ADD([$flag], [GCC_CFLAGS])
1504 done
5c07af6e 1505 ;;
3a629497
JB
1506esac
1507
582a4997
LC
1508AC_SUBST(GCC_CFLAGS)
1509
9d19a9d6
LC
1510# Check for GNU ld's "-z relro".
1511GUILE_GNU_LD_RELRO
1512
1513
3a629497
JB
1514## If we're creating a shared library (using libtool!), then we'll
1515## need to generate a list of .lo files corresponding to the .o files
1516## given in LIBOBJS. We'll call it LIBLOBJS.
eede3dbc 1517LIBLOBJS="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`"
3a629497 1518
e9e225e5 1519## We also need to create corresponding .doc and .x files
eede3dbc
RB
1520EXTRA_DOT_DOC_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.doc ,g;s,\.[[^.]]*$,.doc,'`"
1521EXTRA_DOT_X_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.x ,g;s,\.[[^.]]*$,.x,'`"
91411868 1522
7a5ab369
LC
1523# GNU Readline bindings.
1524GUILE_READLINE
1525
7c86ae05
JB
1526AC_SUBST(GUILE_MAJOR_VERSION)
1527AC_SUBST(GUILE_MINOR_VERSION)
df4a8db0 1528AC_SUBST(GUILE_MICRO_VERSION)
9e6e154e 1529AC_SUBST(GUILE_EFFECTIVE_VERSION)
7c86ae05 1530AC_SUBST(GUILE_VERSION)
9e202853 1531
22b7f585
RB
1532#######################################################################
1533# library versioning
1534
9e202853
RB
1535AC_SUBST(LIBGUILE_INTERFACE_CURRENT)
1536AC_SUBST(LIBGUILE_INTERFACE_REVISION)
1537AC_SUBST(LIBGUILE_INTERFACE_AGE)
1538AC_SUBST(LIBGUILE_INTERFACE)
539c89a1 1539
b8b9ec68 1540AC_SUBST(LIBGUILE_SRFI_SRFI_1_MAJOR)
cfc7c7c0
MD
1541AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_CURRENT)
1542AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_REVISION)
1543AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_AGE)
1544AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE)
1545
b8b9ec68 1546AC_SUBST(LIBGUILE_SRFI_SRFI_4_MAJOR)
22b7f585
RB
1547AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_CURRENT)
1548AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_REVISION)
1549AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_AGE)
1550AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE)
1551
b8b9ec68 1552AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_MAJOR)
22b7f585
RB
1553AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_CURRENT)
1554AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_REVISION)
1555AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_AGE)
1556AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE)
1557
6bba4fad
KR
1558AC_SUBST(LIBGUILE_SRFI_SRFI_60_MAJOR)
1559AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_CURRENT)
1560AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_REVISION)
1561AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE_AGE)
1562AC_SUBST(LIBGUILE_SRFI_SRFI_60_INTERFACE)
1563
b89c4943
LC
1564AC_SUBST(LIBGUILE_I18N_MAJOR)
1565AC_SUBST(LIBGUILE_I18N_INTERFACE_CURRENT)
1566AC_SUBST(LIBGUILE_I18N_INTERFACE_REVISION)
1567AC_SUBST(LIBGUILE_I18N_INTERFACE_AGE)
1568AC_SUBST(LIBGUILE_I18N_INTERFACE)
1569
1570
22b7f585
RB
1571#######################################################################
1572
d8b1bb93 1573dnl Tell guile-config what flags guile users should compile and link with.
a8d7ba11 1574GUILE_LIBS="$LDFLAGS $LIBS"
25a640ca 1575GUILE_CFLAGS="$CPPFLAGS $PTHREAD_CFLAGS"
daa4f38c 1576AC_SUBST(GUILE_LIBS)
d8b1bb93 1577AC_SUBST(GUILE_CFLAGS)
7c86ae05 1578
3a629497
JB
1579AC_SUBST(AWK)
1580AC_SUBST(LIBLOBJS)
91411868 1581AC_SUBST(EXTRA_DOT_DOC_FILES)
e9e225e5 1582AC_SUBST(EXTRA_DOT_X_FILES)
3a629497 1583
6812c28f
TTN
1584dnl See also top_builddir in info node: (libtool)AC_PROG_LIBTOOL
1585top_builddir_absolute=`pwd`
1586AC_SUBST(top_builddir_absolute)
9e6e154e 1587top_srcdir_absolute=`(cd $srcdir && pwd)`
2f13db9a 1588AC_SUBST(top_srcdir_absolute)
6812c28f 1589
92826dd0
LC
1590dnl We need `sitedir' in `guile-1.8.pc'.
1591dnl Note: `sitedir' must be kept in sync with `GUILE_SITE_DIR' in `guile.m4'.
0c1eb9b6 1592pkgdatadir="$datadir/$PACKAGE_TARNAME"
92826dd0
LC
1593sitedir="$pkgdatadir/site"
1594AC_SUBST([sitedir])
1595
9a52bc2a
RB
1596# Additional SCM_I_GSC definitions are above.
1597AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
1598AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST])
f5922e27 1599AC_SUBST([SCM_I_GSC_ENABLE_DISCOURAGED])
9a52bc2a
RB
1600AC_SUBST([SCM_I_GSC_ENABLE_DEPRECATED])
1601AC_SUBST([SCM_I_GSC_ENABLE_ELISP])
9a52bc2a
RB
1602AC_SUBST([SCM_I_GSC_STACK_GROWS_UP])
1603AC_SUBST([SCM_I_GSC_C_INLINE])
1604AC_CONFIG_FILES([libguile/gen-scmconfig.h])
1605
237b3247
RB
1606AC_CONFIG_FILES([
1607 Makefile
6812c28f 1608 am/Makefile
6caac03c 1609 lib/Makefile
9e6e154e
RB
1610 benchmark-suite/Makefile
1611 doc/Makefile
9e6e154e
RB
1612 doc/r5rs/Makefile
1613 doc/ref/Makefile
1614 doc/tutorial/Makefile
1e2346ae 1615 emacs/Makefile
9e6e154e 1616 examples/Makefile
9e6e154e 1617 libguile/Makefile
237b3247 1618 srfi/Makefile
7a5ab369 1619 guile-readline/Makefile
849f29a4
RB
1620 test-suite/Makefile
1621 test-suite/standalone/Makefile
0b6d8fdc 1622 meta/Makefile
e610dc38 1623 module/Makefile
e610dc38 1624 testsuite/Makefile
849f29a4 1625])
9e6e154e 1626
c1a15f3d
LC
1627AC_CONFIG_FILES([meta/guile-2.0.pc])
1628AC_CONFIG_FILES([meta/guile-2.0-uninstalled.pc])
9e6e154e
RB
1629AC_CONFIG_FILES([check-guile], [chmod +x check-guile])
1630AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile])
0b6d8fdc
AW
1631AC_CONFIG_FILES([meta/guile], [chmod +x meta/guile])
1632AC_CONFIG_FILES([meta/uninstalled-env], [chmod +x meta/uninstalled-env])
1633AC_CONFIG_FILES([meta/gdb-uninstalled-guile], [chmod +x meta/gdb-uninstalled-guile])
54b38caf 1634AC_CONFIG_FILES([meta/guile-tools], [chmod +x meta/guile-tools])
9e6e154e
RB
1635AC_CONFIG_FILES([libguile/guile-snarf],
1636 [chmod +x libguile/guile-snarf])
1637AC_CONFIG_FILES([libguile/guile-doc-snarf],
1638 [chmod +x libguile/guile-doc-snarf])
1639AC_CONFIG_FILES([libguile/guile-func-name-check],
1640 [chmod +x libguile/guile-func-name-check])
1641AC_CONFIG_FILES([libguile/guile-snarf-docs],
1642 [chmod +x libguile/guile-snarf-docs])
d8b6e191
NJ
1643AC_CONFIG_FILES([test-suite/standalone/test-use-srfi],
1644 [chmod +x test-suite/standalone/test-use-srfi])
a9931e4e
NJ
1645AC_CONFIG_FILES([test-suite/standalone/test-fast-slot-ref],
1646 [chmod +x test-suite/standalone/test-fast-slot-ref])
22b5f518 1647AC_CONFIG_FILES([doc/ref/effective-version.texi])
237b3247
RB
1648
1649AC_OUTPUT
0f2d19dd 1650
3a629497
JB
1651dnl Local Variables:
1652dnl comment-start: "dnl "
1653dnl comment-end: ""
1654dnl comment-start-skip: "\\bdnl\\b\\s *"
d67c13f6 1655dnl End: