summary refs log tree commit diff
path: root/m4/guix.m4
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-01-06 14:45:01 +0100
committerLudovic Courtès <ludo@gnu.org>2018-01-06 14:45:01 +0100
commit142182514b84ee233bc27e574df2ca2074291525 (patch)
treeea4aead4afa3d368bec4df12e162f71fd48d3389 /m4/guix.m4
parentf396611776e7ed6f1a070569a338ad56461b099e (diff)
downloadguix-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.
Diffstat (limited to 'm4/guix.m4')
-rw-r--r--m4/guix.m422
1 files changed, 21 insertions, 1 deletions
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.