gnu: python-pandas: Fix build on 32-bit.
[jackhill/guix/guix.git] / gnu / packages / guile.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
a614ce38 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
b515822d 3;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
c5793e7e 4;;; Copyright © 2015, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
44a2bdf8 5;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
71311e4e 6;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
76e6e663 7;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
4176eb19 8;;; Copyright © 2016 Eraim Flashner <efraim@flashner.co.il>
bd9af610 9;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
8a666bc5 10;;; Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
3b5783fc 11;;; Copyright © 2016 Amirouche <amirouche@hypermove.net>
c5793e7e 12;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
aaf1bdc3 13;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
1722d680 14;;;
233e7676 15;;; This file is part of GNU Guix.
1722d680 16;;;
233e7676 17;;; GNU Guix is free software; you can redistribute it and/or modify it
1722d680
LC
18;;; under the terms of the GNU General Public License as published by
19;;; the Free Software Foundation; either version 3 of the License, or (at
20;;; your option) any later version.
21;;;
233e7676 22;;; GNU Guix is distributed in the hope that it will be useful, but
1722d680
LC
23;;; WITHOUT ANY WARRANTY; without even the implied warranty of
24;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25;;; GNU General Public License for more details.
26;;;
27;;; You should have received a copy of the GNU General Public License
233e7676 28;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
1722d680 29
1ffa7090 30(define-module (gnu packages guile)
71e0f217 31 #:use-module ((guix licenses) #:prefix license:)
59a43334 32 #:use-module (gnu packages)
472fc855 33 #:use-module (gnu packages aspell)
9c782445 34 #:use-module (gnu packages bash)
1ffa7090
LC
35 #:use-module (gnu packages bdw-gc)
36 #:use-module (gnu packages gawk)
37 #:use-module (gnu packages gperf)
38 #:use-module (gnu packages libffi)
39 #:use-module (gnu packages autotools)
f906d30c 40 #:use-module (gnu packages flex)
1ffa7090 41 #:use-module (gnu packages libunistring)
7119cca8 42 #:use-module (gnu packages linux)
1ffa7090
LC
43 #:use-module (gnu packages m4)
44 #:use-module (gnu packages multiprecision)
45 #:use-module (gnu packages pkg-config)
46 #:use-module (gnu packages readline)
ef02e1e9 47 #:use-module (gnu packages ncurses)
87d836b2 48 #:use-module (gnu packages ed)
ce0614dd 49 #:use-module (gnu packages base)
f906d30c 50 #:use-module (gnu packages texinfo)
01497dfe 51 #:use-module (gnu packages man)
f906d30c 52 #:use-module (gnu packages gettext)
b416aadf 53 #:use-module (gnu packages databases)
9d373377 54 #:use-module (gnu packages python)
5649c8cd
DT
55 #:use-module (gnu packages gl)
56 #:use-module (gnu packages sdl)
57 #:use-module (gnu packages maths)
58 #:use-module (gnu packages image)
bd233722 59 #:use-module (gnu packages version-control)
bd9af610
AK
60 #:use-module (gnu packages xdisorg)
61 #:use-module (gnu packages xorg)
71311e4e 62 #:use-module (gnu packages zip)
1722d680 63 #:use-module (guix packages)
87f5d366 64 #:use-module (guix download)
6bc24063 65 #:use-module (guix git-download)
32795fcf 66 #:use-module (guix build-system gnu)
6bc24063 67 #:use-module (guix build-system trivial)
32795fcf
LC
68 #:use-module (guix utils)
69 #:use-module (ice-9 match))
1722d680
LC
70
71;;; Commentary:
72;;;
c44899a2 73;;; GNU Guile, and modules and extensions.
1722d680
LC
74;;;
75;;; Code:
76
c44899a2
LC
77(define-public guile-1.8
78 (package
79 (name "guile")
80 (version "1.8.8")
81 (source (origin
87f5d366 82 (method url-fetch)
0db342a5 83 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
84 ".tar.gz"))
85 (sha256
86 (base32
01eafd38 87 "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
fc1adab1 88 (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
c44899a2
LC
89 (build-system gnu-build-system)
90 (arguments '(#:configure-flags '("--disable-error-on-warning")
c44899a2
LC
91
92 ;; Insert a phase before `configure' to patch things up.
93 #:phases (alist-cons-before
94 'configure
2f4fbe1c 95 'patch-stuff
c44899a2
LC
96 (lambda* (#:key outputs #:allow-other-keys)
97 ;; Add a call to `lt_dladdsearchdir' so that
98 ;; `libguile-readline.so' & co. are in the
99 ;; loader's search path.
100 (substitute* "libguile/dynl.c"
2f4fbe1c
LC
101 (("lt_dlinit.*$" match)
102 (format #f
103 " ~a~% lt_dladdsearchdir(\"~a/lib\");~%"
104 match
105 (assoc-ref outputs "out"))))
106
107 ;; The usual /bin/sh...
108 (substitute* "ice-9/popen.scm"
109 (("/bin/sh") (which "sh"))))
c44899a2 110 %standard-phases)))
01eafd38 111 (inputs `(("gawk" ,gawk)
c44899a2
LC
112 ("readline" ,readline)))
113
114 ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
115 ;; propagated.
116 (propagated-inputs `(("gmp" ,gmp)
be11b102 117 ("libltdl" ,libltdl)))
c44899a2
LC
118
119 ;; When cross-compiling, a native version of Guile itself is needed.
120 (self-native-input? #t)
121
9be8d7c8
LC
122 (native-search-paths
123 (list (search-path-specification
124 (variable "GUILE_LOAD_PATH")
af070955 125 (files '("share/guile/site")))))
9be8d7c8 126
f50d2669 127 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 128 (description
a22dc0c4
LC
129 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
130official extension language of the GNU system. It is an implementation of
131the Scheme language which can be easily embedded in other applications to
132provide a convenient means of extending the functionality of the application
133without requiring the source code to be rewritten.")
c44899a2 134 (home-page "http://www.gnu.org/software/guile/")
71e0f217 135 (license license:lgpl2.0+)))
c44899a2
LC
136
137(define-public guile-2.0
138 (package
139 (name "guile")
7f9c8970 140 (version "2.0.12")
c62a31ca 141 (replacement guile-2.0.13) ;CVE-2016-8606 and CVE-2016-8605
c44899a2 142 (source (origin
87f5d366 143 (method url-fetch)
0db342a5 144 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
145 ".tar.xz"))
146 (sha256
147 (base32
923d9caa 148 "1sdpjq0jf1h65w29q0zprj4x6kdp5jskkvbnlwphy9lvdxrqg0fy"))))
c44899a2
LC
149 (build-system gnu-build-system)
150 (native-inputs `(("pkgconfig" ,pkg-config)))
151 (inputs `(("libffi" ,libffi)
9c782445 152 ("readline" ,readline)
88da729f
JN
153 ,@(libiconv-if-needed)
154 ,@(if (target-mingw?) '() `(("bash" ,bash)))))
c44899a2
LC
155 (propagated-inputs
156 `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
157 ;; reads `-lltdl -lunistring', adding them here will add the needed
158 ;; `-L' flags. As for why the `.la' file lacks the `-L' flags, see
159 ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
160 ("libunistring" ,libunistring)
be11b102
LC
161
162 ;; Depend on LIBLTDL, not LIBTOOL. That way, we avoid some the extra
163 ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
164 ("libltdl" ,libltdl)
c44899a2
LC
165
166 ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
167 ;; must be propagated.
bda1bc6c 168 ("bdw-gc" ,libgc)
c44899a2
LC
169 ("gmp" ,gmp)))
170
171 (self-native-input? #t)
172
9bf62d9b
LC
173 (outputs '("out" "debug"))
174
8ffaa93b 175 (arguments
b5e0c870
LC
176 `(#:configure-flags '("--disable-static") ;saves 3MiB
177 #:phases (alist-cons-before
8ffaa93b
LC
178 'configure 'pre-configure
179 (lambda* (#:key inputs #:allow-other-keys)
58b4e8e8 180 ;; Tell (ice-9 popen) the file name of Bash.
8ffaa93b
LC
181 (let ((bash (assoc-ref inputs "bash")))
182 (substitute* "module/ice-9/popen.scm"
88da729f
JN
183 ;; If bash is #f allow fallback for user to provide
184 ;; "bash" in PATH. This happens when cross-building to
185 ;; MinGW for which we do not have Bash yet.
8ffaa93b 186 (("/bin/sh")
88da729f
JN
187 ,@(if (target-mingw?)
188 '((if bash
189 (string-append bash "/bin/bash")
190 "bash"))
191 '((string-append bash "/bin/bash")))))))
db619089 192 %standard-phases)))
8ffaa93b 193
9be8d7c8
LC
194 (native-search-paths
195 (list (search-path-specification
196 (variable "GUILE_LOAD_PATH")
af070955 197 (files '("share/guile/site/2.0")))
9be8d7c8
LC
198 (search-path-specification
199 (variable "GUILE_LOAD_COMPILED_PATH")
ca408580 200 (files '("lib/guile/2.0/site-ccache"
05f1e956 201 "share/guile/site/2.0")))))
9be8d7c8 202
f50d2669 203 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 204 (description
a22dc0c4
LC
205 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
206official extension language of the GNU system. It is an implementation of
207the Scheme language which can be easily embedded in other applications to
208provide a convenient means of extending the functionality of the application
209without requiring the source code to be rewritten.")
c44899a2 210 (home-page "http://www.gnu.org/software/guile/")
71e0f217 211 (license license:lgpl3+)))
c44899a2 212
fa29b199
LC
213(define-public guile-2.0/fixed
214 ;; A package of Guile 2.0 that's rarely changed. It is the one used
215 ;; in the `base' module, and thus changing it entails a full rebuild.
c62a31ca
LC
216 (package
217 (inherit guile-2.0)
218 (properties '((hidden? . #t))) ;people should install 'guile-2.0'
219 (replacement #f)))
220
221(define guile-2.0.13
222 (package
223 (inherit guile-2.0)
224 (version "2.0.13")
225 (source (origin
226 (method url-fetch)
227 (uri (string-append "mirror://gnu/guile/guile-" version
228 ".tar.xz"))
229 (sha256
230 (base32
8134dc1f
LC
231 "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p"))
232 (patches (search-patches "guile-repl-server-test.patch"))))))
fa29b199 233
be3feafe 234(define-public guile-next
f906d30c 235 (package (inherit guile-2.0)
be3feafe 236 (name "guile-next")
4995ae75 237 (version "2.1.7")
c62a31ca 238 (replacement #f)
4eae7980
LC
239 (source (origin
240 (method url-fetch)
241 (uri (string-append "ftp://alpha.gnu.org/gnu/guile/guile-"
242 version ".tar.xz"))
243 (sha256
244 (base32
4995ae75 245 "0qf2664bglv5rrj4c99cc7gry7v9x0sqdyzgfg8zi8gm5wbcmqda"))
d9f0788a
LC
246 (modules '((guix build utils)))
247
248 ;; Remove the pre-built object files. Instead, build everything
249 ;; from source, at the expense of significantly longer build
250 ;; times (almost 3 hours on a 4-core Intel i5).
251 (snippet '(for-each delete-file
252 (find-files "prebuilt" "\\.go$")))))
dd90ed89 253 (synopsis "Snapshot of what will become version 2.2 of GNU Guile")
4fbd0f4f
LC
254 (properties '((timeout . 72000) ;20 hours
255 (upstream-name . "guile")
256 (ftp-server . "alpha.gnu.org")
257 (ftp-directory . "/gnu/guile")))
dd90ed89
DT
258 (native-search-paths
259 (list (search-path-specification
260 (variable "GUILE_LOAD_PATH")
261 (files '("share/guile/site/2.2")))
262 (search-path-specification
263 (variable "GUILE_LOAD_COMPILED_PATH")
31769b9f 264 (files '("lib/guile/2.2/site-ccache"
dd90ed89 265 "share/guile/site/2.2")))))))
4eae7980 266
947a5d47
LC
267(define (guile-2.2-package-name name)
268 "Return NAME with a \"guile2.2-\" prefix instead of \"guile-\", when
269applicable."
270 (if (string-prefix? "guile-" name)
271 (string-append "guile2.2-"
272 (string-drop name
273 (string-length "guile-")))
274 name))
275
276(define package-for-guile-2.2
277 ;; A procedure that rewrites the dependency tree of the given package to use
278 ;; GUILE-NEXT instead of GUILE-2.0.
279 (package-input-rewriting `((,guile-2.0 . ,guile-next))
280 guile-2.2-package-name))
281
4eae7980
LC
282(define-public guile-for-guile-emacs
283 (package (inherit guile-next)
284 (name "guile-for-guile-emacs")
285 (version "20150510.d8d9a8d")
f906d30c
CAW
286 (source (origin
287 (method git-fetch)
288 (uri (git-reference
4eae7980
LC
289 (url "git://git.hcoop.net/git/bpt/guile.git")
290 (commit "d8d9a8da05ec876acba81a559798eb5eeceb5a17")))
f906d30c
CAW
291 (sha256
292 (base32
4eae7980 293 "00sprsshy16y8pxjy126hr2adqcvvzzz96hjyjwgg8swva1qh6b0"))))
f906d30c
CAW
294 (arguments
295 (substitute-keyword-arguments `(;; Tests aren't passing for now.
296 ;; Obviously we should re-enable this!
297 #:tests? #f
4eae7980 298 ,@(package-arguments guile-next))
f906d30c
CAW
299 ((#:phases phases)
300 `(modify-phases ,phases
301 (add-after 'unpack 'autogen
302 (lambda _
303 (zero? (system* "sh" "autogen.sh"))))
304 (add-before 'autogen 'patch-/bin/sh
305 (lambda _
306 (substitute* "build-aux/git-version-gen"
307 (("#!/bin/sh") (string-append "#!" (which "sh"))))
308 #t))))))
309 (native-inputs
310 `(("autoconf" ,autoconf)
311 ("automake" ,automake)
312 ("libtool" ,libtool)
313 ("flex" ,flex)
314 ("texinfo" ,texinfo)
b94a6ca0 315 ("gettext" ,gettext-minimal)
daeb61f7
RW
316 ,@(package-native-inputs guile-next)))
317 ;; Same as in guile-2.0
318 (native-search-paths
319 (list (search-path-specification
320 (variable "GUILE_LOAD_PATH")
321 (files '("share/guile/site/2.0")))
322 (search-path-specification
323 (variable "GUILE_LOAD_COMPILED_PATH")
31769b9f 324 (files '("lib/guile/2.0/site-ccache"
daeb61f7 325 "share/guile/site/2.0")))))))
be3feafe 326
71311e4e
RW
327;; There has not been any release yet.
328(define-public guildhall
329 (let ((commit "2fe2cc539f4b811bbcd69e58738db03eb5a2b778")
330 (revision "1"))
331 (package
332 (name "guildhall")
333 (version (string-append "0-" revision "." (string-take commit 9)))
334 (source (origin
335 (method git-fetch)
336 (uri (git-reference
337 (url "https://github.com/ijp/guildhall.git")
338 (commit commit)))
339 (file-name (string-append name "-" version "-checkout"))
340 (sha256
341 (base32
342 "115bym7bg66h3gs399yb2vkzc2ygriaqsn4zbrg8f054mgy8wzn1"))))
343 (build-system gnu-build-system)
344 (arguments
345 `(#:phases
346 (modify-phases %standard-phases
347 ;; Tests fail without this fix because they try to load the bash
348 ;; executable as a Scheme file. See bug report at
349 ;; https://github.com/ijp/guildhall/issues/22
350 (add-after 'unpack 'fix-bug-22
351 (lambda _
352 (substitute* "Makefile.am"
353 (("TESTS_ENVIRONMENT=.*")
354 "AM_TESTS_ENVIRONMENT=srcdir=$(abs_top_srcdir)/tests/
355TEST_EXTENSIONS = .scm
356SCM_LOG_COMPILER= $(top_builddir)/env $(GUILE)
357AM_SCM_LOG_FLAGS = --no-auto-compile -s")
358 ;; FIXME: one of the database tests fails for unknown
359 ;; reasons. It does not fail when run outside of Guix.
360 (("tests/database.scm") ""))
361 #t))
362 (add-before 'configure 'autogen
363 (lambda _
364 (zero? (system* "sh" "autogen.sh")))))))
365 (inputs
366 `(("guile" ,guile-2.0)))
367 (native-inputs
368 `(("zip" ,zip) ; for tests
369 ("autoconf" ,autoconf)
370 ("automake" ,automake)
371 ("texinfo" ,texinfo)))
372 (synopsis "Package manager for Guile")
373 (description
374 "Guildhall is a package manager written for Guile Scheme. A guild is
375an association of independent craftspeople. A guildhall is where they meet.
376This Guildhall aims to make a virtual space for Guile wizards and journeyfolk
377to share code.
378
379On a practical level, Guildhall lets you share Scheme modules and programs
380over the internet, and install code that has been shared by others. Guildhall
381can handle dependencies, so when a program requires several libraries, and
382each of those has further dependencies, all of the prerequisites for the
383program can be installed in one go.")
384 (home-page "https://github.com/ijp/guildhall")
385 (license license:gpl3+))))
386
c44899a2
LC
387\f
388;;;
389;;; Extensions.
390;;;
391
7119cca8
ML
392(define-public artanis
393 (package
394 (name "artanis")
c84ceace 395 (version "0.1.2")
7119cca8
ML
396 (source (origin
397 (method url-fetch)
398 (uri (string-append "ftp://alpha.gnu.org/gnu/artanis/artanis-"
399 version ".tar.gz"))
400 (sha256
401 (base32
8a666bc5
AFN
402 "19m3ak12cqk8js9d2mdg11kh4fjsq8frfpd10qw75h0zpr5cywpp"))
403 (patches (search-patches "artanis-fix-Makefile.in.patch"))))
7119cca8
ML
404 (build-system gnu-build-system)
405 ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
406 (inputs `(("guile" ,guile-2.0)))
407 (native-inputs `(("bash" ,bash) ;for the `source' builtin
408 ("pkgconfig" ,pkg-config)
409 ("util-linux" ,util-linux))) ;for the `script' command
410 (arguments
411 '(#:make-flags
412 ;; TODO: The documentation must be built with the `docs' target.
413 (let* ((out (assoc-ref %outputs "out"))
414 (dir (string-append out "/share/guile/site/2.0")))
415 ;; Don't use (%site-dir) for site paths.
416 (list (string-append "MOD_PATH=" dir)
8a666bc5 417 (string-append "MOD_COMPILED_PATH=" dir)))
7119cca8
ML
418 #:test-target "test"
419 #:phases
420 (modify-phases %standard-phases
421 (add-before
422 'install 'substitute-root-dir
423 (lambda* (#:key outputs #:allow-other-keys)
424 (let ((out (assoc-ref outputs "out")))
425 (substitute* "Makefile" ;ignore the execution of bash.bashrc
426 ((" /etc/bash.bashrc") " /dev/null"))
427 (substitute* "Makefile" ;set the root of config files to OUT
428 ((" /etc") (string-append " " out "/etc")))
429 (mkdir-p (string-append out "/bin")) ;for the `art' executable
430 #t))))))
431 (synopsis "Web application framework written in Guile")
432 (description "GNU Artanis is a web application framework written in Guile
433Scheme. A web application framework (WAF) is a software framework that is
434designed to support the development of dynamic websites, web applications, web
435services and web resources. The framework aims to alleviate the overhead
436associated with common activities performed in web development. Artanis
437provides several tools for web development: database access, templating
438frameworks, session management, URL-remapping for RESTful, page caching, and
439more.")
440 (home-page "https://www.gnu.org/software/artanis/")
71e0f217 441 (license (list license:gpl3+ license:lgpl3+)))) ;dual license
7119cca8 442
d6d9f1f7 443(define-public guile-reader
1722d680 444 (package
d6d9f1f7 445 (name "guile-reader")
ad29c6f2 446 (version "0.6.1")
d6d9f1f7
LC
447 (source (origin
448 (method url-fetch)
449 (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
450 version ".tar.gz"))
451 (sha256
452 (base32
ad29c6f2 453 "020wz5w8z6g79nbqifg2n496wxwkcjzh8xizpv6mz0hczpl155ma"))))
d6d9f1f7
LC
454 (build-system gnu-build-system)
455 (native-inputs `(("pkgconfig" ,pkg-config)
456 ("gperf" ,gperf)))
457 (inputs `(("guile" ,guile-2.0)))
ad29c6f2 458 (arguments `(#:configure-flags
d6d9f1f7
LC
459 (let ((out (assoc-ref %outputs "out")))
460 (list (string-append "--with-guilemoduledir="
461 out "/share/guile/site/2.0")))))
462 (synopsis "Framework for building readers for GNU Guile")
463 (description
464 "Guile-Reader is a simple framework for building readers for GNU Guile.
1722d680
LC
465
466The idea is to make it easy to build procedures that extend Guile’s read
35b9e423 467procedure. Readers supporting various syntax variants can easily be written,
1722d680 468possibly by re-using existing “token readers” of a standard Scheme
35b9e423 469readers. For example, it is used to implement Skribilo’s R5RS-derived
1722d680
LC
470document syntax.
471
472Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
473hopefully more powerful and flexible (for instance, one may instantiate as
474many readers as needed).")
d6d9f1f7 475 (home-page "http://www.nongnu.org/guile-reader/")
71e0f217 476 (license license:gpl3+)))
1722d680 477
ef02e1e9
LC
478(define-public guile-ncurses
479 (package
480 (name "guile-ncurses")
d81850d4 481 (version "2.1")
ef02e1e9
LC
482 (source (origin
483 (method url-fetch)
484 (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
485 version ".tar.gz"))
486 (sha256
487 (base32
d81850d4 488 "1h7rnq4g7xlxxybcb3vjq6nscm9zhlmfaxb7258c8ax7him4azg6"))))
ef02e1e9
LC
489 (build-system gnu-build-system)
490 (inputs `(("ncurses" ,ncurses)
491 ("guile" ,guile-2.0)))
0881b616 492 (native-inputs `(("pkg-config" ,pkg-config)))
ef02e1e9 493 (arguments
2c6b7c7d 494 '(#:configure-flags (list "--with-ncursesw" ; Unicode support
0881b616 495 "--with-gnu-filesystem-hierarchy")
fa37f21b
EF
496 #:phases
497 (modify-phases %standard-phases
8c4e99cc 498 (add-before 'build 'fix-libguile-ncurses-file-name
fa37f21b 499 (lambda* (#:key outputs #:allow-other-keys)
8c4e99cc
JD
500 (and (zero? (system* "make" "install"
501 "-C" "src/ncurses"
502 "-j" (number->string
503 (parallel-job-count))))
504 (let* ((out (assoc-ref outputs "out"))
505 (dir "src/ncurses")
506 (files (find-files dir ".scm")))
507 (substitute* files
508 (("\"libguile-ncurses\"")
509 (format #f "\"~a/lib/guile/2.0/libguile-ncurses\""
510 out)))
511 #t)))))))
d81850d4 512 (home-page "https://www.gnu.org/software/guile-ncurses/")
f50d2669 513 (synopsis "Guile bindings to ncurses")
ef02e1e9 514 (description
12bcf94a 515 "guile-ncurses provides Guile language bindings for the ncurses
79c311b8 516library.")
71e0f217 517 (license license:lgpl3+)))
ef02e1e9 518
87d836b2
LC
519(define-public mcron
520 (package
521 (name "mcron")
d12c626c 522 (version "1.0.8")
87d836b2
LC
523 (source (origin
524 (method url-fetch)
525 (uri (string-append "mirror://gnu/mcron/mcron-"
526 version ".tar.gz"))
527 (sha256
528 (base32
d12c626c 529 "0zparwgf01jgl1x53ik71ghabldq6zz18ha4dscps1i0qrzgap1b"))
fc1adab1 530 (patches (search-patches "mcron-install.patch"))))
87d836b2 531 (build-system gnu-build-system)
b6c18d6a
LC
532 (native-inputs `(("pkg-config" ,pkg-config)))
533 (inputs `(("ed" ,ed) ("which" ,which) ("guile" ,guile-2.0)))
87d836b2 534 (home-page "http://www.gnu.org/software/mcron/")
f50d2669 535 (synopsis "Run jobs at scheduled times")
87d836b2 536 (description
79c311b8 537 "GNU Mcron is a complete replacement for Vixie cron. It is used to run
a22dc0c4 538tasks on a schedule, such as every hour or every Monday. Mcron is written in
79c311b8
LC
539Guile, so its configuration can be written in Scheme; the original cron
540format is also supported.")
71e0f217 541 (license license:gpl3+)))
87d836b2 542
01497dfe
LC
543(define-public mcron2
544 ;; This is mthl's mcron development branch, not yet merged in mcron.
545 (let ((commit "31baff1a5187d8ddc89324cbe42dbeffc309c962"))
546 (package
547 (inherit mcron)
548 (name "mcron2")
549 (version (string-append (package-version mcron) "-0."
550 (string-take commit 7)))
551 (source (origin
552 (method git-fetch)
553 (uri (git-reference
554 (url "https://notabug.org/mthl/mcron/")
555 (commit commit)))
556 (sha256
557 (base32
558 "1h5wxy997hxi718hpx419c23q09939kbxrjbbq54lv0cgw1bb63z"))
559 (file-name (string-append name "-" version "-checkout"))))
560 (native-inputs
561 `(("autoconf" ,autoconf)
562 ("automake" ,automake)
563 ("pkg-config" ,pkg-config)
564 ("texinfo" ,texinfo)
565 ("help2man" ,help2man)))
566 (arguments
567 `(#:modules ((ice-9 match) (ice-9 ftw)
568 ,@%gnu-build-system-modules)
569
570 #:phases (modify-phases %standard-phases
571 (add-after 'unpack 'bootstrap
572 (lambda _
573 (zero? (system* "autoreconf" "-vfi"))))
574 (add-after 'install 'wrap-mcron
575 (lambda* (#:key outputs #:allow-other-keys)
576 ;; Wrap the 'mcron' command to refer to the right
577 ;; modules.
578 (let* ((out (assoc-ref outputs "out"))
579 (bin (string-append out "/bin"))
580 (site (string-append
581 out "/share/guile/site")))
582 (match (scandir site)
583 (("." ".." version)
584 (let ((modules (string-append site "/" version)))
585 (wrap-program (string-append bin "/mcron")
586 `("GUILE_LOAD_PATH" ":" prefix
587 (,modules))
588 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
589 (,modules)))
590 #t))))))))))))
591
814b18e5
AS
592(define-public guile-ics
593 (package
594 (name "guile-ics")
595 (version "0.1.1")
596 (source (origin
597 (method git-fetch)
598 (uri (git-reference
599 (url "https://github.com/artyom-poptsov/guile-ics")
600 (commit "v0.1.1")))
601 (file-name (string-append name "-" version "-checkout"))
602 (sha256
603 (base32
604 "1pvg6j48inpbq47hq00yh5hhl2qd2srvrx5yjl7w7ky1jsjadp86"))))
605 (build-system gnu-build-system)
606 (arguments
607 '(#:phases (modify-phases %standard-phases
608 (add-before 'configure 'autoreconf
609 (lambda _
610 ;; Repository comes with a broken symlink
611 (delete-file "README")
612 (symlink "README.org" "README")
613 (zero? (system* "autoreconf" "-fi")))))))
614 (native-inputs
615 `(("autoconf" ,(autoconf-wrapper))
616 ("automake" ,automake)
617 ("texinfo" ,texinfo)
618 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
619 ("gettext" ,gettext-minimal)
620 ("pkg-config" ,pkg-config)))
621 (inputs `(("guile" ,guile-2.0) ("which" ,which)))
622 (propagated-inputs `(("guile-lib" ,guile-lib)))
623 (home-page "https://github.com/artyom-poptsov/guile-ics")
624 (synopsis "Guile parser library for the iCalendar format")
625 (description
626 "Guile-ICS is an iCalendar (RFC5545) format parser library written in
627pure Scheme. The library can be used to read and write iCalendar data.
628
629The library is shipped with documentation in Info format and usage examples.")
71e0f217 630 (license license:gpl3+)))
814b18e5 631
3e9066fc
LC
632(define-public guile-lib
633 (package
634 (name "guile-lib")
af126875 635 (version "0.2.5")
3e9066fc 636 (source (origin
af126875
MC
637 (method url-fetch)
638 (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
639 version ".tar.gz"))
640 (sha256
641 (base32
642 "1qbk485djgxqrbfjvk4b7w7y4x9xygf2qb8dqnl7885kajasx8qg"))))
3e9066fc
LC
643 (build-system gnu-build-system)
644 (arguments
af126875
MC
645 '(#:make-flags
646 '("GUILE_AUTO_COMPILE=0") ;to prevent guild errors
647 #:phases
648 (modify-phases %standard-phases
649 (add-before 'configure 'patch-module-dir
650 (lambda _
651 (substitute* "src/Makefile.in"
652 (("^moddir = ([[:graph:]]+)")
653 "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
654 (("^godir = ([[:graph:]]+)")
655 "godir = \
bf62b8ff 656$(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n"))
af126875 657 #t)))))
bf62b8ff 658 (native-inputs `(("pkg-config" ,pkg-config)))
3e9066fc
LC
659 (inputs `(("guile" ,guile-2.0)))
660 (home-page "http://www.nongnu.org/guile-lib/")
661 (synopsis "Collection of useful Guile Scheme modules")
662 (description
35b9e423 663 "Guile-Lib is intended as an accumulation place for pure-scheme Guile
3e9066fc
LC
664modules, allowing for people to cooperate integrating their generic Guile
665modules into a coherent library. Think \"a down-scaled, limited-scope CPAN
666for Guile\".")
667
668 ;; The whole is under GPLv3+, but some modules are under laxer
669 ;; distribution terms such as LGPL and public domain. See `COPYING' for
670 ;; details.
71e0f217 671 (license license:gpl3+)))
3e9066fc 672
6050a1fb
CR
673(define-public guile-json
674 (package
675 (name "guile-json")
1f4f2360 676 (version "0.6.0")
6050a1fb 677 (source (origin
ffc72ec6
LC
678 (method url-fetch)
679 (uri (string-append "mirror://savannah/guile-json/guile-json-"
680 version ".tar.gz"))
681 (sha256
682 (base32
1f4f2360 683 "1qmjg7lbgciw95fkdzvlp9f68vv17kdjky42ywfzd4ffzwww0lgc"))
ffc72ec6
LC
684 (modules '((guix build utils)))
685 (snippet
686 ;; Make sure everything goes under .../site/X.Y, like Guile's
687 ;; search paths expects.
688 '(begin
689 (substitute* "configure"
690 (("ac_subst_vars='")
691 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
692 (substitute* '("Makefile.in" "json/Makefile.in")
693 (("moddir =.*/share/guile/site" all)
694 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
6050a1fb 695 (build-system gnu-build-system)
db5584dd 696 (native-inputs `(("guile" ,guile-2.0)))
6050a1fb
CR
697 (home-page "http://savannah.nongnu.org/projects/guile-json/")
698 (synopsis "JSON module for Guile")
699 (description
0f31d4f0
LC
700 "Guile-JSON supports parsing and building JSON documents according to the
701specification. These are the main features:
702
703@itemize
704@item Strictly complies to @uref{http://json.org, specification}.
705@item Build JSON documents programmatically via macros.
706@item Unicode support for strings.
707@item Allows JSON pretty printing.
708@end itemize\n")
71e0f217 709 (license license:lgpl3+)))
6050a1fb 710
947a5d47
LC
711(define-public guile2.2-json
712 (package-for-guile-2.2 guile-json))
713
6bc24063
CAW
714(define-public guile-minikanren
715 (package
716 (name "guile-minikanren")
717 (version "20150424.e844d85")
718 (source (origin
719 (method git-fetch)
720 (uri (git-reference
721 (url "https://github.com/ijp/minikanren.git")
722 (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
821f4dc2 723 (file-name (string-append name "-" version "-checkout"))
6bc24063
CAW
724 (sha256
725 (base32
726 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
727 (build-system trivial-build-system)
728 (arguments
4b74a29d 729 `(#:modules ((guix build utils))
6bc24063
CAW
730 #:builder
731 (begin
732 (use-modules (guix build utils)
4b74a29d
LC
733 (ice-9 match)
734 (ice-9 popen)
735 (ice-9 rdelim))
736
6bc24063 737 (let* ((out (assoc-ref %outputs "out"))
4b74a29d
LC
738 (guile (assoc-ref %build-inputs "guile"))
739 (effective (read-line
740 (open-pipe* OPEN_READ
741 (string-append guile "/bin/guile")
742 "-c" "(display (effective-version))")))
743 (module-dir (string-append out "/share/guile/site/"
744 effective))
6bc24063 745 (source (assoc-ref %build-inputs "source"))
f3d8cd79 746 (doc (string-append out "/share/doc/guile-minikanren"))
6bc24063
CAW
747 (scm-files '("minikanren.scm"
748 "minikanren/mkextraforms.scm"
749 "minikanren/mkprelude.scm"
750 "minikanren/mk.scm"))
751 (guild (string-append (assoc-ref %build-inputs "guile")
752 "/bin/guild")))
753 ;; Make installation directories.
754 (mkdir-p (string-append module-dir "/minikanren"))
755 (mkdir-p doc)
756
757 ;; Compile .scm files and install.
758 (chdir source)
759 (setenv "GUILE_AUTO_COMPILE" "0")
760 (for-each (lambda (file)
761 (let* ((dest-file (string-append module-dir "/"
76e6e663 762 file))
6bc24063
CAW
763 (go-file (match (string-split file #\.)
764 ((base _)
765 (string-append module-dir "/"
766 base ".go")))))
767 ;; Install source module.
768 (copy-file file dest-file)
769 ;; Install compiled module.
770 (unless (zero? (system* guild "compile"
771 "-L" source
772 "-o" go-file
773 file))
774 (error (format #f "Failed to compile ~s to ~s!"
775 file go-file)))))
776 scm-files)
777
778 ;; Also copy over the README.
96c46210 779 (install-file "README.org" doc)
6bc24063
CAW
780 #t))))
781 (inputs
782 `(("guile" ,guile-2.0)))
783 (home-page "https://github.com/ijp/minikanren")
e881752c 784 (synopsis "MiniKanren declarative logic system, packaged for Guile")
6bc24063
CAW
785 (description
786 "MiniKanren is a relational programming extension to the Scheme
787programming Language, written as a smaller version of Kanren suitable for
788pedagogical purposes. It is featured in the book, The Reasoned Schemer,
789written by Dan Friedman, William Byrd, and Oleg Kiselyov.
790
e881752c 791This is Ian Price's r6rs packaged version of miniKanren, which deviates
6bc24063
CAW
792slightly from miniKanren mainline.
793
794See http://minikanren.org/ for more on miniKanren generally.")
71e0f217 795 (license license:expat)))
6bc24063 796
947a5d47
LC
797(define-public guile2.2-minikanren
798 (package-for-guile-2.2 guile-minikanren))
799
32e14fc1
CAW
800(define-public guile-irregex
801 (package
802 (name "guile-irregex")
fb73f07a 803 (version "0.9.6")
32e14fc1
CAW
804 (source (origin
805 (method url-fetch)
806 (uri (string-append
807 "http://synthcode.com/scheme/irregex/irregex-"
d03f9446 808 version ".tar.gz"))
32e14fc1
CAW
809 (sha256
810 (base32
fb73f07a 811 "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq"))))
32e14fc1
CAW
812 (build-system gnu-build-system)
813 (arguments
814 `(#:modules ((guix build utils)
815 (ice-9 match)
fe447664
LC
816 (ice-9 rdelim)
817 (ice-9 popen)
32e14fc1
CAW
818 (guix build gnu-build-system))
819 #:phases
820 (modify-phases %standard-phases
32e14fc1
CAW
821 (delete 'configure)
822 (delete 'build)
823 (delete 'check)
824 (replace 'install
825 (lambda* (#:key inputs outputs #:allow-other-keys)
fe447664
LC
826 (let* ((out (assoc-ref outputs "out"))
827 (effective (read-line
828 (open-pipe* OPEN_READ
829 "guile" "-c"
830 "(display (effective-version))")))
831 (module-dir (string-append out "/share/guile/site/"
832 effective))
833 (source (assoc-ref inputs "source"))
834 (doc (string-append out "/share/doc/guile-irregex/"))
835 (guild (string-append (assoc-ref %build-inputs "guile")
836 "/bin/guild")))
837 ;; Make installation directories.
838 (mkdir-p (string-append module-dir "/rx/source"))
839 (mkdir-p doc)
840
841 ;; Compile .scm files and install.
842 (setenv "GUILE_AUTO_COMPILE" "0")
843
844 (for-each (lambda (copy-info)
845 (match copy-info
846 ((src-file dest-file-basis)
847 (let* ((dest-file (string-append
32e14fc1 848 module-dir dest-file-basis
fe447664
LC
849 ".scm"))
850 (go-file (string-append
851 module-dir dest-file-basis
852 ".go")))
853 ;; Install source module.
854 (copy-file src-file
855 dest-file)
856 ;; Install compiled module.
857 (unless (zero? (system* guild "compile"
858 "-L" (getcwd)
859 "-o" go-file
860 src-file))
861 (error (format #f "Failed to compile ~s to ~s!"
862 src-file dest-file)))))))
863 '(("irregex-guile.scm" "/rx/irregex")
864 ("irregex.scm" "/rx/source/irregex")
865 ;; Not really reachable via guile's packaging system,
866 ;; but nice to have around
867 ("irregex-utils.scm" "/rx/source/irregex-utils")))
868
869 ;; Also copy over the README.
870 (install-file "irregex.html" doc)
871 #t))))))
32e14fc1
CAW
872 (inputs
873 `(("guile" ,guile-2.0)))
874 (home-page "http://synthcode.com/scheme/irregex")
875 (synopsis "S-expression based regular expressions")
876 (description
877 "Irregex is an s-expression based alternative to your classic
878string-based regular expressions. It implements SRFI 115 and is deeply
879inspired by the SCSH regular expression system.")
71e0f217 880 (license license:bsd-3)))
93e7199b 881
947a5d47
LC
882(define-public guile2.2-irregex
883 (package-for-guile-2.2 guile-irregex))
884
93e7199b
CAW
885;; There are two guile-gdbm packages, one using the FFI and one with
886;; direct C bindings, hence the verbose name.
887
888(define-public guile-gdbm-ffi
889 (package
890 (name "guile-gdbm-ffi")
891 (version "20120209.fa1d5b6")
892 (source (origin
893 (method git-fetch)
894 (uri (git-reference
895 (url "https://github.com/ijp/guile-gdbm.git")
896 (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246")))
821f4dc2 897 (file-name (string-append name "-" version "-checkout"))
93e7199b
CAW
898 (sha256
899 (base32
900 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
901 (build-system trivial-build-system)
902 (arguments
903 `(#:modules
904 ((guix build utils))
905 #:builder
906 (begin
907 (use-modules (guix build utils)
a5bd6a5e
CAW
908 (ice-9 rdelim)
909 (ice-9 popen))
910
911 ;; Avoid warnings we can safely ignore
912 (setenv "GUILE_AUTO_COMPILE" "0")
93e7199b
CAW
913
914 (let* ((out (assoc-ref %outputs "out"))
a5bd6a5e
CAW
915 (effective-version
916 (read-line
917 (open-pipe* OPEN_READ
918 (string-append
919 (assoc-ref %build-inputs "guile")
920 "/bin/guile")
921 "-c" "(display (effective-version))")))
922 (module-dir (string-append out "/share/guile/site/"
923 effective-version))
93e7199b
CAW
924 (source (assoc-ref %build-inputs "source"))
925 (doc (string-append out "/share/doc"))
926 (guild (string-append (assoc-ref %build-inputs "guile")
927 "/bin/guild"))
928 (gdbm.scm-dest
929 (string-append module-dir "/gdbm.scm"))
930 (gdbm.go-dest
a5bd6a5e
CAW
931 (string-append module-dir "/gdbm.go"))
932 (compile-file
933 (lambda (in-file out-file)
934 (system* guild "compile" "-o" out-file in-file))))
93e7199b
CAW
935 ;; Make installation directories.
936 (mkdir-p module-dir)
937 (mkdir-p doc)
938
939 ;; Switch directory for compiling and installing
940 (chdir source)
941
942 ;; copy the source
943 (copy-file "gdbm.scm" gdbm.scm-dest)
944
945 ;; Patch the FFI
946 (substitute* gdbm.scm-dest
947 (("\\(dynamic-link \"libgdbm\"\\)")
948 (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
949 (assoc-ref %build-inputs "gdbm"))))
950
951 ;; compile to the destination
a5bd6a5e 952 (compile-file gdbm.scm-dest gdbm.go-dest)))))
93e7199b
CAW
953 (inputs
954 `(("guile" ,guile-2.0)))
955 (propagated-inputs
956 `(("gdbm" ,gdbm)))
957 (home-page "https://github.com/ijp/guile-gdbm")
958 (synopsis "Guile bindings to the GDBM library via Guile's FFI")
959 (description
960 "Guile bindings to the GDBM key-value storage system, using
961Guile's foreign function interface.")
71e0f217 962 (license license:gpl3+)))
93e7199b 963
2737bcff
CAW
964(define-public guile2.2-gdbm-ffi
965 (package-for-guile-2.2 guile-gdbm-ffi))
966
e8ac1f8f
LC
967(define-public guile-sqlite3
968 (let ((commit "607721fe1174a299e45d457acacf94eefb964071"))
969 (package
970 (name "guile-sqlite3")
971 (version (string-append "0.0-0." (string-take commit 7)))
972
ae21519f
LC
973 ;; XXX: This used to be available read-only at
974 ;; <https://www.gitorious.org/guile-sqlite3/guile-sqlite3.git/> but it
975 ;; eventually disappeared, so we have our own copy here.
976 (home-page "https://notabug.org/civodul/guile-sqlite3.git")
e8ac1f8f
LC
977 (source (origin
978 (method git-fetch)
979 (uri (git-reference
980 (url home-page)
981 (commit commit)))
982 (sha256
983 (base32
984 "09gaffhh5rawz5kdmqx2ahvj1ngvxddp469r18bmjz3sz8p0slj2"))
985 (file-name (string-append name "-" version "-checkout"))
986 (modules '((guix build utils)))
987 (snippet
988 ;; Upgrade 'Makefile.am' to the current way of doing things.
989 '(substitute* "Makefile.am"
990 (("TESTS_ENVIRONMENT")
991 "TEST_LOG_COMPILER")))))
992
993 (build-system gnu-build-system)
994 (native-inputs
995 `(("autoconf" ,autoconf)
996 ("automake" ,automake)
997 ("pkg-config" ,pkg-config)))
998 (inputs
999 `(("guile" ,guile-2.0)
1000 ("sqlite" ,sqlite)))
1001 (arguments
1002 '(#:phases (modify-phases %standard-phases
1003 (add-before 'configure 'autoreconf
1004 (lambda _
1005 (zero? (system* "autoreconf" "-vfi"))))
1006 (add-before 'build 'set-sqlite3-file-name
1007 (lambda* (#:key inputs #:allow-other-keys)
1008 (substitute* "sqlite3.scm"
1009 (("\"libsqlite3\"")
1010 (string-append "\"" (assoc-ref inputs "sqlite")
1011 "/lib/libsqlite3\"")))
1012 #t)))))
1013 (synopsis "Access SQLite databases from Guile")
1014 (description
1015 "This package provides Guile bindings to the SQLite database system.")
71e0f217 1016 (license license:gpl3+))))
e8ac1f8f 1017
27f5e13e
DT
1018(define-public haunt
1019 (package
1020 (name "haunt")
9b1a497e 1021 (version "0.2.1")
27f5e13e
DT
1022 (source (origin
1023 (method url-fetch)
4960beaa 1024 (uri (string-append "https://files.dthompson.us/haunt/haunt-"
27f5e13e
DT
1025 version ".tar.gz"))
1026 (sha256
1027 (base32
9b1a497e 1028 "1fpaf1vm6s7j13fs35barjh5yajcc2rc3pi8r7278wpgp4i2vs3w"))))
27f5e13e 1029 (build-system gnu-build-system)
4ecbf6d2
LC
1030 (arguments
1031 `(#:modules ((ice-9 match) (ice-9 ftw)
1032 ,@%gnu-build-system-modules)
1033
1034 #:phases (modify-phases %standard-phases
1035 (add-after 'install 'wrap-haunt
1036 (lambda* (#:key outputs #:allow-other-keys)
1037 ;; Wrap the 'haunt' command to refer to the right
1038 ;; modules.
1039 (let* ((out (assoc-ref outputs "out"))
1040 (bin (string-append out "/bin"))
1041 (site (string-append
1042 out "/share/guile/site")))
1043 (match (scandir site)
1044 (("." ".." version)
1045 (let ((modules (string-append site "/" version)))
1046 (wrap-program (string-append bin "/haunt")
1047 `("GUILE_LOAD_PATH" ":" prefix
1048 (,modules))
1049 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
1050 (,modules)))
1051 #t)))))))))
4960beaa
DT
1052 (native-inputs
1053 `(("pkg-config" ,pkg-config)
1054 ("texinfo" ,texinfo)))
27f5e13e
DT
1055 (inputs
1056 `(("guile" ,guile-2.0)))
4960beaa 1057 (propagated-inputs
9b1a497e
AP
1058 `(("guile-reader" ,guile-reader)
1059 ("guile-commonmark" ,guile-commonmark)))
27f5e13e
DT
1060 (synopsis "Functional static site generator")
1061 (description "Haunt is a static site generator written in Guile
1062Scheme. Haunt features a functional build system and an extensible
1063interface for reading articles in any format.")
1064 (home-page "http://haunt.dthompson.us")
71e0f217 1065 (license license:gpl3+)))
27f5e13e 1066
44a2bdf8
AS
1067(define-public guile-config
1068 (package
1069 (name "guile-config")
3c98acb7 1070 (version "0.1.1")
44a2bdf8
AS
1071 (source (origin
1072 (method url-fetch)
1073 (uri (string-append
1074 "http://alex.pompo.co/software/" name "-" version
1075 ".tar.gz"))
1076 (sha256
1077 (base32
3c98acb7 1078 "1b719bn192f9wg24rr0zx8jpmygsvyhfi35iy778pb5p392snrn8"))))
44a2bdf8
AS
1079 (build-system gnu-build-system)
1080 (inputs
1081 `(("guile" ,guile-2.0)))
1082 (synopsis "Guile application configuration parsing library")
1083 (description
1084 "Guile Config is a library providing a declarative approach to
1085application configuration specification. The library provides clean
1086configuration declaration forms, and processors that take care of:
1087configuration file creation; configuration file parsing; command-line
1088parameter parsing using getopt-long; basic GNU command-line parameter
1089generation (--help, --usage, --version); automatic output generation for the
1090above command-line parameters.")
1091 (home-page "https://github.com/a-sassmannshausen/guile-config")
71e0f217 1092 (license license:agpl3+)))
44a2bdf8 1093
36548111
DT
1094(define-public guile-redis
1095 (package
1096 (name "guile-redis")
1097 (version "0.1.0")
1098 (source (origin
1099 (method url-fetch)
1100 (uri (string-append "mirror://savannah/guile-redis/guile-redis-"
1101 version ".tar.gz"))
1102 (sha256
1103 (base32
1104 "0vx6if6b4r3kwx64vzbs6vpc0cpcr85x11w9vkzq27gw8n7isv56"))
1105 (modules '((guix build utils)))
1106 (snippet
ea833d30 1107 ;; Make sure everything goes under .../site/X.Y, like Guile's
36548111 1108 ;; search paths expects.
ea833d30
RW
1109 '(begin
1110 (substitute* "configure"
1111 (("ac_subst_vars='")
1112 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1113 (substitute* '("Makefile.in"
1114 "redis/Makefile.in"
1115 "redis/commands/Makefile.in")
1116 (("moddir =.*/share/guile/site" all)
1117 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
36548111
DT
1118 (build-system gnu-build-system)
1119 (native-inputs
1120 `(("guile" ,guile-2.0)))
1121 (home-page "http://savannah.nongnu.org/projects/guile-redis/")
1122 (synopsis "Redis client library for Guile")
1123 (description "Guile-redis provides a Scheme interface to the Redis
1124key-value cache and store.")
71e0f217 1125 (license license:lgpl3+)))
36548111 1126
85313be8
RW
1127(define-public guile2.2-redis
1128 (package-for-guile-2.2 guile-redis))
1129
9d373377
CAW
1130(define-public guile-wisp
1131 (package
1132 (name "guile-wisp")
1133 (version "0.9.0")
1134 (source (origin
1135 (method url-fetch)
1136 (uri (string-append "https://bitbucket.org/ArneBab/"
1137 "wisp/downloads/wisp-"
1138 version ".tar.gz"))
1139 (sha256
1140 (base32
1141 "0y5fxacalkgbv9s71h58vdvm2h2ln3rk024dd0vszwcf953as5fq"))))
1142 (build-system gnu-build-system)
1143 (arguments
1144 `(#:modules ((system base compile)
1145 ,@%gnu-build-system-modules)
1146 #:phases
1147 (modify-phases %standard-phases
1148 (add-before
1149 'configure 'substitute-before-config
1150
1151 (lambda* (#:key inputs #:allow-other-keys)
1152 (let ((bash (assoc-ref inputs "bash")))
1153 ;; configure checks for guile-2.0, but ours is just named "guile" :)
1154 (substitute* "configure"
1155 (("guile-2.0") "guile"))
1156 ;; Puts together some test files with /bin/bash hardcoded
1157 (substitute* "Makefile.in"
1158 (("/bin/bash")
1159 (string-append bash "/bin/bash") ))
1160 #t)))
1161
1162 ;; auto compilation breaks, but if we set HOME to /tmp,
1163 ;; that works ok
1164 (add-before
1165 'check 'auto-compile-hacky-workaround
1166 (lambda _
1167 (setenv "HOME" "/tmp")
1168 #t))
1169 (replace
1170 'install
1171 (lambda* (#:key outputs inputs #:allow-other-keys)
1172 (let* ((out (assoc-ref outputs "out"))
1173 (module-dir (string-append out "/share/guile/site/2.0"))
1174 (language-dir
1175 (string-append module-dir "/language/wisp"))
1176 (guild (string-append (assoc-ref inputs "guile")
1177 "/bin/guild")))
1178 ;; Make installation directories.
1179 (mkdir-p module-dir)
1180 (mkdir-p language-dir)
1181
1182 ;; copy the source
1183 (copy-file "wisp-scheme.scm"
1184 (string-append module-dir "/wisp-scheme.scm"))
1185 (copy-file "language/wisp/spec.scm"
1186 (string-append language-dir "/spec.scm"))
1187
1188 ;; compile to the destination
1189 (compile-file "wisp-scheme.scm"
1190 #:output-file (string-append
1191 module-dir "/wisp-scheme.go"))
1192 (compile-file "language/wisp/spec.scm"
1193 #:output-file (string-append
1194 language-dir "/spec.go"))
1195 #t))))))
1196 (home-page "http://draketo.de/english/wisp")
1197 (inputs
1198 `(("guile" ,guile-2.0)
1199 ("python" ,python)))
a124bbd2
SB
1200 (synopsis "Whitespace to lisp syntax for Guile")
1201 (description "Wisp is a syntax for Guile which provides a Python-like
9d373377
CAW
1202whitespace-significant language. It may be easier on the eyes for some
1203users and in some situations.")
71e0f217 1204 (license license:gpl3+)))
9d373377 1205
5649c8cd
DT
1206(define-public guile-sly
1207 (package
1208 (name "guile-sly")
1209 (version "0.1")
1210 (source (origin
1211 (method url-fetch)
8d5e7ad2 1212 (uri (string-append "https://files.dthompson.us/sly/sly-"
5649c8cd
DT
1213 version ".tar.gz"))
1214 (sha256
1215 (base32
1216 "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))))
1217 (build-system gnu-build-system)
1218 (arguments
1219 '(#:configure-flags
1220 (list (string-append "--with-libfreeimage-prefix="
1221 (assoc-ref %build-inputs "freeimage"))
1222 (string-append "--with-libgslcblas-prefix="
1223 (assoc-ref %build-inputs "gsl")))))
1224 (native-inputs
1225 `(("pkg-config" ,pkg-config)))
1226 (propagated-inputs
1227 `(("guile" ,guile-2.0)
1228 ("guile-sdl" ,guile-sdl)
1229 ("guile-opengl" ,guile-opengl)))
1230 (inputs
1231 `(("gsl" ,gsl)
1232 ("freeimage" ,freeimage)
1233 ("mesa" ,mesa)))
1234 (synopsis "2D/3D game engine for GNU Guile")
1235 (description "Sly is a 2D/3D game engine written in Guile Scheme. Sly
1236features a functional reactive programming interface and live coding
1237capabilities.")
1238 (home-page "http://dthompson.us/pages/software/sly.html")
71e0f217 1239 (license license:gpl3+)))
5649c8cd 1240
dec1e2b3
AB
1241(define-public g-wrap
1242 (package
1243 (name "g-wrap")
1244 (version "1.9.15")
1245 (source (origin
1246 (method url-fetch)
1247 (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
1248 version ".tar.gz"))
1249 (sha256
1250 (base32
1251 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
1252 (build-system gnu-build-system)
1253 (native-inputs
1254 `(("pkg-config" ,pkg-config)))
1255 (propagated-inputs
1256 `(("guile" ,guile-2.0)
1257 ("guile-lib" ,guile-lib)))
1258 (inputs
1259 `(("libffi" ,libffi)))
9e8599a3
PH
1260 (arguments
1261 `(#:phases
1262 (modify-phases %standard-phases
1263 (add-before 'configure 'pre-configure
1264 (lambda* (#:key outputs #:allow-other-keys)
1265 (let ((out (assoc-ref outputs "out")))
1266 (substitute* (find-files "." "^Makefile.in$")
1267 (("guilemoduledir =.*guile/site" all)
1268 (string-append all "/2.0")))
1269 #t))))))
dec1e2b3
AB
1270 (synopsis "Generate C bindings for Guile")
1271 (description "G-Wrap is a tool and Guile library for generating function
1272wrappers for inter-language calls. It currently only supports generating Guile
1273wrappers for C functions. Given a definition of the types and prototypes for
1274a given C interface, G-Wrap will automatically generate the C code that
1275provides access to that interface and its types from the Scheme level.")
1276 (home-page "http://www.nongnu.org/g-wrap/index.html")
71e0f217 1277 (license license:lgpl2.1+)))
dec1e2b3 1278
01497dfe
LC
1279(define-public guile-dbi
1280 (package
1281 (name "guile-dbi")
1282 (version "2.1.6")
1283 (source (origin
1284 (method url-fetch)
1285 (uri (string-append
1286 "http://download.gna.org/guile-dbi/guile-dbi-"
1287 version ".tar.gz"))
1288 (sha256
1289 (base32
1290 "116njrprhgrsv1qm904sp3b02rq01fx639r433d657gyhw3x159n"))))
1291 (build-system gnu-build-system)
1292 (arguments
1293 '(#:configure-flags
1294 (list (string-append
1295 "--with-guile-site-dir=" %output "/share/guile/site/2.0"))
1296 #:phases
1297 (modify-phases %standard-phases
1298 (add-after 'install 'patch-extension-path
1299 (lambda* (#:key outputs #:allow-other-keys)
1300 (let* ((out (assoc-ref outputs "out"))
1301 (dbi.scm (string-append
1302 out "/share/guile/site/2.0/dbi/dbi.scm"))
1303 (ext (string-append out "/lib/libguile-dbi")))
1304 (substitute* dbi.scm (("libguile-dbi") ext))
1305 #t))))))
1306 (propagated-inputs
1307 `(("guile" ,guile-2.0)))
1308 (synopsis "Guile database abstraction layer")
1309 (home-page "http://home.gna.org/guile-dbi/guile-dbi.html")
1310 (description
1311 "guile-dbi is a library for Guile that provides a convenient interface to
1312SQL databases. Database programming with guile-dbi is generic in that the same
1313programming interface is presented regardless of which database system is used.
1314It currently supports MySQL, Postgres and SQLite3.")
71e0f217 1315 (license license:gpl2+)))
01497dfe
LC
1316
1317(define-public guile-dbd-sqlite3
1318 (package
1319 (name "guile-dbd-sqlite3")
1320 (version "2.1.6")
1321 (source (origin
1322 (method url-fetch)
1323 (uri (string-append
1324 "http://download.gna.org/guile-dbi/guile-dbd-sqlite3-"
1325 version ".tar.gz"))
1326 (sha256
1327 (base32
1328 "0rg71jchxd2y8x496s8zmfmikr5g8zxi8zv2ar3f7a23pph92iw2"))))
1329 (build-system gnu-build-system)
1330 (native-inputs
1331 `(("pkg-config" ,pkg-config)))
1332 (inputs
1333 `(("sqlite" ,sqlite)
1334 ("zlib" ,(@ (gnu packages compression) zlib))))
1335 (propagated-inputs
1336 `(("guile-dbi" ,guile-dbi)))
1337 (synopsis "Guile DBI driver for SQLite")
1338 (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
1339 (description
1340 "guile-dbi is a library for Guile that provides a convenient interface to
1341SQL databases. This package implements the interface for SQLite.")
71e0f217 1342 (license license:gpl2+)))
01497dfe 1343
bd9af610
AK
1344(define-public guile-xosd
1345 (package
1346 (name "guile-xosd")
4b2b7135 1347 (version "0.2.1")
bd9af610
AK
1348 (source (origin
1349 (method url-fetch)
1350 (uri (string-append "https://github.com/alezost/" name
1351 "/releases/download/v" version
1352 "/" name "-" version ".tar.gz"))
1353 (sha256
1354 (base32
4b2b7135 1355 "1ri5065c16kmgrf2pysn2ymxjqi5302lhpb07wkl1jr75ym8fn8p"))))
bd9af610
AK
1356 (build-system gnu-build-system)
1357 (native-inputs
1358 `(("pkg-config" ,pkg-config)))
1359 (inputs
1360 `(("guile" ,guile-2.0)
1361 ("libx11" ,libx11)
1362 ("libxext" ,libxext)
1363 ("libxinerama" ,libxinerama)
1364 ("xosd" ,xosd)))
1365 (home-page "https://github.com/alezost/guile-xosd")
1366 (synopsis "XOSD bindings for Guile")
1367 (description
1368 "Guile-XOSD provides Guile bindings for @code{libxosd},
1369@uref{http://sourceforge.net/projects/libxosd/, the X On Screen Display
1370library}.")
71e0f217 1371 (license license:gpl3+)))
bd9af610 1372
07f7cc03
AK
1373(define-public guile-daemon
1374 (package
1375 (name "guile-daemon")
876d8f29 1376 (version "0.1.1")
07f7cc03
AK
1377 (source (origin
1378 (method url-fetch)
1379 (uri (string-append "https://github.com/alezost/" name
1380 "/releases/download/v" version
1381 "/" name "-" version ".tar.gz"))
1382 (sha256
1383 (base32
876d8f29 1384 "0wsq9l6a4sijq4i1r3kcddfaznsak2jc5k59gzkhs5il5d2kn5yi"))))
07f7cc03
AK
1385 (build-system gnu-build-system)
1386 (native-inputs
1387 `(("pkg-config" ,pkg-config)))
1388 (inputs
1389 `(("guile" ,guile-2.0)))
1390 (home-page "https://github.com/alezost/guile-daemon")
1391 (synopsis "Evaluate code in a running Guile process")
1392 (description
1393 "Guile-Daemon is a small Guile program that loads your initial
1394configuration file, and then reads and evaluates Guile expressions that
1395you send to a FIFO file.")
71e0f217 1396 (license license:gpl3+)))
07f7cc03 1397
e28e74a5
EE
1398(define-public guile-commonmark
1399 (package
1400 (name "guile-commonmark")
1401 (version "0.1")
1402 (source (origin
1403 (method url-fetch)
1404 (uri (string-append "https://github.com/OrangeShark/" name
1405 "/releases/download/v" version
1406 "/" name "-" version ".tar.gz"))
1407 (sha256
1408 (base32
757ce0f9
LC
1409 "12cb5fqvvgc87f5xp0ih5az305wnjia89l5jba83d0r2p8bfy0b0"))
1410 (modules '((guix build utils)))
1411 (snippet
1412 ;; Use the real effective version of Guile in directory names
1413 ;; instead of a hard-coded "/2.0".
1414 '(begin
1415 (substitute* "configure"
1416 (("ac_subst_vars='")
1417 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1418 (substitute* "Makefile.in"
1419 (("/site/2.0")
1420 "/site/@GUILE_EFFECTIVE_VERSION@"))))))
e28e74a5
EE
1421 (build-system gnu-build-system)
1422 (inputs
1423 `(("guile" ,guile-2.0)))
1424 (synopsis "CommonMark parser for Guile")
1425 (description
1426 "guile-commonmark is a library for parsing CommonMark, a fully specified
1427variant of Markdown. The library is written in Guile Scheme and is designed
1428to transform a CommonMark document to SXML. guile-commonmark tries to closely
1429follow the @uref{http://commonmark.org/, CommonMark spec}, the main difference
1430is no support for parsing block and inline level HTML.")
1431 (home-page "https://github.com/OrangeShark/guile-commonmark")
71e0f217 1432 (license license:lgpl3+)))
e28e74a5 1433
947a5d47
LC
1434(define-public guile2.2-commonmark
1435 (package-for-guile-2.2 guile-commonmark))
1436
3b5783fc
AB
1437(define-public guile-bytestructures
1438 (package
1439 (name "guile-bytestructures")
1440 (version "20160726.53127f6")
1441 (source (origin
1442 (method git-fetch)
1443 (uri (git-reference
1444 (url "https://github.com/TaylanUB/scheme-bytestructures")
1445 (commit "53127f608caf64b34fa41c389b2743b546fbe9da")))
1446 (file-name (string-append name "-" version "-checkout"))
1447 (sha256
1448 (base32
1449 "0l4nx1vp9fkrgrgwjiycj7nx6wfjfd39rqamv4pmq7issi8mrywq"))))
1450 (build-system trivial-build-system)
1451 (arguments
1452 `(#:modules ((guix build utils))
1453 #:builder
1454 (begin
1455 (use-modules (guix build utils)
1456 (ice-9 match)
1457 (ice-9 popen)
1458 (ice-9 rdelim))
1459 (let* ((out (assoc-ref %outputs "out"))
1460 (guile (assoc-ref %build-inputs "guile"))
1461 (effective (read-line
1462 (open-pipe* OPEN_READ
1463 (string-append guile "/bin/guile")
1464 "-c" "(display (effective-version))")))
1465 (module-dir (string-append out "/share/guile/site/"
1466 effective))
1467 (source (assoc-ref %build-inputs "source"))
1468 (doc (string-append out "/share/doc/scheme-bytestructures"))
1469 (scm-files (filter (lambda (path)
1470 (not (string-prefix? "bytestructures/r7" path)))
1471 (with-directory-excursion source
1472 (find-files "bytestructures" "\\.scm$"))))
1473 (guild (string-append (assoc-ref %build-inputs "guile")
1474 "/bin/guild")))
1475 ;; Make installation directories.
1476 (mkdir-p doc)
1477
1478 ;; Compile .scm files and install.
1479 (chdir source)
1480 (setenv "GUILE_AUTO_COMPILE" "0")
1481 (for-each (lambda (file)
1482 (let* ((dest-file (string-append module-dir "/"
1483 file))
1484 (go-file (string-append module-dir "/"
1485 (substring file 0
1486 (string-rindex file #\.))
1487 ".go")))
1488 ;; Install source module.
1489 (mkdir-p (dirname dest-file))
1490 (copy-file file dest-file)
1491
1492 ;; Install compiled module.
1493 (mkdir-p (dirname go-file))
1494 (unless (zero? (system* guild "compile"
1495 "-L" source
1496 "-o" go-file
1497 file))
1498 (error (format #f "Failed to compile ~s to ~s!"
1499 file go-file)))))
1500 scm-files)
1501
1502 ;; Also copy over the README.
1503 (install-file "README.md" doc)
1504 #t))))
1505 (inputs
1506 `(("guile" ,guile-2.0)))
1507 (home-page "https://github.com/TaylanUB/scheme-bytestructures")
1508 (synopsis "Structured access to bytevector contents for Guile")
1509 (description
1510 "Guile bytestructures offers a system imitating the type system
1511of the C programming language, to be used on bytevectors. C's type
1512system works on raw memory, and Guile works on bytevectors which are
1513an abstraction over raw memory. It's also more powerful than the C
1514type system, elevating types to first-class status.")
71e0f217 1515 (license license:gpl3+)))
3b5783fc 1516
472fc855
LC
1517(define-public guile-aspell
1518 (package
1519 (name "guile-aspell")
1520 (version "0.3")
1521 (source (origin
1522 (method url-fetch)
1523 (uri (string-append
1524 "http://lonelycactus.com/tarball/guile_aspell-"
1525 version ".tar.gz"))
1526 (sha256
1527 (base32
1528 "1wknn57x2qcsbn7zw6sbn1ma6fjsg8cvpnf78ak47s8jw6k6j75n"))))
1529 (build-system gnu-build-system)
1530 (arguments
1531 '(#:configure-flags (list (string-append "--with-guilesitedir="
1532 (assoc-ref %outputs "out")
1533 "/share/guile/site/2.0"))
1534 #:phases (modify-phases %standard-phases
1535 (add-before 'build 'set-libaspell-file-name
1536 (lambda* (#:key inputs #:allow-other-keys)
1537 (let ((aspell (assoc-ref inputs "aspell")))
1538 (substitute* "aspell/aspell.scm"
1539 (("\"libaspell\\.so\"")
1540 (string-append "\"" aspell
1541 "/lib/libaspell\"")))
1542 #t))))))
1543 (native-inputs `(("pkg-config" ,pkg-config)))
1544 (inputs `(("guile" ,guile-2.0)
1545 ("aspell" ,aspell)))
1546 (home-page "https://github.com/spk121/guile-aspell")
1547 (synopsis "Spell-checking from Guile")
1548 (description
1549 "guile-aspell is a Guile Scheme library for comparing a string against a
1550dictionary and suggesting spelling corrections.")
71e0f217 1551 (license license:gpl3+)))
472fc855 1552
a614ce38
LC
1553(define-public guile-bash
1554 ;; This project is currently retired. It was initially announced here:
1555 ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
1556 (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
1557 (revision "0"))
1558 (package
1559 (name "guile-bash")
1560 (version (string-append "0.1.6-" revision "." (string-take commit 7)))
1561 (home-page
1562 "https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git")
1563 (source (origin
1564 (method git-fetch)
1565 (uri (git-reference
1566 (commit commit)
1567 (url home-page)))
1568 (sha256
1569 (base32
1570 "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
1571 (file-name (string-append name "-" version "-checkout"))))
1572 (build-system gnu-build-system)
1573 (arguments
1574 '(#:phases (modify-phases %standard-phases
1575 (add-after 'unpack 'bootstrap
1576 (lambda _
1577 (zero? (system* "sh" "bootstrap")))))
1578
1579 #:configure-flags
1580 ;; Add -I to match 'bash.pc' of Bash 4.4.
1581 (list (string-append "CPPFLAGS=-I"
1582 (assoc-ref %build-inputs "bash:include")
1583 "/include/bash/include")
1584
1585 ;; The '.a' file is useless.
1586 "--disable-static"
1587
1588 ;; Install 'lib/bash' as Bash 4.4 expects.
1589 (string-append "--libdir=" (assoc-ref %outputs "out")
1590 "/lib/bash"))))
1591 (native-inputs `(("pkg-config" ,pkg-config)
1592 ("autoconf" ,(autoconf-wrapper))
1593 ("automake" ,automake)
1594 ("libtool" ,libtool)
1595 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
1596 ("gettext" ,gettext-minimal)))
1597 (inputs `(("guile" ,guile-2.0)
1598 ("bash:include" ,bash "include")))
1599 (synopsis "Extend Bash using Guile")
1600 (description
1601 "Guile-Bash provides a shared library and set of Guile modules,
1602allowing you to extend Bash in Scheme. Scheme interfaces allow you to access
1603the following aspects of Bash:
1604
1605@itemize
1606@item aliases;
1607@item setting and getting Bash variables;
1608@item creating dynamic variables;
1609@item creating Bash functions with a Scheme implementation;
1610@item reader macro for output capturing;
1611@item reader macro for evaluating raw Bash commands.
1612@end itemize
1613
1614To enable it, run:
1615
1616@example
1617enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
1618@end example
1619
1620and then run @command{scm example.scm}.")
71e0f217 1621 (license license:gpl3+))))
a614ce38 1622
c5793e7e
CAW
1623(define-public guile-8sync
1624 (package
1625 (name "guile-8sync")
1626 (version "0.4.1")
1627 (source (origin
1628 (method url-fetch)
1629 (uri (string-append "mirror://gnu/8sync/8sync-" version
1630 ".tar.gz"))
1631 (sha256
1632 (base32
1633 "1fvf8d2s3vvg4nyskbqaiqmlm2x571hv7hizcnmny45zvalydr9h"))))
1634 (build-system gnu-build-system)
1635 (native-inputs `(("autoconf" ,autoconf)
1636 ("automake" ,automake)
1637 ("guile" ,guile-next)
1638 ("pkg-config" ,pkg-config)
1639 ("texinfo" ,texinfo)))
1640 (arguments
1641 `(#:phases (modify-phases %standard-phases
1642 (add-before 'configure 'setenv
1643 (lambda _
1644 ;; quiet warnings
ab4a1731
CAW
1645 (setenv "GUILE_AUTO_COMPILE" "0")
1646 #t)))))
c5793e7e
CAW
1647 (home-page "https://gnu.org/s/8sync/")
1648 (synopsis "Asynchronous actor model library for Guile")
1649 (description
1650 "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
1651library for GNU Guile based on the actor model.
1652
1653Note that 8sync is only available for Guile 2.2 (guile-next in Guix).")
71e0f217 1654 (license license:lgpl3+)))
c5793e7e 1655
aaf1bdc3
CAW
1656(define-public guile-fibers
1657 (package
1658 (name "guile-fibers")
1659 (version "1.0.0")
1660 (source (origin
1661 (method url-fetch)
1662 (uri (string-append "https://wingolog.org/pub/fibers/fibers-"
1663 version ".tar.gz"))
1664 (sha256
1665 (base32
1666 "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0"))))
1667 (build-system gnu-build-system)
1668 (native-inputs
1669 `(("texinfo" ,texinfo)
1670 ("pkg-config" ,pkg-config)))
1671 (inputs
1672 `(("guile" ,guile-next)))
1673 (synopsis "Lightweight concurrency facility for Guile")
1674 (description
1675 "Fibers is a Guile library that implements a a lightweight concurrency
1676facility, inspired by systems like Concurrent ML, Go, and Erlang. A fiber is
1677like a \"goroutine\" from the Go language: a lightweight thread-like
1678abstraction. Systems built with Fibers can scale up to millions of concurrent
1679fibers, tens of thousands of concurrent socket connections, and many parallel
1680cores. The Fibers library also provides Concurrent ML-like channels for
1681communication between fibers.
1682
1683Note that Fibers makes use of some Guile 2.1/2.2-specific features and
1684is not available for Guile 2.0.")
1685 (home-page "https://github.com/wingo/fibers")
1686 (license license:lgpl3+)))
1687
bd233722
LC
1688(define-public guile-git
1689 (let ((revision "0")
1690 (commit "969514aa7224217bc3c1a4c5312a9469ac5f13d5"))
1691 (package
1692 (name "guile-git")
1693 (version (string-append "0.0-" revision "." (string-take commit 7)))
1694 (home-page "https://gitlab.com/amirouche/guile-git")
1695 (source (origin
1696 (method git-fetch)
1697 (uri (git-reference (url home-page) (commit commit)))
1698 (sha256
1699 (base32
1700 "079l8y6pjkmahb4k6dfqh3hk34pg540rrl29aixyvv86w9bdfjil"))
1701 (file-name (git-file-name name version))))
1702 (build-system gnu-build-system)
1703 (arguments
1704 '(#:phases (modify-phases %standard-phases
1705 (add-after 'unpack 'bootstrap
1706 (lambda _
1707 (zero? (system* "autoreconf" "-vfi")))))
1708
1709 ;; Test suite is not parallel-safe: the tests open same-named repos.
1710 #:parallel-tests? #f))
1711 (native-inputs
1712 `(("autoconf" ,autoconf)
1713 ("automake" ,automake)
1714 ("pkg-config" ,pkg-config)))
1715 (inputs
1716 `(("guile" ,guile-2.0)
1717 ("libgit2" ,libgit2)))
1718 (propagated-inputs
1719 `(("guile-bytestructures" ,guile-bytestructures)))
1720 (synopsis "Guile bindings for libgit2")
1721 (description
1722 "This package provides Guile bindings to libgit2, a library to
1723manipulate repositories of the Git version control system.")
1724 (license license:gpl3+))))
1725
1722d680 1726;;; guile.scm ends here