~ruther/guix-local

142182514b84ee233bc27e574df2ca2074291525 — Ludovic Courtès 8 years ago f396611
build: Detect broken 'equal?' in Guile 2.2.1.

Fixes <https://bugs.gnu.org/29903>.
Reported by Mathieu Lirzin <mthl@gnu.org>.

* m4/guix.m4 (GUIX_ASSERT_SYNTAX_OBJECT_EQUAL): New macro.
* configure.ac: Use it.
2 files changed, 25 insertions(+), 1 deletions(-)

M configure.ac
M m4/guix.m4
M configure.ac => configure.ac +4 -0
@@ 113,6 113,10 @@ AM_CONDITIONAL([HAVE_GUILE_JSON], [test "x$have_guile_json" = "xyes"])
dnl Make sure we have a full-fledged Guile.
GUIX_ASSERT_GUILE_FEATURES([regex posix socket net-db threads])

dnl Make sure we don't suffer from the bug in 'equal?' wrt. syntax objects
dnl found in 2.2.1.  See <https://bugs.gnu.org/29903>.
GUIX_ASSERT_SYNTAX_OBJECT_EQUAL

dnl Decompressors, for use by the substituter and other modules.
AC_PATH_PROG([GZIP], [gzip])
AC_PATH_PROG([BZIP2], [bzip2])

M m4/guix.m4 => m4/guix.m4 +21 -1
@@ 1,5 1,5 @@
dnl GNU Guix --- Functional package management for GNU
dnl Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
dnl Copyright © 2012, 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
dnl Copyright © 2014 Mark H Weaver <mhw@netris.org>
dnl Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
dnl


@@ 153,6 153,26 @@ AC_DEFUN([GUIX_CHECK_UNBUFFERED_CBIP], [
     fi])
])

dnl GUIX_ASSERT_SYNTAX_OBJECT_EQUAL
dnl
dnl Guile 2.2.1 was a brown-paper-bag release where 'equal?' wouldn't work
dnl for syntax objects, which broke gexps.  Unfortunately Fedora 25 provides it.
dnl Reject it.
AC_DEFUN([GUIX_ASSERT_SYNTAX_OBJECT_EQUAL], [
  AC_CACHE_CHECK([whether 'equal?' works for syntax objects],
    [ac_cv_guix_syntax_object_equal],
    [if "$GUILE" -c '(exit (equal? (syntax x) (syntax x)))'
     then
       ac_cv_guix_syntax_object_equal=yes
     else
       ac_cv_guix_syntax_object_equal=no
     fi])
  if test "x$ac_cv_guix_syntax_object_equal" != xyes; then
    # This bug was present in Guile 2.2.1 only.
    AC_MSG_ERROR(['equal?' does not work for syntax object; upgrade to Guile 2.2.2 or later.])
  fi
])

dnl GUIX_CHECK_GUILE_SSH
dnl
dnl Check whether a recent-enough Guile-SSH is available.