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