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