diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-01-06 14:45:01 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-01-06 14:45:01 +0100 |
commit | 142182514b84ee233bc27e574df2ca2074291525 (patch) | |
tree | ea4aead4afa3d368bec4df12e162f71fd48d3389 | |
parent | f396611776e7ed6f1a070569a338ad56461b099e (diff) | |
download | guix-142182514b84ee233bc27e574df2ca2074291525.tar.gz |
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.
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | m4/guix.m4 | 22 |
2 files changed, 25 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index aa70f140d3..53efa4a684 100644 --- a/configure.ac +++ b/configure.ac @@ -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]) diff --git a/m4/guix.m4 b/m4/guix.m4 index add57f5262..721285b014 100644 --- a/m4/guix.m4 +++ b/m4/guix.m4 @@ -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. |