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