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 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 #--------------------------------------------------------------------
44 #--------------------------------------------------------------------
46 GUILE_ERROR_ON_WARNING="yes"
48 AC_ARG_ENABLE(error-on-warning,
49 [ --enable-error-on-warning treat compile warnings as errors],
50 [case "${enableval}" in
51 yes | y) GUILE_ERROR_ON_WARNING="yes" ;;
52 no | n) GUILE_ERROR_ON_WARNING="no" ;;
53 *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;;
56 SCM_I_GSC_GUILE_DEBUG_FREELIST=0
57 AC_ARG_ENABLE(debug-freelist,
58 [ --enable-debug-freelist include garbage collector freelist debugging code],
59 if test "$enable_debug_freelist" = y \
60 || test "$enable_debug_freelist" = yes; then
61 SCM_I_GSC_GUILE_DEBUG_FREELIST=1
64 AC_ARG_ENABLE(debug-malloc,
65 [ --enable-debug-malloc include malloc debugging code],
66 if test "$enable_debug_malloc" = y || test "$enable_debug_malloc" = yes; then
67 AC_DEFINE(GUILE_DEBUG_MALLOC, 1,
68 [Define this if you want to debug scm_must_malloc/realloc/free calls.])
71 SCM_I_GSC_GUILE_DEBUG=0
72 AC_ARG_ENABLE(guile-debug,
73 [AC_HELP_STRING([--enable-guile-debug],
74 [include internal debugging functions])],
75 if test "$enable_guile_debug" = y || test "$enable_guile_debug" = yes; then
76 SCM_I_GSC_GUILE_DEBUG=1
80 [AC_HELP_STRING([--disable-arrays],[omit array and uniform array support])],
85 [ --disable-posix omit posix interfaces],,
88 AC_ARG_ENABLE(networking,
89 [ --disable-networking omit networking interfaces],,
90 enable_networking=yes)
93 [ --disable-regex omit regular expression interfaces],,
96 AC_ARG_ENABLE(htmldoc,
97 [ --enable-htmldoc build HTML documentation as well as Info],
98 [if test "$enable_htmldoc" = "" || test "$enable_htmldoc" = y || test "$enable_htmldoc" = yes; then
100 AC_PATH_PROG(TEXI2HTML, texi2html, not found)
101 if test "$TEXI2HTML" = "not found"; then
103 echo Building HTML documentation requires the \`texi2html\' program,
104 echo which appears not to be present on your machine.
106 echo \`texi2html\' is available from
107 echo 'http://www.mathematik.uni-kl.de/~obachman/Texi2html/.'
109 echo In the meantime, to build the guile-doc distribution
110 echo without HTML enabled, please rerun \`./configure\' without
111 echo the \`--enable-htmldoc\' option.
116 AM_CONDITIONAL(HTMLDOC, test x$htmldoc_enabled = xyes)
118 AC_ARG_ENABLE([deprecated],
119 AC_HELP_STRING([--disable-deprecated],[omit deprecated features]))
121 if test "$enable_deprecated" = no; then
122 SCM_I_GSC_ENABLE_DEPRECATED=0
124 if test "$enable_deprecated" = yes || test "$enable_deprecated" = ""; then
126 elif test "$enable_deprecated" = shutup; then
129 warn_default=$enable_deprecated
131 SCM_I_GSC_ENABLE_DEPRECATED=1
132 AC_DEFINE_UNQUOTED(SCM_WARN_DEPRECATED_DEFAULT, "$warn_default",
133 [Define this to control the default warning level for deprecated features.])
137 [ --disable-elisp omit Emacs Lisp support],,
140 #--------------------------------------------------------------------
142 dnl Some more checks for Win32
162 AC_CHECK_PROG(have_makeinfo, makeinfo, yes, no)
163 AM_CONDITIONAL(HAVE_MAKEINFO, test "$have_makeinfo" = yes)
165 dnl Check for dynamic linking
169 [ --with-modules[=FILES] Add support for dynamic modules],
170 use_modules="$withval")
171 test -z "$use_modules" && use_modules=yes
173 if test "$use_modules" != no; then
174 if test "$use_modules" = yes; then
175 DLPREOPEN="-dlpreopen force"
177 DLPREOPEN="-export-dynamic"
178 for module in $use_modules; do
179 DLPREOPEN="$DLPREOPEN -dlopen $module"
184 dnl files which are destined for separate modules.
186 if test "$use_modules" != no; then
190 SCM_I_GSC_HAVE_ARRAYS=0
191 if test "$enable_arrays" = yes; then
194 SCM_I_GSC_HAVE_ARRAYS=1
197 if test "$enable_posix" = yes; then
200 AC_DEFINE(HAVE_POSIX, 1,
201 [Define this if you want support for POSIX system calls in Guile.])
204 if test "$enable_networking" = yes; then
207 AC_DEFINE(HAVE_NETWORKING, 1,
208 [Define this if you want support for networking in Guile.])
211 if test "$enable_debug_malloc" = yes; then
212 AC_LIBOBJ([debug-malloc])
215 if test "$enable_elisp" = yes; then
216 SCM_I_GSC_ENABLE_ELISP=1
218 SCM_I_GSC_ENABLE_ELISP=0
224 if test "$ac_cv_c_inline" != no; then
225 SCM_I_GSC_C_INLINE="\"${ac_cv_c_inline}\""
227 SCM_I_GSC_C_INLINE=NULL
232 AC_CHECK_SIZEOF(char)
233 AC_CHECK_SIZEOF(unsigned char)
234 AC_CHECK_SIZEOF(short)
235 AC_CHECK_SIZEOF(unsigned short)
237 AC_CHECK_SIZEOF(unsigned int)
238 AC_CHECK_SIZEOF(long)
239 AC_CHECK_SIZEOF(unsigned long)
240 AC_CHECK_SIZEOF(size_t)
241 AC_CHECK_SIZEOF(long long)
242 AC_CHECK_SIZEOF(unsigned long long)
243 AC_CHECK_SIZEOF(void *)
244 AC_CHECK_SIZEOF(intptr_t)
245 AC_CHECK_SIZEOF(uintptr_t)
246 AC_CHECK_SIZEOF(ptrdiff_t)
248 if test "$ac_cv_sizeof_long" -ne "$ac_cv_sizeof_void_p"; then
249 AC_MSG_ERROR(sizes of long and void* are not identical)
252 if test "$ac_cv_sizeof_ptrdiff_t" -eq 0; then
253 SCM_I_GSC_T_PTRDIFF='"ptrdiff_t"'
255 SCM_I_GSC_T_PTRDIFF='"long"'
257 AC_SUBST([SCM_I_GSC_T_PTRDIFF])
259 AC_CHECK_HEADERS([stdint.h])
260 AC_CHECK_HEADERS([inttypes.h])
262 SCM_I_GSC_NEEDS_STDINT_H=0
263 SCM_I_GSC_NEEDS_INTTYPES_H=0
265 ### intptr and uintptr (try not to use inttypes if we don't have to)
266 if test "$ac_cv_header_inttypes_h" = yes; then
267 if test "$ac_cv_sizeof_intptr_t" -eq 0; then
268 AC_CHECK_SIZEOF([intptr_t],,[#include <inttypes.h>
270 if test "$ac_cv_sizeof_intptr_t" -ne 0; then
271 SCM_I_GSC_NEEDS_INTTYPES_H=1
274 if test "$ac_cv_sizeof_uintptr_t" -eq 0; then
275 AC_CHECK_SIZEOF([uintptr_t],,[#include <inttypes.h>
277 if test "$ac_cv_sizeof_uintptr_t" -ne 0; then
278 SCM_I_GSC_NEEDS_INTTYPES_H=1
283 ### See what's provided by stdint.h
284 if test "$ac_cv_header_stdint_h" = yes; then
285 AC_CHECK_TYPE([int8_t],[scm_stdint_has_int8=1],,[#include <stdint.h>])
286 AC_CHECK_TYPE([uint8_t],[scm_stdint_has_uint8=1],,[#include <stdint.h>])
287 AC_CHECK_TYPE([int16_t],[scm_stdint_has_int16=1],,[#include <stdint.h>])
288 AC_CHECK_TYPE([uint16_t],[scm_stdint_has_uint16=1],,[#include <stdint.h>])
289 AC_CHECK_TYPE([int32_t],[scm_stdint_has_int32=1],,[#include <stdint.h>])
290 AC_CHECK_TYPE([uint32_t],[scm_stdint_has_uint32=1],,[#include <stdint.h>])
291 AC_CHECK_TYPE([int64_t],[scm_stdint_has_int64=1],,[#include <stdint.h>])
292 AC_CHECK_TYPE([uint64_t],[scm_stdint_has_uint64=1],,[#include <stdint.h>])
295 # so we don't get confused by the cache (wish there was a better way
296 # to check particular headers for the same type...)
298 unset ac_cv_type_int8_t
299 unset ac_cv_type_uint8_t
300 unset ac_cv_type_int16_t
301 unset ac_cv_type_uint16_t
302 unset ac_cv_type_int32_t
303 unset ac_cv_type_uint32_t
304 unset ac_cv_type_int64_t
305 unset ac_cv_type_uint64_t
307 ### See what's provided by inttypes.h
308 if test "$ac_cv_header_inttypes_h" = yes; then
309 AC_CHECK_TYPE([int8_t],[scm_inttypes_has_int8=1],,[#include <inttypes.h>])
310 AC_CHECK_TYPE([uint8_t],[scm_inttypes_has_uint8=1],,[#include <inttypes.h>])
311 AC_CHECK_TYPE([int16_t],[scm_inttypes_has_int16=1],,[#include <inttypes.h>])
312 AC_CHECK_TYPE([uint16_t],[scm_inttypes_has_uint16=1],,[#include <inttypes.h>])
313 AC_CHECK_TYPE([int32_t],[scm_inttypes_has_int32=1],,[#include <inttypes.h>])
314 AC_CHECK_TYPE([uint32_t],[scm_inttypes_has_uint32=1],,[#include <inttypes.h>])
315 AC_CHECK_TYPE([int64_t],[scm_inttypes_has_int64=1],,[#include <inttypes.h>])
316 AC_CHECK_TYPE([uint64_t],[scm_inttypes_has_uint64=1],,[#include <inttypes.h>])
319 # Try hard to find definitions for some required scm_t_*int* types.
321 ### Required type scm_t_int8
322 if test "$ac_cv_sizeof_char" -eq 1; then
323 SCM_I_GSC_T_INT8='"char"'
324 elif test "$scm_stdint_has_int8"; then
325 SCM_I_GSC_T_INT8='"int8_t"'
326 SCM_I_GSC_NEEDS_STDINT_H=1
327 elif test "$scm_inttypes_has_int8"; then
328 SCM_I_GSC_T_INT8='"int8_t"'
329 SCM_I_GSC_NEEDS_INTTYPES_H=1
331 AC_MSG_ERROR([Can't find appropriate type for scm_t_int8.])
333 AC_SUBST([SCM_I_GSC_T_INT8])
335 ### Required type scm_t_uint8
336 if test "$ac_cv_sizeof_unsigned_char" -eq 1; then
337 SCM_I_GSC_T_UINT8='"unsigned char"'
338 elif test "$scm_stdint_has_uint8"; then
339 SCM_I_GSC_T_UINT8='"uint8_t"'
340 SCM_I_GSC_NEEDS_STDINT_H=1
341 elif test "$scm_inttypes_has_uint8"; then
342 SCM_I_GSC_T_UINT8='"uint8_t"'
343 SCM_I_GSC_NEEDS_INTTYPES_H=1
345 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint8.])
347 AC_SUBST([SCM_I_GSC_T_UINT8])
350 ### Required type scm_t_int16 (ANSI C says int or short might work)
351 if test "$ac_cv_sizeof_int" -eq 2; then
352 SCM_I_GSC_T_INT16='"int"'
353 elif test "$ac_cv_sizeof_short" -eq 2; then
354 SCM_I_GSC_T_INT16='"short"'
355 elif test "$scm_stdint_has_int16"; then
356 SCM_I_GSC_T_INT16='"int16_t"'
357 SCM_I_GSC_NEEDS_STDINT_H=1
358 elif test "$scm_inttypes_has_int16"; then
359 SCM_I_GSC_T_INT16='"int16_t"'
360 SCM_I_GSC_NEEDS_INTTYPES_H=1
362 AC_MSG_ERROR([Can't find appropriate type for scm_t_int16.])
364 AC_SUBST([SCM_I_GSC_T_INT16])
366 ### Required type scm_t_uint16 (ANSI C says int or short might work)
367 if test "$ac_cv_sizeof_unsigned_int" -eq 2; then
368 SCM_I_GSC_T_UINT16='"unsigned int"'
369 elif test "$ac_cv_sizeof_unsigned_short" -eq 2; then
370 SCM_I_GSC_T_UINT16='"unsigned short"'
371 elif test "$scm_stdint_has_uint16"; then
372 SCM_I_GSC_T_UINT16='"uint16_t"'
373 SCM_I_GSC_NEEDS_STDINT_H=1
374 elif test "$scm_inttypes_has_uint16"; then
375 SCM_I_GSC_T_UINT16='"uint16_t"'
376 SCM_I_GSC_NEEDS_INTTYPES_H=1
378 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint16.])
380 AC_SUBST([SCM_I_GSC_T_UINT16])
383 ### Required type scm_t_int32 (ANSI C says int, short, or long might work)
384 if test "$ac_cv_sizeof_int" -eq 4; then
385 SCM_I_GSC_T_INT32='"int"'
386 elif test "$ac_cv_sizeof_long" -eq 4; then
387 SCM_I_GSC_T_INT32='"long"'
388 elif test "$ac_cv_sizeof_short" -eq 4; then
389 SCM_I_GSC_T_INT32='"short"'
390 elif test "$scm_stdint_has_int32"; then
391 SCM_I_GSC_T_INT32='"int32_t"'
392 SCM_I_GSC_NEEDS_STDINT_H=1
393 elif test "$scm_inttypes_has_int32"; then
394 SCM_I_GSC_T_INT32='"int32_t"'
395 SCM_I_GSC_NEEDS_INTTYPES_H=1
397 AC_MSG_ERROR([Can't find appropriate type for scm_t_int32.])
399 AC_SUBST([SCM_I_GSC_T_INT32])
401 ### Required type scm_t_uint32 (ANSI C says int, short, or long might work)
402 if test "$ac_cv_sizeof_unsigned_int" -eq 4; then
403 SCM_I_GSC_T_UINT32='"unsigned int"'
404 elif test "$ac_cv_sizeof_unsigned_long" -eq 4; then
405 SCM_I_GSC_T_UINT32='"unsigned long"'
406 elif test "$ac_cv_sizeof_unsigned_short" -eq 4; then
407 SCM_I_GSC_T_UINT32='"unsigned short"'
408 elif test "$scm_stdint_has_uint32"; then
409 SCM_I_GSC_T_UINT32='"uint32_t"'
410 SCM_I_GSC_NEEDS_STDINT_H=1
411 elif test "$scm_inttypes_has_uint32"; then
412 SCM_I_GSC_T_UINT32='"uint32_t"'
413 SCM_I_GSC_NEEDS_INTTYPES_H=1
415 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint32.])
417 AC_SUBST([SCM_I_GSC_T_UINT32])
420 ### Required type scm_t_int64 (ANSI C says int, short, or long might work)
421 ### Also try long long if we have it.
423 if test "$ac_cv_sizeof_int" -eq 8; then
424 SCM_I_GSC_T_INT64='"int"'
425 elif test "$ac_cv_sizeof_long" -eq 8; then
426 SCM_I_GSC_T_INT64='"long"'
427 elif test "$ac_cv_sizeof_short" -eq 8; then
428 SCM_I_GSC_T_INT64='"short"'
429 elif test "$ac_cv_sizeof_long_long" -eq 8; then
430 SCM_I_GSC_T_INT64='"long long"'
431 elif test "$scm_stdint_has_int64"; then
432 SCM_I_GSC_T_INT64='"int64_t"'
433 SCM_I_GSC_NEEDS_STDINT_H=1
434 elif test "$scm_inttypes_has_int64"; then
435 SCM_I_GSC_T_INT64='"int64_t"'
436 SCM_I_GSC_NEEDS_INTTYPES_H=1
438 AC_MSG_ERROR([Can't find appropriate type for scm_t_int64.])
440 AC_SUBST([SCM_I_GSC_T_INT64])
442 ### Required type scm_t_uint64 (ANSI C says int, short, or long might work)
443 ### Also try long long if we have it.
445 if test "$ac_cv_sizeof_unsigned_int" -eq 8; then
446 SCM_I_GSC_T_UINT64='"unsigned int"'
447 elif test "$ac_cv_sizeof_unsigned_long" -eq 8; then
448 SCM_I_GSC_T_UINT64='"unsigned long"'
449 elif test "$ac_cv_sizeof_unsigned_short" -eq 8; then
450 SCM_I_GSC_T_UINT64='"unsigned short"'
451 elif test "$ac_cv_sizeof_unsigned_long_long" -eq 8; then
452 SCM_I_GSC_T_UINT64='"unsigned long long"'
453 elif test "$scm_stdint_has_uint64"; then
454 SCM_I_GSC_T_UINT64='"uint64_t"'
455 SCM_I_GSC_NEEDS_STDINT_H=1
456 elif test "$scm_inttypes_has_uint64"; then
457 SCM_I_GSC_T_UINT64='"uint64_t"'
458 SCM_I_GSC_NEEDS_INTTYPES_H=1
460 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint64.])
462 AC_SUBST([SCM_I_GSC_T_UINT64])
465 AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H])
466 AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H])
473 AC_CHECK_HEADERS([io.h libc.h limits.h malloc.h memory.h string.h \
474 regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
475 sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
476 sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
479 GUILE_HEADER_LIBC_WITH_UNISTD
485 AC_CHECK_LIB(m, main)
486 AC_CHECK_FUNCS(gethostbyname)
487 if test $ac_cv_func_gethostbyname = no; then
488 AC_CHECK_LIB(nsl, gethostbyname)
491 AC_CHECK_FUNCS(connect)
492 if test $ac_cv_func_connect = no; then
493 AC_CHECK_LIB(socket, connect)
497 dnl Check for Winsock and other functionality on Win32 (*not* CygWin)
500 if test "$MINGW32" = "yes" ; then
501 AC_CHECK_HEADER(winsock2.h, [AC_DEFINE([HAVE_WINSOCK2_H], 1,
502 [Define if you have the <winsock2.h> header file.])])
503 AC_CHECK_LIB(ws2_32, main)
504 AC_LIBOBJ([win32-uname])
505 AC_LIBOBJ([win32-dirent])
506 if test "$enable_networking" = yes ; then
507 AC_LIBOBJ([win32-socket])
509 if test "$enable_shared" = yes ; then
510 EXTRA_DEFS="-DSCM_IMPORT"
511 AC_DEFINE(USE_DLL_IMPORT, 1,
512 [Define if you need additional CPP macros on Win32 platforms.])
514 if test x"$enable_ltdl_install" = x"yes" ; then
515 INCLTDL="-DLIBLTDL_DLL_IMPORT $INCLTDL"
520 # FIXME: check to see if we still need these.
526 AC_CHECK_HEADERS([assert.h])
528 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])
530 AC_CHECK_HEADERS(crypt.h sys/resource.h sys/file.h)
531 AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname)
532 AC_CHECK_LIB(crypt, crypt)
534 ### Some systems don't declare some functions. On such systems, we
535 ### need to at least provide our own K&R-style declarations.
537 ### GUILE_FUNC_DECLARED(function, headerfile)
539 ### Check for a declaration of FUNCTION in HEADERFILE; if it is
540 ### not there, #define MISSING_FUNCTION_DECL.
541 AC_DEFUN(GUILE_FUNC_DECLARED, [
542 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
543 AC_EGREP_HEADER($1, $2,
544 guile_cv_func_$1_declared=yes,
545 guile_cv_func_$1_declared=no))
546 if test [x$guile_cv_func_]$1[_declared] = xno; then
547 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL], 1,
548 [Define if the operating system supplies $1 without declaring it.])
552 GUILE_FUNC_DECLARED(strptime, time.h)
553 GUILE_FUNC_DECLARED(sleep, unistd.h)
554 GUILE_FUNC_DECLARED(usleep, unistd.h)
556 ### On some systems usleep has no return value. If it does have one,
557 ### we'd like to return it; otherwise, we'll fake it.
558 AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
559 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
561 [guile_cv_func_usleep_return_type=void],
562 [guile_cv_func_usleep_return_type=int])])
563 case "$guile_cv_func_usleep_return_type" in
565 AC_DEFINE(USLEEP_RETURNS_VOID, 1,
566 [Define if the system headers declare usleep to return void.])
570 AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
571 if test -n "$have_sys_un_h" ; then
572 AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS, 1,
573 [Define if the system supports Unix-domain (file-domain) sockets.])
576 AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
578 AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
579 setnetent getnetent endnetent dnl
580 setprotoent getprotoent endprotoent dnl
581 setservent getservent endservent dnl
582 getnetbyaddr getnetbyname dnl
583 inet_lnaof inet_makeaddr inet_netof hstrerror dnl
586 AC_MSG_CHECKING(for __libc_stack_end)
587 AC_TRY_LINK([extern char *__libc_stack_end;],
588 [char *p = __libc_stack_end;],
589 have_libc_stack_end=yes,
590 have_libc_stack_end=no)
591 AC_MSG_RESULT($have_libc_stack_end)
593 if test $have_libc_stack_end = yes; then
594 AC_DEFINE(HAVE_LIBC_STACK_END, 1,
595 [Define if you have the __libc_stack_end variable.])
598 dnl Some systems do not declare this. Some systems do declare it, as a
599 dnl macro. With cygwin it may be in a DLL.
601 AC_MSG_CHECKING(whether netdb.h declares h_errno)
602 AC_CACHE_VAL(guile_cv_have_h_errno,
603 [AC_TRY_COMPILE([#include <netdb.h>],
605 guile_cv_have_h_errno=yes, guile_cv_have_h_errno=no)])
606 AC_MSG_RESULT($guile_cv_have_h_errno)
607 if test $guile_cv_have_h_errno = yes; then
608 AC_DEFINE(HAVE_H_ERRNO, 1, [Define if h_errno is declared in netdb.h.])
611 AC_MSG_CHECKING(whether uint32_t is defined)
612 AC_CACHE_VAL(guile_cv_have_uint32_t,
613 [AC_TRY_COMPILE([#include <sys/types.h>
621 guile_cv_have_uint32_t=yes, guile_cv_have_uint32_t=no)])
622 AC_MSG_RESULT($guile_cv_have_uint32_t)
623 if test $guile_cv_have_uint32_t = yes; then
624 AC_DEFINE(HAVE_UINT32_T, 1,
625 [Define if uint32_t typedef is defined when netdb.h is include.])
628 AC_MSG_CHECKING(for working IPv6 support)
629 AC_CACHE_VAL(guile_cv_have_ipv6,
631 #ifdef HAVE_SYS_TYPES_H
632 #include <sys/types.h>
634 #include <netinet/in.h>
635 #include <sys/socket.h>],
636 [struct sockaddr_in6 a; a.sin6_family = AF_INET6;],
637 guile_cv_have_ipv6=yes, guile_cv_have_ipv6=no)])
638 AC_MSG_RESULT($guile_cv_have_ipv6)
639 if test $guile_cv_have_ipv6 = yes; then
640 AC_DEFINE(HAVE_IPV6, 1, [Define if you want support for IPv6.])
643 # included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.
644 AC_MSG_CHECKING(whether sockaddr_in6 has sin6_scope_id)
645 AC_CACHE_VAL(guile_cv_have_sin6_scope_id,
647 #ifdef HAVE_SYS_TYPES_H
648 #include <sys/types.h>
650 #include <netinet/in.h>],
651 [struct sockaddr_in6 sok; sok.sin6_scope_id = 0;],
652 guile_cv_have_sin6_scope_id=yes, guile_cv_have_sin6_scope_id=no)])
653 AC_MSG_RESULT($guile_cv_have_sin6_scope_id)
654 if test $guile_cv_have_sin6_scope_id = yes; then
655 AC_DEFINE(HAVE_SIN6_SCOPE_ID, 1,
656 [Define this if your IPv6 has sin6_scope_id in sockaddr_in6 struct.])
659 AC_MSG_CHECKING(whether localtime caches TZ)
660 AC_CACHE_VAL(guile_cv_localtime_cache,
661 [if test x$ac_cv_func_tzset = xyes; then
662 AC_TRY_RUN([#include <time.h>
666 extern char **environ;
670 for (to = from = environ; (*to = *from); from++)
671 if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
674 char TZ_GMT0[] = "TZ=GMT0";
675 char TZ_PST8[] = "TZ=PST8";
678 time_t now = time ((time_t *) 0);
679 int hour_GMT0, hour_unset;
680 if (putenv (TZ_GMT0) != 0)
682 hour_GMT0 = localtime (&now)->tm_hour;
684 hour_unset = localtime (&now)->tm_hour;
685 if (putenv (TZ_PST8) != 0)
687 if (localtime (&now)->tm_hour == hour_GMT0)
690 if (localtime (&now)->tm_hour != hour_unset)
693 }], guile_cv_localtime_cache=no, guile_cv_localtime_cache=yes,
694 [# If we have tzset, assume the worst when cross-compiling.
695 guile_cv_localtime_cache=yes])
697 # If we lack tzset, report that localtime does not cache TZ,
698 # since we can't invalidate the cache if we don't have tzset.
699 guile_cv_localtime_cache=no
701 AC_MSG_RESULT($guile_cv_localtime_cache)
702 if test $guile_cv_localtime_cache = yes; then
703 AC_DEFINE(LOCALTIME_CACHE, 1, [Define if localtime caches the TZ setting.])
706 dnl Test whether system calls are restartable by default on the
707 dnl current system. If they are not, we put a loop around every system
708 dnl call to check for EINTR (see SCM_SYSCALL) and do not attempt to
709 dnl change from the default behaviour. On the other hand, if signals
710 dnl are restartable then the loop is not installed and when libguile
711 dnl initialises it also resets the behaviour of each signal to cause a
712 dnl restart (in case a different runtime had a different default
713 dnl behaviour for some reason: e.g., different versions of linux seem
714 dnl to behave differently.)
716 AC_SYS_RESTARTABLE_SYSCALLS
718 if test "$enable_regex" = yes; then
719 if test "$ac_cv_header_regex_h" = yes ||
720 test "$ac_cv_header_rxposix_h" = yes ||
721 test "$ac_cv_header_rx_rxposix_h" = yes; then
722 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [AC_LIBOBJ([regex-posix])],
723 [AC_CHECK_LIB(rx, main)
724 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [AC_LIBOBJ([regex-posix])],
725 [AC_CHECK_LIB(regex, main)
726 GUILE_NAMED_CHECK_FUNC(regcomp, regex, [AC_LIBOBJ([regex-posix])])])]
728 dnl The following should not be necessary, but for some reason
729 dnl autoheader misses it if we don't include it!
730 if test "$ac_cv_func_regcomp_norx" = yes ||
731 test "$ac_cv_func_regcomp_regex" = yes ||
732 test "$ac_cv_func_regcomp_rx" = yes; then
733 AC_DEFINE(HAVE_REGCOMP, 1,
734 [This is included as part of a workaround for a autoheader bug.])
739 AC_REPLACE_FUNCS(inet_aton putenv strerror memmove mkstemp)
741 AC_CHECK_HEADERS(floatingpoint.h ieeefp.h nan.h)
743 AC_CHECK_FUNCS(finite isinf isnan copysign)
745 # When testing for the presence of alloca, we need to add alloca.o
746 # explicitly to LIBOBJS to make sure that it is translated to
747 # `alloca.lo' for libtool later on. This can and should be done more cleanly.
749 if test "$ALLOCA" = "alloca.o"; then AC_LIBOBJ([alloca]); fi
751 AC_CHECK_MEMBERS([struct stat.st_rdev])
752 AC_CHECK_MEMBERS([struct stat.st_blksize])
756 AC_CACHE_CHECK([for S_ISLNK in sys/stat.h], ac_cv_macro_S_ISLNK,
757 [AC_TRY_CPP([#include <sys/stat.h>
761 ac_cv_macro_S_ISLNK=yes,
762 ac_cv_macro_S_ISLNK=no)])
763 if test $ac_cv_macro_S_ISLNK = yes; then
764 AC_DEFINE(HAVE_S_ISLNK, 1,
765 [Define this if your system defines S_ISLNK in sys/stat.h.])
771 #--------------------------------------------------------------------
773 # Which way does the stack grow?
775 #--------------------------------------------------------------------
777 SCM_I_GSC_STACK_GROWS_UP=0
778 AC_TRY_RUN(aux (l) unsigned long l;
779 { int x; exit (l >= ((unsigned long)&x)); }
780 main () { int q; aux((unsigned long)&q); },
781 SCM_I_GSC_STACK_GROWS_UP=1
783 [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)])
785 AH_TEMPLATE([SCM_SINGLES],
786 [Define this if floats are the same size as longs.])
788 AC_CACHE_CHECK([whether floats fit in longs], guile_cv_type_float_fits_long,
789 [AC_TRY_RUN([main () { exit (sizeof(float) > sizeof(long)); }],
790 [guile_cv_type_float_fits_long=yes],
791 [guile_cv_type_float_fits_long=no],
792 [guile_cv_type_float_fits_long=guess-yes])])
793 case $guile_cv_type_float_fits_long in
795 AC_DEFINE(SCM_SINGLES)
798 AC_DEFINE(SCM_SINGLES)
799 AC_MSG_WARN([guessing that sizeof(long) == sizeof(float)])
800 AC_MSG_WARN([see SCM_SINGLES in scmconfig.h.in])
805 AC_MSG_CHECKING(for struct linger)
806 AC_CACHE_VAL(scm_cv_struct_linger,
808 #include <sys/types.h>
809 #include <sys/socket.h>],
810 [struct linger lgr; lgr.l_linger = 100],
811 scm_cv_struct_linger="yes",
812 scm_cv_struct_linger="no"))
813 AC_MSG_RESULT($scm_cv_struct_linger)
814 if test $scm_cv_struct_linger = yes; then
815 AC_DEFINE(HAVE_STRUCT_LINGER, 1,
816 [Define this if your system defines struct linger, for use with the
817 getsockopt and setsockopt system calls.])
821 AC_MSG_CHECKING(for struct timespec)
822 AC_CACHE_VAL(scm_cv_struct_timespec,
825 [struct timespec t; t.tv_nsec = 100],
826 scm_cv_struct_timespec="yes",
827 scm_cv_struct_timespec="no"))
828 AC_MSG_RESULT($scm_cv_struct_timespec)
829 if test $scm_cv_struct_timespec = yes; then
830 AC_DEFINE(HAVE_STRUCT_TIMESPEC, 1,
831 [Define this if your system defines struct timespec via <time.h>.])
834 #--------------------------------------------------------------------
836 # Flags for thread support
838 #--------------------------------------------------------------------
840 SCM_I_GSC_USE_PTHREAD_THREADS=0
841 SCM_I_GSC_USE_NULL_THREADS=0
842 SCM_I_GSC_USE_COOP_THREADS=0
843 AC_SUBST([SCM_I_GSC_USE_PTHREAD_THREADS])
844 AC_SUBST([SCM_I_GSC_USE_NULL_THREADS])
845 AC_SUBST([SCM_I_GSC_USE_COOP_THREADS])
847 ### What thread package has the user asked for?
848 AC_ARG_WITH(threads, [ --with-threads thread interface],
851 case "$with_threads" in
852 "yes" | "pthread" | "pthreads" | "pthread-threads" | "")
853 AC_CHECK_LIB(pthread, main,
854 LIBS="-lpthread $LIBS"
855 SCM_I_GSC_USE_PTHREAD_THREADS=1
856 with_threads="pthreads",
859 if test $GCC = yes; then
860 AC_DEFINE(_THREAD_SAFE, 1,
861 [Use thread safe versions of GNU Libc functions.])
864 AC_MSG_CHECKING(if pthread_mutexattr_settype is declared)
865 AC_CACHE_VAL(guile_cv_mutexattr_settype_declared,
866 [AC_TRY_COMPILE([#include <pthread.h>],
867 [int pthread_mutexattr_settype (int, int);],
868 guile_cv_mutexattr_settype_declared=no,
869 guile_cv_mutexattr_settype_declared=yes)])
870 AC_MSG_RESULT($guile_cv_mutexattr_settype_declared)
871 if test $guile_cv_mutexattr_settype_declared = yes; then
872 AC_DEFINE(SCM_MUTEXATTR_SETTYPE_DECLARED, 1,
873 [Define if pthread.h declares pthread_mutexattr_settype.])
876 AC_MSG_CHECKING(how to get a fast mutex)
877 AC_CACHE_VAL(guile_cv_have_mutex_fast,
878 [AC_TRY_COMPILE([#include <pthread.h>],
879 [int a = PTHREAD_MUTEX_ADAPTIVE_NP;],
880 guile_cv_have_mutex_fast=PTHREAD_MUTEX_ADAPTIVE_NP,
881 guile_cv_have_mutex_fast=none)])
882 AC_MSG_RESULT($guile_cv_have_mutex_fast)
883 if test ! $guile_cv_have_mutex_fast = none; then
884 AC_DEFINE_UNQUOTED(SCM_MUTEX_FAST, $guile_cv_have_mutex_fast,
885 [The mutex kind enum for fast mutexes.])
888 AC_MSG_CHECKING(how to get a recursive mutex)
889 AC_CACHE_VAL(guile_cv_have_mutex_recursive,
890 [AC_TRY_COMPILE([#include <pthread.h>],
891 [int a = PTHREAD_MUTEX_RECURSIVE_NP;],
892 guile_cv_have_mutex_recursive=PTHREAD_MUTEX_RECURSIVE_NP)
893 if test -z "$guile_cv_have_mutex_recursive"; then
894 AC_TRY_COMPILE([#include <pthread.h>],
895 [int a = PTHREAD_MUTEX_RECURSIVE;],
896 guile_cv_have_mutex_recursive=PTHREAD_MUTEX_RECURSIVE,
897 guile_cv_have_mutex_recursive=none)
899 AC_MSG_RESULT($guile_cv_have_mutex_recursive)
900 if test ! $guile_cv_have_mutex_recursive = none; then
901 AC_DEFINE_UNQUOTED(SCM_MUTEX_RECURSIVE, $guile_cv_have_mutex_recursive,
902 [The mutex kind enum for recursive mutexes.])
907 case "$with_threads" in
911 SCM_I_GSC_USE_NULL_THREADS=1
912 with_threads="null-threads"
915 AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
919 AC_MSG_CHECKING(what kind of threads to support)
920 AC_MSG_RESULT($with_threads)
923 if test "$cross_compiling" = "yes"; then
924 AC_MSG_CHECKING(cc for build)
925 ## /usr/bin/cc still uses wrong assembler
926 ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bincc}"
927 CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}"
929 CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
931 AC_ARG_WITH(cc-for-build,
932 [ --with-cc-for-build=CC native C compiler, to be used during build])
933 test -n "$with_cc_for_build" && CC_FOR_BUILD="$with_cc_for_build"
935 ## AC_MSG_CHECKING("if we are cross compiling")
936 ## AC_MSG_RESULT($cross_compiling)
937 if test "$cross_compiling" = "yes"; then
938 AC_MSG_RESULT($CC_FOR_BUILD)
941 ## No need as yet to be more elaborate
942 CCLD_FOR_BUILD="$CC_FOR_BUILD"
944 AC_SUBST(cross_compiling)
945 AC_SUBST(CC_FOR_BUILD)
946 AC_SUBST(CCLD_FOR_BUILD)
948 ## libtool erroneously calls CC_FOR_BUILD HOST_CC;
949 ## --HOST is the platform that PACKAGE is compiled for.
950 HOST_CC="$CC_FOR_BUILD"
953 if test "$cross_compiling" = "yes"; then
954 AC_MSG_CHECKING(guile for build)
955 GUILE_FOR_BUILD="${GUILE_FOR_BUILD-guile}"
957 GUILE_FOR_BUILD='$(preinstguile)'
959 AC_ARG_WITH(guile-for-build,
960 [ --with-guile-for-build=guile native guile executable, to be used during build])
961 test -n "$with_guile_for_build" && GUILE_FOR_BUILD="$with_guile_for_build"
963 ## AC_MSG_CHECKING("if we are cross compiling")
964 ## AC_MSG_RESULT($cross_compiling)
965 if test "$cross_compiling" = "yes"; then
966 AC_MSG_RESULT($GUILE_FOR_BUILD)
968 AC_SUBST(GUILE_FOR_BUILD)
970 # Do this here so we don't screw up any of the tests above that might
971 # not be "warning free"
973 if test "${GUILE_ERROR_ON_WARNING}" = yes
975 CFLAGS="${CFLAGS} -Werror"
976 enable_compile_warnings=no
979 ## If we're using GCC, ask for aggressive warnings.
982 ## We had -Wstrict-prototypes in here for a bit, but Guile does too
983 ## much stuff with generic function pointers for that to really be
984 ## less than exasperating.
985 ## -Wpointer-arith was here too, but something changed in gcc/glibc
986 ## and it became equally exasperating (gcc 2.95 and/or glibc 2.1.2).
987 CFLAGS="$CFLAGS -Wall -Wmissing-prototypes" ;;
990 ## NOTE the code below sets LIBOBJS directly and so is now forbidden
991 ## -- I'm disabling it for now in the hopes that the newer autoconf
992 ## will DTRT -- if not, we need to fix up the sed command to match the
995 ## Remove fileblocks.o from the object list. This file gets added by
996 ## the Autoconf macro AC_STRUCT_ST_BLOCKS. But there is no need.
997 #LIBOBJS="`echo ${LIBOBJS} | sed 's/fileblocks\.o//g'`"
999 ## If we're creating a shared library (using libtool!), then we'll
1000 ## need to generate a list of .lo files corresponding to the .o files
1001 ## given in LIBOBJS. We'll call it LIBLOBJS.
1002 LIBLOBJS="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`"
1004 ## We also need to create corresponding .doc and .x files
1005 EXTRA_DOT_DOC_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.doc ,g;s,\.[[^.]]*$,.doc,'`"
1006 EXTRA_DOT_X_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.x ,g;s,\.[[^.]]*$,.x,'`"
1008 AC_SUBST(GUILE_MAJOR_VERSION)
1009 AC_SUBST(GUILE_MINOR_VERSION)
1010 AC_SUBST(GUILE_MICRO_VERSION)
1011 AC_SUBST(GUILE_EFFECTIVE_VERSION)
1012 AC_SUBST(GUILE_VERSION)
1014 #######################################################################
1015 # library versioning
1017 AC_SUBST(LIBQTHREADS_INTERFACE_CURRENT)
1018 AC_SUBST(LIBQTHREADS_INTERFACE_REVISION)
1019 AC_SUBST(LIBQTHREADS_INTERFACE_AGE)
1020 AC_SUBST(LIBQTHREADS_INTERFACE)
1022 AC_SUBST(LIBGUILE_INTERFACE_CURRENT)
1023 AC_SUBST(LIBGUILE_INTERFACE_REVISION)
1024 AC_SUBST(LIBGUILE_INTERFACE_AGE)
1025 AC_SUBST(LIBGUILE_INTERFACE)
1027 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_CURRENT)
1028 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_REVISION)
1029 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_AGE)
1030 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE)
1032 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_CURRENT)
1033 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_REVISION)
1034 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_AGE)
1035 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE)
1037 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_CURRENT)
1038 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_REVISION)
1039 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_AGE)
1040 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE)
1042 #######################################################################
1044 dnl Tell guile-config what flags guile users should link against.
1045 GUILE_LIBS="$LDFLAGS $THREAD_LIBS_INSTALLED $LIBS"
1046 AC_SUBST(GUILE_LIBS)
1050 AC_SUBST(EXTRA_DOT_DOC_FILES)
1051 AC_SUBST(EXTRA_DOT_X_FILES)
1053 dnl See also top_builddir in info node: (libtool)AC_PROG_LIBTOOL
1054 top_builddir_absolute=`pwd`
1055 AC_SUBST(top_builddir_absolute)
1056 top_srcdir_absolute=`(cd $srcdir && pwd)`
1057 AC_SUBST(top_srcdir_absolute)
1059 # Additional SCM_I_GSC definitions are above.
1060 AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
1061 AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST])
1062 AC_SUBST([SCM_I_GSC_ENABLE_DEPRECATED])
1063 AC_SUBST([SCM_I_GSC_ENABLE_ELISP])
1064 AC_SUBST([SCM_I_GSC_HAVE_ARRAYS])
1065 AC_SUBST([SCM_I_GSC_STACK_GROWS_UP])
1066 AC_SUBST([SCM_I_GSC_C_INLINE])
1067 AC_CONFIG_FILES([libguile/gen-scmconfig.h])
1072 benchmark-suite/Makefile
1077 doc/tutorial/Makefile
1079 examples/box-dynamic-module/Makefile
1080 examples/box-dynamic/Makefile
1081 examples/box-module/Makefile
1082 examples/box/Makefile
1083 examples/modules/Makefile
1084 examples/safe/Makefile
1085 examples/scripts/Makefile
1086 guile-config/Makefile
1088 ice-9/debugger/Makefile
1089 ice-9/debugger/breakpoints/Makefile
1092 lang/elisp/internals/Makefile
1093 lang/elisp/primitives/Makefile
1094 libguile-ltdl/Makefile
1095 libguile-ltdl/upstream/Makefile
1101 test-suite/Makefile])
1103 AC_CONFIG_FILES([check-guile], [chmod +x check-guile])
1104 AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile])
1105 AC_CONFIG_FILES([guile-tools], [chmod +x guile-tools])
1106 AC_CONFIG_FILES([pre-inst-guile], [chmod +x pre-inst-guile])
1107 AC_CONFIG_FILES([libguile/guile-snarf],
1108 [chmod +x libguile/guile-snarf])
1109 AC_CONFIG_FILES([libguile/guile-doc-snarf],
1110 [chmod +x libguile/guile-doc-snarf])
1111 AC_CONFIG_FILES([libguile/guile-func-name-check],
1112 [chmod +x libguile/guile-func-name-check])
1113 AC_CONFIG_FILES([libguile/guile-snarf-docs],
1114 [chmod +x libguile/guile-snarf-docs])
1118 dnl Local Variables:
1119 dnl comment-start: "dnl "
1121 dnl comment-start-skip: "\\bdnl\\b\\s *"