gnu: impressive: Update to 0.12.0.
[jackhill/guix/guix.git] / gnu / packages / guile.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
189be331 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
6cbee49d 3;;; Copyright © 2014, 2015, 2018 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>
95906eee 6;;; Copyright © 2016, 2017, 2018 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>
5245399f 9;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
12235a12 10;;; Copyright © 2016, 2017 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>
f252d6df 14;;; Copyright © 2017 David Thompson <davet@gnu.org>
581720bc 15;;; Copyright © 2017, 2018 Mathieu Othacehe <m.othacehe@gmail.com>
d109b1e8 16;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
4a78fd46 17;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
20897536 18;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
d4660a54 19;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
34e00c7b 20;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
f858e58f 21;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
c8e3651a 22;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
1722d680 23;;;
233e7676 24;;; This file is part of GNU Guix.
1722d680 25;;;
233e7676 26;;; GNU Guix is free software; you can redistribute it and/or modify it
1722d680
LC
27;;; under the terms of the GNU General Public License as published by
28;;; the Free Software Foundation; either version 3 of the License, or (at
29;;; your option) any later version.
30;;;
233e7676 31;;; GNU Guix is distributed in the hope that it will be useful, but
1722d680
LC
32;;; WITHOUT ANY WARRANTY; without even the implied warranty of
33;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34;;; GNU General Public License for more details.
35;;;
36;;; You should have received a copy of the GNU General Public License
233e7676 37;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
1722d680 38
1ffa7090 39(define-module (gnu packages guile)
71e0f217 40 #:use-module ((guix licenses) #:prefix license:)
59a43334 41 #:use-module (gnu packages)
472fc855 42 #:use-module (gnu packages aspell)
9c782445 43 #:use-module (gnu packages bash)
1ffa7090 44 #:use-module (gnu packages bdw-gc)
148585c2 45 #:use-module (gnu packages compression)
1ffa7090
LC
46 #:use-module (gnu packages gawk)
47 #:use-module (gnu packages gperf)
ee8ee748 48 #:use-module (gnu packages hurd)
1ffa7090
LC
49 #:use-module (gnu packages libffi)
50 #:use-module (gnu packages autotools)
f906d30c 51 #:use-module (gnu packages flex)
1ffa7090 52 #:use-module (gnu packages libunistring)
7119cca8 53 #:use-module (gnu packages linux)
1ffa7090
LC
54 #:use-module (gnu packages m4)
55 #:use-module (gnu packages multiprecision)
56 #:use-module (gnu packages pkg-config)
57 #:use-module (gnu packages readline)
ef02e1e9 58 #:use-module (gnu packages ncurses)
87d836b2 59 #:use-module (gnu packages ed)
ce0614dd 60 #:use-module (gnu packages base)
f906d30c 61 #:use-module (gnu packages texinfo)
01497dfe 62 #:use-module (gnu packages man)
f906d30c 63 #:use-module (gnu packages gettext)
b416aadf 64 #:use-module (gnu packages databases)
9d373377 65 #:use-module (gnu packages python)
fa6a3bb7 66 #:use-module (gnu packages tls)
5649c8cd
DT
67 #:use-module (gnu packages gl)
68 #:use-module (gnu packages sdl)
69 #:use-module (gnu packages maths)
70 #:use-module (gnu packages image)
bd233722 71 #:use-module (gnu packages version-control)
581720bc 72 #:use-module (gnu packages slang)
bd9af610
AK
73 #:use-module (gnu packages xdisorg)
74 #:use-module (gnu packages xorg)
f858e58f 75 #:use-module (gnu packages networking)
1722d680 76 #:use-module (guix packages)
87f5d366 77 #:use-module (guix download)
6bc24063 78 #:use-module (guix git-download)
32795fcf 79 #:use-module (guix build-system gnu)
977d8666 80 #:use-module (guix build-system guile)
6bc24063 81 #:use-module (guix build-system trivial)
32795fcf 82 #:use-module (guix utils)
d4660a54
MC
83 #:use-module (ice-9 match)
84 #:use-module ((srfi srfi-1) #:prefix srfi-1:))
1722d680
LC
85
86;;; Commentary:
87;;;
c44899a2 88;;; GNU Guile, and modules and extensions.
1722d680
LC
89;;;
90;;; Code:
91
c44899a2
LC
92(define-public guile-1.8
93 (package
94 (name "guile")
95 (version "1.8.8")
96 (source (origin
87f5d366 97 (method url-fetch)
0db342a5 98 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
99 ".tar.gz"))
100 (sha256
101 (base32
01eafd38 102 "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
fc1adab1 103 (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
c44899a2
LC
104 (build-system gnu-build-system)
105 (arguments '(#:configure-flags '("--disable-error-on-warning")
c44899a2
LC
106
107 ;; Insert a phase before `configure' to patch things up.
dc1d3cde
KK
108 #:phases
109 (modify-phases %standard-phases
110 (add-before 'configure 'patch-stuff
111 (lambda* (#:key outputs #:allow-other-keys)
112 ;; Add a call to `lt_dladdsearchdir' so that
113 ;; `libguile-readline.so' & co. are in the
114 ;; loader's search path.
115 (substitute* "libguile/dynl.c"
116 (("lt_dlinit.*$" match)
117 (format #f
118 " ~a~% lt_dladdsearchdir(\"~a/lib\");~%"
119 match
120 (assoc-ref outputs "out"))))
2f4fbe1c 121
dc1d3cde
KK
122 ;; The usual /bin/sh...
123 (substitute* "ice-9/popen.scm"
124 (("/bin/sh") (which "sh")))
125 #t)))))
01eafd38 126 (inputs `(("gawk" ,gawk)
c44899a2
LC
127 ("readline" ,readline)))
128
129 ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
130 ;; propagated.
131 (propagated-inputs `(("gmp" ,gmp)
be11b102 132 ("libltdl" ,libltdl)))
c44899a2
LC
133
134 ;; When cross-compiling, a native version of Guile itself is needed.
135 (self-native-input? #t)
136
9be8d7c8
LC
137 (native-search-paths
138 (list (search-path-specification
139 (variable "GUILE_LOAD_PATH")
af070955 140 (files '("share/guile/site")))))
9be8d7c8 141
f50d2669 142 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 143 (description
a22dc0c4
LC
144 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
145official extension language of the GNU system. It is an implementation of
146the Scheme language which can be easily embedded in other applications to
147provide a convenient means of extending the functionality of the application
148without requiring the source code to be rewritten.")
6fd52309 149 (home-page "https://www.gnu.org/software/guile/")
71e0f217 150 (license license:lgpl2.0+)))
c44899a2
LC
151
152(define-public guile-2.0
153 (package
154 (name "guile")
b5efd14a 155 (version "2.0.14")
c44899a2 156 (source (origin
87f5d366 157 (method url-fetch)
0db342a5 158 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
159 ".tar.xz"))
160 (sha256
161 (base32
b5efd14a 162 "10lxc6l5alf3lzbs3ihnbfy6dfcrsyf8667wa57f26vf4mk2ai78"))))
c44899a2
LC
163 (build-system gnu-build-system)
164 (native-inputs `(("pkgconfig" ,pkg-config)))
165 (inputs `(("libffi" ,libffi)
88da729f 166 ,@(libiconv-if-needed)
baf549df
LC
167
168 ;; We need Bash when cross-compiling because some of the scripts
169 ;; in bin/ refer to it. Use 'bash-minimal' because we don't need
170 ;; an interactive Bash with Readline and all.
171 ,@(if (target-mingw?) '() `(("bash" ,bash-minimal)))))
c44899a2
LC
172 (propagated-inputs
173 `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
174 ;; reads `-lltdl -lunistring', adding them here will add the needed
175 ;; `-L' flags. As for why the `.la' file lacks the `-L' flags, see
176 ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
177 ("libunistring" ,libunistring)
be11b102
LC
178
179 ;; Depend on LIBLTDL, not LIBTOOL. That way, we avoid some the extra
180 ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
181 ("libltdl" ,libltdl)
c44899a2
LC
182
183 ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
184 ;; must be propagated.
bda1bc6c 185 ("bdw-gc" ,libgc)
c44899a2
LC
186 ("gmp" ,gmp)))
187
188 (self-native-input? #t)
189
9bf62d9b
LC
190 (outputs '("out" "debug"))
191
8ffaa93b 192 (arguments
20897536
TGR
193 `(#:configure-flags '("--disable-static") ; saves 3 MiB
194 #:phases
195 (modify-phases %standard-phases
196 (add-before 'configure 'pre-configure
197 (lambda* (#:key inputs #:allow-other-keys)
198 ;; Tell (ice-9 popen) the file name of Bash.
199 (let ((bash (assoc-ref inputs "bash")))
200 (substitute* "module/ice-9/popen.scm"
201 ;; If bash is #f allow fallback for user to provide
202 ;; "bash" in PATH. This happens when cross-building to
203 ;; MinGW for which we do not have Bash yet.
204 (("/bin/sh")
205 ,@(if (target-mingw?)
206 '((if bash
207 (string-append bash "/bin/bash")
208 "bash"))
209 '((string-append bash "/bin/bash")))))
210 #t))))))
8ffaa93b 211
9be8d7c8
LC
212 (native-search-paths
213 (list (search-path-specification
214 (variable "GUILE_LOAD_PATH")
af070955 215 (files '("share/guile/site/2.0")))
9be8d7c8
LC
216 (search-path-specification
217 (variable "GUILE_LOAD_COMPILED_PATH")
b03f270e 218 (files '("lib/guile/2.0/site-ccache")))))
9be8d7c8 219
f50d2669 220 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 221 (description
a22dc0c4
LC
222 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
223official extension language of the GNU system. It is an implementation of
224the Scheme language which can be easily embedded in other applications to
225provide a convenient means of extending the functionality of the application
226without requiring the source code to be rewritten.")
6fd52309 227 (home-page "https://www.gnu.org/software/guile/")
71e0f217 228 (license license:lgpl3+)))
c44899a2 229
6f1ce09d
EB
230(define-public guile-2.0.13
231 ;; For testing a "minimal" Guix
232 (hidden-package
233 (package (inherit guile-2.0)
234 (name "guile")
235 (version "2.0.13")
236 (source (origin
237 (method url-fetch)
238 (uri (string-append "mirror://gnu/guile/guile-" version
239 ".tar.xz"))
240 (sha256
241 (base32
242 "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p")))))))
243
f6396d86 244(define-public guile-2.2
f906d30c 245 (package (inherit guile-2.0)
f6396d86 246 (name "guile")
2abd76e8 247 (version "2.2.4")
4eae7980
LC
248 (source (origin
249 (method url-fetch)
34d624ce
LC
250
251 ;; Note: we are limited to one of the compression formats
252 ;; supported by the bootstrap binaries, so no lzip here.
80a72572 253 (uri (string-append "mirror://gnu/guile/guile-" version
34d624ce 254 ".tar.xz"))
4eae7980
LC
255 (sha256
256 (base32
2abd76e8 257 "07p3g0v2ba2vlfbfidqzlgbhnzdx46wh2rgc5gszq1mjyx5bks6r"))
d9f0788a
LC
258 (modules '((guix build utils)))
259
260 ;; Remove the pre-built object files. Instead, build everything
261 ;; from source, at the expense of significantly longer build
262 ;; times (almost 3 hours on a 4-core Intel i5).
6cbee49d
MW
263 (snippet '(begin
264 (for-each delete-file
265 (find-files "prebuilt" "\\.go$"))
266 #t))))
4fbd0f4f 267 (properties '((timeout . 72000) ;20 hours
16b0f205 268 (max-silent-time . 36000))) ;10 hours (needed on ARM
1577a658 269 ; when heavily loaded)
dd90ed89
DT
270 (native-search-paths
271 (list (search-path-specification
272 (variable "GUILE_LOAD_PATH")
273 (files '("share/guile/site/2.2")))
274 (search-path-specification
275 (variable "GUILE_LOAD_COMPILED_PATH")
b03f270e 276 (files '("lib/guile/2.2/site-ccache")))))
33c3a214
LC
277
278 (arguments
279 (if (%current-target-system)
280 (substitute-keyword-arguments (package-arguments guile-2.0)
281 ((#:phases phases '%standard-phases)
282 `(modify-phases ,phases
283 (add-after 'unpack 'sacrifice-elisp-support
284 (lambda _
285 ;; Cross-compiling language/elisp/boot.el fails, so
286 ;; sacrifice it. See
287 ;; <https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=988aa29238fca862c7e2cb55f15762a69b4c16ce>
288 ;; for the upstream fix.
289 (substitute* "module/Makefile.in"
290 (("language/elisp/boot\\.el")
291 "\n"))
ee8ee748
LC
292 #t))
293 ,@(if (hurd-target?)
294 `((add-after 'unpack 'allow-madvise-ENOSYS
295 (lambda _
296 ;; Do not warn about ENOSYS on 'madvise'. This is
297 ;; what Guile commit
298 ;; 45e4ace6603e00b297e6542362273041aebe7305 does.
299 ;; TODO: Remove for Guile >= 2.2.5.
300 (substitute* "libguile/vm.c"
301 (("perror \\(\"madvise failed\"\\)")
302 "if (errno != ENOSYS) perror (\"madvised failed\");"))
303 #t)))
304 '()))))
33c3a214 305 (package-arguments guile-2.0)))))
4eae7980 306
34d624ce
LC
307(define-public guile-2.2/fixed
308 ;; A package of Guile 2.2 that's rarely changed. It is the one used
309 ;; in the `base' module, and thus changing it entails a full rebuild.
310 (package
311 (inherit guile-2.2)
a9308efe 312 (properties '((hidden? . #t) ;people should install 'guile-2.2'
5a5b3632
MW
313 (timeout . 72000) ;20 hours
314 (max-silent-time . 36000))))) ;10 hours (needed on ARM
315 ; when heavily loaded)
34d624ce 316
5cd074ea 317(define-public guile-next
35f90377 318 ;; This is the upcoming Guile 3.0, with JIT support.
55b616fd
DT
319 (let ((commit "6f3357b0df64c4be17e72079864c09a542f1c779")
320 (revision "1"))
35f90377
LC
321 (package
322 (inherit guile-2.2)
323 (name "guile-next")
121f32a1 324 (version "2.9.1")
35f90377 325 (source (origin
121f32a1
LC
326 (inherit (package-source guile-2.2))
327 (uri (string-append "https://alpha.gnu.org/gnu/guile/guile-"
328 version ".tar.xz"))
35f90377
LC
329 (sha256
330 (base32
121f32a1 331 "0iba93yqn6mvgid0rfsrg4amym36pg9m8cqdplxsy222blrj9gh1"))))
e14b3067
DT
332 (native-search-paths
333 (list (search-path-specification
334 (variable "GUILE_LOAD_PATH")
335 (files '("share/guile/site/3.0")))
336 (search-path-specification
337 (variable "GUILE_LOAD_COMPILED_PATH")
338 (files '("lib/guile/3.0/site-ccache"
121f32a1
LC
339 "share/guile/site/3.0")))))
340 (properties '((ftp-server . "alpha.gnu.org")
341 (upstream-name . "guile"))))))
5cd074ea 342
2ba2c98d
LC
343(define (make-guile-readline guile)
344 (package
345 (name "guile-readline")
346 (version (package-version guile))
347 (source (package-source guile))
348 (build-system gnu-build-system)
349 (arguments
350 '(#:configure-flags '("--disable-silent-rules")
351 #:phases (modify-phases %standard-phases
352 (add-before 'build 'chdir
353 (lambda* (#:key outputs #:allow-other-keys)
354 (invoke "make" "-C" "libguile" "scmconfig.h")
355 (invoke "make" "-C" "lib")
356 (chdir "guile-readline")
357
358 (substitute* "Makefile"
359 (("../libguile/libguile-[[:graph:]]+\\.la")
360 ;; Remove dependency on libguile-X.Y.la.
361 "")
362 (("^READLINE_LIBS = (.*)$" _ libs)
363 ;; Link against the provided libguile.
364 (string-append "READLINE_LIBS = "
365 "-lguile-$(GUILE_EFFECTIVE_VERSION) "
366 libs "\n"))
367 (("\\$\\(top_builddir\\)/meta/build-env")
368 ;; Use the provided Guile, not the one from
369 ;; $(builddir).
370 "")
371
372 ;; Install modules to the 'site' directories.
373 (("^moddir = .*$")
374 "moddir = $(pkgdatadir)/site/$(GUILE_EFFECTIVE_VERSION)\n")
375 (("^ccachedir = .*$")
376 "ccachedir = $(pkglibdir)/$(GUILE_EFFECTIVE_VERSION)/site-ccache\n"))
377
378 ;; Load 'guile-readline.so' from the right place.
379 (substitute* "ice-9/readline.scm"
380 (("load-extension \"guile-readline\"")
381 (format #f "load-extension \
382 (string-append ~s \"/lib/guile/\" (effective-version) \"/extensions/guile-readline\")"
383 (assoc-ref outputs "out"))))
384 #t)))))
385 (home-page (package-home-page guile))
386 (native-inputs (package-native-inputs guile))
387 (inputs
388 `(,@(package-inputs guile) ;to placate 'configure'
389 ,@(package-propagated-inputs guile)
390 ("guile" ,guile)
391 ("readline" ,readline)))
392 (synopsis "Line editing support for GNU Guile")
393 (description
394 "This module provides line editing support via the Readline library for
395GNU@tie{}Guile. Use the @code{(ice-9 readline)} module and call its
396@code{activate-readline} procedure to enable it.")
397 (license license:gpl3+)))
398
399(define-public guile-readline
400 (make-guile-readline guile-2.2))
401
8f4acad7
LC
402(define (guile-variant-package-name prefix)
403 (lambda (name)
404 "Return NAME with PREFIX instead of \"guile-\", when applicable."
405 (if (string-prefix? "guile-" name)
406 (string-append prefix "-"
407 (string-drop name
408 (string-length "guile-")))
409 name)))
947a5d47
LC
410
411(define package-for-guile-2.2
412 ;; A procedure that rewrites the dependency tree of the given package to use
f6396d86
LC
413 ;; GUILE-2.2 instead of GUILE-2.0.
414 (package-input-rewriting `((,guile-2.0 . ,guile-2.2))
8f4acad7
LC
415 (guile-variant-package-name "guile2.2")))
416
417(define package-for-guile-2.0
418 ;; Likewise, but the other way around. :-)
419 (package-input-rewriting `((,guile-2.2 . ,guile-2.0))
420 (guile-variant-package-name "guile2.0")))
947a5d47 421
4eae7980 422(define-public guile-for-guile-emacs
f6396d86 423 (package (inherit guile-2.2)
4eae7980
LC
424 (name "guile-for-guile-emacs")
425 (version "20150510.d8d9a8d")
f906d30c
CAW
426 (source (origin
427 (method git-fetch)
428 (uri (git-reference
4eae7980
LC
429 (url "git://git.hcoop.net/git/bpt/guile.git")
430 (commit "d8d9a8da05ec876acba81a559798eb5eeceb5a17")))
51988e3a 431 (file-name (string-append name "-" version "-checkout"))
f906d30c
CAW
432 (sha256
433 (base32
4eae7980 434 "00sprsshy16y8pxjy126hr2adqcvvzzz96hjyjwgg8swva1qh6b0"))))
f906d30c
CAW
435 (arguments
436 (substitute-keyword-arguments `(;; Tests aren't passing for now.
437 ;; Obviously we should re-enable this!
438 #:tests? #f
f6396d86 439 ,@(package-arguments guile-2.2))
f906d30c
CAW
440 ((#:phases phases)
441 `(modify-phases ,phases
442 (add-after 'unpack 'autogen
443 (lambda _
444 (zero? (system* "sh" "autogen.sh"))))
445 (add-before 'autogen 'patch-/bin/sh
446 (lambda _
447 (substitute* "build-aux/git-version-gen"
448 (("#!/bin/sh") (string-append "#!" (which "sh"))))
449 #t))))))
450 (native-inputs
451 `(("autoconf" ,autoconf)
452 ("automake" ,automake)
453 ("libtool" ,libtool)
454 ("flex" ,flex)
455 ("texinfo" ,texinfo)
b94a6ca0 456 ("gettext" ,gettext-minimal)
f6396d86 457 ,@(package-native-inputs guile-2.2)))
daeb61f7
RW
458 ;; Same as in guile-2.0
459 (native-search-paths
460 (list (search-path-specification
461 (variable "GUILE_LOAD_PATH")
462 (files '("share/guile/site/2.0")))
463 (search-path-specification
464 (variable "GUILE_LOAD_COMPILED_PATH")
31769b9f 465 (files '("lib/guile/2.0/site-ccache"
daeb61f7 466 "share/guile/site/2.0")))))))
be3feafe 467
71311e4e
RW
468;; There has not been any release yet.
469(define-public guildhall
470 (let ((commit "2fe2cc539f4b811bbcd69e58738db03eb5a2b778")
471 (revision "1"))
472 (package
473 (name "guildhall")
474 (version (string-append "0-" revision "." (string-take commit 9)))
475 (source (origin
476 (method git-fetch)
477 (uri (git-reference
478 (url "https://github.com/ijp/guildhall.git")
479 (commit commit)))
480 (file-name (string-append name "-" version "-checkout"))
481 (sha256
482 (base32
483 "115bym7bg66h3gs399yb2vkzc2ygriaqsn4zbrg8f054mgy8wzn1"))))
484 (build-system gnu-build-system)
485 (arguments
486 `(#:phases
487 (modify-phases %standard-phases
488 ;; Tests fail without this fix because they try to load the bash
489 ;; executable as a Scheme file. See bug report at
490 ;; https://github.com/ijp/guildhall/issues/22
491 (add-after 'unpack 'fix-bug-22
492 (lambda _
493 (substitute* "Makefile.am"
494 (("TESTS_ENVIRONMENT=.*")
495 "AM_TESTS_ENVIRONMENT=srcdir=$(abs_top_srcdir)/tests/
496TEST_EXTENSIONS = .scm
497SCM_LOG_COMPILER= $(top_builddir)/env $(GUILE)
498AM_SCM_LOG_FLAGS = --no-auto-compile -s")
499 ;; FIXME: one of the database tests fails for unknown
500 ;; reasons. It does not fail when run outside of Guix.
501 (("tests/database.scm") ""))
2cabd293 502 #t)))))
71311e4e
RW
503 (inputs
504 `(("guile" ,guile-2.0)))
505 (native-inputs
506 `(("zip" ,zip) ; for tests
507 ("autoconf" ,autoconf)
508 ("automake" ,automake)
509 ("texinfo" ,texinfo)))
510 (synopsis "Package manager for Guile")
511 (description
512 "Guildhall is a package manager written for Guile Scheme. A guild is
513an association of independent craftspeople. A guildhall is where they meet.
514This Guildhall aims to make a virtual space for Guile wizards and journeyfolk
515to share code.
516
517On a practical level, Guildhall lets you share Scheme modules and programs
518over the internet, and install code that has been shared by others. Guildhall
519can handle dependencies, so when a program requires several libraries, and
520each of those has further dependencies, all of the prerequisites for the
521program can be installed in one go.")
522 (home-page "https://github.com/ijp/guildhall")
523 (license license:gpl3+))))
524
c44899a2
LC
525\f
526;;;
527;;; Extensions.
528;;;
529
7119cca8 530(define-public artanis
12235a12
AFN
531 (let ((release "0.2.1")
532 (revision 3))
533 (package
534 (name "artanis")
535 (version (if (zero? revision)
536 release
537 (string-append release "-"
538 (number->string revision))))
539 (source (origin
540 (method url-fetch)
541 (uri (string-append "mirror://gnu/artanis/artanis-"
542 release ".tar.gz"))
543 (file-name (string-append name "-" version ".tar.gz"))
544 (sha256
545 (base32
546 "041ajcg2pz918kd9iqcj4inpzddc3impvz3r2nhlpbv8zrz011hn"))
547 (modules '((guix build utils)))
548 (snippet
549 '(begin
550 (delete-file-recursively "artanis/third-party/json.scm")
551 (delete-file-recursively "artanis/third-party/json")
552 (substitute* '("artanis/artanis.scm"
553 "artanis/oht.scm")
554 (("(#:use-module \\()artanis third-party (json\\))" _
555 use-module json)
556 (string-append use-module json)))
557 (substitute* "artanis/oht.scm"
558 (("([[:punct:][:space:]]+)(->json-string)([[:punct:][:space:]]+)"
559 _ pre json-string post)
560 (string-append pre
561 "scm" json-string
562 post)))
563 (substitute* "artanis/artanis.scm"
564 (("[[:punct:][:space:]]+->json-string[[:punct:][:space:]]+")
6cbee49d
MW
565 ""))
566 #t))))
12235a12
AFN
567 (build-system gnu-build-system)
568 ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
569 (inputs `(("guile" ,guile-2.2)
570 ("guile-json" ,guile-json)))
571 (native-inputs `(("bash" ,bash) ;for the `source' builtin
572 ("pkgconfig" ,pkg-config)
573 ("util-linux" ,util-linux))) ;for the `script' command
574 (arguments
575 '(#:make-flags
576 ;; TODO: The documentation must be built with the `docs' target.
577 (let* ((out (assoc-ref %outputs "out"))
578 (scm (string-append out "/share/guile/site/2.2"))
579 (go (string-append out "/lib/guile/2.2/site-ccache")))
580 ;; Don't use (%site-dir) for site paths.
581 (list (string-append "MOD_PATH=" scm)
582 (string-append "MOD_COMPILED_PATH=" go)))
583 #:test-target "test"
584 #:phases
585 (modify-phases %standard-phases
586 (add-before 'install 'substitute-root-dir
587 (lambda* (#:key outputs #:allow-other-keys)
588 (let ((out (assoc-ref outputs "out")))
589 (substitute* "Makefile" ;ignore the execution of bash.bashrc
590 ((" /etc/bash.bashrc") " /dev/null"))
591 (substitute* "Makefile" ;set the root of config files to OUT
592 ((" /etc") (string-append " " out "/etc")))
593 (mkdir-p (string-append out "/bin")) ;for the `art' executable
594 #t)))
595 (add-after 'install 'wrap-art
596 (lambda* (#:key outputs #:allow-other-keys)
597 (let* ((out (assoc-ref outputs "out"))
598 (bin (string-append out "/bin"))
599 (scm (string-append out "/share/guile/site/2.2"))
600 (go (string-append out "/lib/guile/2.2/site-ccache")))
601 (wrap-program (string-append bin "/art")
602 `("GUILE_LOAD_PATH" ":" prefix (,scm))
603 `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,go)))
604 #t))))))
605 (synopsis "Web application framework written in Guile")
606 (description "GNU Artanis is a web application framework written in Guile
7119cca8
ML
607Scheme. A web application framework (WAF) is a software framework that is
608designed to support the development of dynamic websites, web applications, web
609services and web resources. The framework aims to alleviate the overhead
610associated with common activities performed in web development. Artanis
611provides several tools for web development: database access, templating
612frameworks, session management, URL-remapping for RESTful, page caching, and
613more.")
12235a12
AFN
614 (home-page "https://www.gnu.org/software/artanis/")
615 (license (list license:gpl3+ license:lgpl3+))))) ;dual license
7119cca8 616
d6d9f1f7 617(define-public guile-reader
1722d680 618 (package
d6d9f1f7 619 (name "guile-reader")
77aa0887 620 (version "0.6.2")
d6d9f1f7
LC
621 (source (origin
622 (method url-fetch)
623 (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
624 version ".tar.gz"))
625 (sha256
626 (base32
77aa0887 627 "0592s2s8ampqmqwilc4fvcild6rb9gy79di6vxv5kcdmv23abkgx"))))
d6d9f1f7
LC
628 (build-system gnu-build-system)
629 (native-inputs `(("pkgconfig" ,pkg-config)
2fa077f3 630 ("gperf" ,gperf-3.0)))
bdf1022d 631 (inputs `(("guile" ,guile-2.2)))
d6d9f1f7
LC
632 (synopsis "Framework for building readers for GNU Guile")
633 (description
634 "Guile-Reader is a simple framework for building readers for GNU Guile.
1722d680
LC
635
636The idea is to make it easy to build procedures that extend Guile’s read
35b9e423 637procedure. Readers supporting various syntax variants can easily be written,
1722d680 638possibly by re-using existing “token readers” of a standard Scheme
35b9e423 639readers. For example, it is used to implement Skribilo’s R5RS-derived
1722d680
LC
640document syntax.
641
642Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
643hopefully more powerful and flexible (for instance, one may instantiate as
644many readers as needed).")
340978d7 645 (home-page "https://www.nongnu.org/guile-reader/")
71e0f217 646 (license license:gpl3+)))
1722d680 647
bdf1022d
LC
648(define-public guile2.0-reader
649 (package-for-guile-2.0 guile-reader))
517fce63 650(define-public guile2.2-reader
bdf1022d 651 (deprecated-package "guile2.2-reader" guile-reader))
517fce63 652
ef02e1e9
LC
653(define-public guile-ncurses
654 (package
655 (name "guile-ncurses")
958d357a 656 (version "2.2")
ef02e1e9
LC
657 (source (origin
658 (method url-fetch)
659 (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
660 version ".tar.gz"))
661 (sha256
662 (base32
958d357a 663 "1wvggbr4xv8idh1hzd8caj4xfp4pln78a7w1wqzd4zgzwmnzxr2f"))))
ef02e1e9
LC
664 (build-system gnu-build-system)
665 (inputs `(("ncurses" ,ncurses)
81eaa3f8 666 ("guile" ,guile-2.2)))
0881b616 667 (native-inputs `(("pkg-config" ,pkg-config)))
ef02e1e9 668 (arguments
2c6b7c7d 669 '(#:configure-flags (list "--with-ncursesw" ; Unicode support
0881b616 670 "--with-gnu-filesystem-hierarchy")
fa37f21b
EF
671 #:phases
672 (modify-phases %standard-phases
8c4e99cc 673 (add-before 'build 'fix-libguile-ncurses-file-name
fa37f21b 674 (lambda* (#:key outputs #:allow-other-keys)
8c4e99cc
JD
675 (and (zero? (system* "make" "install"
676 "-C" "src/ncurses"
677 "-j" (number->string
678 (parallel-job-count))))
679 (let* ((out (assoc-ref outputs "out"))
680 (dir "src/ncurses")
681 (files (find-files dir ".scm")))
682 (substitute* files
683 (("\"libguile-ncurses\"")
81eaa3f8 684 (format #f "\"~a/lib/guile/2.2/libguile-ncurses\""
8c4e99cc
JD
685 out)))
686 #t)))))))
d81850d4 687 (home-page "https://www.gnu.org/software/guile-ncurses/")
f50d2669 688 (synopsis "Guile bindings to ncurses")
ef02e1e9 689 (description
12bcf94a 690 "guile-ncurses provides Guile language bindings for the ncurses
79c311b8 691library.")
71e0f217 692 (license license:lgpl3+)))
ef02e1e9 693
4d02e9ff
DM
694(define-public guile-ncurses/gpm
695 (package
696 (inherit guile-ncurses)
697 (name "guile-ncurses-with-gpm")
698 (inputs `(("ncurses" ,ncurses/gpm)
699 ("guile" ,guile-2.2)))))
700
87d836b2
LC
701(define-public mcron
702 (package
703 (name "mcron")
67a51b67 704 (version "1.1.1")
87d836b2 705 (source (origin
cfbf6de1
LC
706 (method url-fetch)
707 (uri (string-append "mirror://gnu/mcron/mcron-"
708 version ".tar.gz"))
709 (sha256
710 (base32
67a51b67 711 "1i9mcp6r6my61zfiydsm3n6my41mwvl7dfala4q29qx0zn1ynlm4"))))
87d836b2 712 (build-system gnu-build-system)
cfbf6de1
LC
713 (arguments
714 '(#:phases (modify-phases %standard-phases
715 (add-before 'check 'set-timezone
716 (lambda* (#:key inputs #:allow-other-keys)
67a51b67
LC
717 ;; 'tests/job-specifier.scm' expects to be running in
718 ;; UTC-2 or something.
719 ;; FIXME: This issue is being investigated upstream, for
720 ;; now we'll just skip the tests (see below):
721 ;; <https://lists.gnu.org/archive/html/bug-mcron/2018-04/msg00005.html>.
cfbf6de1
LC
722 (let ((tzdata (assoc-ref inputs "tzdata")))
723 (setenv "TZDIR"
724 (string-append tzdata
725 "/share/zoneinfo"))
67a51b67 726 (setenv "TZ" "UTC-2")
cfbf6de1 727 #t)))
67a51b67 728 (add-before 'check 'adjust-tests
cfbf6de1 729 (lambda _
67a51b67
LC
730 (substitute* "tests/job-specifier.scm"
731 ;; (getpw) fails with "entry not found" in the build
732 ;; environment, so pass an argument.
733 (("\\(getpw\\)")
734 "(getpwnam (getuid))")
735 ;; The build environment lacks an entry for root in
736 ;; /etc/passwd.
737 (("\\(getpw 0\\)")
738 "(getpwnam \"nobody\")")
739
740 ;; FIXME: Skip the 4 faulty tests (see above).
741 (("\\(test-equal \"next-year\"" all)
742 (string-append "(test-skip 4)\n" all)))
743 #t)))))
cfbf6de1
LC
744 (native-inputs `(("pkg-config" ,pkg-config)
745 ("tzdata" ,tzdata-for-tests)))
746 (inputs `(("ed" ,ed) ("which" ,which) ("guile" ,guile-2.2)))
6fd52309 747 (home-page "https://www.gnu.org/software/mcron/")
f50d2669 748 (synopsis "Run jobs at scheduled times")
87d836b2 749 (description
79c311b8 750 "GNU Mcron is a complete replacement for Vixie cron. It is used to run
a22dc0c4 751tasks on a schedule, such as every hour or every Monday. Mcron is written in
79c311b8
LC
752Guile, so its configuration can be written in Scheme; the original cron
753format is also supported.")
71e0f217 754 (license license:gpl3+)))
87d836b2 755
01497dfe 756(define-public mcron2
cfbf6de1
LC
757 ;; This was mthl's mcron development branch, and it became mcron 1.1.
758 (deprecated-package "mcron2" mcron))
01497dfe 759
dfee30c7
AS
760(define-public guile-hall
761 (package
762 (name "guile-hall")
763 (version "0.1.1")
764 (source
765 (origin
766 (method git-fetch)
767 (uri (git-reference
768 (url "https://gitlab.com/a-sassmannshausen/guile-hall")
769 (commit "7d1094a12fe917209ce5b76c681cc8c862d4c65b")))
770 (file-name "guile-hall-0.1.1-checkout")
771 (sha256
772 (base32
773 "03kb09cjca98hlbx9mj12mqinzsnnvp6ci6i975n88pjhaxigyp1"))))
774 (build-system gnu-build-system)
775 (arguments
776 `(#:modules
777 ((ice-9 match)
778 (ice-9 ftw)
779 ,@%gnu-build-system-modules)
780 #:phases
781 (modify-phases
782 %standard-phases
783 (add-after
784 'install
785 'hall-wrap-binaries
786 (lambda* (#:key outputs #:allow-other-keys)
787 (let* ((out (assoc-ref outputs "out"))
788 (bin (string-append out "/bin/"))
789 (site (string-append out "/share/guile/site")))
790 (match (scandir site)
791 (("." ".." version)
792 (let ((modules (string-append site "/" version))
793 (compiled-modules
794 (string-append
795 out
796 "/lib/guile/"
797 version
798 "/site-ccache")))
799 (for-each
800 (lambda (file)
801 (wrap-program
802 (string-append bin file)
803 `("GUILE_LOAD_PATH" ":" prefix (,modules))
804 `("GUILE_LOAD_COMPILED_PATH"
805 ":"
806 prefix
807 (,compiled-modules))))
808 ,(list 'list "hall"))
809 #t)))))))))
810 (native-inputs
811 `(("autoconf" ,autoconf)
812 ("automake" ,automake)
813 ("pkg-config" ,pkg-config)
814 ("texinfo" ,texinfo)))
815 (inputs `(("guile" ,guile-2.2)))
816 (propagated-inputs
817 `(("guile-config" ,guile-config)))
818 (synopsis "Guile project tooling")
819 (description
820 "Hall is a command-line application and a set of Guile libraries that
821allow you to quickly create and publish Guile projects. It allows you to
822transparently support the GNU build system, manage a project hierarchy &
823provides tight coupling to Guix.")
824 (home-page
825 "https://gitlab.com/a-sassmannshausen/guile-hall")
826 (license license:gpl3+)))
827
814b18e5
AS
828(define-public guile-ics
829 (package
830 (name "guile-ics")
291c2d57 831 (version "0.2.0")
814b18e5
AS
832 (source (origin
833 (method git-fetch)
834 (uri (git-reference
835 (url "https://github.com/artyom-poptsov/guile-ics")
291c2d57 836 (commit (string-append "v" version))))
814b18e5
AS
837 (file-name (string-append name "-" version "-checkout"))
838 (sha256
839 (base32
291c2d57 840 "0qjjvadr7gibdq9jvwkmlkb4afsw9n2shfj9phpiadinxk3p4m2g"))))
814b18e5 841 (build-system gnu-build-system)
814b18e5 842 (native-inputs
464f5447 843 `(("autoconf" ,autoconf-wrapper)
814b18e5
AS
844 ("automake" ,automake)
845 ("texinfo" ,texinfo)
846 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
847 ("gettext" ,gettext-minimal)
848 ("pkg-config" ,pkg-config)))
d573d892
LC
849 (inputs `(("guile" ,guile-2.2) ("which" ,which)))
850 (propagated-inputs `(("guile-lib" ,guile-lib)))
814b18e5
AS
851 (home-page "https://github.com/artyom-poptsov/guile-ics")
852 (synopsis "Guile parser library for the iCalendar format")
853 (description
854 "Guile-ICS is an iCalendar (RFC5545) format parser library written in
855pure Scheme. The library can be used to read and write iCalendar data.
856
857The library is shipped with documentation in Info format and usage examples.")
71e0f217 858 (license license:gpl3+)))
814b18e5 859
3e9066fc
LC
860(define-public guile-lib
861 (package
862 (name "guile-lib")
6a9a50fd 863 (version "0.2.6.1")
3e9066fc 864 (source (origin
af126875
MC
865 (method url-fetch)
866 (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
867 version ".tar.gz"))
868 (sha256
869 (base32
6a9a50fd 870 "0aizxdif5dpch9cvs8zz5g8ds5s4xhfnwza2il5ji7fv2h7ks7bd"))))
3e9066fc
LC
871 (build-system gnu-build-system)
872 (arguments
af126875 873 '(#:make-flags
6a9a50fd 874 '("GUILE_AUTO_COMPILE=0") ; to prevent guild errors
af126875
MC
875 #:phases
876 (modify-phases %standard-phases
877 (add-before 'configure 'patch-module-dir
878 (lambda _
879 (substitute* "src/Makefile.in"
880 (("^moddir = ([[:graph:]]+)")
881 "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
882 (("^godir = ([[:graph:]]+)")
883 "godir = \
bf62b8ff 884$(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n"))
af126875 885 #t)))))
bf62b8ff 886 (native-inputs `(("pkg-config" ,pkg-config)))
1b0f266e 887 (inputs `(("guile" ,guile-2.2)))
340978d7 888 (home-page "https://www.nongnu.org/guile-lib/")
3e9066fc
LC
889 (synopsis "Collection of useful Guile Scheme modules")
890 (description
35b9e423 891 "Guile-Lib is intended as an accumulation place for pure-scheme Guile
3e9066fc
LC
892modules, allowing for people to cooperate integrating their generic Guile
893modules into a coherent library. Think \"a down-scaled, limited-scope CPAN
894for Guile\".")
895
896 ;; The whole is under GPLv3+, but some modules are under laxer
897 ;; distribution terms such as LGPL and public domain. See `COPYING' for
898 ;; details.
71e0f217 899 (license license:gpl3+)))
3e9066fc 900
1b0f266e
LC
901(define-public guile2.0-lib
902 (package-for-guile-2.0 guile-lib))
903
12773de3 904(define-public guile2.2-lib
1b0f266e 905 (deprecated-package "guile2.2-lib" guile-lib))
12773de3 906
6050a1fb
CR
907(define-public guile-json
908 (package
909 (name "guile-json")
15214828 910 (version "1.2.0")
f52ef55e 911 (home-page "https://github.com/aconchillo/guile-json")
6050a1fb 912 (source (origin
ffc72ec6 913 (method url-fetch)
6efccabe
EB
914 (uri (string-append "https://download.savannah.nongnu.org/releases/"
915 name "/" name "-" version ".tar.gz"))
ffc72ec6
LC
916 (sha256
917 (base32
6efccabe 918 "15gnb84d7hpazqhskkf3g9z4r6knw54wfj4ch5270kakz1lp70c9"))))
6050a1fb 919 (build-system gnu-build-system)
6efccabe 920 (native-inputs `(("pkg-config" ,pkg-config)
f52ef55e
LC
921 ("guile" ,guile-2.2)))
922 (inputs `(("guile" ,guile-2.2)))
6050a1fb
CR
923 (synopsis "JSON module for Guile")
924 (description
0f31d4f0
LC
925 "Guile-JSON supports parsing and building JSON documents according to the
926specification. These are the main features:
927
928@itemize
929@item Strictly complies to @uref{http://json.org, specification}.
930@item Build JSON documents programmatically via macros.
931@item Unicode support for strings.
932@item Allows JSON pretty printing.
933@end itemize\n")
15214828
LC
934
935 ;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+).
936 (license license:gpl3+)))
6050a1fb 937
947a5d47 938(define-public guile2.2-json
2252f087
LC
939 (deprecated-package "guile2.2-json" guile-json))
940
941(define-public guile2.0-json
942 (package-for-guile-2.0 guile-json))
947a5d47 943
6bc24063
CAW
944(define-public guile-minikanren
945 (package
946 (name "guile-minikanren")
947 (version "20150424.e844d85")
948 (source (origin
949 (method git-fetch)
950 (uri (git-reference
951 (url "https://github.com/ijp/minikanren.git")
952 (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
821f4dc2 953 (file-name (string-append name "-" version "-checkout"))
6bc24063
CAW
954 (sha256
955 (base32
956 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
977d8666
LC
957 (build-system guile-build-system)
958 (native-inputs
d58ee08d 959 `(("guile" ,guile-2.2)))
6bc24063 960 (home-page "https://github.com/ijp/minikanren")
e881752c 961 (synopsis "MiniKanren declarative logic system, packaged for Guile")
6bc24063
CAW
962 (description
963 "MiniKanren is a relational programming extension to the Scheme
964programming Language, written as a smaller version of Kanren suitable for
965pedagogical purposes. It is featured in the book, The Reasoned Schemer,
966written by Dan Friedman, William Byrd, and Oleg Kiselyov.
967
e881752c 968This is Ian Price's r6rs packaged version of miniKanren, which deviates
6bc24063
CAW
969slightly from miniKanren mainline.
970
971See http://minikanren.org/ for more on miniKanren generally.")
71e0f217 972 (license license:expat)))
6bc24063 973
d58ee08d
LC
974(define-public guile2.0-minikanren
975 (package-for-guile-2.0 guile-minikanren))
976
947a5d47 977(define-public guile2.2-minikanren
d58ee08d 978 (deprecated-package "guile2.2-minikanren" guile-minikanren))
947a5d47 979
28a1041f
AP
980(define-public guile-miniadapton
981 (let ((commit "1b5749422304567c96ac5367f2221dda9eff5880")
982 (revision "1"))
983 (package
984 (name "guile-miniadapton")
985 (version (string-append "0-" revision "." (string-take commit 9)))
986 (source (origin
987 (method git-fetch)
988 (uri (git-reference
989 (url "https://github.com/fisherdj/miniAdapton.git")
990 (commit commit)))
991 (file-name (string-append name "-" version "-checkout"))
992 (sha256
993 (base32
994 "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
977d8666
LC
995 (build-system guile-build-system)
996 (native-inputs
28a1041f
AP
997 `(("guile" ,guile-2.2)))
998 (home-page "https://github.com/fisherdj/miniAdapton")
999 (synopsis "Minimal implementation of incremental computation in Guile
1000Scheme")
1001 (description "This package provides a complete Scheme implementation of
1002miniAdapton, which implements the core functionality of the Adapton system for
1003incremental computation (also known as self-adjusting computation). Like
1004Adapton, miniAdapton allows programmers to safely combine mutation and
1005memoization. miniAdapton is built on top of an even simpler system,
1006microAdapton. Both miniAdapton and microAdapton are designed to be easy to
1007understand, extend, and port to host languages other than Scheme.")
1008 (license license:expat))))
1009
32e14fc1
CAW
1010(define-public guile-irregex
1011 (package
1012 (name "guile-irregex")
fb73f07a 1013 (version "0.9.6")
32e14fc1
CAW
1014 (source (origin
1015 (method url-fetch)
1016 (uri (string-append
1017 "http://synthcode.com/scheme/irregex/irregex-"
d03f9446 1018 version ".tar.gz"))
32e14fc1
CAW
1019 (sha256
1020 (base32
fb73f07a 1021 "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq"))))
977d8666 1022 (build-system guile-build-system)
32e14fc1 1023 (arguments
977d8666
LC
1024 '(#:phases (modify-phases %standard-phases
1025 (add-after 'unpack 'move-files-around
1026 (lambda _
1027 ;; Move the relevant source files to src/ and create the
1028 ;; rx/ directory to match the expected module hierarchy.
1029 (mkdir-p "src/rx/source")
1030 (rename-file "irregex-guile.scm"
1031 "src/rx/irregex.scm")
1032 (rename-file "irregex.scm"
1033 "src/rx/source/irregex.scm")
1034 ;; Not really reachable via guile's packaging system,
1035 ;; but nice to have around.
1036 (rename-file "irregex-utils.scm"
1037 "src/rx/source/irregex-utils.scm")
1038 #t)))
1039 #:source-directory "src"))
1040 (native-inputs
2863860b 1041 `(("guile" ,guile-2.2)))
32e14fc1
CAW
1042 (home-page "http://synthcode.com/scheme/irregex")
1043 (synopsis "S-expression based regular expressions")
1044 (description
1045 "Irregex is an s-expression based alternative to your classic
1046string-based regular expressions. It implements SRFI 115 and is deeply
1047inspired by the SCSH regular expression system.")
71e0f217 1048 (license license:bsd-3)))
93e7199b 1049
2863860b
LC
1050(define-public guile2.0-irregex
1051 (package-for-guile-2.0 guile-irregex))
1052
947a5d47 1053(define-public guile2.2-irregex
2863860b 1054 (deprecated-package "guile2.2-irregex" guile-irregex))
947a5d47 1055
93e7199b
CAW
1056;; There are two guile-gdbm packages, one using the FFI and one with
1057;; direct C bindings, hence the verbose name.
1058
1059(define-public guile-gdbm-ffi
1060 (package
1061 (name "guile-gdbm-ffi")
1062 (version "20120209.fa1d5b6")
1063 (source (origin
1064 (method git-fetch)
1065 (uri (git-reference
1066 (url "https://github.com/ijp/guile-gdbm.git")
1067 (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246")))
821f4dc2 1068 (file-name (string-append name "-" version "-checkout"))
977d8666
LC
1069 (patches (search-patches
1070 "guile-gdbm-ffi-support-gdbm-1.14.patch"))
93e7199b
CAW
1071 (sha256
1072 (base32
1073 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
977d8666
LC
1074 (build-system guile-build-system)
1075 (arguments
1076 '(#:phases (modify-phases %standard-phases
1077 (add-after 'unpack 'move-examples
1078 (lambda* (#:key outputs #:allow-other-keys)
1079 ;; Move examples where they belong.
1080 (let* ((out (assoc-ref outputs "out"))
1081 (doc (string-append out "/share/doc/"
1082 (strip-store-file-name out)
1083 "/examples")))
1084 (copy-recursively "examples" doc)
1085 (delete-file-recursively "examples")
1086 #t)))
1087 (add-after 'unpack 'set-libgdbm-file-name
1088 (lambda* (#:key inputs #:allow-other-keys)
1089 (substitute* "gdbm.scm"
1090 (("\\(dynamic-link \"libgdbm\"\\)")
1091 (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
1092 (assoc-ref inputs "gdbm"))))
1093 #t)))))
1094 (native-inputs
1095 `(("guile" ,guile-2.2)))
56f31a9f 1096 (inputs
56f31a9f 1097 `(("gdbm" ,gdbm)))
93e7199b
CAW
1098 (home-page "https://github.com/ijp/guile-gdbm")
1099 (synopsis "Guile bindings to the GDBM library via Guile's FFI")
1100 (description
1101 "Guile bindings to the GDBM key-value storage system, using
1102Guile's foreign function interface.")
71e0f217 1103 (license license:gpl3+)))
93e7199b 1104
5bd3a841
LC
1105(define-public guile2.0-gdbm-ffi
1106 (package-for-guile-2.0 guile-gdbm-ffi))
1107
2737bcff 1108(define-public guile2.2-gdbm-ffi
5bd3a841 1109 (deprecated-package "guile2.2-gdbm-ffi" guile-gdbm-ffi))
93e7199b 1110
e8ac1f8f 1111(define-public guile-sqlite3
319e26e4
LC
1112 (package
1113 (name "guile-sqlite3")
1114 (version "0.1.0")
3527f600 1115 (home-page "https://notabug.org/guile-sqlite3/guile-sqlite3.git")
319e26e4
LC
1116 (source (origin
1117 (method git-fetch)
1118 (uri (git-reference
1119 (url home-page)
1120 (commit (string-append "v" version))))
1121 (sha256
1122 (base32
1123 "1nv8j7wk6b5n4p22szyi8lv8fs31rrzxhzz16gyj8r38c1fyp9qp"))
1124 (file-name (string-append name "-" version "-checkout"))))
1125 (build-system gnu-build-system)
1126 (native-inputs
1127 `(("autoconf" ,autoconf)
1128 ("automake" ,automake)
1129 ("pkg-config" ,pkg-config)))
1130 (inputs
1131 `(("guile" ,guile-2.2)
1132 ("sqlite" ,sqlite)))
1133 (synopsis "Access SQLite databases from Guile")
1134 (description
1135 "This package provides Guile bindings to the SQLite database system.")
1136 (license license:gpl3+)))
e8ac1f8f 1137
c8e3651a
EB
1138(define-public guile2.0-sqlite3
1139 (package-for-guile-2.0 guile-sqlite3))
1140
27f5e13e
DT
1141(define-public haunt
1142 (package
1143 (name "haunt")
19ad4504 1144 (version "0.2.4")
27f5e13e
DT
1145 (source (origin
1146 (method url-fetch)
4960beaa 1147 (uri (string-append "https://files.dthompson.us/haunt/haunt-"
27f5e13e
DT
1148 version ".tar.gz"))
1149 (sha256
1150 (base32
19ad4504 1151 "056z4znikk83nr5mr0x2ac3iinqbywa2bvb37mhr566a1q50isfc"))))
27f5e13e 1152 (build-system gnu-build-system)
4ecbf6d2
LC
1153 (arguments
1154 `(#:modules ((ice-9 match) (ice-9 ftw)
1155 ,@%gnu-build-system-modules)
1e406301 1156 #:tests? #f ; test suite is non-deterministic :(
4ecbf6d2
LC
1157 #:phases (modify-phases %standard-phases
1158 (add-after 'install 'wrap-haunt
296ad592 1159 (lambda* (#:key inputs outputs #:allow-other-keys)
4ecbf6d2
LC
1160 ;; Wrap the 'haunt' command to refer to the right
1161 ;; modules.
1162 (let* ((out (assoc-ref outputs "out"))
1163 (bin (string-append out "/bin"))
1164 (site (string-append
296ad592
LC
1165 out "/share/guile/site"))
1166 (deps (list (assoc-ref inputs "guile-reader")
1167 (assoc-ref inputs "guile-commonmark"))))
4ecbf6d2
LC
1168 (match (scandir site)
1169 (("." ".." version)
907254e5
DT
1170 (let ((modules (string-append site "/" version))
1171 (compiled-modules (string-append
1172 out "/lib/guile/" version
1173 "/site-ccache")))
4ecbf6d2
LC
1174 (wrap-program (string-append bin "/haunt")
1175 `("GUILE_LOAD_PATH" ":" prefix
296ad592
LC
1176 (,modules
1177 ,@(map (lambda (dep)
1178 (string-append dep
1179 "/share/guile/site/"
1180 version))
1181 deps)))
4ecbf6d2 1182 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
296ad592
LC
1183 (,compiled-modules
1184 ,@(map (lambda (dep)
1185 (string-append dep "/lib/guile/"
1186 version
1187 "/site-ccache"))
1188 deps))))
4ecbf6d2 1189 #t)))))))))
4960beaa
DT
1190 (native-inputs
1191 `(("pkg-config" ,pkg-config)
1192 ("texinfo" ,texinfo)))
27f5e13e 1193 (inputs
bd19f65a 1194 `(("guile" ,guile-2.2)))
4960beaa 1195 (propagated-inputs
9b1a497e
AP
1196 `(("guile-reader" ,guile-reader)
1197 ("guile-commonmark" ,guile-commonmark)))
27f5e13e
DT
1198 (synopsis "Functional static site generator")
1199 (description "Haunt is a static site generator written in Guile
1200Scheme. Haunt features a functional build system and an extensible
1201interface for reading articles in any format.")
1202 (home-page "http://haunt.dthompson.us")
71e0f217 1203 (license license:gpl3+)))
27f5e13e 1204
bd19f65a
LC
1205(define-public guile2.0-haunt
1206 (package-for-guile-2.0
1207 (package (inherit haunt) (name "guile2.0-haunt"))))
64f34aef 1208(define-public guile2.2-haunt
bd19f65a 1209 (deprecated-package "guile2.2-haunt" haunt))
64f34aef 1210
44a2bdf8
AS
1211(define-public guile-config
1212 (package
1213 (name "guile-config")
7c6468c9
AS
1214 (version "0.3")
1215 (source
1216 (origin
1217 (method git-fetch)
1218 (uri (git-reference
1219 (url "https://gitlab.com/a-sassmannshausen/guile-config")
1220 (commit "ce12de3f438c6b2b59c43ee21bcd58251835fdf3")))
1221 (file-name "guile-config-0.3-checkout")
1222 (sha256 (base32 "02zbpin0r9m2vxmr7mv68v3xdn247dcck56kbzjn0gj4c2rhih85"))))
44a2bdf8 1223 (build-system gnu-build-system)
43d5df98
AS
1224 (native-inputs
1225 `(("autoconf" ,autoconf)
1226 ("automake" ,automake)
1227 ("pkg-config" ,pkg-config)
1228 ("texinfo" ,texinfo)))
7c6468c9
AS
1229 (inputs `(("guile" ,guile-2.2)))
1230 (synopsis
1231 "Guile application configuration parsing library.")
44a2bdf8
AS
1232 (description
1233 "Guile Config is a library providing a declarative approach to
1234application configuration specification. The library provides clean
1235configuration declaration forms, and processors that take care of:
1236configuration file creation; configuration file parsing; command-line
1237parameter parsing using getopt-long; basic GNU command-line parameter
1238generation (--help, --usage, --version); automatic output generation for the
1239above command-line parameters.")
7c6468c9
AS
1240 (home-page
1241 "https://gitlab.com/a-sassmannshausen/guile-config")
43d5df98 1242 (license license:gpl3+)))
44a2bdf8 1243
36548111
DT
1244(define-public guile-redis
1245 (package
1246 (name "guile-redis")
a50eed20
LC
1247 (version "1.0.0")
1248 (home-page "https://github.com/aconchillo/guile-redis")
36548111
DT
1249 (source (origin
1250 (method url-fetch)
a50eed20 1251 (uri (string-append home-page "/archive/" version ".tar.gz"))
36548111
DT
1252 (sha256
1253 (base32
a50eed20 1254 "1dp5fmqvma59pvp1nfpq6hqgbmjici8sd1y8llahl87fynw1dvr9"))))
36548111
DT
1255 (build-system gnu-build-system)
1256 (native-inputs
a50eed20
LC
1257 `(("autoconf" ,autoconf)
1258 ("automake" ,automake)
1259 ("pkg-config" ,pkg-config)
1260 ("guile" ,guile-2.2)))
36548111
DT
1261 (synopsis "Redis client library for Guile")
1262 (description "Guile-redis provides a Scheme interface to the Redis
1263key-value cache and store.")
71e0f217 1264 (license license:lgpl3+)))
36548111 1265
d5eacecc
LC
1266(define-public guile2.0-redis
1267 (package-for-guile-2.0 guile-redis))
1268
85313be8 1269(define-public guile2.2-redis
d5eacecc 1270 (deprecated-package "guile2.2-redis" guile-redis))
85313be8 1271
9d373377
CAW
1272(define-public guile-wisp
1273 (package
1274 (name "guile-wisp")
e0840905 1275 (version "0.9.8")
9d373377
CAW
1276 (source (origin
1277 (method url-fetch)
1278 (uri (string-append "https://bitbucket.org/ArneBab/"
1279 "wisp/downloads/wisp-"
1280 version ".tar.gz"))
1281 (sha256
1282 (base32
e0840905 1283 "1f2bbicq1rxnwmiplrm4r75wj06w385mjkyvi7g4k740bgwcrzxr"))))
9d373377
CAW
1284 (build-system gnu-build-system)
1285 (arguments
e8374e69
LC
1286 `(#:modules ((guix build gnu-build-system)
1287 (guix build utils)
1288 (ice-9 rdelim)
1289 (ice-9 popen))
1290
9d373377
CAW
1291 #:phases
1292 (modify-phases %standard-phases
e0840905 1293 (add-before 'configure 'substitute-before-config
9d373377
CAW
1294
1295 (lambda* (#:key inputs #:allow-other-keys)
1296 (let ((bash (assoc-ref inputs "bash")))
9d373377
CAW
1297 ;; Puts together some test files with /bin/bash hardcoded
1298 (substitute* "Makefile.in"
e0840905
LC
1299 (("/usr/bin/env bash")
1300 (string-append bash "/bin/bash"))
1301 (("\\$\\(GUILE_EFFECTIVE_VERSION\\)/site")
1302 "site/$(GUILE_EFFECTIVE_VERSION)")) ;use the right order
9d373377
CAW
1303 #t)))
1304
1305 ;; auto compilation breaks, but if we set HOME to /tmp,
1306 ;; that works ok
1307 (add-before
1308 'check 'auto-compile-hacky-workaround
1309 (lambda _
1310 (setenv "HOME" "/tmp")
1311 #t))
e0840905 1312 (add-after 'install 'install-go-files
9d373377
CAW
1313 (lambda* (#:key outputs inputs #:allow-other-keys)
1314 (let* ((out (assoc-ref outputs "out"))
e8374e69
LC
1315 (effective (read-line
1316 (open-pipe* OPEN_READ
1317 "guile" "-c"
1318 "(display (effective-version))")))
1319 (module-dir (string-append out "/share/guile/site/"
1320 effective))
1321 (object-dir (string-append out "/lib/guile/" effective
1322 "/site-ccache"))
1323 (prefix (string-length module-dir)))
9d373377 1324 ;; compile to the destination
e0840905 1325 (for-each (lambda (file)
e8374e69
LC
1326 (let* ((base (string-drop (string-drop-right file 4)
1327 prefix))
1328 (go (string-append object-dir base ".go")))
1329 (invoke "guild" "compile" "-L" module-dir
1330 file "-o" go)))
e0840905 1331 (find-files module-dir "\\.scm$"))
9d373377
CAW
1332 #t))))))
1333 (home-page "http://draketo.de/english/wisp")
1334 (inputs
89c4bfe7 1335 `(("guile" ,guile-2.2)))
e0840905
LC
1336 (native-inputs
1337 `(("python" ,python)
1338 ("pkg-config" ,pkg-config)))
a124bbd2
SB
1339 (synopsis "Whitespace to lisp syntax for Guile")
1340 (description "Wisp is a syntax for Guile which provides a Python-like
9d373377
CAW
1341whitespace-significant language. It may be easier on the eyes for some
1342users and in some situations.")
71e0f217 1343 (license license:gpl3+)))
9d373377 1344
5649c8cd
DT
1345(define-public guile-sly
1346 (package
1347 (name "guile-sly")
1348 (version "0.1")
1349 (source (origin
1350 (method url-fetch)
8d5e7ad2 1351 (uri (string-append "https://files.dthompson.us/sly/sly-"
5649c8cd
DT
1352 version ".tar.gz"))
1353 (sha256
1354 (base32
44394ef9
LC
1355 "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))
1356 (modules '((guix build utils)))
1357 (snippet
1358 '(begin
1359 (substitute* "configure"
1360 (("_guile_required_version=\"2.0.11\"")
1361 "_guile_required_version=\"2\"")
1362 (("ac_subst_vars='")
1363 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1364 (substitute* (find-files "." "Makefile.in")
1365 (("moddir = .*$")
1366 (string-append
1367 "moddir = "
1368 "$(prefix)/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n"))
1369 (("godir = .*$")
1370 (string-append
1371 "godir = "
6cbee49d
MW
1372 "$(prefix)/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))
1373 #t))))
5649c8cd
DT
1374 (build-system gnu-build-system)
1375 (arguments
1376 '(#:configure-flags
1377 (list (string-append "--with-libfreeimage-prefix="
1378 (assoc-ref %build-inputs "freeimage"))
1379 (string-append "--with-libgslcblas-prefix="
1380 (assoc-ref %build-inputs "gsl")))))
1381 (native-inputs
1382 `(("pkg-config" ,pkg-config)))
1383 (propagated-inputs
2e7825bc 1384 `(("guile-sdl" ,guile-sdl)
5649c8cd
DT
1385 ("guile-opengl" ,guile-opengl)))
1386 (inputs
2e7825bc
LC
1387 `(("guile" ,guile-2.2)
1388 ("gsl" ,gsl)
5649c8cd
DT
1389 ("freeimage" ,freeimage)
1390 ("mesa" ,mesa)))
1391 (synopsis "2D/3D game engine for GNU Guile")
1392 (description "Sly is a 2D/3D game engine written in Guile Scheme. Sly
1393features a functional reactive programming interface and live coding
1394capabilities.")
0eb3b8c0 1395 (home-page "https://dthompson.us/projects/sly.html")
71e0f217 1396 (license license:gpl3+)))
5649c8cd 1397
dec1e2b3
AB
1398(define-public g-wrap
1399 (package
1400 (name "g-wrap")
1401 (version "1.9.15")
1402 (source (origin
1403 (method url-fetch)
1404 (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
1405 version ".tar.gz"))
1406 (sha256
1407 (base32
1408 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
1409 (build-system gnu-build-system)
1410 (native-inputs
1411 `(("pkg-config" ,pkg-config)))
1412 (propagated-inputs
61583094 1413 `(("guile" ,guile-2.2)
dec1e2b3
AB
1414 ("guile-lib" ,guile-lib)))
1415 (inputs
1416 `(("libffi" ,libffi)))
9e8599a3 1417 (arguments
61583094
TF
1418 `(#:configure-flags '("--disable-Werror")
1419 #:phases
1420 (modify-phases %standard-phases
1421 (add-before 'configure 'pre-configure
1422 (lambda* (#:key outputs #:allow-other-keys)
1423 (let ((out (assoc-ref outputs "out")))
1424 (substitute* (find-files "." "^Makefile.in$")
1425 (("guilemoduledir =.*guile/site" all)
1426 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
1427 #t))))))
dec1e2b3
AB
1428 (synopsis "Generate C bindings for Guile")
1429 (description "G-Wrap is a tool and Guile library for generating function
1430wrappers for inter-language calls. It currently only supports generating Guile
1431wrappers for C functions. Given a definition of the types and prototypes for
1432a given C interface, G-Wrap will automatically generate the C code that
1433provides access to that interface and its types from the Scheme level.")
340978d7 1434 (home-page "https://www.nongnu.org/g-wrap/index.html")
71e0f217 1435 (license license:lgpl2.1+)))
dec1e2b3 1436
01497dfe
LC
1437(define-public guile-dbi
1438 (package
1439 (name "guile-dbi")
1440 (version "2.1.6")
1441 (source (origin
1442 (method url-fetch)
1443 (uri (string-append
1444 "http://download.gna.org/guile-dbi/guile-dbi-"
1445 version ".tar.gz"))
1446 (sha256
1447 (base32
1448 "116njrprhgrsv1qm904sp3b02rq01fx639r433d657gyhw3x159n"))))
1449 (build-system gnu-build-system)
1450 (arguments
1451 '(#:configure-flags
1452 (list (string-append
b989c3e3 1453 "--with-guile-site-dir=" %output "/share/guile/site/2.2"))
34e00c7b
AI
1454 #:make-flags
1455 (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib:"
1456 (assoc-ref %build-inputs "guile-dbd-sqlite3") "/lib"))
01497dfe
LC
1457 #:phases
1458 (modify-phases %standard-phases
1459 (add-after 'install 'patch-extension-path
1460 (lambda* (#:key outputs #:allow-other-keys)
1461 (let* ((out (assoc-ref outputs "out"))
1462 (dbi.scm (string-append
b989c3e3 1463 out "/share/guile/site/2.2/dbi/dbi.scm"))
01497dfe
LC
1464 (ext (string-append out "/lib/libguile-dbi")))
1465 (substitute* dbi.scm (("libguile-dbi") ext))
1466 #t))))))
34e00c7b
AI
1467 (inputs
1468 `(("guile-dbd-sqlite3" ,guile-dbd-sqlite3))) ; only shared library, no scheme files
01497dfe 1469 (propagated-inputs
b989c3e3 1470 `(("guile" ,guile-2.2)))
01497dfe
LC
1471 (synopsis "Guile database abstraction layer")
1472 (home-page "http://home.gna.org/guile-dbi/guile-dbi.html")
1473 (description
1474 "guile-dbi is a library for Guile that provides a convenient interface to
1475SQL databases. Database programming with guile-dbi is generic in that the same
1476programming interface is presented regardless of which database system is used.
1477It currently supports MySQL, Postgres and SQLite3.")
71e0f217 1478 (license license:gpl2+)))
01497dfe 1479
34e00c7b
AI
1480(define guile-dbi-bootstrap
1481 (package
1482 (inherit guile-dbi)
1483 (name "guile-dbi-bootstrap")
1484 (inputs '())
1485 (arguments
1486 (substitute-keyword-arguments (package-arguments guile-dbi)
1487 ((#:make-flags _) '(list))))))
1488
01497dfe
LC
1489(define-public guile-dbd-sqlite3
1490 (package
1491 (name "guile-dbd-sqlite3")
1492 (version "2.1.6")
1493 (source (origin
1494 (method url-fetch)
1495 (uri (string-append
1496 "http://download.gna.org/guile-dbi/guile-dbd-sqlite3-"
1497 version ".tar.gz"))
1498 (sha256
1499 (base32
1500 "0rg71jchxd2y8x496s8zmfmikr5g8zxi8zv2ar3f7a23pph92iw2"))))
1501 (build-system gnu-build-system)
1502 (native-inputs
34e00c7b
AI
1503 `(("pkg-config" ,pkg-config)
1504 ("guile-dbi-bootstrap" ,guile-dbi-bootstrap))) ; only required for headers
01497dfe
LC
1505 (inputs
1506 `(("sqlite" ,sqlite)
1507 ("zlib" ,(@ (gnu packages compression) zlib))))
01497dfe
LC
1508 (synopsis "Guile DBI driver for SQLite")
1509 (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
1510 (description
1511 "guile-dbi is a library for Guile that provides a convenient interface to
1512SQL databases. This package implements the interface for SQLite.")
71e0f217 1513 (license license:gpl2+)))
01497dfe 1514
e9291eaa
AS
1515(define-public guile-dsv
1516 (package
1517 (name "guile-dsv")
8c80f8ef 1518 (version "0.2.1")
e9291eaa
AS
1519 (source (origin
1520 (method git-fetch)
1521 (uri (git-reference
1522 (url "https://github.com/artyom-poptsov/guile-dsv")
8c80f8ef 1523 (commit "bdc5267d007478abc20ea96d7c459b7dd9560b3d")))
e9291eaa
AS
1524 (file-name (string-append name "-" version "-checkout"))
1525 (sha256
1526 (base32
8c80f8ef 1527 "1irw6mz8998nwyhzrw9g94jcz60b9zljgqfmipaz1ybn8579qjx0"))))
e9291eaa
AS
1528 (build-system gnu-build-system)
1529 (native-inputs
1530 `(("autoconf" ,autoconf)
1531 ("automake" ,automake)
1532 ("pkg-config" ,pkg-config)
1533 ("texinfo" ,texinfo)))
1534 (inputs `(("guile" ,guile-2.2)))
1535 (propagated-inputs `(("guile-lib" ,guile-lib)))
1536 (arguments
1537 '(#:phases (modify-phases %standard-phases
1538 (add-before 'configure 'set-guilesitedir
1539 (lambda _
1540 (substitute* "Makefile.in"
1541 (("^guilesitedir =.*$")
1542 "guilesitedir = \
1543$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
1544 (substitute* "modules/Makefile.in"
1545 (("^guilesitedir =.*$")
1546 "guilesitedir = \
1547$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
1548 (substitute* "modules/dsv/Makefile.in"
1549 (("^guilesitedir =.*$")
1550 "guilesitedir = \
1551$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
34da5c39 1552 #t)))))
e9291eaa
AS
1553 (home-page "https://github.com/artyom-poptsov/guile-dsv")
1554 (synopsis "DSV module for Guile")
1555 (description
1556 "Guile-DSV is a GNU Guile module for working with the
1557delimiter-separated values (DSV) data format. Guile-DSV supports the
1558Unix-style DSV format and RFC 4180 format.")
1559 (license license:gpl3+)))
1560
bd9af610
AK
1561(define-public guile-xosd
1562 (package
1563 (name "guile-xosd")
4b2b7135 1564 (version "0.2.1")
bd9af610
AK
1565 (source (origin
1566 (method url-fetch)
1567 (uri (string-append "https://github.com/alezost/" name
1568 "/releases/download/v" version
1569 "/" name "-" version ".tar.gz"))
1570 (sha256
1571 (base32
4b2b7135 1572 "1ri5065c16kmgrf2pysn2ymxjqi5302lhpb07wkl1jr75ym8fn8p"))))
bd9af610
AK
1573 (build-system gnu-build-system)
1574 (native-inputs
1575 `(("pkg-config" ,pkg-config)))
1576 (inputs
c6726a5f 1577 `(("guile" ,guile-2.2)
bd9af610
AK
1578 ("libx11" ,libx11)
1579 ("libxext" ,libxext)
1580 ("libxinerama" ,libxinerama)
1581 ("xosd" ,xosd)))
1582 (home-page "https://github.com/alezost/guile-xosd")
1583 (synopsis "XOSD bindings for Guile")
1584 (description
1585 "Guile-XOSD provides Guile bindings for @code{libxosd},
1586@uref{http://sourceforge.net/projects/libxosd/, the X On Screen Display
1587library}.")
71e0f217 1588 (license license:gpl3+)))
bd9af610 1589
07f7cc03
AK
1590(define-public guile-daemon
1591 (package
1592 (name "guile-daemon")
5245399f 1593 (version "0.1.2")
07f7cc03
AK
1594 (source (origin
1595 (method url-fetch)
1596 (uri (string-append "https://github.com/alezost/" name
1597 "/releases/download/v" version
1598 "/" name "-" version ".tar.gz"))
1599 (sha256
1600 (base32
5245399f 1601 "0hh6gq6b6phpxm0b1dkxyzj3f4sxdf7dji63609lzypa5v1ad2gv"))))
07f7cc03
AK
1602 (build-system gnu-build-system)
1603 (native-inputs
1604 `(("pkg-config" ,pkg-config)))
1605 (inputs
c6726a5f 1606 `(("guile" ,guile-2.2)))
07f7cc03
AK
1607 (home-page "https://github.com/alezost/guile-daemon")
1608 (synopsis "Evaluate code in a running Guile process")
1609 (description
1610 "Guile-Daemon is a small Guile program that loads your initial
1611configuration file, and then reads and evaluates Guile expressions that
1612you send to a FIFO file.")
71e0f217 1613 (license license:gpl3+)))
07f7cc03 1614
e28e74a5
EE
1615(define-public guile-commonmark
1616 (package
1617 (name "guile-commonmark")
1d7fb035 1618 (version "0.1.1")
e28e74a5
EE
1619 (source (origin
1620 (method url-fetch)
1621 (uri (string-append "https://github.com/OrangeShark/" name
1622 "/releases/download/v" version
1623 "/" name "-" version ".tar.gz"))
1624 (sha256
1625 (base32
1d7fb035 1626 "0kzclwkfijj8xka3g9kfj53y67c34ndfy84swdbw3j7y962ndxq6"))))
e28e74a5
EE
1627 (build-system gnu-build-system)
1628 (inputs
7c86c031 1629 `(("guile" ,guile-2.2)))
1d7fb035
LC
1630 (native-inputs
1631 `(("pkg-config" ,pkg-config)))
e28e74a5
EE
1632 (synopsis "CommonMark parser for Guile")
1633 (description
1634 "guile-commonmark is a library for parsing CommonMark, a fully specified
1635variant of Markdown. The library is written in Guile Scheme and is designed
1636to transform a CommonMark document to SXML. guile-commonmark tries to closely
1637follow the @uref{http://commonmark.org/, CommonMark spec}, the main difference
1638is no support for parsing block and inline level HTML.")
1639 (home-page "https://github.com/OrangeShark/guile-commonmark")
71e0f217 1640 (license license:lgpl3+)))
e28e74a5 1641
7c86c031
LC
1642(define-public guile2.0-commonmark
1643 (package-for-guile-2.0 guile-commonmark))
947a5d47 1644(define-public guile2.2-commonmark
7c86c031 1645 (deprecated-package "guile2.2-commonmark" guile-commonmark))
947a5d47 1646
3b5783fc
AB
1647(define-public guile-bytestructures
1648 (package
1649 (name "guile-bytestructures")
90977eb5 1650 (version "1.0.3")
3b5783fc 1651 (source (origin
4f85f7f7 1652 (method url-fetch)
1653 (uri (string-append "https://github.com/TaylanUB/scheme-bytestructures"
1654 "/releases/download/v" version
1655 "/bytestructures-" version ".tar.gz"))
3b5783fc
AB
1656 (sha256
1657 (base32
90977eb5 1658 "0xf6s8gd3656j8k2ar6y7i62r68azawyzxhsagsk8nvldnrs1r18"))))
4f85f7f7 1659 (build-system gnu-build-system)
726ecfeb 1660 (native-inputs
4f85f7f7 1661 `(("pkg-config" ,pkg-config)))
3b5783fc 1662 (inputs
aabece2e 1663 `(("guile" ,guile-2.2)))
3b5783fc
AB
1664 (home-page "https://github.com/TaylanUB/scheme-bytestructures")
1665 (synopsis "Structured access to bytevector contents for Guile")
1666 (description
1667 "Guile bytestructures offers a system imitating the type system
1668of the C programming language, to be used on bytevectors. C's type
1669system works on raw memory, and Guile works on bytevectors which are
1670an abstraction over raw memory. It's also more powerful than the C
1671type system, elevating types to first-class status.")
71e0f217 1672 (license license:gpl3+)))
3b5783fc 1673
726ecfeb
LC
1674(define-public guile2.0-bytestructures
1675 (package-for-guile-2.0 guile-bytestructures))
1676
472fc855
LC
1677(define-public guile-aspell
1678 (package
1679 (name "guile-aspell")
234ea3d6 1680 (version "0.4")
472fc855
LC
1681 (source (origin
1682 (method url-fetch)
1683 (uri (string-append
1684 "http://lonelycactus.com/tarball/guile_aspell-"
1685 version ".tar.gz"))
1686 (sha256
1687 (base32
234ea3d6 1688 "0vpk5xj9m9qc702z3khmkwhgpb949qbsyz8kw2qycda6qnxk0077"))))
472fc855
LC
1689 (build-system gnu-build-system)
1690 (arguments
7295087e
LC
1691 '(#:phases (modify-phases %standard-phases
1692 (add-before 'configure 'set-guilesitedir
1693 (lambda _
1694 (substitute* "Makefile.in"
1695 (("^guilesitedir =.*$")
1696 "guilesitedir = \
1697$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
1698 #t))
472fc855
LC
1699 (add-before 'build 'set-libaspell-file-name
1700 (lambda* (#:key inputs #:allow-other-keys)
1701 (let ((aspell (assoc-ref inputs "aspell")))
234ea3d6 1702 (substitute* "aspell.scm"
472fc855
LC
1703 (("\"libaspell\\.so\"")
1704 (string-append "\"" aspell
1705 "/lib/libaspell\"")))
1706 #t))))))
1707 (native-inputs `(("pkg-config" ,pkg-config)))
cb5be6df 1708 (inputs `(("guile" ,guile-2.2)
472fc855
LC
1709 ("aspell" ,aspell)))
1710 (home-page "https://github.com/spk121/guile-aspell")
1711 (synopsis "Spell-checking from Guile")
1712 (description
1713 "guile-aspell is a Guile Scheme library for comparing a string against a
1714dictionary and suggesting spelling corrections.")
71e0f217 1715 (license license:gpl3+)))
472fc855 1716
a614ce38
LC
1717(define-public guile-bash
1718 ;; This project is currently retired. It was initially announced here:
1719 ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
1720 (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
1721 (revision "0"))
1722 (package
1723 (name "guile-bash")
1724 (version (string-append "0.1.6-" revision "." (string-take commit 7)))
1725 (home-page
1726 "https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git")
1727 (source (origin
1728 (method git-fetch)
1729 (uri (git-reference
1730 (commit commit)
1731 (url home-page)))
1732 (sha256
1733 (base32
1734 "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
1735 (file-name (string-append name "-" version "-checkout"))))
1736 (build-system gnu-build-system)
1737 (arguments
189be331 1738 '(#:configure-flags
a614ce38
LC
1739 ;; Add -I to match 'bash.pc' of Bash 4.4.
1740 (list (string-append "CPPFLAGS=-I"
1741 (assoc-ref %build-inputs "bash:include")
1742 "/include/bash/include")
1743
1744 ;; The '.a' file is useless.
1745 "--disable-static"
1746
1747 ;; Install 'lib/bash' as Bash 4.4 expects.
1748 (string-append "--libdir=" (assoc-ref %outputs "out")
1749 "/lib/bash"))))
1750 (native-inputs `(("pkg-config" ,pkg-config)
464f5447 1751 ("autoconf" ,autoconf-wrapper)
a614ce38
LC
1752 ("automake" ,automake)
1753 ("libtool" ,libtool)
1754 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
b7158b76
LC
1755 ("gettext" ,gettext-minimal)
1756
1757 ;; Bash with loadable module support, for the test
1758 ;; suite.
1759 ("bash-full" ,bash)))
a614ce38
LC
1760 (inputs `(("guile" ,guile-2.0)
1761 ("bash:include" ,bash "include")))
1762 (synopsis "Extend Bash using Guile")
1763 (description
1764 "Guile-Bash provides a shared library and set of Guile modules,
1765allowing you to extend Bash in Scheme. Scheme interfaces allow you to access
1766the following aspects of Bash:
1767
1768@itemize
1769@item aliases;
1770@item setting and getting Bash variables;
1771@item creating dynamic variables;
1772@item creating Bash functions with a Scheme implementation;
1773@item reader macro for output capturing;
1774@item reader macro for evaluating raw Bash commands.
1775@end itemize
1776
1777To enable it, run:
1778
1779@example
1780enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
1781@end example
1782
1783and then run @command{scm example.scm}.")
71e0f217 1784 (license license:gpl3+))))
a614ce38 1785
c5793e7e
CAW
1786(define-public guile-8sync
1787 (package
1788 (name "guile-8sync")
525acb6e 1789 (version "0.4.2")
c5793e7e
CAW
1790 (source (origin
1791 (method url-fetch)
1792 (uri (string-append "mirror://gnu/8sync/8sync-" version
1793 ".tar.gz"))
1794 (sha256
1795 (base32
525acb6e 1796 "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
c5793e7e
CAW
1797 (build-system gnu-build-system)
1798 (native-inputs `(("autoconf" ,autoconf)
1799 ("automake" ,automake)
f6396d86 1800 ("guile" ,guile-2.2)
c5793e7e
CAW
1801 ("pkg-config" ,pkg-config)
1802 ("texinfo" ,texinfo)))
1803 (arguments
1804 `(#:phases (modify-phases %standard-phases
1805 (add-before 'configure 'setenv
1806 (lambda _
1807 ;; quiet warnings
ab4a1731
CAW
1808 (setenv "GUILE_AUTO_COMPILE" "0")
1809 #t)))))
c5793e7e
CAW
1810 (home-page "https://gnu.org/s/8sync/")
1811 (synopsis "Asynchronous actor model library for Guile")
1812 (description
1813 "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
1814library for GNU Guile based on the actor model.
1815
f6396d86 1816Note that 8sync is only available for Guile 2.2.")
71e0f217 1817 (license license:lgpl3+)))
c5793e7e 1818
aaf1bdc3
CAW
1819(define-public guile-fibers
1820 (package
1821 (name "guile-fibers")
1822 (version "1.0.0")
1823 (source (origin
1824 (method url-fetch)
1825 (uri (string-append "https://wingolog.org/pub/fibers/fibers-"
1826 version ".tar.gz"))
1827 (sha256
1828 (base32
1829 "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0"))))
1830 (build-system gnu-build-system)
5e3082df
LC
1831 (arguments
1832 '(#:phases (modify-phases %standard-phases
1833 (add-after 'install 'mode-guile-objects
1834 (lambda* (#:key outputs #:allow-other-keys)
1835 ;; .go files are installed to "lib/guile/X.Y/cache".
1836 ;; This phase moves them to "…/site-ccache".
1837 (let* ((out (assoc-ref outputs "out"))
1838 (lib (string-append out "/lib/guile"))
1839 (old (car (find-files lib "^ccache$"
1840 #:directories? #t)))
1841 (new (string-append (dirname old)
1842 "/site-ccache")))
1843 (rename-file old new)
1844 #t))))))
aaf1bdc3
CAW
1845 (native-inputs
1846 `(("texinfo" ,texinfo)
1847 ("pkg-config" ,pkg-config)))
1848 (inputs
f6396d86 1849 `(("guile" ,guile-2.2)))
aaf1bdc3
CAW
1850 (synopsis "Lightweight concurrency facility for Guile")
1851 (description
1852 "Fibers is a Guile library that implements a a lightweight concurrency
1853facility, inspired by systems like Concurrent ML, Go, and Erlang. A fiber is
1854like a \"goroutine\" from the Go language: a lightweight thread-like
1855abstraction. Systems built with Fibers can scale up to millions of concurrent
1856fibers, tens of thousands of concurrent socket connections, and many parallel
1857cores. The Fibers library also provides Concurrent ML-like channels for
1858communication between fibers.
1859
1860Note that Fibers makes use of some Guile 2.1/2.2-specific features and
1861is not available for Guile 2.0.")
1862 (home-page "https://github.com/wingo/fibers")
1863 (license license:lgpl3+)))
1864
bd233722 1865(define-public guile-git
e85035c9
LC
1866 (package
1867 (name "guile-git")
1868 (version "0.1.0")
1869 (home-page "https://gitlab.com/guile-git/guile-git.git")
1870 (source (origin
1871 (method git-fetch)
1872 (uri (git-reference (url home-page)
1873 (commit (string-append "v" version))))
1874 (sha256
1875 (base32
1876 "1z3awa3i5il08dl2swbnli2j7cawdpray11zx4844j27bxqddcs2"))
1877 (file-name (git-file-name name version))))
1878 (build-system gnu-build-system)
1879 (native-inputs
1880 `(("autoconf" ,autoconf)
1881 ("automake" ,automake)
1882 ("texinfo" ,texinfo)
1883 ("pkg-config" ,pkg-config)))
1884 (inputs
1885 `(("guile" ,guile-2.2)
1886 ("libgit2" ,libgit2)))
1887 (propagated-inputs
1888 `(("guile-bytestructures" ,guile-bytestructures)))
1889 (synopsis "Guile bindings for libgit2")
1890 (description
1891 "This package provides Guile bindings to libgit2, a library to
bd233722 1892manipulate repositories of the Git version control system.")
e85035c9 1893 (license license:gpl3+)))
c5793e7e 1894
70bc6085
LC
1895(define-public guile2.0-git
1896 (package-for-guile-2.0 guile-git))
1897
f252d6df 1898(define-public guile-syntax-highlight
3c90c7ae
DT
1899 (package
1900 (name "guile-syntax-highlight")
1901 (version "0.1")
1902 (source (origin
1903 (method url-fetch)
1904 (uri (string-append "https://files.dthompson.us/"
1905 "guile-syntax-highlight/"
1906 "guile-syntax-highlight-"
1907 version ".tar.gz"))
1908 (sha256
1909 (base32
1910 "1p771kq15x83483m23bhah1sz6vkalg3drm7x279f4j1cxligkzi"))))
1911 (build-system gnu-build-system)
1912 (native-inputs
1913 `(("pkg-config" ,pkg-config)))
1914 (inputs
1915 `(("guile" ,guile-2.2)))
8c72ed92
RW
1916 (synopsis "General-purpose syntax highlighter for GNU Guile")
1917 (description "Guile-syntax-highlight is a general-purpose syntax
f252d6df
DT
1918highlighting library for GNU Guile. It can parse code written in various
1919programming languages into a simple s-expression that can be converted to
1920HTML (via SXML) or any other format for rendering.")
3c90c7ae
DT
1921 (home-page "http://dthompson.us/projects/guile-syntax-highlight.html")
1922 (license license:lgpl3+)))
f252d6df 1923
d26ae96c
CAW
1924(define-public guile-sjson
1925 (package
1926 (name "guile-sjson")
a62a16a4 1927 (version "0.2.1")
d26ae96c
CAW
1928 (source (origin
1929 (method url-fetch)
1930 (uri (string-append "https://dustycloud.org/misc/sjson-" version
1931 ".tar.gz"))
1932 (sha256
1933 (base32
a62a16a4 1934 "1mzmapln79vv10qxaggz9qwcdbag3jnrj19xx8bgkmxss8h03sv3"))))
d26ae96c 1935 (build-system gnu-build-system)
d26ae96c
CAW
1936 (native-inputs
1937 `(("autoconf" ,autoconf)
1938 ("automake" ,automake)
1939 ("pkg-config" ,pkg-config)))
1940 (inputs
1941 `(("guile" ,guile-2.2)))
1942 (home-page "https://gitlab.com/dustyweb/guile-sjson")
1943 (synopsis "S-expression based json reader/writer for Guile")
1944 (description "guile-sjson is a json reader/writer for Guile.
1945It has a nice, simple s-expression based syntax.")
1946 (license license:lgpl3+)))
1947
e076d56a 1948(define-public guile-colorized
1949 (package
1950 (name "guile-colorized")
1951 (version "0.1")
1952 (source (origin
1953 (method url-fetch)
1954 (uri (string-append "https://github.com/NalaGinrut/guile-colorized/"
1955 "archive/v" version ".tar.gz"))
1956 (file-name (string-append name "-" version ".tar.gz"))
1957 (sha256
1958 (base32
1959 "16xhc3an6aglnca8xl3mvgi8hsqzqn68vsl5ga4bz8bvbap5fn4p"))))
977d8666
LC
1960 (build-system guile-build-system)
1961 (native-inputs
e076d56a 1962 `(("guile" ,guile-2.2)))
1963 (home-page "https://github.com/NalaGinrut/guile-colorized")
1964 (synopsis "Colorized REPL for Guile")
1965 (description
1966 "Guile-colorized provides you with a colorized REPL for GNU Guile.")
1967 (license license:gpl3+)))
1968
fef7baba
LC
1969(define-public guile-pfds
1970 (package
1971 (name "guile-pfds")
1972 (version "0.3")
1973 (home-page "https://github.com/ijp/pfds")
1974 (source (origin
1975 (method git-fetch)
1976 (uri (git-reference
1977 (url home-page)
1978 (commit (string-append "v" version))))
1979 (sha256
1980 (base32
1981 "19y33wg94pf0n98dkfqd1zbw93fgky4sawxsxl6s3vyqwl0yi5vh"))
1982 (file-name (string-append name "-" version "-checkout"))))
1983 (build-system guile-build-system)
1984 (arguments
1985 '(#:source-directory "src"
1986 #:phases (modify-phases %standard-phases
1987 (add-after 'unpack 'move-files-around
1988 (lambda _
1989 ;; Move files under a pfds/ directory to reflect the
1990 ;; module hierarchy.
1991 (mkdir-p "src/pfds")
1992 (for-each (lambda (file)
1993 (rename-file file
1994 (string-append "src/pfds/"
1995 file)))
1996 '("bbtrees.sls"
1997 "deques"
1998 "deques.sls"
1999 "dlists.sls"
2000 "fingertrees.sls"
2001 "hamts.sls"
2002 "heaps.sls"
2003 "private"
2004 "psqs.sls"
2005 "queues"
2006 "queues.sls"
2007 "sequences.sls"
2008 "sets.sls"))
2009
2010 ;; In Guile <= 2.2.4, there's no way to tell 'guild
2011 ;; compile' to accept the ".sls" extension. So...
2012 (for-each (lambda (file)
2013 (rename-file file
2014 (string-append
2015 (string-drop-right file 4)
2016 ".scm")))
2017 (find-files "." "\\.sls$"))
2018 #t)))))
2019 (native-inputs
2020 `(("guile" ,guile-2.2)))
2021 (synopsis "Purely functional data structures for Guile")
2022 (description
2023 "This package provides purely functional data structures written in R6RS
2024Scheme and compiled for Guile. It has been tested with Racket, Guile 2,
2025Vicare Scheme and IronScheme. Right now it contains:
2026
2027@itemize
2028@item queues
2029@item deques
2030@item bbtrees
2031@item sets
2032@item dlists
2033@item priority search queues (PSQs)
2034@item finger trees
2035@item sequences
2036@item heaps
2037@item hash array mapped tries (HAMTs).
2038@end itemize\n")
2039 (license license:bsd-3)))
2040
69502b5e
LC
2041(define-public guile-aa-tree
2042 (package
2043 (name "guile-aa-tree")
2044 (version "3.1.1")
2045 (source (origin
2046 (method url-fetch)
2047 (uri (string-append "mirror://savannah/guile-aa-tree/guile-aa-tree-"
2048 version ".tar.gz"))
2049 (sha256
2050 (base32
2051 "0044c105r3q9vpl17pv3phl1b79kjm1llhkakqgiasixyav01blh"))))
2052 (build-system guile-build-system)
2053 (native-inputs `(("guile" ,guile-2.2)))
2054 ;; https://savannah.nongnu.org/projects/guile-aa-tree
2055 (home-page "https://qlfiles.net/guile-aa-tree/")
2056 (synopsis "AA tree data structure for Guile")
2057 (description
2058 "This package provides an implementation of @dfn{AA trees}, a
2059self-balancing binary tree data structure, for Guile. It ensure @math{O(log
2060n)} worst case performance for core operations. The module provides
2061non-mutating insert, delete, and search operations, with support for
2062convenient nested tree operations.")
2063 (license license:gpl3+)))
2064
f858e58f 2065(define-public guile-simple-zmq
88e1e9cd
LC
2066 (let ((commit "68bedb6679716214fb9d3472da57544526f7a618")
2067 (revision "3"))
f858e58f
PAR
2068 (package
2069 (name "guile-simple-zmq")
2070 (version (git-version "0.0.0" revision commit))
2071 (source
2072 (origin
2073 (method git-fetch)
2074 (uri (git-reference
2075 (url "https://github.com/jerry40/guile-simple-zmq")
2076 (commit commit)))
2077 (sha256
2078 (base32
88e1e9cd 2079 "1ad3xg69qqviy1f6dnlw0ysmfdbmp1jq65rfqb8nfd8dsrq2syli"))
f858e58f 2080 (file-name (git-file-name name version))))
977d8666 2081 (build-system guile-build-system)
f858e58f 2082 (arguments
977d8666
LC
2083 `(#:source-directory "src"
2084 #:phases (modify-phases %standard-phases
2085 (add-after 'unpack 'set-libzmq-file-name
2086 (lambda* (#:key inputs #:allow-other-keys)
2087 (substitute* "src/simple-zmq.scm"
2088 (("\\(dynamic-link \"libzmq\"\\)")
2089 (format #f "(dynamic-link \"~a/lib/libzmq.so\")"
2090 (assoc-ref inputs "zeromq"))))
2091 #t)))))
2092 (native-inputs
e46b84e3 2093 `(("guile" ,guile-2.2)))
977d8666 2094 (inputs
e46b84e3 2095 `(("zeromq" ,zeromq)))
f858e58f
PAR
2096 (home-page "https://github.com/jerry40/guile-simple-zmq")
2097 (synopsis "Guile wrapper over ZeroMQ library")
2098 (description
2099 "This package provides a Guile programming interface to the ZeroMQ
2100messaging library.")
2101 (license license:gpl3+))))
2102
fa6a3bb7 2103(define-public jupyter-guile-kernel
828fa94d
LC
2104 (let ((commit "a7db9245a886e104138474df46c3e88b95cff629")
2105 (revision "1"))
fa6a3bb7
PAR
2106 (package
2107 (name "jupyter-guile-kernel")
2108 (version (git-version "0.0.0" revision commit))
2109 (source
2110 (origin
2111 (method git-fetch)
2112 (uri (git-reference
2113 (url "https://github.com/jerry40/guile-kernel")
2114 (commit commit)))
2115 (sha256
2116 (base32
828fa94d 2117 "0aj04853bqm47ivfcmrgpb7w3wkis847kc7qrwsa5zcn9h38qh2f"))))
977d8666 2118 (build-system guile-build-system)
fa6a3bb7 2119 (arguments
977d8666
LC
2120 '(#:phases (modify-phases %standard-phases
2121 (add-after 'unpack 'set-openssl-file-name
2122 (lambda* (#:key inputs #:allow-other-keys)
2123 ;; Record the absolute file name of the 'openssl'
2124 ;; command.
2125 (substitute* "src/hmac.scm"
2126 (("openssl")
2127 (string-append (assoc-ref inputs "openssl")
2128 "/bin/openssl")))
2129 #t))
2130
2131 ;; XXX: The code uses 'include' to include its own source
2132 ;; files, and "-L src" isn't enough in this case.
2133 (add-before 'build 'chdir
2134 (lambda _ (chdir "src") #t))
2135 (add-after 'build 'chdir-back
2136 (lambda _ (chdir "..") #t))
2137
2138 (add-after 'install 'install-kernel
2139 (lambda* (#:key inputs outputs #:allow-other-keys)
8539eb5c
LC
2140 (let* ((out (assoc-ref outputs "out"))
2141 (json (assoc-ref inputs "guile-json"))
2142 (zmq (assoc-ref inputs "guile-simple-zmq"))
2143 (deps (list json zmq))
2144 (dir (string-append
2145 out "/share/jupyter/kernels/guile"))
2146 (effective (target-guile-effective-version)))
977d8666
LC
2147 ;; Install kernel.
2148 (install-file "src/kernel.json" dir)
2149
2150 ;; Fix hard-coded file name in the kernel.
2151 (substitute* (string-append dir "/kernel.json")
2152 (("/home/.*/guile-jupyter-kernel.scm")
2153 (string-append out "/share/guile/site/"
2154 (target-guile-effective-version)
2155 "/guile-jupyter-kernel.scm"))
2156 (("\"guile\"")
2157 (string-append "\"" (assoc-ref inputs "guile")
2158 "/bin/guile\""))
2159 (("-s")
8539eb5c
LC
2160 ;; Add '-L' and '-C' flags so that the kernel
2161 ;; finds its dependencies.
2162 (let ((-L (map (lambda (item)
2163 (string-append "\"" item
2164 "/share/guile/site/"
2165 effective "\""))
2166 deps))
2167 (-C (map (lambda (item)
2168 (string-append "\"" item
2169 "/lib/guile/"
2170 effective
2171 "/site-ccache\""))
2172 deps)))
2173 (string-append "--no-auto-compile\""
2174 (string-join -L ", \"-L\", "
2175 'prefix)
2176 (string-join -C ", \"-C\", "
2177 'prefix)
2178 ", \"-s"))))
977d8666 2179 #t))))))
fa6a3bb7
PAR
2180 (inputs
2181 `(("openssl" ,openssl)
8539eb5c
LC
2182 ("guile" ,guile-2.2)
2183 ("guile-json" ,guile-json)
fa6a3bb7
PAR
2184 ("guile-simple-zmq" ,guile-simple-zmq)))
2185 (synopsis "Guile kernel for the Jupyter Notebook")
2186 (description
2187 "This package provides a Guile 2.x kernel for the Jupyter Notebook. It
2188allows users to interact with the Guile REPL through Jupyter.")
2189 (home-page "https://github.com/jerry40/guile-kernel")
2190 (license license:gpl3+))))
2191
89f8c2ac
RJ
2192(define-public guile-sparql
2193 (package
2194 (name "guile-sparql")
2195 (version "0.0.7")
2196 (source (origin
2197 (method url-fetch)
2198 (uri (string-append
2199 "https://github.com/roelj/guile-sparql/releases/download/"
2200 version "/guile-sparql-" version ".tar.gz"))
2201 (sha256
2202 (base32 "1drnvhsgl0gc5crmb16yyw1j98nkhwwcgssv9vgm36ng43nnzffd"))))
2203 (build-system gnu-build-system)
2204 (arguments `(#:tests? #f)) ; There are no tests.
2205 (native-inputs
2206 `(("pkg-config" ,pkg-config)))
2207 (inputs
2208 `(("guile" ,guile-2.2)))
2209 (home-page "https://github.com/roelj/guile-sparql")
2210 (synopsis "SPARQL module for Guile")
2211 (description "This package provides the functionality to query a SPARQL
2212endpoint. Additionally, it provides an interface to write SPARQL queries
2213using S-expressions.")
2214 (license license:gpl3+)))
2215
0058888c
LC
2216(define-public guile-debbugs
2217 (package
2218 (name "guile-debbugs")
2219 (version "0.0.2")
2220 (source (origin
2221 (method url-fetch)
2222 (uri (string-append "mirror://gnu/guile-debbugs/guile-debbugs-"
2223 version ".tar.gz"))
2224 (sha256
2225 (base32
2226 "16l8910p57im6s3j93xhdaqvgfy6ms5n97177mrch3y961z5hy0i"))
2227 (modules '((guix build utils)))
2228 (snippet
2229 '(substitute* "Makefile.in"
2230 (("^godir = (.*)/ccache" _ prefix)
2231 (string-append "godir = " prefix "/site-ccache"))))))
2232 (build-system gnu-build-system)
2233 (native-inputs
2234 `(("guile" ,guile-2.2)
2235 ("pkg-config" ,pkg-config)))
2236 (home-page "https://savannah.gnu.org/projects/guile-debbugs/")
2237 (synopsis "Guile interface to the Debbugs bug tracking service")
2238 (description
2239 "This package provides a Guile library to communicate with a Debbugs bug
2240tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
2241 (license license:gpl3+)))
2242
74537856
RW
2243(define-public guile-email
2244 (let ((commit "fa52eac55e5946db89621a6c583d2aa357864dee")
2245 (revision "1"))
2246 (package
2247 (name "guile-email")
2248 (version (git-version "0.1.0" revision commit))
2249 (source
2250 (origin
2251 (method git-fetch)
2252 (uri (git-reference
2253 (url "https://git.systemreboot.net/guile-email")
2254 (commit commit)))
2255 (file-name (git-file-name name version))
2256 (sha256
2257 (base32
2258 "1037mbz7qd9bzaqp8ysyhnl9ipd97fmj3b9jr8qfzx9179vvsj63"))))
2259 (build-system gnu-build-system)
2260 (native-inputs
2261 `(("pkg-config" ,pkg-config)
2262 ("autoconf" ,autoconf)
2263 ("automake" ,automake)))
2264 (inputs
79ee97a1 2265 `(("guile" ,guile-2.2)))
74537856
RW
2266 (home-page "https://git.systemreboot.net/guile-email")
2267 (synopsis "Guile email parser")
2268 (description "This package provides an email parser written in pure
2269Guile.")
2270 (license license:agpl3+))))
2271
2d900b04
RW
2272(define-public guile-debbugs-next
2273 (let ((commit "75a331d561c8b6f8efcf16216dab961c17759efe")
2274 (revision "1"))
2275 (package (inherit guile-debbugs)
2276 (name "guile-debbugs")
2277 (version (git-version "0.0.3" revision commit))
2278 (source (origin
2279 (method git-fetch)
2280 (uri (git-reference
2281 (url "https://git.savannah.gnu.org/git/guile-debbugs.git")
2282 (commit commit)))
2283 (file-name (git-file-name name version))
2284 (sha256
2285 (base32
2286 "0br3mgbw41bpc9x57jlghl0i8dz9nl63r4wzs5l47aqszf84870y"))))
2287 (build-system gnu-build-system)
2288 (native-inputs
2289 `(("pkg-config" ,pkg-config)
2290 ("autoconf" ,autoconf)
2291 ("automake" ,automake)
2292 ("texinfo" ,texinfo)))
2293 (inputs
79ee97a1 2294 `(("guile" ,guile-2.2)
2d900b04
RW
2295 ("guile-email" ,guile-email))))))
2296
581720bc
MO
2297;; There has not been any release yet.
2298(define-public guile-newt
2aee2a96
MO
2299 (let ((commit "a73889c57b0572347f7641facdb1bcf08922feff")
2300 (revision "2"))
581720bc
MO
2301 (package
2302 (name "guile-newt")
2303 (version (string-append "0-" revision "." (string-take commit 9)))
2304 (source (origin
2305 (method git-fetch)
2306 (uri (git-reference
2307 (url "https://gitlab.com/mothacehe/guile-newt")
2308 (commit commit)))
2309 (file-name (string-append name "-" version "-checkout"))
2310 (sha256
2311 (base32
2aee2a96 2312 "0k37vir22r2sq121lyy74grfai4643s7kr55z01k4j0bh27i06c3"))))
581720bc
MO
2313 (build-system gnu-build-system)
2314 (arguments
2315 '(#:make-flags
2316 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
2317 (inputs
2318 `(("guile" ,guile-2.2)
2319 ("newt" ,newt)))
2320 (native-inputs
2321 `(("autoconf" ,autoconf)
2322 ("automake" ,automake)
2323 ("pkg-config" ,pkg-config)))
2324 (synopsis "Guile bindings to Newt")
2325 (description
2326 "This package provides bindings for Newt, a programming library for
2327color text mode, widget based user interfaces. The bindings are written in pure
2328Scheme by using Guile’s foreign function interface.")
2329 (home-page "https://gitlab.com/mothacehe/guile-newt")
2330 (license license:gpl3+))))
2331
039ccc71
PAR
2332(define-public guile-mastodon
2333 (package
2334 (name "guile-mastodon")
2335 (version "0.0.1")
2336 (source (origin
2337 (method git-fetch)
2338 (uri (git-reference
2339 (url "https://framagit.org/prouby/guile-mastodon.git")
2340 (commit (string-append "v" version))))
2341 (file-name (git-file-name name version))
2342 (sha256
2343 (base32
2344 "1vblf3d1bbwna3l09p2ap5y8ycvl549bz6whgk78imyfmn28ygry"))))
2345 (build-system gnu-build-system)
2346 (native-inputs
2347 `(("autoconf" ,autoconf)
2348 ("automake" ,automake)
2349 ("pkg-config" ,pkg-config)))
2350 (inputs
2351 `(("guile" ,guile-2.2)
2352 ("gnutls" ,gnutls)
2353 ("guile-json" ,guile-json)))
2354 (home-page "https://framagit.org/prouby/guile-mastodon")
2355 (synopsis "Guile Mastodon REST API module")
2356 (description "This package provides Guile modules to access the
2357@uref{https://docs.joinmastodon.org/api/, REST API of Mastodon}, a federated
2358microblogging service.")
2359 (license license:gpl3+)))
2360
1722d680 2361;;; guile.scm ends here