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