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