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