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