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, 2019, 2020 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
dnl This file is part of GNU Guix.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
-dnl GUIX_ASSERT_LIBGCRYPT_USABLE
-dnl
-dnl Assert that GNU libgcrypt is usable from Guile.
-AC_DEFUN([GUIX_ASSERT_LIBGCRYPT_USABLE],
- [AC_CACHE_CHECK([whether $LIBGCRYPT can be dynamically loaded],
- [guix_cv_libgcrypt_usable_p],
- [GUILE_CHECK([retval],
- [(dynamic-func \"gcry_md_hash_buffer\" (dynamic-link \"$LIBGCRYPT\"))])
- if test "$retval" = 0; then
- guix_cv_libgcrypt_usable_p="yes"
- else
- guix_cv_libgcrypt_usable_p="no"
- fi])
-
- if test "x$guix_cv_libgcrypt_usable_p" != "xyes"; then
- AC_MSG_ERROR([GNU libgcrypt does not appear to be usable; see `--with-libgcrypt-prefix' and `README'.])
- fi])
-
dnl GUIX_SYSTEM_TYPE
dnl
dnl Determine the Guix host system type, and store it in the
linux-gnu*)
# For backward compatibility, strip the `-gnu' part.
guix_system="$machine_name-linux";;
+ gnu*)
+ # Always use i586 for GNU/Hurd.
+ guix_system="i586-gnu";;
*)
# Strip the version number from names such as `gnu0.3',
# `darwin10.2.0', etc.
# Currently only Linux-based systems are supported, and only on some
# platforms.
case "$guix_system" in
- x86_64-linux|i686-linux|armhf-linux|mips64el-linux)
+ x86_64-linux|i686-linux|armhf-linux|aarch64-linux)
;;
*)
if test "x$guix_courageous" = "xyes"; then
done
])
-dnl GUIX_CHECK_SRFI_37
+dnl GUIX_CHECK_GUILE_SSH
+dnl
+dnl Check whether a recent-enough Guile-SSH is available.
+AC_DEFUN([GUIX_CHECK_GUILE_SSH], [
+ dnl Check whether '#:nodelay' paramater to 'make-session' (introduced in
+ dnl 0.13.0) is present.
+ AC_CACHE_CHECK([whether Guile-SSH is available and recent enough],
+ [guix_cv_have_recent_guile_ssh],
+ [GUILE_CHECK([retval],
+ [(and (@ (ssh channel) channel-send-eof)
+ (@ (ssh popen) open-remote-pipe)
+ (@ (ssh dist node) node-eval)
+ (@ (ssh auth) userauth-gssapi!)
+ ((@ (ssh session) make-session) #:nodelay #t))])
+ if test "$retval" = 0; then
+ guix_cv_have_recent_guile_ssh="yes"
+ else
+ guix_cv_have_recent_guile_ssh="no"
+ fi])
+])
+
+dnl GUIX_CHECK_GUILE_SQLITE3
+dnl
+dnl Check whether a recent-enough Guile-Sqlite3 is available.
+AC_DEFUN([GUIX_CHECK_GUILE_SQLITE3], [
+ dnl Check whether 'sqlite-bind-arguments' is available. It was introduced
+ dnl in February 2018:
+ dnl <https://notabug.org/guile-sqlite3/guile-sqlite3/commit/1cd1dec96a9999db48c0ff45bab907efc637247f>.
+ AC_CACHE_CHECK([whether Guile-Sqlite3 is available and recent enough],
+ [guix_cv_have_recent_guile_sqlite3],
+ [GUILE_CHECK([retval],
+ [(@ (sqlite3) sqlite-bind-arguments)])
+ if test "$retval" = 0; then
+ guix_cv_have_recent_guile_sqlite3="yes"
+ else
+ guix_cv_have_recent_guile_sqlite3="no"
+ fi])
+])
+
+dnl GUIX_CHECK_GUILE_JSON
dnl
-dnl Check whether SRFI-37 suffers from <http://bugs.gnu.org/13176>.
-dnl This bug was fixed in Guile 2.0.9.
-AC_DEFUN([GUIX_CHECK_SRFI_37], [
- AC_CACHE_CHECK([whether (srfi srfi-37) is affected by http://bugs.gnu.org/13176],
- [ac_cv_guix_srfi_37_broken],
- [if "$GUILE" -c "(use-modules (srfi srfi-37)) \
- (sigaction SIGALRM (lambda _ (primitive-exit 1))) \
- (alarm 1) \
- (define opts (list (option '(#\I) #f #t (lambda _ #t)))) \
- (args-fold '(\"-I\") opts (lambda _ (error)) (lambda _ #f) '())"
- then
- ac_cv_guix_srfi_37_broken=no
+dnl Check whether a recent-enough Guile-JSON is available.
+AC_DEFUN([GUIX_CHECK_GUILE_JSON], [
+ dnl Check whether we're using Guile-JSON 4.3+, which provides
+ dnl 'define-json-mapping'.
+ AC_CACHE_CHECK([whether Guile-JSON is available and recent enough],
+ [guix_cv_have_recent_guile_json],
+ [GUILE_CHECK([retval],
+ [(use-modules (json))
+
+ (define-json-mapping <frob> make-frob
+ frob?
+ json->frob
+ (a frob-a)
+ (b frob-b \"bee\"))
+
+ (exit
+ (equal? (json->frob
+ (open-input-string \"{ \\\"a\\\": 1, \\\"bee\\\": 2 }\"))
+ (make-frob 1 2)))])
+ if test "$retval" = 0; then
+ guix_cv_have_recent_guile_json="yes"
else
- ac_cv_guix_srfi_37_broken=yes
+ guix_cv_have_recent_guile_json="no"
fi])
])
-dnl GUIX_CHECK_UNBUFFERED_CBIP
+dnl GUIX_CHECK_GUILE_GCRYPT
dnl
-dnl Check whether 'setbvuf' works on custom binary input ports (CBIPs), as is
-dnl the case starting with Guile 2.0.10.
-AC_DEFUN([GUIX_CHECK_UNBUFFERED_CBIP], [
- AC_CACHE_CHECK([whether Guile's custom binary input ports support 'setvbuf'],
- [ac_cv_guix_cbips_support_setvbuf],
- [if "$GUILE" -c "(use-modules (rnrs io ports)) \
- (let ((p (make-custom-binary-input-port \"cbip\" pk #f #f #f))) \
- (setvbuf p _IONBF))" >&5 2>&1
- then
- ac_cv_guix_cbips_support_setvbuf=yes
+dnl Check whether a recent-enough Guile-Gcrypt is available.
+AC_DEFUN([GUIX_CHECK_GUILE_GCRYPT], [
+ dnl Check whether we're using Guile-Gcrypt 0.2.x or later. 0.2.0
+ dnl introduced the 'hash-algorithm' macro and related code.
+ AC_CACHE_CHECK([whether Guile-Gcrypt is available and recent enough],
+ [guix_cv_have_recent_guile_gcrypt],
+ [GUILE_CHECK([retval],
+ [(use-modules (gcrypt hash))
+ (equal? (hash-algorithm sha256)
+ (lookup-hash-algorithm 'sha256))])
+ if test "$retval" = 0; then
+ guix_cv_have_recent_guile_gcrypt="yes"
else
- ac_cv_guix_cbips_support_setvbuf=no
+ guix_cv_have_recent_guile_gcrypt="no"
fi])
])
$1="$guix_cv_libgcrypt_libdir"
])
-dnl GUIX_LIBZ_LIBDIR VAR
-dnl
-dnl Attempt to determine libz's LIBDIR; store the result in VAR.
-AC_DEFUN([GUIX_LIBZ_LIBDIR], [
- AC_REQUIRE([PKG_PROG_PKG_CONFIG])
- AC_CACHE_CHECK([zlib's library directory],
- [guix_cv_libz_libdir],
- [guix_cv_libz_libdir="`$PKG_CONFIG zlib --variable=libdir 2> /dev/null`"])
- $1="$guix_cv_libz_libdir"
-])
-
dnl GUIX_CURRENT_LOCALSTATEDIR
dnl
dnl Determine the localstatedir of an existing Guix installation and set