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