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