X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/39f7ae3135f4ad9dad3504cf8ffb0dfa4ba5bda4..a50eda40dfca0461d7ad6f013fa55d2c14f1d2c6:/acinclude.m4 diff --git a/acinclude.m4 b/acinclude.m4 index f4aa305f5..6a1470f24 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1,5 +1,26 @@ dnl -*- Autoconf -*- +dnl Copyright (C) 1997, 1999, 2000, 2001, 2002, 2004, 2006, +dnl 2007, 2008, 2009, 2010, 2011, 2013 Free Software Foundation, Inc. +dnl +dnl This file is part of GUILE +dnl +dnl GUILE is free software; you can redistribute it and/or modify it under +dnl the terms of the GNU Lesser General Public License as published by the +dnl Free Software Foundation; either version 3, or (at your option) any +dnl later version. +dnl +dnl GUILE is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with GUILE; see the file COPYING.LESSER. If not, write +dnl to the Free Software Foundation, Inc., 51 Franklin Street, Fifth +dnl Floor, Boston, MA 02110-1301, USA. + + dnl On the NeXT, #including doesn't give you a definition for dnl struct utime, unless you #define _POSIX_SOURCE. @@ -339,6 +360,8 @@ dnl GUILE_THREAD_LOCAL_STORAGE dnl dnl Check for compiler thread-local storage (TLS) support. AC_DEFUN([GUILE_THREAD_LOCAL_STORAGE], [ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether the `__thread' storage class is available], [ac_cv_have_thread_storage_class], [dnl On some systems, e.g., NetBSD 5.0 with GCC 4.1, `__thread' is @@ -351,17 +374,22 @@ AC_DEFUN([GUILE_THREAD_LOCAL_STORAGE], [ dnl dnl Known broken systems includes: dnl - x86_64-unknown-netbsd5.0. + dnl - x86_64-unknown-netbsd5.1 dnl - sparc-sun-solaris2.8 - case "x$enable_shared--$host" in - xyes--*netbsd[0-5].[0-9].|xyes--*solaris2.8) + dnl + dnl On `x86_64-unknown-freebsd8.0', thread-local storage appears to + dnl be reclaimed at the wrong time, leading to a segfault when + dnl running `threads.test'. So disable it. + case "$enable_shared--$host_os" in + [yes--netbsd[0-5].[0-9]*|yes--solaris2.8|yes--freebsd[0-8]*]) ac_cv_have_thread_storage_class="no" - ;; + ;; *) - AC_LINK_IFELSE([AC_LANG_PROGRAM([__thread int tls_integer;], - [tls_integer = 123;])], - [ac_cv_have_thread_storage_class="yes"], - [ac_cv_have_thread_storage_class="no"]) - ;; + AC_LINK_IFELSE([AC_LANG_PROGRAM([__thread int tls_integer;], + [tls_integer = 123;])], + [ac_cv_have_thread_storage_class="yes"], + [ac_cv_have_thread_storage_class="no"]) + ;; esac]) if test "x$ac_cv_have_thread_storage_class" = "xyes"; then @@ -434,13 +462,115 @@ AC_DEFUN([GUILE_READLINE], [ AC_CHECK_FUNCS([strdup]) AC_SUBST([READLINE_LIBS]) +]) + +dnl GUILE_LIBUNISTRING_WITH_ICONV_SUPPORT +dnl +dnl Check whether libunistring has iconv support. When it lacks iconv +dnl support, `mem_iconveh' returns -1 (ENOSYS) and conversions from one +dnl codeset to another do not work. +AC_DEFUN([GUILE_LIBUNISTRING_WITH_ICONV_SUPPORT], [ + AC_CACHE_CHECK([whether libunistring was built with iconv support], + [ac_cv_libunistring_with_iconv_support], [ + save_LIBS=$LIBS + LIBS="$LIBS $LIBUNISTRING" + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include + #include + int + main (int argc, char *argv[]) + { + size_t result_size; + return (NULL == u32_conv_from_encoding ("ASCII", iconveh_question_mark, + "a", 1, + NULL, NULL, &result_size)); + } + ]])], + [ac_cv_libunistring_with_iconv_support=yes], + [ac_cv_libunistring_with_iconv_support=no], + [ac_cv_libunistring_with_iconv_support=yes]) + LIBS=$save_LIBS + ]) +]) + +dnl GUILE_UNISTRING_CONSTANT NAME +dnl +dnl Determine the compile-time value of NAME and define/substitute +dnl `SCM_I_GSC_NAME'. +AC_DEFUN([GUILE_UNISTRING_CONSTANT], [ + m4_pushdef([UPPER_CASE_NAME], + [m4_translit([$1],[abcdefghijklmnopqrstuvwxyz], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ])]) + + AC_CACHE_CHECK([the value of `$1'], [ac_cv_]$1, [ + AC_COMPUTE_INT([ac_cv_]$1, [$1], + [AC_INCLUDES_DEFAULT +#include +], + [AC_MSG_ERROR([failed to determine the value of `$1'])]) + ]) + + [SCM_I_GSC_]UPPER_CASE_NAME="$ac_cv_[]$1" + AC_SUBST([SCM_I_GSC_]UPPER_CASE_NAME) + m4_popdef([UPPER_CASE_NAME])]) + +dnl GUILE_UNISTRING_ICONVEH_VALUES +dnl +dnl Determine the values of the `iconveh_' libunistring constants. +AC_DEFUN([GUILE_UNISTRING_ICONVEH_VALUES], [ + GUILE_UNISTRING_CONSTANT([iconveh_error]) + GUILE_UNISTRING_CONSTANT([iconveh_question_mark]) + GUILE_UNISTRING_CONSTANT([iconveh_escape_sequence]) +]) + +dnl GUILE_CHECK_VERSION +dnl +dnl Ensure that $GUILE_FOR_BUILD has the same version as ourselves. +AC_DEFUN([GUILE_CHECK_VERSION], [ + if ! "$GUILE_FOR_BUILD" --version > /dev/null 2>&1; then + AC_MSG_ERROR([failed to run `$GUILE_FOR_BUILD']) + fi + + dnl Use MAJOR.MINOR.MICRO instead of (version) so that developers can + dnl freely shoot themselves in the foot by using, say, 2.0.3.80 and + dnl 2.0.3.42. + AC_CACHE_CHECK([the version of $GUILE_FOR_BUILD], + [ac_cv_guile_for_build_version], + [ac_cv_guile_for_build_version="`"$GUILE_FOR_BUILD" \ + -c '(format #t "~a.~a.~a" (major-version) (minor-version) (micro-version))'`" + ]) + + if test "$ac_cv_guile_for_build_version" != \ + "$GUILE_MAJOR_VERSION.$GUILE_MINOR_VERSION.$GUILE_MICRO_VERSION" + then + AC_MSG_ERROR([building Guile $PACKAGE_VERSION but `$GUILE_FOR_BUILD' has version $ac_cv_guile_for_build_version"]) + fi +]) + +dnl GUILE_CHECK_GUILE_FOR_BUILD +dnl +dnl When cross-compiling, ensure that $GUILE_FOR_BUILD is suitable. +AC_DEFUN([GUILE_CHECK_GUILE_FOR_BUILD], [ + if test "$cross_compiling" = "yes"; then + if test "x$GUILE_FOR_BUILD" = "x"; then + AC_PATH_PROG([GUILE_FOR_BUILD], [guile], [not-found]) + if test "$GUILE_FOR_BUILD" = "not-found"; then + AC_MSG_ERROR([a native Guile $PACKAGE_VERSION is required to cross-build Guile]) + fi + fi + AC_MSG_CHECKING([guile for build]) + AC_MSG_RESULT([$GUILE_FOR_BUILD]) + + dnl Since there is currently no distinction between the run-time + dnl search path, %load-path, and the compiler's search path, + dnl $GUILE_FOR_BUILD must be a native build of the very same version. + GUILE_CHECK_VERSION + else + GUILE_FOR_BUILD='this-value-will-never-be-used' + fi - . $srcdir/guile-readline/LIBGUILEREADLINE-VERSION - AC_SUBST(LIBGUILEREADLINE_MAJOR) - AC_SUBST(LIBGUILEREADLINE_INTERFACE_CURRENT) - AC_SUBST(LIBGUILEREADLINE_INTERFACE_REVISION) - AC_SUBST(LIBGUILEREADLINE_INTERFACE_AGE) - AC_SUBST(LIBGUILEREADLINE_INTERFACE) + AC_ARG_VAR([GUILE_FOR_BUILD], [guile for the build system]) + AM_SUBST_NOTMAKE([GUILE_FOR_BUILD]) ]) dnl Declare file $1 to be a script that needs configuring,