gnu: Add xfce4-battery-plugin.
[jackhill/guix/guix.git] / m4 / guix.m4
1 dnl GNU Guix --- Functional package management for GNU
2 dnl Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
3 dnl
4 dnl This file is part of GNU Guix.
5 dnl
6 dnl GNU Guix is free software; you can redistribute it and/or modify it
7 dnl under the terms of the GNU General Public License as published by
8 dnl the Free Software Foundation; either version 3 of the License, or (at
9 dnl your option) any later version.
10 dnl
11 dnl GNU Guix is distributed in the hope that it will be useful, but
12 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 dnl GNU General Public License for more details.
15 dnl
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18
19 dnl GUIX_ASSERT_LIBGCRYPT_USABLE
20 dnl
21 dnl Assert that GNU libgcrypt is usable from Guile.
22 AC_DEFUN([GUIX_ASSERT_LIBGCRYPT_USABLE],
23 [AC_CACHE_CHECK([whether $LIBGCRYPT can be dynamically loaded],
24 [guix_cv_libgcrypt_usable_p],
25 [GUILE_CHECK([retval],
26 [(dynamic-func \"gcry_md_hash_buffer\" (dynamic-link \"$LIBGCRYPT\"))])
27 if test "$retval" = 0; then
28 guix_cv_libgcrypt_usable_p="yes"
29 else
30 guix_cv_libgcrypt_usable_p="no"
31 fi])
32
33 if test "x$guix_cv_libgcrypt_usable_p" != "xyes"; then
34 AC_MSG_ERROR([GNU libgcrypt does not appear to be usable; see `--with-libgcrypt-prefix' and `README'.])
35 fi])
36
37 dnl GUIX_SYSTEM_TYPE
38 dnl
39 dnl Determine the Guix host system type, and store it in the
40 dnl `guix_system' variable.
41 AC_DEFUN([GUIX_SYSTEM_TYPE], [
42 AC_REQUIRE([AC_CANONICAL_HOST])
43 AC_PATH_PROG([SED], [sed])
44
45 AC_ARG_WITH(system, AC_HELP_STRING([--with-system=SYSTEM],
46 [Platform identifier (e.g., `i686-linux').]),
47 [guix_system="$withval"],
48 [case "$host_cpu" in
49 i*86)
50 machine_name="i686";;
51 amd64)
52 machine_name="x86_64";;
53 *)
54 machine_name="$host_cpu";;
55 esac
56
57 case "$host_os" in
58 linux-gnu*)
59 # For backward compatibility, strip the `-gnu' part.
60 guix_system="$machine_name-linux";;
61 *)
62 # Strip the version number from names such as `gnu0.3',
63 # `darwin10.2.0', etc.
64 guix_system="$machine_name-`echo $host_os | "$SED" -e's/[0-9.]*$//g'`";;
65 esac])
66
67 AC_MSG_CHECKING([for the Guix system type])
68 AC_MSG_RESULT([$guix_system])
69
70 AC_SUBST([guix_system])
71 ])
72
73 dnl GUIX_ASSERT_SUPPORTED_SYSTEM
74 dnl
75 dnl Assert that this is a system to which the distro is ported.
76 AC_DEFUN([GUIX_ASSERT_SUPPORTED_SYSTEM], [
77 AC_REQUIRE([GUIX_SYSTEM_TYPE])
78
79 AC_ARG_WITH([courage], [AC_HELP_STRING([--with-courage],
80 [Assert that even if this platform is unsupported, you will be
81 courageous and port the GNU System distribution to it (see
82 "GNU Distribution" in the manual.)])],
83 [guix_courageous="$withval"],
84 [guix_courageous="no"])
85
86 # Currently only Linux-based systems are supported, and only on some
87 # platforms.
88 case "$guix_system" in
89 x86_64-linux|i686-linux|mips64el-linux)
90 ;;
91 *)
92 if test "x$guix_courageous" = "xyes"; then
93 AC_MSG_WARN([building Guix on `$guix_system', which is not supported])
94 else
95 AC_MSG_ERROR([`$guix_system' is not a supported platform.
96 See "GNU Distribution" in the manual, or try `--with-courage'.])
97 fi
98 ;;
99 esac
100 ])
101
102 dnl GUIX_ASSERT_GUILE_FEATURES FEATURES
103 dnl
104 dnl Assert that FEATURES are provided by $GUILE.
105 AC_DEFUN([GUIX_ASSERT_GUILE_FEATURES], [
106 for guix_guile_feature in $1
107 do
108 AC_MSG_CHECKING([whether $GUILE provides feature '$guix_guile_feature'])
109 if "$GUILE" -c "(exit (provided? '$guix_guile_feature))"
110 then
111 AC_MSG_RESULT([yes])
112 else
113 AC_MSG_RESULT([no])
114 AC_MSG_ERROR([$GUILE does not support feature '$guix_guile_feature', which is required.])
115 fi
116 done
117 ])
118
119 dnl GUIX_CHECK_SRFI_37
120 dnl
121 dnl Check whether SRFI-37 suffers from <http://bugs.gnu.org/13176>.
122 dnl This bug was fixed in Guile 2.0.9.
123 AC_DEFUN([GUIX_CHECK_SRFI_37], [
124 AC_CACHE_CHECK([whether (srfi srfi-37) is affected by http://bugs.gnu.org/13176],
125 [ac_cv_guix_srfi_37_broken],
126 [if "$GUILE" -c "(use-modules (srfi srfi-37)) \
127 (sigaction SIGALRM (lambda _ (primitive-exit 1))) \
128 (alarm 1) \
129 (define opts (list (option '(#\I) #f #t (lambda _ #t)))) \
130 (args-fold '(\"-I\") opts (lambda _ (error)) (lambda _ #f) '())"
131 then
132 ac_cv_guix_srfi_37_broken=no
133 else
134 ac_cv_guix_srfi_37_broken=yes
135 fi])
136 ])
137
138 dnl GUIX_CHECK_UNBUFFERED_CBIP
139 dnl
140 dnl Check whether 'setbvuf' works on custom binary input ports (CBIPs), as is
141 dnl the case starting with Guile 2.0.10.
142 AC_DEFUN([GUIX_CHECK_UNBUFFERED_CBIP], [
143 AC_CACHE_CHECK([whether Guile's custom binary input ports support 'setvbuf'],
144 [ac_cv_guix_cbips_support_setvbuf],
145 [if "$GUILE" -c "(use-modules (rnrs io ports)) \
146 (let ((p (make-custom-binary-input-port \"cbip\" pk #f #f #f))) \
147 (setvbuf p _IONBF))" >&5 2>&1
148 then
149 ac_cv_guix_cbips_support_setvbuf=yes
150 else
151 ac_cv_guix_cbips_support_setvbuf=no
152 fi])
153 ])