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(void *)
246 AC_CHECK_SIZEOF(intptr_t)
247 AC_CHECK_SIZEOF(uintptr_t)
248 AC_CHECK_SIZEOF(ptrdiff_t)
250 if test "$ac_cv_sizeof_long" -ne "$ac_cv_sizeof_void_p"; then
251 AC_MSG_ERROR(sizes of long and void* are not identical)
254 if test "$ac_cv_sizeof_ptrdiff_t" -eq 0; then
255 SCM_I_GSC_T_PTRDIFF='"ptrdiff_t"'
257 SCM_I_GSC_T_PTRDIFF='"long"'
259 AC_SUBST([SCM_I_GSC_T_PTRDIFF])
261 AC_CHECK_HEADERS([stdint.h])
262 AC_CHECK_HEADERS([inttypes.h])
264 SCM_I_GSC_NEEDS_STDINT_H=0
265 SCM_I_GSC_NEEDS_INTTYPES_H=0
267 ### intptr and uintptr (try not to use inttypes if we don't have to)
268 if test "$ac_cv_header_inttypes_h" = yes; then
269 if test "$ac_cv_sizeof_intptr_t" -eq 0; then
270 AC_CHECK_SIZEOF([intptr_t],,[#include <inttypes.h>
272 if test "$ac_cv_sizeof_intptr_t" -ne 0; then
273 SCM_I_GSC_NEEDS_INTTYPES_H=1
276 if test "$ac_cv_sizeof_uintptr_t" -eq 0; then
277 AC_CHECK_SIZEOF([uintptr_t],,[#include <inttypes.h>
279 if test "$ac_cv_sizeof_uintptr_t" -ne 0; then
280 SCM_I_GSC_NEEDS_INTTYPES_H=1
285 ### See what's provided by stdint.h
286 if test "$ac_cv_header_stdint_h" = yes; then
287 AC_CHECK_TYPE([int8_t],[scm_stdint_has_int8=1],,[#include <stdint.h>])
288 AC_CHECK_TYPE([uint8_t],[scm_stdint_has_uint8=1],,[#include <stdint.h>])
289 AC_CHECK_TYPE([int16_t],[scm_stdint_has_int16=1],,[#include <stdint.h>])
290 AC_CHECK_TYPE([uint16_t],[scm_stdint_has_uint16=1],,[#include <stdint.h>])
291 AC_CHECK_TYPE([int32_t],[scm_stdint_has_int32=1],,[#include <stdint.h>])
292 AC_CHECK_TYPE([uint32_t],[scm_stdint_has_uint32=1],,[#include <stdint.h>])
293 AC_CHECK_TYPE([int64_t],[scm_stdint_has_int64=1],,[#include <stdint.h>])
294 AC_CHECK_TYPE([uint64_t],[scm_stdint_has_uint64=1],,[#include <stdint.h>])
297 # so we don't get confused by the cache (wish there was a better way
298 # to check particular headers for the same type...)
300 unset ac_cv_type_int8_t
301 unset ac_cv_type_uint8_t
302 unset ac_cv_type_int16_t
303 unset ac_cv_type_uint16_t
304 unset ac_cv_type_int32_t
305 unset ac_cv_type_uint32_t
306 unset ac_cv_type_int64_t
307 unset ac_cv_type_uint64_t
309 ### See what's provided by inttypes.h
310 if test "$ac_cv_header_inttypes_h" = yes; then
311 AC_CHECK_TYPE([int8_t],[scm_inttypes_has_int8=1],,[#include <inttypes.h>])
312 AC_CHECK_TYPE([uint8_t],[scm_inttypes_has_uint8=1],,[#include <inttypes.h>])
313 AC_CHECK_TYPE([int16_t],[scm_inttypes_has_int16=1],,[#include <inttypes.h>])
314 AC_CHECK_TYPE([uint16_t],[scm_inttypes_has_uint16=1],,[#include <inttypes.h>])
315 AC_CHECK_TYPE([int32_t],[scm_inttypes_has_int32=1],,[#include <inttypes.h>])
316 AC_CHECK_TYPE([uint32_t],[scm_inttypes_has_uint32=1],,[#include <inttypes.h>])
317 AC_CHECK_TYPE([int64_t],[scm_inttypes_has_int64=1],,[#include <inttypes.h>])
318 AC_CHECK_TYPE([uint64_t],[scm_inttypes_has_uint64=1],,[#include <inttypes.h>])
321 # Try hard to find definitions for some required scm_t_*int* types.
323 ### Required type scm_t_int8
324 if test "$ac_cv_sizeof_char" -eq 1; then
325 SCM_I_GSC_T_INT8='"char"'
326 elif test "$scm_stdint_has_int8"; then
327 SCM_I_GSC_T_INT8='"int8_t"'
328 SCM_I_GSC_NEEDS_STDINT_H=1
329 elif test "$scm_inttypes_has_int8"; then
330 SCM_I_GSC_T_INT8='"int8_t"'
331 SCM_I_GSC_NEEDS_INTTYPES_H=1
333 AC_MSG_ERROR([Can't find appropriate type for scm_t_int8.])
335 AC_SUBST([SCM_I_GSC_T_INT8])
337 ### Required type scm_t_uint8
338 if test "$ac_cv_sizeof_unsigned_char" -eq 1; then
339 SCM_I_GSC_T_UINT8='"unsigned char"'
340 elif test "$scm_stdint_has_uint8"; then
341 SCM_I_GSC_T_UINT8='"uint8_t"'
342 SCM_I_GSC_NEEDS_STDINT_H=1
343 elif test "$scm_inttypes_has_uint8"; then
344 SCM_I_GSC_T_UINT8='"uint8_t"'
345 SCM_I_GSC_NEEDS_INTTYPES_H=1
347 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint8.])
349 AC_SUBST([SCM_I_GSC_T_UINT8])
352 ### Required type scm_t_int16 (ANSI C says int or short might work)
353 if test "$ac_cv_sizeof_int" -eq 2; then
354 SCM_I_GSC_T_INT16='"int"'
355 elif test "$ac_cv_sizeof_short" -eq 2; then
356 SCM_I_GSC_T_INT16='"short"'
357 elif test "$scm_stdint_has_int16"; then
358 SCM_I_GSC_T_INT16='"int16_t"'
359 SCM_I_GSC_NEEDS_STDINT_H=1
360 elif test "$scm_inttypes_has_int16"; then
361 SCM_I_GSC_T_INT16='"int16_t"'
362 SCM_I_GSC_NEEDS_INTTYPES_H=1
364 AC_MSG_ERROR([Can't find appropriate type for scm_t_int16.])
366 AC_SUBST([SCM_I_GSC_T_INT16])
368 ### Required type scm_t_uint16 (ANSI C says int or short might work)
369 if test "$ac_cv_sizeof_unsigned_int" -eq 2; then
370 SCM_I_GSC_T_UINT16='"unsigned int"'
371 elif test "$ac_cv_sizeof_unsigned_short" -eq 2; then
372 SCM_I_GSC_T_UINT16='"unsigned short"'
373 elif test "$scm_stdint_has_uint16"; then
374 SCM_I_GSC_T_UINT16='"uint16_t"'
375 SCM_I_GSC_NEEDS_STDINT_H=1
376 elif test "$scm_inttypes_has_uint16"; then
377 SCM_I_GSC_T_UINT16='"uint16_t"'
378 SCM_I_GSC_NEEDS_INTTYPES_H=1
380 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint16.])
382 AC_SUBST([SCM_I_GSC_T_UINT16])
385 ### Required type scm_t_int32 (ANSI C says int, short, or long might work)
386 if test "$ac_cv_sizeof_int" -eq 4; then
387 SCM_I_GSC_T_INT32='"int"'
388 elif test "$ac_cv_sizeof_long" -eq 4; then
389 SCM_I_GSC_T_INT32='"long"'
390 elif test "$ac_cv_sizeof_short" -eq 4; then
391 SCM_I_GSC_T_INT32='"short"'
392 elif test "$scm_stdint_has_int32"; then
393 SCM_I_GSC_T_INT32='"int32_t"'
394 SCM_I_GSC_NEEDS_STDINT_H=1
395 elif test "$scm_inttypes_has_int32"; then
396 SCM_I_GSC_T_INT32='"int32_t"'
397 SCM_I_GSC_NEEDS_INTTYPES_H=1
399 AC_MSG_ERROR([Can't find appropriate type for scm_t_int32.])
401 AC_SUBST([SCM_I_GSC_T_INT32])
403 ### Required type scm_t_uint32 (ANSI C says int, short, or long might work)
404 if test "$ac_cv_sizeof_unsigned_int" -eq 4; then
405 SCM_I_GSC_T_UINT32='"unsigned int"'
406 elif test "$ac_cv_sizeof_unsigned_long" -eq 4; then
407 SCM_I_GSC_T_UINT32='"unsigned long"'
408 elif test "$ac_cv_sizeof_unsigned_short" -eq 4; then
409 SCM_I_GSC_T_UINT32='"unsigned short"'
410 elif test "$scm_stdint_has_uint32"; then
411 SCM_I_GSC_T_UINT32='"uint32_t"'
412 SCM_I_GSC_NEEDS_STDINT_H=1
413 elif test "$scm_inttypes_has_uint32"; then
414 SCM_I_GSC_T_UINT32='"uint32_t"'
415 SCM_I_GSC_NEEDS_INTTYPES_H=1
417 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint32.])
419 AC_SUBST([SCM_I_GSC_T_UINT32])
421 ### Optional type scm_t_int64 (ANSI C says int, short, or long might work)
422 ### Also try long long if we have it.
424 if test "$ac_cv_sizeof_int" -eq 8; then
425 SCM_I_GSC_T_INT64='"int"'
426 elif test "$ac_cv_sizeof_long" -eq 8; then
427 SCM_I_GSC_T_INT64='"long"'
428 elif test "$ac_cv_sizeof_short" -eq 8; then
429 SCM_I_GSC_T_INT64='"short"'
430 elif test "$ac_cv_sizeof_long_long" -eq 8; then
431 SCM_I_GSC_T_INT64='"long long"'
432 elif test "$scm_stdint_has_int64"; then
433 SCM_I_GSC_T_INT64='"int64_t"'
434 SCM_I_GSC_NEEDS_STDINT_H=1
435 elif test "$scm_inttypes_has_int64"; then
436 SCM_I_GSC_T_INT64='"int64_t"'
437 SCM_I_GSC_NEEDS_INTTYPES_H=1
439 AC_MSG_ERROR([Can't find appropriate type for scm_t_int64.])
441 AC_SUBST([SCM_I_GSC_T_INT64])
443 ### Optional type scm_t_uint64 (ANSI C says int, short, or long might work)
444 ### Also try long long if we have it.
446 if test "$ac_cv_sizeof_unsigned_int" -eq 8; then
447 SCM_I_GSC_T_UINT64='"unsigned int"'
448 elif test "$ac_cv_sizeof_unsigned_long" -eq 8; then
449 SCM_I_GSC_T_UINT64='"unsigned long"'
450 elif test "$ac_cv_sizeof_unsigned_short" -eq 8; then
451 SCM_I_GSC_T_UINT64='"unsigned short"'
452 elif test "$ac_cv_sizeof_unsigned_long_long" -eq 8; then
453 SCM_I_GSC_T_UINT64='"unsigned long long"'
454 elif test "$scm_stdint_has_uint64"; then
455 SCM_I_GSC_T_UINT64='"uint64_t"'
456 SCM_I_GSC_NEEDS_STDINT_H=1
457 elif test "$scm_inttypes_has_uint64"; then
458 SCM_I_GSC_T_UINT64='"uint64_t"'
459 SCM_I_GSC_NEEDS_INTTYPES_H=1
461 AC_MSG_ERROR([Can't find appropriate type for scm_t_uint64.])
463 AC_SUBST([SCM_I_GSC_T_UINT64])
466 AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H])
467 AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H])
474 AC_CHECK_HEADERS([io.h libc.h limits.h malloc.h memory.h string.h \
475 regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
476 sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
477 sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
480 GUILE_HEADER_LIBC_WITH_UNISTD
486 if test $MINGW32 = no; then
487 AC_CHECK_LIB(m, main)
489 AC_CHECK_FUNCS(gethostbyname)
490 if test $ac_cv_func_gethostbyname = no; then
491 AC_CHECK_LIB(nsl, gethostbyname)
494 AC_CHECK_FUNCS(connect)
495 if test $ac_cv_func_connect = no; then
496 AC_CHECK_LIB(socket, connect)
500 dnl Check for Winsock and other functionality on Win32 (*not* CygWin)
503 if test "$MINGW32" = "yes" ; then
504 AC_CHECK_HEADER(winsock2.h, [AC_DEFINE([HAVE_WINSOCK2_H], 1,
505 [Define if you have the <winsock2.h> header file.])])
506 AC_CHECK_LIB(ws2_32, main)
507 AC_LIBOBJ([win32-uname])
508 AC_LIBOBJ([win32-dirent])
509 if test "$enable_networking" = yes ; then
510 AC_LIBOBJ([win32-socket])
512 if test "$enable_shared" = yes ; then
513 EXTRA_DEFS="-DSCM_IMPORT"
514 AC_DEFINE(USE_DLL_IMPORT, 1,
515 [Define if you need additional CPP macros on Win32 platforms.])
517 if test x"$enable_ltdl_install" = x"yes" ; then
518 INCLTDL="-DLIBLTDL_DLL_IMPORT $INCLTDL"
523 # FIXME: check to see if we still need these.
529 AC_CHECK_HEADERS([assert.h])
531 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])
533 AC_CHECK_HEADERS(crypt.h sys/resource.h sys/file.h)
534 AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname)
535 AC_CHECK_LIB(crypt, crypt)
538 AC_CHECK_LIB([gmp], [__gmpz_init], ,
539 [AC_MSG_ERROR([GNU MP not found, see http://swox.com/gmp])])
541 # mpz_import is a macro so we need to include <gmp.h>
542 AC_TRY_LINK([#include <gmp.h>],
543 [mpz_import (0, 0, 0, 0, 0, 0, 0);] , ,
544 [AC_MSG_ERROR([At least GNU MP 4.1 is required, see http://swox.com/gmp])])
546 ### Some systems don't declare some functions. On such systems, we
547 ### need to at least provide our own K&R-style declarations.
549 ### GUILE_FUNC_DECLARED(function, headerfile)
551 ### Check for a declaration of FUNCTION in HEADERFILE; if it is
552 ### not there, #define MISSING_FUNCTION_DECL.
553 AC_DEFUN(GUILE_FUNC_DECLARED, [
554 AC_CACHE_CHECK(for $1 declaration, guile_cv_func_$1_declared,
555 AC_EGREP_HEADER($1, $2,
556 guile_cv_func_$1_declared=yes,
557 guile_cv_func_$1_declared=no))
558 if test [x$guile_cv_func_]$1[_declared] = xno; then
559 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL], 1,
560 [Define if the operating system supplies $1 without declaring it.])
564 GUILE_FUNC_DECLARED(strptime, time.h)
565 GUILE_FUNC_DECLARED(sleep, unistd.h)
566 GUILE_FUNC_DECLARED(usleep, unistd.h)
568 ### On some systems usleep has no return value. If it does have one,
569 ### we'd like to return it; otherwise, we'll fake it.
570 AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
571 [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
573 [guile_cv_func_usleep_return_type=void],
574 [guile_cv_func_usleep_return_type=int])])
575 case "$guile_cv_func_usleep_return_type" in
577 AC_DEFINE(USLEEP_RETURNS_VOID, 1,
578 [Define if the system headers declare usleep to return void.])
582 AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
583 if test -n "$have_sys_un_h" ; then
584 AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS, 1,
585 [Define if the system supports Unix-domain (file-domain) sockets.])
588 AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
590 AC_CHECK_FUNCS(sethostent gethostent endhostent dnl
591 setnetent getnetent endnetent dnl
592 setprotoent getprotoent endprotoent dnl
593 setservent getservent endservent dnl
594 getnetbyaddr getnetbyname dnl
595 inet_lnaof inet_makeaddr inet_netof hstrerror dnl
598 AC_MSG_CHECKING(for __libc_stack_end)
599 AC_CACHE_VAL(guile_cv_have_libc_stack_end,
600 [AC_TRY_LINK([extern char *__libc_stack_end;],
601 [char *p = __libc_stack_end;],
602 guile_cv_have_libc_stack_end=yes,
603 guile_cv_have_libc_stack_end=no)])
604 AC_MSG_RESULT($guile_cv_have_libc_stack_end)
606 if test $guile_cv_have_libc_stack_end = yes; then
607 AC_DEFINE(HAVE_LIBC_STACK_END, 1,
608 [Define if you have the __libc_stack_end variable.])
611 dnl Some systems do not declare this. Some systems do declare it, as a
612 dnl macro. With cygwin it may be in a DLL.
614 AC_MSG_CHECKING(whether netdb.h declares h_errno)
615 AC_CACHE_VAL(guile_cv_have_h_errno,
616 [AC_TRY_COMPILE([#include <netdb.h>],
618 guile_cv_have_h_errno=yes, guile_cv_have_h_errno=no)])
619 AC_MSG_RESULT($guile_cv_have_h_errno)
620 if test $guile_cv_have_h_errno = yes; then
621 AC_DEFINE(HAVE_H_ERRNO, 1, [Define if h_errno is declared in netdb.h.])
624 AC_MSG_CHECKING(whether uint32_t is defined)
625 AC_CACHE_VAL(guile_cv_have_uint32_t,
626 [AC_TRY_COMPILE([#include <sys/types.h>
634 guile_cv_have_uint32_t=yes, guile_cv_have_uint32_t=no)])
635 AC_MSG_RESULT($guile_cv_have_uint32_t)
636 if test $guile_cv_have_uint32_t = yes; then
637 AC_DEFINE(HAVE_UINT32_T, 1,
638 [Define if uint32_t typedef is defined when netdb.h is include.])
641 AC_MSG_CHECKING(for working IPv6 support)
642 AC_CACHE_VAL(guile_cv_have_ipv6,
644 #ifdef HAVE_SYS_TYPES_H
645 #include <sys/types.h>
647 #include <netinet/in.h>
648 #include <sys/socket.h>],
649 [struct sockaddr_in6 a; a.sin6_family = AF_INET6;],
650 guile_cv_have_ipv6=yes, guile_cv_have_ipv6=no)])
651 AC_MSG_RESULT($guile_cv_have_ipv6)
652 if test $guile_cv_have_ipv6 = yes; then
653 AC_DEFINE(HAVE_IPV6, 1, [Define if you want support for IPv6.])
656 # included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.
657 AC_MSG_CHECKING(whether sockaddr_in6 has sin6_scope_id)
658 AC_CACHE_VAL(guile_cv_have_sin6_scope_id,
660 #ifdef HAVE_SYS_TYPES_H
661 #include <sys/types.h>
663 #include <netinet/in.h>],
664 [struct sockaddr_in6 sok; sok.sin6_scope_id = 0;],
665 guile_cv_have_sin6_scope_id=yes, guile_cv_have_sin6_scope_id=no)])
666 AC_MSG_RESULT($guile_cv_have_sin6_scope_id)
667 if test $guile_cv_have_sin6_scope_id = yes; then
668 AC_DEFINE(HAVE_SIN6_SCOPE_ID, 1,
669 [Define this if your IPv6 has sin6_scope_id in sockaddr_in6 struct.])
672 AC_MSG_CHECKING(whether localtime caches TZ)
673 AC_CACHE_VAL(guile_cv_localtime_cache,
674 [if test x$ac_cv_func_tzset = xyes; then
675 AC_TRY_RUN([#include <time.h>
679 extern char **environ;
683 for (to = from = environ; (*to = *from); from++)
684 if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '='))
687 char TZ_GMT0[] = "TZ=GMT0";
688 char TZ_PST8[] = "TZ=PST8";
691 time_t now = time ((time_t *) 0);
692 int hour_GMT0, hour_unset;
693 if (putenv (TZ_GMT0) != 0)
695 hour_GMT0 = localtime (&now)->tm_hour;
697 hour_unset = localtime (&now)->tm_hour;
698 if (putenv (TZ_PST8) != 0)
700 if (localtime (&now)->tm_hour == hour_GMT0)
703 if (localtime (&now)->tm_hour != hour_unset)
706 }], guile_cv_localtime_cache=no, guile_cv_localtime_cache=yes,
707 [# If we have tzset, assume the worst when cross-compiling.
708 guile_cv_localtime_cache=yes])
710 # If we lack tzset, report that localtime does not cache TZ,
711 # since we can't invalidate the cache if we don't have tzset.
712 guile_cv_localtime_cache=no
714 AC_MSG_RESULT($guile_cv_localtime_cache)
715 if test $guile_cv_localtime_cache = yes; then
716 AC_DEFINE(LOCALTIME_CACHE, 1, [Define if localtime caches the TZ setting.])
719 dnl Test whether system calls are restartable by default on the
720 dnl current system. If they are not, we put a loop around every system
721 dnl call to check for EINTR (see SCM_SYSCALL) and do not attempt to
722 dnl change from the default behaviour. On the other hand, if signals
723 dnl are restartable then the loop is not installed and when libguile
724 dnl initialises it also resets the behaviour of each signal to cause a
725 dnl restart (in case a different runtime had a different default
726 dnl behaviour for some reason: e.g., different versions of linux seem
727 dnl to behave differently.)
729 AC_SYS_RESTARTABLE_SYSCALLS
731 if test "$enable_regex" = yes; then
732 if test "$ac_cv_header_regex_h" = yes ||
733 test "$ac_cv_header_rxposix_h" = yes ||
734 test "$ac_cv_header_rx_rxposix_h" = yes; then
735 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [AC_LIBOBJ([regex-posix])],
736 [AC_CHECK_LIB(rx, main)
737 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [AC_LIBOBJ([regex-posix])],
738 [AC_CHECK_LIB(regex, main)
739 GUILE_NAMED_CHECK_FUNC(regcomp, regex, [AC_LIBOBJ([regex-posix])])])]
741 dnl The following should not be necessary, but for some reason
742 dnl autoheader misses it if we don't include it!
743 if test "$ac_cv_func_regcomp_norx" = yes ||
744 test "$ac_cv_func_regcomp_regex" = yes ||
745 test "$ac_cv_func_regcomp_rx" = yes; then
746 AC_DEFINE(HAVE_REGCOMP, 1,
747 [This is included as part of a workaround for a autoheader bug.])
752 AC_REPLACE_FUNCS(inet_aton putenv strerror memmove mkstemp)
754 AC_CHECK_HEADERS(floatingpoint.h ieeefp.h nan.h)
756 AC_CHECK_FUNCS(finite isinf isnan copysign)
758 # When testing for the presence of alloca, we need to add alloca.o
759 # explicitly to LIBOBJS to make sure that it is translated to
760 # `alloca.lo' for libtool later on. This can and should be done more cleanly.
762 if test "$ALLOCA" = "alloca.o"; then AC_LIBOBJ([alloca]); fi
764 AC_CHECK_MEMBERS([struct stat.st_rdev])
765 AC_CHECK_MEMBERS([struct stat.st_blksize])
769 AC_CACHE_CHECK([for S_ISLNK in sys/stat.h], ac_cv_macro_S_ISLNK,
770 [AC_TRY_CPP([#include <sys/stat.h>
774 ac_cv_macro_S_ISLNK=yes,
775 ac_cv_macro_S_ISLNK=no)])
776 if test $ac_cv_macro_S_ISLNK = yes; then
777 AC_DEFINE(HAVE_S_ISLNK, 1,
778 [Define this if your system defines S_ISLNK in sys/stat.h.])
784 #--------------------------------------------------------------------
786 # Which way does the stack grow?
788 #--------------------------------------------------------------------
790 SCM_I_GSC_STACK_GROWS_UP=0
791 AC_TRY_RUN(aux (l) unsigned long l;
792 { int x; exit (l >= ((unsigned long)&x)); }
793 main () { int q; aux((unsigned long)&q); },
794 [SCM_I_GSC_STACK_GROWS_UP=1],
796 [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)])
798 AC_CHECK_SIZEOF(float)
799 if test "$ac_cv_sizeof_float" -le "$ac_cv_sizeof_long"; then
800 AC_DEFINE(SCM_SINGLES, 1,
801 [Define this if floats are the same size as longs.])
804 AC_MSG_CHECKING(for struct linger)
805 AC_CACHE_VAL(scm_cv_struct_linger,
807 #include <sys/types.h>
808 #include <sys/socket.h>],
809 [struct linger lgr; lgr.l_linger = 100],
810 scm_cv_struct_linger="yes",
811 scm_cv_struct_linger="no"))
812 AC_MSG_RESULT($scm_cv_struct_linger)
813 if test $scm_cv_struct_linger = yes; then
814 AC_DEFINE(HAVE_STRUCT_LINGER, 1,
815 [Define this if your system defines struct linger, for use with the
816 getsockopt and setsockopt system calls.])
820 AC_MSG_CHECKING(for struct timespec)
821 AC_CACHE_VAL(scm_cv_struct_timespec,
824 [struct timespec t; t.tv_nsec = 100],
825 scm_cv_struct_timespec="yes",
826 scm_cv_struct_timespec="no"))
827 AC_MSG_RESULT($scm_cv_struct_timespec)
828 if test $scm_cv_struct_timespec = yes; then
829 AC_DEFINE(HAVE_STRUCT_TIMESPEC, 1,
830 [Define this if your system defines struct timespec via <time.h>.])
833 #--------------------------------------------------------------------
835 # Flags for thread support
837 #--------------------------------------------------------------------
839 SCM_I_GSC_USE_PTHREAD_THREADS=0
840 SCM_I_GSC_USE_NULL_THREADS=0
841 SCM_I_GSC_USE_COOP_THREADS=0
842 AC_SUBST([SCM_I_GSC_USE_PTHREAD_THREADS])
843 AC_SUBST([SCM_I_GSC_USE_NULL_THREADS])
844 AC_SUBST([SCM_I_GSC_USE_COOP_THREADS])
846 ### What thread package has the user asked for?
847 AC_ARG_WITH(threads, [ --with-threads thread interface],
850 case "$with_threads" in
851 "yes" | "pthread" | "pthreads" | "pthread-threads" | "")
852 AC_CHECK_LIB(pthread, main,
853 LIBS="-lpthread $LIBS"
854 SCM_I_GSC_USE_PTHREAD_THREADS=1
855 with_threads="pthreads",
858 if test $GCC = yes; then
859 AC_DEFINE(_THREAD_SAFE, 1,
860 [Use thread safe versions of GNU Libc functions.])
863 AC_MSG_CHECKING(if pthread_mutexattr_settype is declared)
864 AC_CACHE_VAL(guile_cv_mutexattr_settype_declared,
865 [AC_TRY_COMPILE([#include <pthread.h>],
866 [int pthread_mutexattr_settype (int, int);],
867 guile_cv_mutexattr_settype_declared=no,
868 guile_cv_mutexattr_settype_declared=yes)])
869 AC_MSG_RESULT($guile_cv_mutexattr_settype_declared)
870 if test $guile_cv_mutexattr_settype_declared = yes; then
871 AC_DEFINE(SCM_MUTEXATTR_SETTYPE_DECLARED, 1,
872 [Define if pthread.h declares pthread_mutexattr_settype.])
875 AC_MSG_CHECKING(how to get a fast mutex)
876 AC_CACHE_VAL(guile_cv_have_mutex_fast,
877 [AC_TRY_COMPILE([#include <pthread.h>],
878 [int a = PTHREAD_MUTEX_ADAPTIVE_NP;],
879 guile_cv_have_mutex_fast=PTHREAD_MUTEX_ADAPTIVE_NP,
880 guile_cv_have_mutex_fast=none)])
881 AC_MSG_RESULT($guile_cv_have_mutex_fast)
882 if test ! $guile_cv_have_mutex_fast = none; then
883 AC_DEFINE_UNQUOTED(SCM_MUTEX_FAST, $guile_cv_have_mutex_fast,
884 [The mutex kind enum for fast mutexes.])
887 AC_MSG_CHECKING(how to get a recursive mutex)
888 AC_CACHE_VAL(guile_cv_have_mutex_recursive,
889 [AC_TRY_COMPILE([#include <pthread.h>],
890 [int a = PTHREAD_MUTEX_RECURSIVE_NP;],
891 guile_cv_have_mutex_recursive=PTHREAD_MUTEX_RECURSIVE_NP)
892 if test -z "$guile_cv_have_mutex_recursive"; then
893 AC_TRY_COMPILE([#include <pthread.h>],
894 [int a = PTHREAD_MUTEX_RECURSIVE;],
895 guile_cv_have_mutex_recursive=PTHREAD_MUTEX_RECURSIVE,
896 guile_cv_have_mutex_recursive=none)
898 AC_MSG_RESULT($guile_cv_have_mutex_recursive)
899 if test ! $guile_cv_have_mutex_recursive = none; then
900 AC_DEFINE_UNQUOTED(SCM_MUTEX_RECURSIVE, $guile_cv_have_mutex_recursive,
901 [The mutex kind enum for recursive mutexes.])
906 case "$with_threads" in
910 SCM_I_GSC_USE_NULL_THREADS=1
911 with_threads="null-threads"
914 AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
918 AC_MSG_CHECKING(what kind of threads to support)
919 AC_MSG_RESULT($with_threads)
922 if test "$cross_compiling" = "yes"; then
923 AC_MSG_CHECKING(cc for build)
924 ## /usr/bin/cc still uses wrong assembler
925 ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bincc}"
926 CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}"
928 CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
931 ## AC_MSG_CHECKING("if we are cross compiling")
932 ## AC_MSG_RESULT($cross_compiling)
933 if test "$cross_compiling" = "yes"; then
934 AC_MSG_RESULT($CC_FOR_BUILD)
937 ## No need as yet to be more elaborate
938 CCLD_FOR_BUILD="$CC_FOR_BUILD"
940 AC_SUBST(cross_compiling)
941 AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
942 AC_SUBST(CCLD_FOR_BUILD)
944 ## libtool erroneously calls CC_FOR_BUILD HOST_CC;
945 ## --HOST is the platform that PACKAGE is compiled for.
946 HOST_CC="$CC_FOR_BUILD"
949 if test "$cross_compiling" = "yes"; then
950 AC_MSG_CHECKING(guile for build)
951 GUILE_FOR_BUILD="${GUILE_FOR_BUILD-guile}"
953 GUILE_FOR_BUILD='$(preinstguile)'
955 AC_ARG_WITH(guile-for-build,
956 [ --with-guile-for-build=guile native guile executable, to be used during build])
957 test -n "$with_guile_for_build" && GUILE_FOR_BUILD="$with_guile_for_build"
959 ## AC_MSG_CHECKING("if we are cross compiling")
960 ## AC_MSG_RESULT($cross_compiling)
961 if test "$cross_compiling" = "yes"; then
962 AC_MSG_RESULT($GUILE_FOR_BUILD)
964 AC_SUBST(GUILE_FOR_BUILD)
966 # Do this here so we don't screw up any of the tests above that might
967 # not be "warning free"
969 if test "${GUILE_ERROR_ON_WARNING}" = yes
971 CFLAGS="${CFLAGS} -Werror"
972 enable_compile_warnings=no
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" ;;
986 ## NOTE the code below sets LIBOBJS directly and so is now forbidden
987 ## -- I'm disabling it for now in the hopes that the newer autoconf
988 ## will DTRT -- if not, we need to fix up the sed command to match the
991 ## Remove fileblocks.o from the object list. This file gets added by
992 ## the Autoconf macro AC_STRUCT_ST_BLOCKS. But there is no need.
993 #LIBOBJS="`echo ${LIBOBJS} | sed 's/fileblocks\.o//g'`"
995 ## If we're creating a shared library (using libtool!), then we'll
996 ## need to generate a list of .lo files corresponding to the .o files
997 ## given in LIBOBJS. We'll call it LIBLOBJS.
998 LIBLOBJS="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`"
1000 ## We also need to create corresponding .doc and .x files
1001 EXTRA_DOT_DOC_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.doc ,g;s,\.[[^.]]*$,.doc,'`"
1002 EXTRA_DOT_X_FILES="`echo ${LIB@&t@OBJS} | sed 's,\.[[^.]]* ,.x ,g;s,\.[[^.]]*$,.x,'`"
1004 AC_SUBST(GUILE_MAJOR_VERSION)
1005 AC_SUBST(GUILE_MINOR_VERSION)
1006 AC_SUBST(GUILE_MICRO_VERSION)
1007 AC_SUBST(GUILE_EFFECTIVE_VERSION)
1008 AC_SUBST(GUILE_VERSION)
1010 #######################################################################
1011 # library versioning
1013 AC_SUBST(LIBQTHREADS_INTERFACE_CURRENT)
1014 AC_SUBST(LIBQTHREADS_INTERFACE_REVISION)
1015 AC_SUBST(LIBQTHREADS_INTERFACE_AGE)
1016 AC_SUBST(LIBQTHREADS_INTERFACE)
1018 AC_SUBST(LIBGUILE_INTERFACE_CURRENT)
1019 AC_SUBST(LIBGUILE_INTERFACE_REVISION)
1020 AC_SUBST(LIBGUILE_INTERFACE_AGE)
1021 AC_SUBST(LIBGUILE_INTERFACE)
1023 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_CURRENT)
1024 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_REVISION)
1025 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE_AGE)
1026 AC_SUBST(LIBGUILE_SRFI_SRFI_1_INTERFACE)
1028 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_CURRENT)
1029 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_REVISION)
1030 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE_AGE)
1031 AC_SUBST(LIBGUILE_SRFI_SRFI_4_INTERFACE)
1033 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_CURRENT)
1034 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_REVISION)
1035 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE_AGE)
1036 AC_SUBST(LIBGUILE_SRFI_SRFI_13_14_INTERFACE)
1038 #######################################################################
1040 dnl Tell guile-config what flags guile users should link against.
1041 GUILE_LIBS="$LDFLAGS $THREAD_LIBS_INSTALLED $LIBS"
1042 AC_SUBST(GUILE_LIBS)
1046 AC_SUBST(EXTRA_DOT_DOC_FILES)
1047 AC_SUBST(EXTRA_DOT_X_FILES)
1049 dnl See also top_builddir in info node: (libtool)AC_PROG_LIBTOOL
1050 top_builddir_absolute=`pwd`
1051 AC_SUBST(top_builddir_absolute)
1052 top_srcdir_absolute=`(cd $srcdir && pwd)`
1053 AC_SUBST(top_srcdir_absolute)
1055 # Additional SCM_I_GSC definitions are above.
1056 AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
1057 AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST])
1058 AC_SUBST([SCM_I_GSC_ENABLE_DEPRECATED])
1059 AC_SUBST([SCM_I_GSC_ENABLE_ELISP])
1060 AC_SUBST([SCM_I_GSC_HAVE_ARRAYS])
1061 AC_SUBST([SCM_I_GSC_STACK_GROWS_UP])
1062 AC_SUBST([SCM_I_GSC_C_INLINE])
1063 AC_CONFIG_FILES([libguile/gen-scmconfig.h])
1068 benchmark-suite/Makefile
1073 doc/tutorial/Makefile
1075 examples/box-dynamic-module/Makefile
1076 examples/box-dynamic/Makefile
1077 examples/box-module/Makefile
1078 examples/box/Makefile
1079 examples/modules/Makefile
1080 examples/safe/Makefile
1081 examples/scripts/Makefile
1082 guile-config/Makefile
1084 ice-9/debugger/Makefile
1085 ice-9/debugger/breakpoints/Makefile
1088 lang/elisp/internals/Makefile
1089 lang/elisp/primitives/Makefile
1090 libguile-ltdl/Makefile
1091 libguile-ltdl/upstream/Makefile
1098 test-suite/standalone/Makefile
1101 AC_CONFIG_FILES([check-guile], [chmod +x check-guile])
1102 AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile])
1103 AC_CONFIG_FILES([guile-tools], [chmod +x guile-tools])
1104 AC_CONFIG_FILES([pre-inst-guile], [chmod +x pre-inst-guile])
1105 AC_CONFIG_FILES([pre-inst-guile-env], [chmod +x pre-inst-guile-env])
1106 AC_CONFIG_FILES([libguile/guile-snarf],
1107 [chmod +x libguile/guile-snarf])
1108 AC_CONFIG_FILES([libguile/guile-doc-snarf],
1109 [chmod +x libguile/guile-doc-snarf])
1110 AC_CONFIG_FILES([libguile/guile-func-name-check],
1111 [chmod +x libguile/guile-func-name-check])
1112 AC_CONFIG_FILES([libguile/guile-snarf-docs],
1113 [chmod +x libguile/guile-snarf-docs])
1117 dnl Local Variables:
1118 dnl comment-start: "dnl "
1120 dnl comment-start-skip: "\\bdnl\\b\\s *"