X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/7337d56d5714227865aeca2b40b6bd97cce296d2..7d1a978289c75efbb99684c4feb29dfb10cf1229:/configure.in diff --git a/configure.in b/configure.in index 4786d51a5..53049eb79 100644 --- a/configure.in +++ b/configure.in @@ -4,28 +4,28 @@ dnl define(GUILE_CONFIGURE_COPYRIGHT,[[ -Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GUILE -GUILE is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your -option) any later version. +GUILE is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the +Free Software Foundation; either version 3, or (at your option) any +later version. -GUILE is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. +GUILE is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +License for more details. -You should have received a copy of the GNU General Public License -along with GUILE; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. +You should have received a copy of the GNU Lesser General Public +License along with GUILE; see the file COPYING.LESSER. If not, write +to the Free Software Foundation, Inc., 51 Franklin Street, Fifth +Floor, Boston, MA 02110-1301, USA. ]]) -AC_PREREQ(2.53) +AC_PREREQ(2.61) dnl `patsubst' here deletes the newline which "echo" prints. We can't use dnl "echo -n" since -n is not portable (see autoconf manual "Limitations of @@ -37,17 +37,18 @@ AC_INIT(patsubst(m4_esyscmd(. ./GUILE-VERSION && echo ${PACKAGE}),[ patsubst(m4_esyscmd(. ./GUILE-VERSION && echo ${GUILE_VERSION}),[ ]), [bug-guile@gnu.org]) -AC_CONFIG_AUX_DIR([.]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR(GUILE-VERSION) -AM_INIT_AUTOMAKE([no-define]) + +AM_INIT_AUTOMAKE([gnu no-define check-news -Wall -Wno-override]) AC_COPYRIGHT(GUILE_CONFIGURE_COPYRIGHT) AC_CONFIG_SRCDIR([GUILE-VERSION]) . $srcdir/GUILE-VERSION -AM_MAINTAINER_MODE -AM_CONFIG_HEADER([config.h]) +AC_CONFIG_HEADERS([config.h]) AH_TOP(/*GUILE_CONFIGURE_COPYRIGHT*/) #-------------------------------------------------------------------- @@ -60,20 +61,24 @@ AC_CONFIG_SUBDIRS(guile-readline) #-------------------------------------------------------------------- +AC_LANG([C]) + dnl Some more checks for Win32 -AC_CYGWIN +AC_CANONICAL_HOST + AC_LIBTOOL_WIN32_DLL AC_PROG_INSTALL AC_PROG_CC +gl_EARLY AC_PROG_CPP AC_PROG_AWK -AC_AIX -AC_ISC_POSIX -AC_MINIX +dnl Gnulib. +gl_INIT + +AC_PROG_CC_C89 -AM_PROG_CC_STDC # for per-target cflags in the libguile subdir AM_PROG_CC_C_O @@ -81,8 +86,8 @@ AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL AC_CHECK_LIB([ltdl], [lt_dlinit], , [AC_MSG_ERROR([libltdl not found. See README.])]) - -AC_SUBST(DLPREOPEN) +AC_CHECK_HEADER([ltdl.h], [], + [AC_MSG_ERROR([ not found. See README.])]) AC_CHECK_PROG(have_makeinfo, makeinfo, yes, no) AM_CONDITIONAL(HAVE_MAKEINFO, test "$have_makeinfo" = yes) @@ -122,7 +127,7 @@ AC_ARG_ENABLE(debug-malloc, SCM_I_GSC_GUILE_DEBUG=0 AC_ARG_ENABLE(guile-debug, - [AC_HELP_STRING([--enable-guile-debug], + [AS_HELP_STRING([--enable-guile-debug], [include internal debugging functions])], if test "$enable_guile_debug" = y || test "$enable_guile_debug" = yes; then SCM_I_GSC_GUILE_DEBUG=1 @@ -141,7 +146,7 @@ AC_ARG_ENABLE(regex, enable_regex=yes) AC_ARG_ENABLE([discouraged], - AC_HELP_STRING([--disable-discouraged],[omit discouraged features])) + AS_HELP_STRING([--disable-discouraged],[omit discouraged features])) if test "$enable_discouraged" = no; then SCM_I_GSC_ENABLE_DISCOURAGED=0 @@ -150,10 +155,11 @@ else fi AC_ARG_ENABLE([deprecated], - AC_HELP_STRING([--disable-deprecated],[omit deprecated features])) + AS_HELP_STRING([--disable-deprecated],[omit deprecated features])) if test "$enable_deprecated" = no; then SCM_I_GSC_ENABLE_DEPRECATED=0 + warn_default=no else if test "$enable_deprecated" = yes || test "$enable_deprecated" = ""; then warn_default=summary @@ -163,14 +169,59 @@ else warn_default=$enable_deprecated fi SCM_I_GSC_ENABLE_DEPRECATED=1 - AC_DEFINE_UNQUOTED(SCM_WARN_DEPRECATED_DEFAULT, "$warn_default", - [Define this to control the default warning level for deprecated features.]) fi +AC_DEFINE_UNQUOTED(SCM_WARN_DEPRECATED_DEFAULT, "$warn_default", +[Define this to control the default warning level for deprecated features.]) AC_ARG_ENABLE(elisp, [ --disable-elisp omit Emacs Lisp support],, enable_elisp=yes) +dnl Added the following configure option in January 2008 following +dnl investigation of problems with "64" system and library calls on +dnl Darwin (MacOS X). The libguile code (_scm.h) assumes that if a +dnl system has stat64, it will have all the other 64 APIs too; but on +dnl Darwin, stat64 is there but other APIs are missing. +dnl +dnl It also appears, from the Darwin docs, that most system call APIs +dnl there (i.e. the traditional ones _without_ "64" in their names) have +dnl been 64-bit-capable for a long time now, so it isn't necessary to +dnl use "64" versions anyway. For example, Darwin's off_t is 64-bit. +dnl +dnl A similar problem has been reported for HP-UX: +dnl http://www.nabble.com/Building-guile-1.8.2-on-hpux-td13106681.html +dnl +dnl Therefore, and also because a Guile without LARGEFILE64 support is +dnl better than no Guile at all, we provide this option to suppress +dnl trying to use "64" calls. +dnl +dnl It may be that for some 64-bit function on Darwin/HP-UX we do need +dnl to use a "64" call, and hence that by using --without-64-calls we're +dnl missing out on that. If so, someone can work on that in the future. +dnl For now, --without-64-calls allows Guile to build on OSs where it +dnl wasn't building before. +AC_MSG_CHECKING([whether to use system and library "64" calls]) +AC_ARG_WITH([64-calls], + AS_HELP_STRING([--without-64-calls], + [don't attempt to use system and library calls with "64" in their names]), + [use_64_calls=$withval], + [use_64_calls=yes + case $host in + *-apple-darwin* ) + use_64_calls=no + ;; + powerpc-ibm-aix* ) + use_64_calls=no + ;; + esac]) +AC_MSG_RESULT($use_64_calls) +case "$use_64_calls" in + y* ) + AC_DEFINE(GUILE_USE_64_CALLS, 1, + [Define to 1 in order to try to use "64" versions of system and library calls.]) + ;; +esac + #-------------------------------------------------------------------- dnl Check for dynamic linking @@ -238,6 +289,8 @@ AC_CHECK_LIB(uca, __uc_get_ar_bsp) AC_C_BIGENDIAN +AC_C_LABELS_AS_VALUES + AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(unsigned char) AC_CHECK_SIZEOF(short) @@ -532,13 +585,44 @@ AC_SUBST([SCM_I_GSC_NEEDS_STDINT_H]) AC_SUBST([SCM_I_GSC_NEEDS_INTTYPES_H]) AC_HEADER_STDC -AC_HEADER_DIRENT AC_HEADER_TIME AC_HEADER_SYS_WAIT +AC_HEADER_DIRENT + +# Reason for checking: +# +# HP-UX 11.11 (at least) doesn't provide `struct dirent64', even +# with `_LARGEFILE64_SOURCE', so check whether it's available. +# +AC_CHECK_MEMBER([struct dirent64.d_name], + [SCM_I_GSC_HAVE_STRUCT_DIRENT64=1], [SCM_I_GSC_HAVE_STRUCT_DIRENT64=0], + [ #ifndef _LARGEFILE64_SOURCE + # define _LARGEFILE64_SOURCE + #endif + + /* Per Autoconf manual. */ + #include + #ifdef HAVE_DIRENT_H + # include + #else + # define dirent direct + # ifdef HAVE_SYS_NDIR_H + # include + # endif + # ifdef HAVE_SYS_DIR_H + # include + # endif + # ifdef HAVE_NDIR_H + # include + # endif + #endif ]) +AC_SUBST([SCM_I_GSC_HAVE_STRUCT_DIRENT64]) # Reasons for testing: # complex.h - new in C99 # fenv.h - available in C99, but not older systems +# machine/fpu.h - on Tru64 5.1b, the declaration of fesetround(3) is in +# this file instead of # process.h - mingw specific # langinfo.h, nl_types.h - SuS v2 # @@ -546,7 +630,7 @@ AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h malloc.h memory.h proces regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \ sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \ sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \ -strings.h direct.h langinfo.h nl_types.h]) +direct.h langinfo.h nl_types.h machine/fpu.h]) # "complex double" is new in C99, and "complex" is only a keyword if # is included @@ -621,6 +705,9 @@ AC_CHECK_HEADERS([assert.h crt_externs.h]) # DQNAN - OSF specific # (DINFINITY and DQNAN are actually global variables, not functions) # chsize - an MS-DOS-ism, found in mingw +# cexp, clog - not in various pre-c99 systems, and note that it's possible +# for gcc to provide the "complex double" type but the system to not +# have functions like cexp and clog # clog10 - not in mingw (though others like clog and csqrt are) # fesetround - available in C99, but not older systems # ftruncate - posix, but probably not older systems (current mingw @@ -630,6 +717,7 @@ AC_CHECK_HEADERS([assert.h crt_externs.h]) # pipe - not in mingw # _pipe - specific to mingw, taking 3 args # readdir_r - recent posix, not on old systems +# readdir64_r - not available on HP-UX 11.11 # stat64 - SuS largefile stuff, not on old systems # sysconf - not on old systems # truncate - not in mingw @@ -638,7 +726,7 @@ AC_CHECK_HEADERS([assert.h crt_externs.h]) # strcoll_l, newlocale - GNU extensions (glibc), also available on Darwin # nl_langinfo - X/Open, not available on Windows. # -AC_CHECK_FUNCS([DINFINITY DQNAN chsize clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strncasecmp strcoll strcoll_l newlocale nl_langinfo]) +AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readdir64_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strcoll strcoll_l newlocale nl_langinfo]) # Reasons for testing: # netdb.h - not in mingw @@ -648,10 +736,14 @@ AC_CHECK_FUNCS([DINFINITY DQNAN chsize clog10 ctermid fesetround ftime ftruncate # sethostname - the function itself check because it's not in mingw, # the DECL is checked because Solaris 10 doens't have in any header # xlocale.h - needed on Darwin for the `locale_t' API +# hstrerror - on Tru64 5.1b the symbol is available in libc but the +# declaration isn't anywhere. +# cuserid - on Tru64 5.1b the declaration is documented to be available +# only with `_XOPEN_SOURCE' or some such. # AC_CHECK_HEADERS(crypt.h netdb.h pthread.h sys/param.h sys/resource.h sys/file.h xlocale.h) AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority getpass sethostname gethostname) -AC_CHECK_DECLS([sethostname]) +AC_CHECK_DECLS([sethostname, hstrerror, cuserid]) # crypt() may or may not be available, for instance in some countries there # are restrictions on cryptography. @@ -670,16 +762,46 @@ AC_SEARCH_LIBS(crypt, crypt, [AC_DEFINE(HAVE_CRYPT,1, [Define to 1 if you have the `crypt' function.])]) +# When compiling with GCC on some OSs (Solaris, AIX), _Complex_I doesn't +# work; in the reported cases so far, 1.0fi works well instead. According +# to the C99 spec, the complex.h header must provide a working definition +# of _Complex_I, so we always try _Complex_I first. The 1.0fi fallback +# is a workaround for the failure of some systems to conform to C99. +if test "$ac_cv_type_complex_double" = yes; then + AC_MSG_CHECKING([for i]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#if HAVE_COMPLEX_H +#include +#endif +complex double z; +]], [[ +z = _Complex_I; +]])], + [AC_DEFINE(GUILE_I,_Complex_I,[The imaginary unit (positive square root of -1).]) + AC_MSG_RESULT([_Complex_I])], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#if HAVE_COMPLEX_H +#include +#endif +complex double z; +]],[[ +z = 1.0fi; +]])], + [AC_DEFINE(GUILE_I,1.0fi) + AC_MSG_RESULT([1.0fi])], + [ac_cv_type_complex_double=no + AC_MSG_RESULT([not available])])]) +fi + # glibc 2.3.6 (circa 2006) and various prior versions had a bug where # csqrt(-i) returned a negative real part, when it should be positive # for the principal root. # if test "$ac_cv_type_complex_double" = yes; then - AC_CHECK_FUNCS(cexp clog carg) AC_CACHE_CHECK([whether csqrt is usable], guile_cv_use_csqrt, - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include /* "volatile" is meant to prevent gcc from calculating the sqrt as a constant, we want to test libc. */ @@ -692,7 +814,7 @@ main (void) return 0; /* good */ else return 1; /* bad */ -}], +}]])], [guile_cv_use_csqrt=yes], [guile_cv_use_csqrt="no, glibc 2.3 bug"], [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])]) @@ -705,14 +827,23 @@ fi dnl GMP tests +AC_LIB_LINKFLAGS(gmp) AC_CHECK_LIB([gmp], [__gmpz_init], , [AC_MSG_ERROR([GNU MP not found, see README])]) # mpz_import is a macro so we need to include -AC_TRY_LINK([#include ], - [mpz_import (0, 0, 0, 0, 0, 0, 0);] , , +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[mpz_import (0, 0, 0, 0, 0, 0, 0); ]])], + [], [AC_MSG_ERROR([At least GNU MP 4.1 is required, see README])]) +dnl GNU libunistring tests. +if test "x$LTLIBUNISTRING" != "x"; then + LIBS="$LTLIBUNISTRING $LIBS" +else + AC_MSG_ERROR([GNU libunistring is required, please install it.]) +fi + dnl i18n tests #AC_CHECK_HEADERS([libintl.h]) #AC_CHECK_FUNCS(gettext) @@ -767,6 +898,8 @@ if test -n "$have_sys_un_h" ; then [Define if the system supports Unix-domain (file-domain) sockets.]) fi +AC_CHECK_FUNCS(getrlimit setrlimit) + AC_CHECK_FUNCS(socketpair getgroups setgroups setpwent pause tzset) AC_CHECK_FUNCS(sethostent gethostent endhostent dnl @@ -788,11 +921,11 @@ AC_CHECK_MEMBERS([struct sockaddr.sin_len],,, AC_MSG_CHECKING(for __libc_stack_end) AC_CACHE_VAL(guile_cv_have_libc_stack_end, -[AC_TRY_LINK([#include -extern char *__libc_stack_end;], - [printf("%p", (char*) __libc_stack_end);], - guile_cv_have_libc_stack_end=yes, - guile_cv_have_libc_stack_end=no)]) +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +extern char *__libc_stack_end;]], + [[printf("%p", (char*) __libc_stack_end);]])], + [guile_cv_have_libc_stack_end=yes], + [guile_cv_have_libc_stack_end=no])]) AC_MSG_RESULT($guile_cv_have_libc_stack_end) if test $guile_cv_have_libc_stack_end = yes; then @@ -805,9 +938,10 @@ dnl macro. With cygwin it may be in a DLL. AC_MSG_CHECKING(whether netdb.h declares h_errno) AC_CACHE_VAL(guile_cv_have_h_errno, -[AC_TRY_COMPILE([#include ], -[int a = h_errno;], -guile_cv_have_h_errno=yes, guile_cv_have_h_errno=no)]) + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int a = h_errno;]])], + [guile_cv_have_h_errno=yes], + [guile_cv_have_h_errno=no])]) AC_MSG_RESULT($guile_cv_have_h_errno) if test $guile_cv_have_h_errno = yes; then AC_DEFINE(HAVE_H_ERRNO, 1, [Define if h_errno is declared in netdb.h.]) @@ -815,15 +949,16 @@ fi AC_MSG_CHECKING(whether uint32_t is defined) AC_CACHE_VAL(guile_cv_have_uint32_t, - [AC_TRY_COMPILE([#include + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #if HAVE_STDINT_H #include #endif #ifndef HAVE_NETDB_H #include - #endif], - [uint32_t a;], - guile_cv_have_uint32_t=yes, guile_cv_have_uint32_t=no)]) + #endif]], + [[uint32_t a;]])], + [guile_cv_have_uint32_t=yes], + [guile_cv_have_uint32_t=no])]) AC_MSG_RESULT($guile_cv_have_uint32_t) if test $guile_cv_have_uint32_t = yes; then AC_DEFINE(HAVE_UINT32_T, 1, @@ -832,14 +967,15 @@ fi AC_MSG_CHECKING(for working IPv6 support) AC_CACHE_VAL(guile_cv_have_ipv6, -[AC_TRY_COMPILE([ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef HAVE_SYS_TYPES_H #include #endif #include -#include ], -[struct sockaddr_in6 a; a.sin6_family = AF_INET6;], -guile_cv_have_ipv6=yes, guile_cv_have_ipv6=no)]) +#include ]], +[[struct sockaddr_in6 a; a.sin6_family = AF_INET6;]])], +[guile_cv_have_ipv6=yes], +[guile_cv_have_ipv6=no])]) AC_MSG_RESULT($guile_cv_have_ipv6) if test $guile_cv_have_ipv6 = yes; then AC_DEFINE(HAVE_IPV6, 1, [Define if you want support for IPv6.]) @@ -848,13 +984,14 @@ fi # included in rfc2553 but not in older implementations, e.g., glibc 2.1.3. AC_MSG_CHECKING(whether sockaddr_in6 has sin6_scope_id) AC_CACHE_VAL(guile_cv_have_sin6_scope_id, -[AC_TRY_COMPILE([ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef HAVE_SYS_TYPES_H #include #endif -#include ], -[struct sockaddr_in6 sok; sok.sin6_scope_id = 0;], -guile_cv_have_sin6_scope_id=yes, guile_cv_have_sin6_scope_id=no)]) +#include ]], +[[struct sockaddr_in6 sok; sok.sin6_scope_id = 0;]])], +[guile_cv_have_sin6_scope_id=yes], +[guile_cv_have_sin6_scope_id=no])]) AC_MSG_RESULT($guile_cv_have_sin6_scope_id) if test $guile_cv_have_sin6_scope_id = yes; then AC_DEFINE(HAVE_SIN6_SCOPE_ID, 1, @@ -871,7 +1008,7 @@ AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len],,, AC_MSG_CHECKING(whether localtime caches TZ) AC_CACHE_VAL(guile_cv_localtime_cache, [if test x$ac_cv_func_tzset = xyes; then -AC_TRY_RUN([#include +AC_RUN_IFELSE([AC_LANG_SOURCE([[#include #if STDC_HEADERS # include #endif @@ -902,7 +1039,9 @@ main() if (localtime (&now)->tm_hour != hour_unset) exit (1); exit (0); -}], guile_cv_localtime_cache=no, guile_cv_localtime_cache=yes, +}]])], +[guile_cv_localtime_cache=no], +[guile_cv_localtime_cache=yes], [# If we have tzset, assume the worst when cross-compiling. guile_cv_localtime_cache=yes]) else @@ -915,18 +1054,6 @@ if test $guile_cv_localtime_cache = yes; then AC_DEFINE(LOCALTIME_CACHE, 1, [Define if localtime caches the TZ setting.]) fi -dnl Test whether system calls are restartable by default on the -dnl current system. If they are not, we put a loop around every system -dnl call to check for EINTR (see SCM_SYSCALL) and do not attempt to -dnl change from the default behaviour. On the other hand, if signals -dnl are restartable then the loop is not installed and when libguile -dnl initialises it also resets the behaviour of each signal to cause a -dnl restart (in case a different runtime had a different default -dnl behaviour for some reason: e.g., different versions of linux seem -dnl to behave differently.) - -AC_SYS_RESTARTABLE_SYSCALLS - if test "$enable_regex" = yes; then if test "$ac_cv_header_regex_h" = yes || test "$ac_cv_header_rxposix_h" = yes || @@ -987,16 +1114,6 @@ int main () { return (isnan(x) != 0); }]]), [Define to 1 if you have the `isnan' macro or function.])], [AC_MSG_RESULT([no])]) -# We must have a proper stack-using alloca in order for stack-copying -# continuations to work properly. If we don't find a native one, -# abort. - -AC_FUNC_ALLOCA -if test "$ALLOCA" = "alloca.o" -then - AC_ERROR([No native alloca found.]) -fi - # Reasons for checking: # # st_rdev @@ -1030,15 +1147,42 @@ GUILE_STRUCT_UTIMBUF # # Which way does the stack grow? # +# Following code comes from Autoconf 2.61's internal _AC_LIBOBJ_ALLOCA +# macro (/usr/share/autoconf/autoconf/functions.m4). Gnulib has +# very similar code, so in future we could look at using that. +# +# An important detail is that the code involves find_stack_direction +# calling _itself_ - which means that find_stack_direction (or at +# least the second find_stack_direction() call) cannot be inlined. +# If the code could be inlined, that might cause the test to give +# an incorrect answer. #-------------------------------------------------------------------- SCM_I_GSC_STACK_GROWS_UP=0 -AC_TRY_RUN(aux (l) unsigned long l; - { int x; exit (l >= ((unsigned long)&x)); } - main () { int q; aux((unsigned long)&q); }, - [SCM_I_GSC_STACK_GROWS_UP=1], - [], - [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)]) +AC_RUN_IFELSE([AC_LANG_SOURCE( +[AC_INCLUDES_DEFAULT +int +find_stack_direction () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + return find_stack_direction () < 0; +}])], + [SCM_I_GSC_STACK_GROWS_UP=1], + [], + [AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h)]) AC_CHECK_SIZEOF(float) if test "$ac_cv_sizeof_float" -le "$ac_cv_sizeof_long"; then @@ -1048,12 +1192,12 @@ fi AC_MSG_CHECKING(for struct linger) AC_CACHE_VAL(scm_cv_struct_linger, - AC_TRY_COMPILE([ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include -#include ], - [struct linger lgr; lgr.l_linger = 100], - scm_cv_struct_linger="yes", - scm_cv_struct_linger="no")) +#include ]], + [[struct linger lgr; lgr.l_linger = 100]])], + [scm_cv_struct_linger="yes"], + [scm_cv_struct_linger="no"])) AC_MSG_RESULT($scm_cv_struct_linger) if test $scm_cv_struct_linger = yes; then AC_DEFINE(HAVE_STRUCT_LINGER, 1, @@ -1066,14 +1210,13 @@ fi # AC_MSG_CHECKING(for struct timespec) AC_CACHE_VAL(scm_cv_struct_timespec, - AC_TRY_COMPILE([ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #if HAVE_PTHREAD_H #include -#endif], - [struct timespec t; t.tv_nsec = 100], - scm_cv_struct_timespec="yes", - scm_cv_struct_timespec="no")) +#endif]], [[struct timespec t; t.tv_nsec = 100]])], + [scm_cv_struct_timespec="yes"], + [scm_cv_struct_timespec="no"])) AC_MSG_RESULT($scm_cv_struct_timespec) if test $scm_cv_struct_timespec = yes; then AC_DEFINE(HAVE_STRUCT_TIMESPEC, 1, @@ -1096,14 +1239,19 @@ AC_ARG_WITH(threads, [ --with-threads thread interface], , with_threads=yes) AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT, 0) +AC_SUBST(SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER, 0) case "$with_threads" in "yes" | "pthread" | "pthreads" | "pthread-threads" | "") - ACX_PTHREAD(CC="$PTHREAD_CC" - LIBS="$PTHREAD_LIBS $LIBS" - SCM_I_GSC_USE_PTHREAD_THREADS=1 - with_threads="pthreads", - with_threads="null") + + build_pthread_support="yes" + + ACX_PTHREAD([CC="$PTHREAD_CC" + LIBS="$PTHREAD_LIBS $LIBS" + SCM_I_GSC_USE_PTHREAD_THREADS=1 + with_threads="pthreads"], + [with_threads="null" + build_pthread_support="no"]) old_CFLAGS="$CFLAGS" CFLAGS="$PTHREAD_CFLAGS $CFLAGS" @@ -1119,23 +1267,42 @@ case "$with_threads" in # On past versions of Solaris, believe 8 through 10 at least, you # had to write "pthread_once_t foo = { PTHREAD_ONCE_INIT };". - # This is contrary to posix: + # This is contrary to POSIX: # http://www.opengroup.org/onlinepubs/000095399/functions/pthread_once.html # Check here if this style is required. # # glibc (2.3.6 at least) works both with or without braces, so the # test checks whether it works without. # + + if test "$GCC" = "yes"; then + # Since GCC only issues a warning for missing braces, so we need + # `-Werror' to catch it. + CFLAGS="-Werror -Wmissing-braces $CFLAGS" + fi + AC_CACHE_CHECK([whether PTHREAD_ONCE_INIT needs braces], guile_cv_need_braces_on_pthread_once_init, - [AC_TRY_COMPILE([#include ], - [pthread_once_t foo = PTHREAD_ONCE_INIT;], + [AC_COMPILE_IFELSE([#include + pthread_once_t foo = PTHREAD_ONCE_INIT;], [guile_cv_need_braces_on_pthread_once_init=no], [guile_cv_need_braces_on_pthread_once_init=yes])]) if test "$guile_cv_need_braces_on_pthread_once_init" = yes; then SCM_I_GSC_NEED_BRACES_ON_PTHREAD_ONCE_INIT=1 fi + # Same problem with `PTHREAD_MUTEX_INITIALIZER', e.g., on IRIX + # 6.5.30m with GCC 3.3. + AC_CACHE_CHECK([whether PTHREAD_MUTEX_INITIALIZER needs braces], + guile_cv_need_braces_on_pthread_mutex_initializer, + [AC_COMPILE_IFELSE([#include + pthread_mutex_t foo = PTHREAD_MUTEX_INITIALIZER;], + [guile_cv_need_braces_on_pthread_mutex_initializer=no], + [guile_cv_need_braces_on_pthread_mutex_initializer=yes])]) + if test "$guile_cv_need_braces_on_pthread_mutex_initializer" = yes; then + SCM_I_GSC_NEED_BRACES_ON_PTHREAD_MUTEX_INITIALIZER=1 + fi + CFLAGS="$old_CFLAGS" # On Solaris, sched_yield lives in -lrt. @@ -1159,6 +1326,10 @@ esac AC_MSG_CHECKING(what kind of threads to support) AC_MSG_RESULT($with_threads) +AM_CONDITIONAL([BUILD_PTHREAD_SUPPORT], + [test "x$build_pthread_support" = "xyes"]) + + ## Check whether pthread_attr_getstack works for the main thread if test "$with_threads" = pthreads; then @@ -1166,8 +1337,7 @@ if test "$with_threads" = pthreads; then AC_MSG_CHECKING(whether pthread_attr_getstack works for the main thread) old_CFLAGS="$CFLAGS" CFLAGS="$PTHREAD_CFLAGS $CFLAGS" -AC_TRY_RUN( -[ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ #if HAVE_PTHREAD_ATTR_GETSTACK #include @@ -1192,10 +1362,11 @@ int main () return 1; } #endif -], +]])], [works=yes AC_DEFINE(PTHREAD_ATTR_GETSTACK_WORKS, [1], [Define when pthread_att_get_stack works for the main thread])], -[works=no]) +[works=no], +[]) CFLAGS="$old_CFLAGS" AC_MSG_RESULT($works) @@ -1253,17 +1424,19 @@ case "$GCC" in ## less than exasperating. ## -Wpointer-arith was here too, but something changed in gcc/glibc ## and it became equally exasperating (gcc 2.95 and/or glibc 2.1.2). - CFLAGS="$CFLAGS -Wall -Wmissing-prototypes" + GCC_CFLAGS="-Wall -Wmissing-prototypes" # Do this here so we don't screw up any of the tests above that might # not be "warning free" if test "${GUILE_ERROR_ON_WARNING}" = yes then - CFLAGS="${CFLAGS} -Werror" + GCC_CFLAGS="${GCC_CFLAGS} -Werror" enable_compile_warnings=no fi ;; esac +AC_SUBST(GCC_CFLAGS) + ## If we're creating a shared library (using libtool!), then we'll ## need to generate a list of .lo files corresponding to the .o files ## given in LIBOBJS. We'll call it LIBLOBJS. @@ -1322,7 +1495,7 @@ AC_SUBST(LIBGUILE_I18N_INTERFACE) dnl Tell guile-config what flags guile users should compile and link with. GUILE_LIBS="$LDFLAGS $LIBS" -GUILE_CFLAGS="$PTHREAD_CFLAGS" +GUILE_CFLAGS="$CPPFLAGS $PTHREAD_CFLAGS" AC_SUBST(GUILE_LIBS) AC_SUBST(GUILE_CFLAGS) @@ -1337,6 +1510,12 @@ AC_SUBST(top_builddir_absolute) top_srcdir_absolute=`(cd $srcdir && pwd)` AC_SUBST(top_srcdir_absolute) +dnl We need `sitedir' in `guile-1.8.pc'. +dnl Note: `sitedir' must be kept in sync with `GUILE_SITE_DIR' in `guile.m4'. +pkgdatadir="$datadir/guile" +sitedir="$pkgdatadir/site" +AC_SUBST([sitedir]) + # Additional SCM_I_GSC definitions are above. AC_SUBST([SCM_I_GSC_GUILE_DEBUG]) AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST]) @@ -1350,6 +1529,7 @@ AC_CONFIG_FILES([libguile/gen-scmconfig.h]) AC_CONFIG_FILES([ Makefile am/Makefile + lib/Makefile benchmark-suite/Makefile doc/Makefile doc/goops/Makefile @@ -1358,35 +1538,23 @@ AC_CONFIG_FILES([ doc/tutorial/Makefile emacs/Makefile examples/Makefile - examples/box-dynamic-module/Makefile - examples/box-dynamic/Makefile - examples/box-module/Makefile - examples/box/Makefile - examples/modules/Makefile - examples/safe/Makefile - examples/scripts/Makefile - guile-config/Makefile - ice-9/Makefile - ice-9/debugger/Makefile - ice-9/debugging/Makefile lang/Makefile - lang/elisp/Makefile - lang/elisp/internals/Makefile - lang/elisp/primitives/Makefile libguile/Makefile - oop/Makefile - oop/goops/Makefile - scripts/Makefile srfi/Makefile test-suite/Makefile test-suite/standalone/Makefile + meta/Makefile + module/Makefile + testsuite/Makefile ]) +AC_CONFIG_FILES([meta/guile-1.8.pc]) +AC_CONFIG_FILES([meta/guile-1.8-uninstalled.pc]) AC_CONFIG_FILES([check-guile], [chmod +x check-guile]) AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile]) -AC_CONFIG_FILES([guile-tools], [chmod +x guile-tools]) -AC_CONFIG_FILES([pre-inst-guile], [chmod +x pre-inst-guile]) -AC_CONFIG_FILES([pre-inst-guile-env], [chmod +x pre-inst-guile-env]) +AC_CONFIG_FILES([meta/guile], [chmod +x meta/guile]) +AC_CONFIG_FILES([meta/uninstalled-env], [chmod +x meta/uninstalled-env]) +AC_CONFIG_FILES([meta/gdb-uninstalled-guile], [chmod +x meta/gdb-uninstalled-guile]) AC_CONFIG_FILES([libguile/guile-snarf], [chmod +x libguile/guile-snarf]) AC_CONFIG_FILES([libguile/guile-doc-snarf], @@ -1395,6 +1563,10 @@ AC_CONFIG_FILES([libguile/guile-func-name-check], [chmod +x libguile/guile-func-name-check]) AC_CONFIG_FILES([libguile/guile-snarf-docs], [chmod +x libguile/guile-snarf-docs]) +AC_CONFIG_FILES([test-suite/standalone/test-use-srfi], + [chmod +x test-suite/standalone/test-use-srfi]) +AC_CONFIG_FILES([test-suite/standalone/test-fast-slot-ref], + [chmod +x test-suite/standalone/test-fast-slot-ref]) AC_OUTPUT