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