1 dnl configuration script for Guile
2 dnl Process this file with autoconf to produce configure.
4 dnl Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
6 dnl This file is part of GUILE
8 dnl GUILE is free software; you can redistribute it and/or modify it
9 dnl under the terms of the GNU General Public License as published by
10 dnl the Free Software Foundation; either version 2, or (at your
11 dnl option) any later version.
13 dnl GUILE is distributed in the hope that it will be useful, but
14 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
15 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 dnl General Public License for more details.
18 dnl You should have received a copy of the GNU General Public License
19 dnl along with GUILE; see the file COPYING. If not, write to the
20 dnl Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 dnl Boston, MA 02111-1307, USA.
26 AC_CONFIG_SRCDIR([GUILE-VERSION])
27 . $srcdir/GUILE-VERSION
28 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
30 AM_CONFIG_HEADER([config.h])
32 #--------------------------------------------------------------------
34 # Independent Subdirectories
36 #--------------------------------------------------------------------
38 AC_CONFIG_SUBDIRS(guile-readline)
40 #--------------------------------------------------------------------
42 dnl Some more checks for Win32
62 AC_CHECK_PROG(have_makeinfo, makeinfo, yes, no)
63 AM_CONDITIONAL(HAVE_MAKEINFO, test "$have_makeinfo" = yes)
65 #--------------------------------------------------------------------
67 # User options (after above tests that may set default CFLAGS etc.)
69 #--------------------------------------------------------------------
71 GUILE_ERROR_ON_WARNING="yes"
73 AC_ARG_ENABLE(error-on-warning,
74 [ --enable-error-on-warning treat compile warnings as errors],
75 [case "${enableval}" in
76 yes | y) GUILE_ERROR_ON_WARNING="yes" ;;
77 no | n) GUILE_ERROR_ON_WARNING="no" ;;
78 *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;;
81 SCM_I_GSC_GUILE_DEBUG_FREELIST=0
82 AC_ARG_ENABLE(debug-freelist,
83 [ --enable-debug-freelist include garbage collector freelist debugging code],
84 if test "$enable_debug_freelist" = y \
85 || test "$enable_debug_freelist" = yes; then
86 SCM_I_GSC_GUILE_DEBUG_FREELIST=1
89 AC_ARG_ENABLE(debug-malloc,
90 [ --enable-debug-malloc include malloc debugging code],
91 if test "$enable_debug_malloc" = y || test "$enable_debug_malloc" = yes; then
92 AC_DEFINE(GUILE_DEBUG_MALLOC, 1,
93 [Define this if you want to debug scm_must_malloc/realloc/free calls.])
96 SCM_I_GSC_GUILE_DEBUG=0
97 AC_ARG_ENABLE(guile-debug,
98 [AC_HELP_STRING([--enable-guile-debug],
99 [include internal debugging functions])],
100 if test "$enable_guile_debug" = y || test "$enable_guile_debug" = yes; then
101 SCM_I_GSC_GUILE_DEBUG=1
104 AC_ARG_ENABLE(arrays,
105 [AC_HELP_STRING([--disable-arrays],[omit array and uniform array support])],
110 [ --disable-posix omit posix interfaces],,
113 AC_ARG_ENABLE(networking,
114 [ --disable-networking omit networking interfaces],,
115 enable_networking=yes)
118 [ --disable-regex omit regular expression interfaces],,
121 AC_ARG_ENABLE(htmldoc,
122 [ --enable-htmldoc build HTML documentation as well as Info],
123 [if test "$enable_htmldoc" = "" || test "$enable_htmldoc" = y || test "$enable_htmldoc" = yes; then
125 AC_PATH_PROG(TEXI2HTML, texi2html, not found)
126 if test "$TEXI2HTML" = "not found"; then
128 echo Building HTML documentation requires the \`texi2html\' program,
129 echo which appears not to be present on your machine.
131 echo \`texi2html\' is available from
132 echo 'http://www.mathematik.uni-kl.de/~obachman/Texi2html/.'
134 echo In the meantime, to build the guile-doc distribution
135 echo without HTML enabled, please rerun \`./configure\' without
136 echo the \`--enable-htmldoc\' option.
141 AM_CONDITIONAL(HTMLDOC, test x$htmldoc_enabled = xyes)
143 AC_ARG_ENABLE([deprecated],
144 AC_HELP_STRING([--disable-deprecated],[omit deprecated features]))
146 if test "$enable_deprecated" = no; then
147 SCM_I_GSC_ENABLE_DEPRECATED=0
149 if test "$enable_deprecated" = yes || test "$enable_deprecated" = ""; then
151 elif test "$enable_deprecated" = shutup; then
154 warn_default=$enable_deprecated
156 SCM_I_GSC_ENABLE_DEPRECATED=1
157 AC_DEFINE_UNQUOTED(SCM_WARN_DEPRECATED_DEFAULT, "$warn_default",
158 [Define this to control the default warning level for deprecated features.])
162 [ --disable-elisp omit Emacs Lisp support],,
165 #--------------------------------------------------------------------
167 dnl Check for dynamic linking
171 [ --with-modules[=FILES] Add support for dynamic modules],
172 use_modules="$withval")
173 test -z "$use_modules" && use_modules=yes
175 if test "$use_modules" != no; then
176 if test "$use_modules" = yes; then
177 DLPREOPEN="-dlpreopen force"
179 DLPREOPEN="-export-dynamic"
180 for module in $use_modules; do
181 DLPREOPEN="$DLPREOPEN -dlopen $module"
186 dnl files which are destined for separate modules.
188 if test "$use_modules" != no; then
192 SCM_I_GSC_HAVE_ARRAYS=0
193 if test "$enable_arrays" = yes; then
196 SCM_I_GSC_HAVE_ARRAYS=1
199 if test "$enable_posix" = yes; then
202 AC_DEFINE(HAVE_POSIX, 1,
203 [Define this if you want support for POSIX system calls in Guile.])
206 if test "$enable_networking" = yes; then
209 AC_DEFINE(HAVE_NETWORKING, 1,
210 [Define this if you want support for networking in Guile.])
213 if test "$enable_debug_malloc" = yes; then
214 AC_LIBOBJ([debug-malloc])
217 if test "$enable_elisp" = yes; then
218 SCM_I_GSC_ENABLE_ELISP=1
220 SCM_I_GSC_ENABLE_ELISP=0
226 if test "$ac_cv_c_inline" != no; then
227 SCM_I_GSC_C_INLINE="\"${ac_cv_c_inline}\""
229 SCM_I_GSC_C_INLINE=NULL
234 AC_CHECK_SIZEOF(char)
235 AC_CHECK_SIZEOF(unsigned char)
236 AC_CHECK_SIZEOF(short)
237 AC_CHECK_SIZEOF(unsigned short)
239 AC_CHECK_SIZEOF(unsigned int)
240 AC_CHECK_SIZEOF(long)
241 AC_CHECK_SIZEOF(unsigned long)
242 AC_CHECK_SIZEOF(size_t)
243 AC_CHECK_SIZEOF(long long)
244 AC_CHECK_SIZEOF(unsigned long long)
245 AC_CHECK_SIZEOF(__int64)
246 AC_CHECK_SIZEOF(unsigned __int64)
247 AC_CHECK_SIZEOF(void *)
248 AC_CHECK_SIZEOF(intptr_t)
249 AC_CHECK_SIZEOF(uintptr_t)
250 AC_CHECK_SIZEOF(ptrdiff_t)
252 if test "$ac_cv_sizeof_long" -ne "$ac_cv_sizeof_void_p"; then
253 AC_MSG_ERROR(sizes of long and void* are not identical)
256 if test "$ac_cv_sizeof_ptrdiff_t" -eq 0; then
257 SCM_I_GSC_T_PTRDIFF='"ptrdiff_t"'
259 SCM_I_GSC_T_PTRDIFF='"long"'
261 AC_SUBST([SCM_I_GSC_T_PTRDIFF])
263 AC_CHECK_HEADERS([stdint.h])
264 AC_CHECK_HEADERS([inttypes.h])
266 SCM_I_GSC_NEEDS_STDINT_H=0
267 SCM_I_GSC_NEEDS_INTTYPES_H=0
269 ### intptr and uintptr (try not to use inttypes if we don't have to)
270 if test "$ac_cv_header_inttypes_h" = yes; then
271 if test "$ac_cv_sizeof_intptr_t" -eq 0; then
272 AC_CHECK_SIZEOF([intptr_t],,[#include <inttypes.h>
274 if test "$ac_cv_sizeof_intptr_t" -ne 0; then
275 SCM_I_GSC_NEEDS_INTTYPES_H=1
278 if test "$ac_cv_sizeof_uintptr_t" -eq 0; then
279 AC_CHECK_SIZEOF([uintptr_t],,[#include <inttypes.h>
281 if test "$ac_cv_sizeof_uintptr_t" -ne 0; then
282 SCM_I_GSC_NEEDS_INTTYPES_H=1
287 ### See what's provided by stdint.h
288 if test "$ac_cv_header_stdint_h" = yes; then
289 AC_CHECK_TYPE([int8_t],[scm_stdint_has_int8=1],,[#include <stdint.h>])
290 AC_CHECK_TYPE([uint8_t],[scm_stdint_has_uint8=1],,[#include <stdint.h>])
291 AC_CHECK_TYPE([int16_t],[scm_stdint_has_int16=1],,[#include <stdint.h>])
292 AC_CHECK_TYPE([uint16_t],[scm_stdint_has_uint16=1],,[#include <stdint.h>])
293 AC_CHECK_TYPE([int32_t],[scm_stdint_has_int32=1],,[#include <stdint.h>])
294 AC_CHECK_TYPE([uint32_t],[scm_stdint_has_uint32=1],,[#include <stdint.h>])
295 AC_CHECK_TYPE([int64_t],[scm_stdint_has_int64=1],,[#include <stdint.h>])
296 AC_CHECK_TYPE([uint64_t],[scm_stdint_has_uint64=1],,[#include <stdint.h>])
299 # so we don't get confused by the cache (wish there was a better way
300 # to check particular headers for the same type...)
302 unset ac_cv_type_int8_t
303 unset ac_cv_type_uint8_t
304 unset ac_cv_type_int16_t
305 unset ac_cv_type_uint16_t
306 unset ac_cv_type_int32_t
307 unset ac_cv_type_uint32_t
308 unset ac_cv_type_int64_t
309 unset ac_cv_type_uint64_t
311 ### See what's provided by inttypes.h
312 if test "$ac_cv_header_inttypes_h" = yes; then
313 AC_CHECK_TYPE([int8_t],[scm_inttypes_has_int8=1],,[#include <inttypes.h>])
314 AC_CHECK_TYPE([uint8_t],[scm_inttypes_has_uint8=1],,[#include <inttypes.h>])
315 AC_CHECK_TYPE([int16_t],[scm_inttypes_has_int16=1],,[#include <inttypes.h>])
316 AC_CHECK_TYPE([uint16_t],[scm_inttypes_has_uint16=1],,[#include <inttypes.h>])
317 AC_CHECK_TYPE([int32_t],[scm_inttypes_has_int32=1],,[#include <inttypes.h>])
318 AC_CHECK_TYPE([uint32_t],[scm_inttypes_has_uint32=1],,[#include <inttypes.h>])
319 AC_CHECK_TYPE([int64_t],[scm_inttypes_has_int64=1],,[#include <inttypes.h>])
320 AC_CHECK_TYPE([uint64_t],[scm_inttypes_has_uint64=1],,[#include <inttypes.h>])
323 # Try hard to find definitions for some required scm_t_*int* types.
325 ### Required type scm_t_int8
326 if test "$ac_cv_sizeof_char" -eq 1; then
327 SCM_I_GSC_T_INT8='"char"'
328 elif test "$scm_stdint_has_int8"; then
329 SCM_I_GSC_T_INT8='"int8_t"'
330 SCM_I_GSC_NEEDS_STDINT_H=1
331 elif test "$scm_inttypes_has_int8"; then
332 SCM_I_GSC_T_INT8='"int8_t"'
333 SCM_I_GSC_NEEDS_INTTYPES_H=1
335 AC_MSG_ERROR([Can't find appropriate type for scm_t_int8.])
337 AC_SUBST([SCM_I_GSC_T_INT8])
339 ### Required type scm_t_uint8
340 if test "$ac_cv_sizeof_unsigned_char" -eq 1; then
341 SCM_I_GSC_T_UINT8='"unsigned char"'
342 elif test "$scm_stdint_has_uint8"; then
343 SCM_I_GSC_T_UINT8='"uint8_t"'
344 SCM_I_GSC_NEEDS_STDINT_H=1
345 elif test "$scm_inttypes_has_uint8"; then
346 SCM_I_GSC_T_UINT8='"uint8_t"'
347 SCM_I_GSC_NEEDS_INTTYPES_H=1
349 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint8.])
351 AC_SUBST([SCM_I_GSC_T_UINT8])
354 ### Required type scm_t_int16 (ANSI C says int or short might work)
355 if test "$ac_cv_sizeof_int" -eq 2; then
356 SCM_I_GSC_T_INT16='"int"'
357 elif test "$ac_cv_sizeof_short" -eq 2; then
358 SCM_I_GSC_T_INT16='"short"'
359 elif test "$scm_stdint_has_int16"; then
360 SCM_I_GSC_T_INT16='"int16_t"'
361 SCM_I_GSC_NEEDS_STDINT_H=1
362 elif test "$scm_inttypes_has_int16"; then
363 SCM_I_GSC_T_INT16='"int16_t"'
364 SCM_I_GSC_NEEDS_INTTYPES_H=1
366 AC_MSG_ERROR([Can't find appropriate type for scm_t_int16.])
368 AC_SUBST([SCM_I_GSC_T_INT16])
370 ### Required type scm_t_uint16 (ANSI C says int or short might work)
371 if test "$ac_cv_sizeof_unsigned_int" -eq 2; then
372 SCM_I_GSC_T_UINT16='"unsigned int"'
373 elif test "$ac_cv_sizeof_unsigned_short" -eq 2; then
374 SCM_I_GSC_T_UINT16='"unsigned short"'
375 elif test "$scm_stdint_has_uint16"; then
376 SCM_I_GSC_T_UINT16='"uint16_t"'
377 SCM_I_GSC_NEEDS_STDINT_H=1
378 elif test "$scm_inttypes_has_uint16"; then
379 SCM_I_GSC_T_UINT16='"uint16_t"'
380 SCM_I_GSC_NEEDS_INTTYPES_H=1
382 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint16.])
384 AC_SUBST([SCM_I_GSC_T_UINT16])
387 ### Required type scm_t_int32 (ANSI C says int, short, or long might work)
388 if test "$ac_cv_sizeof_int" -eq 4; then
389 SCM_I_GSC_T_INT32='"int"'
390 elif test "$ac_cv_sizeof_long" -eq 4; then
391 SCM_I_GSC_T_INT32='"long"'
392 elif test "$ac_cv_sizeof_short" -eq 4; then
393 SCM_I_GSC_T_INT32='"short"'
394 elif test "$scm_stdint_has_int32"; then
395 SCM_I_GSC_T_INT32='"int32_t"'
396 SCM_I_GSC_NEEDS_STDINT_H=1
397 elif test "$scm_inttypes_has_int32"; then
398 SCM_I_GSC_T_INT32='"int32_t"'
399 SCM_I_GSC_NEEDS_INTTYPES_H=1
401 AC_MSG_ERROR([Can't find appropriate type for scm_t_int32.])
403 AC_SUBST([SCM_I_GSC_T_INT32])
405 ### Required type scm_t_uint32 (ANSI C says int, short, or long might work)
406 if test "$ac_cv_sizeof_unsigned_int" -eq 4; then
407 SCM_I_GSC_T_UINT32='"unsigned int"'
408 elif test "$ac_cv_sizeof_unsigned_long" -eq 4; then
409 SCM_I_GSC_T_UINT32='"unsigned long"'
410 elif test "$ac_cv_sizeof_unsigned_short" -eq 4; then
411 SCM_I_GSC_T_UINT32='"unsigned short"'
412 elif test "$scm_stdint_has_uint32"; then
413 SCM_I_GSC_T_UINT32='"uint32_t"'
414 SCM_I_GSC_NEEDS_STDINT_H=1
415 elif test "$scm_inttypes_has_uint32"; then
416 SCM_I_GSC_T_UINT32='"uint32_t"'
417 SCM_I_GSC_NEEDS_INTTYPES_H=1
419 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint32.])
421 AC_SUBST([SCM_I_GSC_T_UINT32])
423 ### Optional type scm_t_int64 (ANSI C says int, short, or long might work)
424 ### Also try 'long long' and '__int64' if we have it.
426 if test "$ac_cv_sizeof_int" -eq 8; then
427 SCM_I_GSC_T_INT64='"int"'
428 elif test "$ac_cv_sizeof_long" -eq 8; then
429 SCM_I_GSC_T_INT64='"long"'
430 elif test "$ac_cv_sizeof_short" -eq 8; then
431 SCM_I_GSC_T_INT64='"short"'
432 elif test "$ac_cv_sizeof_long_long" -eq 8; then
433 SCM_I_GSC_T_INT64='"long long"'
434 elif test "$ac_cv_sizeof___int64" -eq 8; then
435 SCM_I_GSC_T_INT64='"__int64"'
436 elif test "$scm_stdint_has_int64"; then
437 SCM_I_GSC_T_INT64='"int64_t"'
438 SCM_I_GSC_NEEDS_STDINT_H=1
439 elif test "$scm_inttypes_has_int64"; then
440 SCM_I_GSC_T_INT64='"int64_t"'
441 SCM_I_GSC_NEEDS_INTTYPES_H=1
443 AC_MSG_ERROR([Can't find appropriate type for scm_t_int64.])
445 AC_SUBST([SCM_I_GSC_T_INT64])
447 ### Optional type scm_t_uint64 (ANSI C says int, short, or long might work)
448 ### Also try 'long long' and '__int64' if we have it.
450 if test "$ac_cv_sizeof_unsigned_int" -eq 8; then
451 SCM_I_GSC_T_UINT64='"unsigned int"'
452 elif test "$ac_cv_sizeof_unsigned_long" -eq 8; then
453 SCM_I_GSC_T_UINT64='"unsigned long"'
454 elif test "$ac_cv_sizeof_unsigned_short" -eq 8; then
455 SCM_I_GSC_T_UINT64='"unsigned short"'
456 elif test "$ac_cv_sizeof_unsigned_long_long" -eq 8; then
457 SCM_I_GSC_T_UINT64='"unsigned long long"'
458 elif test "$ac_cv_sizeof_unsigned___int64" -eq 8; then
459 SCM_I_GSC_T_UINT64='"unsigned __int64"'
460 elif test "$scm_stdint_has_uint64"; then
461 SCM_I_GSC_T_UINT64='"uint64_t"'
462 SCM_I_GSC_NEEDS_STDINT_H=1
463 elif test "$scm_inttypes_has_uint64"; then
464 SCM_I_GSC_T_UINT64='"uint64_t"'
465 SCM_I_GSC_NEEDS_INTTYPES_H=1
467 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint64.])
469 AC_SUBST([SCM_I_GSC_T_UINT64])
472 AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H])
473 AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H])
480 AC_CHECK_HEADERS([io.h libc.h limits.h malloc.h memory.h string.h \
481 regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
482 sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
483 sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
486 GUILE_HEADER_LIBC_WITH_UNISTD
492 if test $MINGW32 = no; then
493 AC_CHECK_LIB(m, main)
495 AC_CHECK_FUNCS(gethostbyname)
496 if test $ac_cv_func_gethostbyname = no; then
497 AC_CHECK_LIB(nsl, gethostbyname)
500 AC_CHECK_FUNCS(connect)
501 if test $ac_cv_func_connect = no; then
502 AC_CHECK_LIB(socket, connect)
506 dnl Check for Winsock and other functionality on Win32 (*not* CygWin)
509 if test "$MINGW32" = "yes" ; then
510 AC_CHECK_HEADER(winsock2.h, [AC_DEFINE([HAVE_WINSOCK2_H], 1,
511 [Define if you have the <winsock2.h> header file.])])
512 AC_CHECK_LIB(ws2_32, main)
513 AC_LIBOBJ([win32-uname])
514 AC_LIBOBJ([win32-dirent])
515 if test "$enable_networking" = yes ; then
516 AC_LIBOBJ([win32-socket])
518 if test "$enable_shared" = yes ; then
519 EXTRA_DEFS="-DSCM_IMPORT"
520 AC_DEFINE(USE_DLL_IMPORT, 1,
521 [Define if you need additional CPP macros on Win32 platforms.])
523 if test x"$enable_ltdl_install" = x"yes" ; then
524 INCLTDL="-DLIBLTDL_DLL_IMPORT $INCLTDL"
529 # FIXME: check to see if we still need these.
535 AC_CHECK_HEADERS([assert.h])
537 AC_CHECK_FUNCS([ctermid ftime fchown getcwd geteuid gettimeofday lstat mkdir mknod nice readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt strftime strptime symlink sync 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 unsetenv])
539 AC_CHECK_HEADERS(crypt.h sys/resource.h sys/file.h)
540 AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname)
541 AC_CHECK_LIB(crypt, crypt)
544 AC_CHECK_LIB([gmp], [__gmpz_init], ,
545 [AC_MSG_ERROR([GNU MP not found, see http://swox.com/gmp])])
547 # mpz_import is a macro so we need to include <gmp.h>
548 AC_TRY_LINK([#include <gmp.h>],
549 [mpz_import (0, 0, 0, 0, 0, 0, 0);] , ,
550 [AC_MSG_ERROR([At least GNU MP 4.1 is required, see http://swox.com/gmp])])
552 ### Some systems don't declare some functions. On such systems, we
553 ### need to at least provide our own K&R-style declarations.
555 ### GUILE_FUNC_DECLARED(function, headerfile)
557 ### Check for a declaration of FUNCTION in HEADERFILE; if it is
558 ### not there, #define MISSING_FUNCTION_DECL.
559 AC_DEFUN(GUILE_FUNC_DECLARED, [
560 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
561 AC_EGREP_HEADER($1, $2,
562 guile_cv_func_$1_declared=yes,
563 guile_cv_func_$1_declared=no))
564 if test [x$guile_cv_func_]$1[_declared] = xno; then
565 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL], 1,
566 [Define if the operating system supplies $1 without declaring it.])
570 GUILE_FUNC_DECLARED(strptime, time.h)
571 GUILE_FUNC_DECLARED(sleep, unistd.h)
572 GUILE_FUNC_DECLARED(usleep, unistd.h)
574 ### On some systems usleep has no return value. If it does have one,
575 ### we'd like to return it; otherwise, we'll fake it.
576 AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
577 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
579 [guile_cv_func_usleep_return_type=void],
580 [guile_cv_func_usleep_return_type=int])])
581 case "$guile_cv_func_usleep_return_type" in
583 AC_DEFINE(USLEEP_RETURNS_VOID, 1,
584 [Define if the system headers declare usleep to return void.])
588 AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
589 if test -n "$have_sys_un_h" ; then
590 AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS, 1,
591 [Define if the system supports Unix-domain (file-domain) sockets.])
594 AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
596 AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
597 setnetent getnetent endnetent dnl
598 setprotoent getprotoent endprotoent dnl
599 setservent getservent endservent dnl
600 getnetbyaddr getnetbyname dnl
601 inet_lnaof inet_makeaddr inet_netof hstrerror dnl
604 AC_MSG_CHECKING(for __libc_stack_end)
605 AC_CACHE_VAL(guile_cv_have_libc_stack_end,
606 [AC_TRY_LINK([extern char *__libc_stack_end;],
607 [char *p = __libc_stack_end;],
608 guile_cv_have_libc_stack_end=yes,
609 guile_cv_have_libc_stack_end=no)])
610 AC_MSG_RESULT($guile_cv_have_libc_stack_end)
612 if test $guile_cv_have_libc_stack_end = yes; then
613 AC_DEFINE(HAVE_LIBC_STACK_END, 1,
614 [Define if you have the __libc_stack_end variable.])
617 dnl Some systems do not declare this. Some systems do declare it, as a
618 dnl macro. With cygwin it may be in a DLL.
620 AC_MSG_CHECKING(whether netdb.h declares h_errno)
621 AC_CACHE_VAL(guile_cv_have_h_errno,
622 [AC_TRY_COMPILE([#include <netdb.h>],
624 guile_cv_have_h_errno=yes, guile_cv_have_h_errno=no)])
625 AC_MSG_RESULT($guile_cv_have_h_errno)
626 if test $guile_cv_have_h_errno = yes; then
627 AC_DEFINE(HAVE_H_ERRNO, 1, [Define if h_errno is declared in netdb.h.])
630 AC_MSG_CHECKING(whether uint32_t is defined)
631 AC_CACHE_VAL(guile_cv_have_uint32_t,
632 [AC_TRY_COMPILE([#include <sys/types.h>
640 guile_cv_have_uint32_t=yes, guile_cv_have_uint32_t=no)])
641 AC_MSG_RESULT($guile_cv_have_uint32_t)
642 if test $guile_cv_have_uint32_t = yes; then
643 AC_DEFINE(HAVE_UINT32_T, 1,
644 [Define if uint32_t typedef is defined when netdb.h is include.])
647 AC_MSG_CHECKING(for working IPv6 support)
648 AC_CACHE_VAL(guile_cv_have_ipv6,
650 #ifdef HAVE_SYS_TYPES_H
651 #include <sys/types.h>
653 #include <netinet/in.h>
654 #include <sys/socket.h>],
655 [struct sockaddr_in6 a; a.sin6_family = AF_INET6;],
656 guile_cv_have_ipv6=yes, guile_cv_have_ipv6=no)])
657 AC_MSG_RESULT($guile_cv_have_ipv6)
658 if test $guile_cv_have_ipv6 = yes; then
659 AC_DEFINE(HAVE_IPV6, 1, [Define if you want support for IPv6.])
662 # included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.
663 AC_MSG_CHECKING(whether sockaddr_in6 has sin6_scope_id)
664 AC_CACHE_VAL(guile_cv_have_sin6_scope_id,
666 #ifdef HAVE_SYS_TYPES_H
667 #include <sys/types.h>
669 #include <netinet/in.h>],
670 [struct sockaddr_in6 sok; sok.sin6_scope_id = 0;],
671 guile_cv_have_sin6_scope_id=yes, guile_cv_have_sin6_scope_id=no)])
672 AC_MSG_RESULT($guile_cv_have_sin6_scope_id)
673 if test $guile_cv_have_sin6_scope_id = yes; then
674 AC_DEFINE(HAVE_SIN6_SCOPE_ID, 1,
675 [Define this if your IPv6 has sin6_scope_id in sockaddr_in6 struct.])
678 AC_MSG_CHECKING(whether localtime caches TZ)
679 AC_CACHE_VAL(guile_cv_localtime_cache,
680 [if test x$ac_cv_func_tzset = xyes; then
681 AC_TRY_RUN([#include <time.h>
685 extern char **environ;
689 for (to = from = environ; (*to = *from); from++)
690 if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
693 char TZ_GMT0[] = "TZ=GMT0";
694 char TZ_PST8[] = "TZ=PST8";
697 time_t now = time ((time_t *) 0);
698 int hour_GMT0, hour_unset;
699 if (putenv (TZ_GMT0) != 0)
701 hour_GMT0 = localtime (&now)->tm_hour;
703 hour_unset = localtime (&now)->tm_hour;
704 if (putenv (TZ_PST8) != 0)
706 if (localtime (&now)->tm_hour == hour_GMT0)
709 if (localtime (&now)->tm_hour != hour_unset)
712 }], guile_cv_localtime_cache=no, guile_cv_localtime_cache=yes,
713 [# If we have tzset, assume the worst when cross-compiling.
714 guile_cv_localtime_cache=yes])
716 # If we lack tzset, report that localtime does not cache TZ,
717 # since we can't invalidate the cache if we don't have tzset.
718 guile_cv_localtime_cache=no
720 AC_MSG_RESULT($guile_cv_localtime_cache)
721 if test $guile_cv_localtime_cache = yes; then
722 AC_DEFINE(LOCALTIME_CACHE, 1, [Define if localtime caches the TZ setting.])
725 dnl Test whether system calls are restartable by default on the
726 dnl current system. If they are not, we put a loop around every system
727 dnl call to check for EINTR (see SCM_SYSCALL) and do not attempt to
728 dnl change from the default behaviour. On the other hand, if signals
729 dnl are restartable then the loop is not installed and when libguile
730 dnl initialises it also resets the behaviour of each signal to cause a
731 dnl restart (in case a different runtime had a different default
732 dnl behaviour for some reason: e.g., different versions of linux seem
733 dnl to behave differently.)
735 AC_SYS_RESTARTABLE_SYSCALLS
737 if test "$enable_regex" = yes; then
738 if test "$ac_cv_header_regex_h" = yes ||
739 test "$ac_cv_header_rxposix_h" = yes ||
740 test "$ac_cv_header_rx_rxposix_h" = yes; then
741 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [AC_LIBOBJ([regex-posix])],
742 [AC_CHECK_LIB(rx, main)
743 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [AC_LIBOBJ([regex-posix])],
744 [AC_CHECK_LIB(regex, main)
745 GUILE_NAMED_CHECK_FUNC(regcomp, regex, [AC_LIBOBJ([regex-posix])])])]
747 dnl The following should not be necessary, but for some reason
748 dnl autoheader misses it if we don't include it!
749 if test "$ac_cv_func_regcomp_norx" = yes ||
750 test "$ac_cv_func_regcomp_regex" = yes ||
751 test "$ac_cv_func_regcomp_rx" = yes; then
752 AC_DEFINE(HAVE_REGCOMP, 1,
753 [This is included as part of a workaround for a autoheader bug.])
758 AC_REPLACE_FUNCS(inet_aton putenv strerror memmove mkstemp)
760 AC_CHECK_HEADERS(floatingpoint.h ieeefp.h nan.h)
762 # asinh, acosh, atanh and trunc (all in -lm) are only C99 standard and older
763 # systems generally don't have them.
765 AC_CHECK_FUNCS(asinh acosh atanh copysign finite isinf isnan trunc)
767 # When testing for the presence of alloca, we need to add alloca.o
768 # explicitly to LIBOBJS to make sure that it is translated to
769 # `alloca.lo' for libtool later on. This can and should be done more cleanly.
771 if test "$ALLOCA" = "alloca.o"; then AC_LIBOBJ([alloca]); fi
773 AC_CHECK_MEMBERS([struct stat.st_rdev])
774 AC_CHECK_MEMBERS([struct stat.st_blksize])
778 AC_CACHE_CHECK([for S_ISLNK in sys/stat.h], ac_cv_macro_S_ISLNK,
779 [AC_TRY_CPP([#include <sys/stat.h>
783 ac_cv_macro_S_ISLNK=yes,
784 ac_cv_macro_S_ISLNK=no)])
785 if test $ac_cv_macro_S_ISLNK = yes; then
786 AC_DEFINE(HAVE_S_ISLNK, 1,
787 [Define this if your system defines S_ISLNK in sys/stat.h.])
793 #--------------------------------------------------------------------
795 # Which way does the stack grow?
797 #--------------------------------------------------------------------
799 SCM_I_GSC_STACK_GROWS_UP=0
800 AC_TRY_RUN(aux (l) unsigned long l;
801 { int x; exit (l >= ((unsigned long)&x)); }
802 main () { int q; aux((unsigned long)&q); },
803 [SCM_I_GSC_STACK_GROWS_UP=1],
805 [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)])
807 AC_CHECK_SIZEOF(float)
808 if test "$ac_cv_sizeof_float" -le "$ac_cv_sizeof_long"; then
809 AC_DEFINE(SCM_SINGLES, 1,
810 [Define this if floats are the same size as longs.])
813 AC_MSG_CHECKING(for struct linger)
814 AC_CACHE_VAL(scm_cv_struct_linger,
816 #include <sys/types.h>
817 #include <sys/socket.h>],
818 [struct linger lgr; lgr.l_linger = 100],
819 scm_cv_struct_linger="yes",
820 scm_cv_struct_linger="no"))
821 AC_MSG_RESULT($scm_cv_struct_linger)
822 if test $scm_cv_struct_linger = yes; then
823 AC_DEFINE(HAVE_STRUCT_LINGER, 1,
824 [Define this if your system defines struct linger, for use with the
825 getsockopt and setsockopt system calls.])
829 AC_MSG_CHECKING(for struct timespec)
830 AC_CACHE_VAL(scm_cv_struct_timespec,
833 [struct timespec t; t.tv_nsec = 100],
834 scm_cv_struct_timespec="yes",
835 scm_cv_struct_timespec="no"))
836 AC_MSG_RESULT($scm_cv_struct_timespec)
837 if test $scm_cv_struct_timespec = yes; then
838 AC_DEFINE(HAVE_STRUCT_TIMESPEC, 1,
839 [Define this if your system defines struct timespec via <time.h>.])
842 #--------------------------------------------------------------------
844 # Flags for thread support
846 #--------------------------------------------------------------------
848 SCM_I_GSC_USE_PTHREAD_THREADS=0
849 SCM_I_GSC_USE_NULL_THREADS=0
850 SCM_I_GSC_USE_COOP_THREADS=0
851 AC_SUBST([SCM_I_GSC_USE_PTHREAD_THREADS])
852 AC_SUBST([SCM_I_GSC_USE_NULL_THREADS])
853 AC_SUBST([SCM_I_GSC_USE_COOP_THREADS])
855 ### What thread package has the user asked for?
856 AC_ARG_WITH(threads, [ --with-threads thread interface],
859 case "$with_threads" in
860 "yes" | "pthread" | "pthreads" | "pthread-threads" | "")
861 AC_CHECK_LIB(pthread, main,
862 LIBS="-lpthread $LIBS"
863 SCM_I_GSC_USE_PTHREAD_THREADS=1
864 with_threads="pthreads",
867 if test $GCC = yes; then
868 AC_DEFINE(_THREAD_SAFE, 1,
869 [Use thread safe versions of GNU Libc functions.])
872 AC_MSG_CHECKING(if pthread_mutexattr_settype is declared)
873 AC_CACHE_VAL(guile_cv_mutexattr_settype_declared,
874 [AC_TRY_COMPILE([#include <pthread.h>],
875 [int pthread_mutexattr_settype (int, int);],
876 guile_cv_mutexattr_settype_declared=no,
877 guile_cv_mutexattr_settype_declared=yes)])
878 AC_MSG_RESULT($guile_cv_mutexattr_settype_declared)
879 if test $guile_cv_mutexattr_settype_declared = yes; then
880 AC_DEFINE(SCM_MUTEXATTR_SETTYPE_DECLARED, 1,
881 [Define if pthread.h declares pthread_mutexattr_settype.])
884 AC_MSG_CHECKING(how to get a fast mutex)
885 AC_CACHE_VAL(guile_cv_have_mutex_fast,
886 [AC_TRY_COMPILE([#include <pthread.h>],
887 [int a = PTHREAD_MUTEX_ADAPTIVE_NP;],
888 guile_cv_have_mutex_fast=PTHREAD_MUTEX_ADAPTIVE_NP,
889 guile_cv_have_mutex_fast=none)])
890 AC_MSG_RESULT($guile_cv_have_mutex_fast)
891 if test ! $guile_cv_have_mutex_fast = none; then
892 AC_DEFINE_UNQUOTED(SCM_MUTEX_FAST, $guile_cv_have_mutex_fast,
893 [The mutex kind enum for fast mutexes.])
896 AC_MSG_CHECKING(how to get a recursive mutex)
897 AC_CACHE_VAL(guile_cv_have_mutex_recursive,
898 [AC_TRY_COMPILE([#include <pthread.h>],
899 [int a = PTHREAD_MUTEX_RECURSIVE_NP;],
900 guile_cv_have_mutex_recursive=PTHREAD_MUTEX_RECURSIVE_NP)
901 if test -z "$guile_cv_have_mutex_recursive"; then
902 AC_TRY_COMPILE([#include <pthread.h>],
903 [int a = PTHREAD_MUTEX_RECURSIVE;],
904 guile_cv_have_mutex_recursive=PTHREAD_MUTEX_RECURSIVE,
905 guile_cv_have_mutex_recursive=none)
907 AC_MSG_RESULT($guile_cv_have_mutex_recursive)
908 if test ! $guile_cv_have_mutex_recursive = none; then
909 AC_DEFINE_UNQUOTED(SCM_MUTEX_RECURSIVE, $guile_cv_have_mutex_recursive,
910 [The mutex kind enum for recursive mutexes.])
915 case "$with_threads" in
919 SCM_I_GSC_USE_NULL_THREADS=1
920 with_threads="null-threads"
923 AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
927 AC_MSG_CHECKING(what kind of threads to support)
928 AC_MSG_RESULT($with_threads)
931 if test "$cross_compiling" = "yes"; then
932 AC_MSG_CHECKING(cc for build)
933 ## /usr/bin/cc still uses wrong assembler
934 ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bincc}"
935 CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}"
937 CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
940 ## AC_MSG_CHECKING("if we are cross compiling")
941 ## AC_MSG_RESULT($cross_compiling)
942 if test "$cross_compiling" = "yes"; then
943 AC_MSG_RESULT($CC_FOR_BUILD)
946 ## No need as yet to be more elaborate
947 CCLD_FOR_BUILD="$CC_FOR_BUILD"
949 AC_SUBST(cross_compiling)
950 AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
951 AC_SUBST(CCLD_FOR_BUILD)
953 ## libtool erroneously calls CC_FOR_BUILD HOST_CC;
954 ## --HOST is the platform that PACKAGE is compiled for.
955 HOST_CC="$CC_FOR_BUILD"
958 if test "$cross_compiling" = "yes"; then
959 AC_MSG_CHECKING(guile for build)
960 GUILE_FOR_BUILD="${GUILE_FOR_BUILD-guile}"
962 GUILE_FOR_BUILD='$(preinstguile)'
964 AC_ARG_WITH(guile-for-build,
965 [ --with-guile-for-build=guile native guile executable, to be used during build])
966 test -n "$with_guile_for_build" && GUILE_FOR_BUILD="$with_guile_for_build"
968 ## AC_MSG_CHECKING("if we are cross compiling")
969 ## AC_MSG_RESULT($cross_compiling)
970 if test "$cross_compiling" = "yes"; then
971 AC_MSG_RESULT($GUILE_FOR_BUILD)
973 AC_SUBST(GUILE_FOR_BUILD)
975 ## If we're using GCC, ask for aggressive warnings.
978 ## We had -Wstrict-prototypes in here for a bit, but Guile does too
979 ## much stuff with generic function pointers for that to really be
980 ## less than exasperating.
981 ## -Wpointer-arith was here too, but something changed in gcc/glibc
982 ## and it became equally exasperating (gcc 2.95 and/or glibc 2.1.2).
983 CFLAGS="$CFLAGS -Wall -Wmissing-prototypes"
984 # Do this here so we don't screw up any of the tests above that might
985 # not be "warning free"
986 if test "${GUILE_ERROR_ON_WARNING}" = yes
988 CFLAGS="${CFLAGS} -Werror"
989 enable_compile_warnings=no
994 ## NOTE the code below sets LIBOBJS directly and so is now forbidden
995 ## -- I'm disabling it for now in the hopes that the newer autoconf
996 ## will DTRT -- if not, we need to fix up the sed command to match the
999 ## Remove fileblocks.o from the object list. This file gets added by
1000 ## the Autoconf macro AC_STRUCT_ST_BLOCKS. But there is no need.
1001 #LIBOBJS="`echo ${LIBOBJS} | sed 's/fileblocks\.o//g'`"
1003 ## If we're creating a shared library (using libtool!), then we'll
1004 ## need to generate a list of .lo files corresponding to the .o files
1005 ## given in LIBOBJS. We'll call it LIBLOBJS.
1006 LIBLOBJS="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`"
1008 ## We also need to create corresponding .doc and .x files
1009 EXTRA_DOT_DOC_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.doc ,g;s,\.[[^.]]*$,.doc,'`"
1010 EXTRA_DOT_X_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.x ,g;s,\.[[^.]]*$,.x,'`"
1012 AC_SUBST(GUILE_MAJOR_VERSION)
1013 AC_SUBST(GUILE_MINOR_VERSION)
1014 AC_SUBST(GUILE_MICRO_VERSION)
1015 AC_SUBST(GUILE_EFFECTIVE_VERSION)
1016 AC_SUBST(GUILE_VERSION)
1018 #######################################################################
1019 # library versioning
1021 AC_SUBST(LIBQTHREADS_INTERFACE_CURRENT)
1022 AC_SUBST(LIBQTHREADS_INTERFACE_REVISION)
1023 AC_SUBST(LIBQTHREADS_INTERFACE_AGE)
1024 AC_SUBST(LIBQTHREADS_INTERFACE)
1026 AC_SUBST(LIBGUILE_INTERFACE_CURRENT)
1027 AC_SUBST(LIBGUILE_INTERFACE_REVISION)
1028 AC_SUBST(LIBGUILE_INTERFACE_AGE)
1029 AC_SUBST(LIBGUILE_INTERFACE)
1031 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_CURRENT)
1032 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_REVISION)
1033 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_AGE)
1034 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE)
1036 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_CURRENT)
1037 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_REVISION)
1038 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_AGE)
1039 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE)
1041 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_CURRENT)
1042 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_REVISION)
1043 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_AGE)
1044 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE)
1046 #######################################################################
1048 dnl Tell guile-config what flags guile users should link against.
1049 GUILE_LIBS="$LDFLAGS $THREAD_LIBS_INSTALLED $LIBS"
1050 AC_SUBST(GUILE_LIBS)
1054 AC_SUBST(EXTRA_DOT_DOC_FILES)
1055 AC_SUBST(EXTRA_DOT_X_FILES)
1057 dnl See also top_builddir in info node: (libtool)AC_PROG_LIBTOOL
1058 top_builddir_absolute=`pwd`
1059 AC_SUBST(top_builddir_absolute)
1060 top_srcdir_absolute=`(cd $srcdir && pwd)`
1061 AC_SUBST(top_srcdir_absolute)
1063 # Additional SCM_I_GSC definitions are above.
1064 AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
1065 AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST])
1066 AC_SUBST([SCM_I_GSC_ENABLE_DEPRECATED])
1067 AC_SUBST([SCM_I_GSC_ENABLE_ELISP])
1068 AC_SUBST([SCM_I_GSC_HAVE_ARRAYS])
1069 AC_SUBST([SCM_I_GSC_STACK_GROWS_UP])
1070 AC_SUBST([SCM_I_GSC_C_INLINE])
1071 AC_CONFIG_FILES([libguile/gen-scmconfig.h])
1076 benchmark-suite/Makefile
1081 doc/tutorial/Makefile
1083 examples/box-dynamic-module/Makefile
1084 examples/box-dynamic/Makefile
1085 examples/box-module/Makefile
1086 examples/box/Makefile
1087 examples/modules/Makefile
1088 examples/safe/Makefile
1089 examples/scripts/Makefile
1090 guile-config/Makefile
1092 ice-9/debugger/Makefile
1093 ice-9/debugger/breakpoints/Makefile
1096 lang/elisp/internals/Makefile
1097 lang/elisp/primitives/Makefile
1098 libguile-ltdl/Makefile
1099 libguile-ltdl/upstream/Makefile
1106 test-suite/standalone/Makefile
1109 AC_CONFIG_FILES([check-guile], [chmod +x check-guile])
1110 AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile])
1111 AC_CONFIG_FILES([guile-tools], [chmod +x guile-tools])
1112 AC_CONFIG_FILES([pre-inst-guile], [chmod +x pre-inst-guile])
1113 AC_CONFIG_FILES([pre-inst-guile-env], [chmod +x pre-inst-guile-env])
1114 AC_CONFIG_FILES([libguile/guile-snarf],
1115 [chmod +x libguile/guile-snarf])
1116 AC_CONFIG_FILES([libguile/guile-doc-snarf],
1117 [chmod +x libguile/guile-doc-snarf])
1118 AC_CONFIG_FILES([libguile/guile-func-name-check],
1119 [chmod +x libguile/guile-func-name-check])
1120 AC_CONFIG_FILES([libguile/guile-snarf-docs],
1121 [chmod +x libguile/guile-snarf-docs])
1125 dnl Local Variables:
1126 dnl comment-start: "dnl "
1128 dnl comment-start-skip: "\\bdnl\\b\\s *"