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