installer: Open manual in the selected language on tty2.
[jackhill/guix/guix.git] / gnu / packages / guile-xyz.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 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, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
8 ;;; Copyright © 2016, 2019 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, 2019 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, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
16 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
17 ;;; Copyright © 2017 ng0 <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, 2019, 2020 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 ;;; Copyright © 2019 swedebugia <swedebugia@riseup.net>
24 ;;; Copyright © 2019, 2020 Amar Singh <nly@disroot.org>
25 ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
26 ;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net>
27 ;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
28 ;;;
29 ;;; This file is part of GNU Guix.
30 ;;;
31 ;;; GNU Guix is free software; you can redistribute it and/or modify it
32 ;;; under the terms of the GNU General Public License as published by
33 ;;; the Free Software Foundation; either version 3 of the License, or (at
34 ;;; your option) any later version.
35 ;;;
36 ;;; GNU Guix is distributed in the hope that it will be useful, but
37 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
38 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39 ;;; GNU General Public License for more details.
40 ;;;
41 ;;; You should have received a copy of the GNU General Public License
42 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
43
44 (define-module (gnu packages guile-xyz)
45 #:use-module ((guix licenses) #:prefix license:)
46 #:use-module (gnu packages)
47 #:use-module (gnu packages algebra)
48 #:use-module (gnu packages aspell)
49 #:use-module (gnu packages autotools)
50 #:use-module (gnu packages base)
51 #:use-module (gnu packages bash)
52 #:use-module (gnu packages compression)
53 #:use-module (gnu packages databases)
54 #:use-module (gnu packages disk)
55 #:use-module (gnu packages emacs)
56 #:use-module (gnu packages emacs-xyz)
57 #:use-module (gnu packages gawk)
58 #:use-module (gnu packages gettext)
59 #:use-module (gnu packages gl)
60 #:use-module (gnu packages glib)
61 #:use-module (gnu packages gnome)
62 #:use-module (gnu packages gnupg)
63 #:use-module (gnu packages gperf)
64 #:use-module (gnu packages gtk)
65 #:use-module (gnu packages guile)
66 #:use-module (gnu packages hurd)
67 #:use-module (gnu packages image)
68 #:use-module (gnu packages imagemagick)
69 #:use-module (gnu packages libffi)
70 #:use-module (gnu packages libunistring)
71 #:use-module (gnu packages linux)
72 #:use-module (gnu packages man)
73 #:use-module (gnu packages maths)
74 #:use-module (gnu packages multiprecision)
75 #:use-module (gnu packages ncurses)
76 #:use-module (gnu packages networking)
77 #:use-module (gnu packages noweb)
78 #:use-module (gnu packages nss)
79 #:use-module (gnu packages password-utils)
80 #:use-module (gnu packages perl)
81 #:use-module (gnu packages pkg-config)
82 #:use-module (gnu packages python)
83 #:use-module (gnu packages readline)
84 #:use-module (gnu packages sdl)
85 #:use-module (gnu packages search)
86 #:use-module (gnu packages slang)
87 #:use-module (gnu packages sqlite)
88 #:use-module (gnu packages swig)
89 #:use-module (gnu packages tex)
90 #:use-module (gnu packages texinfo)
91 #:use-module (gnu packages tls)
92 #:use-module (gnu packages version-control)
93 #:use-module (gnu packages webkit)
94 #:use-module (gnu packages xdisorg)
95 #:use-module (gnu packages xorg)
96 #:use-module (guix packages)
97 #:use-module (guix download)
98 #:use-module (guix git-download)
99 #:use-module (guix hg-download)
100 #:use-module (guix build-system gnu)
101 #:use-module (guix build-system guile)
102 #:use-module (guix utils)
103 #:use-module (ice-9 match)
104 #:use-module ((srfi srfi-1) #:select (alist-delete)))
105
106 (define-public artanis
107 (package
108 (name "artanis")
109 (version "0.4.1")
110 (source (origin
111 (method url-fetch)
112 (uri (string-append "mirror://gnu/artanis/artanis-"
113 version ".tar.gz"))
114 (sha256
115 (base32
116 "0nnmdfx5xwcc3kck64var7msz7g3qk817d7bv9l159nkmic0v9w4"))
117 (modules '((guix build utils)))
118 (snippet
119 '(begin
120 ;; Unbundle guile-redis and guile-json
121 (delete-file-recursively "artanis/third-party/json.scm")
122 (delete-file-recursively "artanis/third-party/json")
123 (delete-file-recursively "artanis/third-party/redis.scm")
124 (delete-file-recursively "artanis/third-party/redis")
125 (substitute* '("artanis/artanis.scm"
126 "artanis/lpc.scm"
127 "artanis/oht.scm")
128 (("(#:use-module \\()artanis third-party (json\\))" _
129 use-module json)
130 (string-append use-module json)))
131 (substitute* '("artanis/lpc.scm"
132 "artanis/session.scm")
133 (("(#:use-module \\()artanis third-party (redis\\))" _
134 use-module redis)
135 (string-append use-module redis)))
136 (substitute* "artanis/oht.scm"
137 (("([[:punct:][:space:]]+)(->json-string)([[:punct:][:space:]]+)"
138 _ pre json-string post)
139 (string-append pre
140 "scm" json-string
141 post)))
142 (substitute* "artanis/artanis.scm"
143 (("[[:punct:][:space:]]+->json-string[[:punct:][:space:]]+")
144 ""))
145 #t))))
146 (build-system gnu-build-system)
147 (inputs
148 `(("guile" ,guile-2.2)
149 ("nss" ,nss)))
150 ;; FIXME the bundled csv contains one more exported procedure
151 ;; (sxml->csv-string) than guile-csv. The author is maintainer of both
152 ;; projects.
153 ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
154 (propagated-inputs
155 `(("guile-json" ,guile-json-1)
156 ("guile-readline" ,guile-readline)
157 ("guile-redis" ,guile-redis)))
158 (native-inputs
159 `(("bash" ,bash) ;for the `source' builtin
160 ("pkgconfig" ,pkg-config)
161 ("util-linux" ,util-linux))) ;for the `script' command
162 (arguments
163 '(#:make-flags
164 ;; TODO: The documentation must be built with the `docs' target.
165 (let* ((out (assoc-ref %outputs "out"))
166 (scm (string-append out "/share/guile/site/2.2"))
167 (go (string-append out "/lib/guile/2.2/site-ccache")))
168 ;; Don't use (%site-dir) for site paths.
169 (list (string-append "MOD_PATH=" scm)
170 (string-append "MOD_COMPILED_PATH=" go)))
171 #:test-target "test"
172 #:phases
173 (modify-phases %standard-phases
174 (add-after 'unpack 'patch-site-dir
175 (lambda* (#:key outputs #:allow-other-keys)
176 (substitute* "artanis/commands/help.scm"
177 (("\\(%site-dir\\)")
178 (string-append "\""
179 (assoc-ref outputs "out")
180 "/share/guile/site/2.2\"")))))
181 (add-after 'unpack 'patch-reference-to-libnss
182 (lambda* (#:key inputs #:allow-other-keys)
183 (substitute* "artanis/security/nss.scm"
184 (("ffi-binding \"libnss3\"")
185 (string-append
186 "ffi-binding \""
187 (assoc-ref inputs "nss") "/lib/nss/libnss3.so"
188 "\"")))
189 #t))
190 (add-before 'install 'substitute-root-dir
191 (lambda* (#:key outputs #:allow-other-keys)
192 (let ((out (assoc-ref outputs "out")))
193 (substitute* "Makefile" ;ignore the execution of bash.bashrc
194 ((" /etc/bash.bashrc") " /dev/null"))
195 (substitute* "Makefile" ;set the root of config files to OUT
196 ((" /etc") (string-append " " out "/etc")))
197 (mkdir-p (string-append out "/bin")) ;for the `art' executable
198 #t)))
199 (add-after 'install 'wrap-art
200 (lambda* (#:key inputs outputs #:allow-other-keys)
201 (let* ((out (assoc-ref outputs "out"))
202 (bin (string-append out "/bin"))
203 (scm (string-append out "/share/guile/site/2.2"))
204 (go (string-append out "/lib/guile/2.2/site-ccache")))
205 (wrap-program (string-append bin "/art")
206 `("GUILE_LOAD_PATH" ":" prefix
207 (,scm ,(getenv "GUILE_LOAD_PATH")))
208 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
209 (,go ,(getenv "GUILE_LOAD_COMPILED_PATH"))))
210 #t))))))
211 (synopsis "Web application framework written in Guile")
212 (description "GNU Artanis is a web application framework written in Guile
213 Scheme. A web application framework (WAF) is a software framework that is
214 designed to support the development of dynamic websites, web applications, web
215 services and web resources. The framework aims to alleviate the overhead
216 associated with common activities performed in web development. Artanis
217 provides several tools for web development: database access, templating
218 frameworks, session management, URL-remapping for RESTful, page caching, and
219 more.")
220 (home-page "https://www.gnu.org/software/artanis/")
221 (license (list license:gpl3+ license:lgpl3+)))) ;dual license
222
223 ;; There has not been any release yet.
224 (define-public guildhall
225 (let ((commit "2fe2cc539f4b811bbcd69e58738db03eb5a2b778")
226 (revision "1"))
227 (package
228 (name "guildhall")
229 (version (string-append "0-" revision "." (string-take commit 9)))
230 (source (origin
231 (method git-fetch)
232 (uri (git-reference
233 (url "https://github.com/ijp/guildhall.git")
234 (commit commit)))
235 (file-name (string-append name "-" version "-checkout"))
236 (sha256
237 (base32
238 "115bym7bg66h3gs399yb2vkzc2ygriaqsn4zbrg8f054mgy8wzn1"))))
239 (build-system gnu-build-system)
240 (arguments
241 `(#:phases
242 (modify-phases %standard-phases
243 ;; Tests fail without this fix because they try to load the bash
244 ;; executable as a Scheme file. See bug report at
245 ;; https://github.com/ijp/guildhall/issues/22
246 (add-after 'unpack 'fix-bug-22
247 (lambda _
248 (substitute* "Makefile.am"
249 (("TESTS_ENVIRONMENT=.*")
250 "AM_TESTS_ENVIRONMENT=srcdir=$(abs_top_srcdir)/tests/
251 TEST_EXTENSIONS = .scm
252 SCM_LOG_COMPILER= $(top_builddir)/env $(GUILE)
253 AM_SCM_LOG_FLAGS = --no-auto-compile -s")
254 ;; FIXME: one of the database tests fails for unknown
255 ;; reasons. It does not fail when run outside of Guix.
256 (("tests/database.scm") ""))
257 #t)))))
258 (inputs
259 `(("guile" ,guile-2.0)))
260 (native-inputs
261 `(("zip" ,zip) ; for tests
262 ("autoconf" ,autoconf)
263 ("automake" ,automake)
264 ("texinfo" ,texinfo)))
265 (synopsis "Package manager for Guile")
266 (description
267 "Guildhall is a package manager written for Guile Scheme. A guild is
268 an association of independent craftspeople. A guildhall is where they meet.
269 This Guildhall aims to make a virtual space for Guile wizards and journeyfolk
270 to share code.
271
272 On a practical level, Guildhall lets you share Scheme modules and programs
273 over the internet, and install code that has been shared by others. Guildhall
274 can handle dependencies, so when a program requires several libraries, and
275 each of those has further dependencies, all of the prerequisites for the
276 program can be installed in one go.")
277 (home-page "https://github.com/ijp/guildhall")
278 (license license:gpl3+))))
279
280 (define-public guile-aspell
281 (package
282 (name "guile-aspell")
283 (version "0.4")
284 (source (origin
285 (method url-fetch)
286 (uri (string-append
287 "http://lonelycactus.com/tarball/guile_aspell-"
288 version ".tar.gz"))
289 (sha256
290 (base32
291 "0vpk5xj9m9qc702z3khmkwhgpb949qbsyz8kw2qycda6qnxk0077"))))
292 (build-system gnu-build-system)
293 (arguments
294 '(#:phases (modify-phases %standard-phases
295 (add-before 'configure 'set-guilesitedir
296 (lambda _
297 (substitute* "Makefile.in"
298 (("^guilesitedir =.*$")
299 "guilesitedir = \
300 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
301 #t))
302 (add-before 'build 'set-libaspell-file-name
303 (lambda* (#:key inputs #:allow-other-keys)
304 (let ((aspell (assoc-ref inputs "aspell")))
305 (substitute* "aspell.scm"
306 (("\"libaspell\\.so\"")
307 (string-append "\"" aspell
308 "/lib/libaspell\"")))
309 #t))))))
310 (native-inputs `(("pkg-config" ,pkg-config)))
311 (inputs `(("guile" ,guile-2.2)
312 ("aspell" ,aspell)))
313 (home-page "https://github.com/spk121/guile-aspell")
314 (synopsis "Spell-checking from Guile")
315 (description
316 "guile-aspell is a Guile Scheme library for comparing a string against a
317 dictionary and suggesting spelling corrections.")
318 (license license:gpl3+)))
319
320 (define-public guile-bash
321 ;; This project is currently retired. It was initially announced here:
322 ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
323 (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
324 (revision "0"))
325 (package
326 (name "guile-bash")
327 (version (string-append "0.1.6-" revision "." (string-take commit 7)))
328 (home-page
329 "https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git")
330 (source (origin
331 (method git-fetch)
332 (uri (git-reference
333 (commit commit)
334 (url home-page)))
335 (sha256
336 (base32
337 "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
338 (file-name (string-append name "-" version "-checkout"))))
339 (build-system gnu-build-system)
340 (arguments
341 '(#:configure-flags
342 ;; Add -I to match 'bash.pc' of Bash 4.4.
343 (list (string-append "CPPFLAGS=-I"
344 (assoc-ref %build-inputs "bash:include")
345 "/include/bash/include")
346
347 ;; The '.a' file is useless.
348 "--disable-static"
349
350 ;; Install 'lib/bash' as Bash 4.4 expects.
351 (string-append "--libdir=" (assoc-ref %outputs "out")
352 "/lib/bash"))))
353 (native-inputs `(("pkg-config" ,pkg-config)
354 ("autoconf" ,autoconf-wrapper)
355 ("automake" ,automake)
356 ("libtool" ,libtool)
357 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
358 ("gettext" ,gettext-minimal)
359
360 ;; Bash with loadable module support, for the test
361 ;; suite.
362 ("bash-full" ,bash)))
363 (inputs `(("guile" ,guile-2.0)
364 ("bash:include" ,bash "include")))
365 (synopsis "Extend Bash using Guile")
366 (description
367 "Guile-Bash provides a shared library and set of Guile modules,
368 allowing you to extend Bash in Scheme. Scheme interfaces allow you to access
369 the following aspects of Bash:
370
371 @itemize
372 @item aliases;
373 @item setting and getting Bash variables;
374 @item creating dynamic variables;
375 @item creating Bash functions with a Scheme implementation;
376 @item reader macro for output capturing;
377 @item reader macro for evaluating raw Bash commands.
378 @end itemize
379
380 To enable it, run:
381
382 @example
383 enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
384 @end example
385
386 and then run @command{scm example.scm}.")
387 (license license:gpl3+))))
388
389 (define-public guile-8sync
390 (package
391 (name "guile-8sync")
392 (version "0.4.2")
393 (source (origin
394 (method url-fetch)
395 (uri (string-append "mirror://gnu/8sync/8sync-" version
396 ".tar.gz"))
397 (sha256
398 (base32
399 "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
400 (build-system gnu-build-system)
401 (native-inputs `(("autoconf" ,autoconf)
402 ("automake" ,automake)
403 ("guile" ,guile-2.2)
404 ("pkg-config" ,pkg-config)
405 ("texinfo" ,texinfo)))
406 (arguments
407 `(#:phases (modify-phases %standard-phases
408 (add-before 'configure 'setenv
409 (lambda _
410 ;; quiet warnings
411 (setenv "GUILE_AUTO_COMPILE" "0")
412 #t)))))
413 (home-page "https://gnu.org/s/8sync/")
414 (synopsis "Asynchronous actor model library for Guile")
415 (description
416 "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
417 library for GNU Guile based on the actor model.
418
419 Note that 8sync is only available for Guile 2.2.")
420 (license license:lgpl3+)))
421
422 (define-public guile-daemon
423 (package
424 (name "guile-daemon")
425 (version "0.1.3")
426 (source (origin
427 (method url-fetch)
428 (uri (string-append "https://github.com/alezost/" name
429 "/releases/download/v" version
430 "/" name "-" version ".tar.gz"))
431 (sha256
432 (base32
433 "08gaqrgjlly9k5si72vvpbr4xhq5v52l5ma5y6a7spid5dd057cy"))))
434 (build-system gnu-build-system)
435 (native-inputs
436 `(("pkg-config" ,pkg-config)))
437 (inputs
438 `(("guile" ,guile-2.2)))
439 (home-page "https://github.com/alezost/guile-daemon")
440 (synopsis "Evaluate code in a running Guile process")
441 (description
442 "Guile-Daemon is a small Guile program that loads your initial
443 configuration file, and then reads and evaluates Guile expressions that
444 you send to a FIFO file.")
445 (license license:gpl3+)))
446
447 (define-public guile-dsv
448 (package
449 (name "guile-dsv")
450 (version "0.2.1")
451 (source (origin
452 (method git-fetch)
453 (uri (git-reference
454 (url "https://github.com/artyom-poptsov/guile-dsv")
455 (commit "bdc5267d007478abc20ea96d7c459b7dd9560b3d")))
456 (file-name (string-append name "-" version "-checkout"))
457 (sha256
458 (base32
459 "1irw6mz8998nwyhzrw9g94jcz60b9zljgqfmipaz1ybn8579qjx0"))))
460 (build-system gnu-build-system)
461 (native-inputs
462 `(("autoconf" ,autoconf)
463 ("automake" ,automake)
464 ("pkg-config" ,pkg-config)
465 ("texinfo" ,texinfo)))
466 (inputs `(("guile" ,guile-2.2)))
467 (propagated-inputs `(("guile-lib" ,guile-lib)))
468 (arguments
469 '(#:phases (modify-phases %standard-phases
470 (add-before 'configure 'set-guilesitedir
471 (lambda _
472 (substitute* "Makefile.in"
473 (("^guilesitedir =.*$")
474 "guilesitedir = \
475 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
476 (substitute* "modules/Makefile.in"
477 (("^guilesitedir =.*$")
478 "guilesitedir = \
479 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
480 (substitute* "modules/dsv/Makefile.in"
481 (("^guilesitedir =.*$")
482 "guilesitedir = \
483 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
484 #t)))))
485 (home-page "https://github.com/artyom-poptsov/guile-dsv")
486 (synopsis "DSV module for Guile")
487 (description
488 "Guile-DSV is a GNU Guile module for working with the
489 delimiter-separated values (DSV) data format. Guile-DSV supports the
490 Unix-style DSV format and RFC 4180 format.")
491 (license license:gpl3+)))
492
493 (define-public guile-fibers
494 (package
495 (name "guile-fibers")
496 (version "1.0.0")
497 (source (origin
498 (method url-fetch)
499 (uri (string-append "https://wingolog.org/pub/fibers/fibers-"
500 version ".tar.gz"))
501 (sha256
502 (base32
503 "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0"))
504 (modules '((guix build utils)))
505 (snippet
506 '(begin
507 ;; Allow builds with Guile 3.0.
508 (substitute* "configure"
509 (("search=\"2\\.2\"")
510 "search=\"3.0 2.2\""))
511
512 ;; Explicitly include system headers rather than relying on
513 ;; <libguile.h> to do it for us.
514 (substitute* "epoll.c"
515 (("#include.*libguile\\.h.*$" all)
516 (string-append "#include <unistd.h>\n"
517 "#include <string.h>\n"
518 all "\n")))
519
520 ;; Import (ice-9 threads) for 'current-processor-count'.
521 (substitute* "tests/channels.scm"
522 (("#:use-module \\(fibers\\)")
523 (string-append "#:use-module (fibers)\n"
524 "#:use-module (ice-9 threads)\n")))
525 #t))))
526 (build-system gnu-build-system)
527 (arguments
528 '(#:phases (modify-phases %standard-phases
529 (add-after 'install 'mode-guile-objects
530 (lambda* (#:key outputs #:allow-other-keys)
531 ;; .go files are installed to "lib/guile/X.Y/cache".
532 ;; This phase moves them to "…/site-ccache".
533 (let* ((out (assoc-ref outputs "out"))
534 (lib (string-append out "/lib/guile"))
535 (old (car (find-files lib "^ccache$"
536 #:directories? #t)))
537 (new (string-append (dirname old)
538 "/site-ccache")))
539 (rename-file old new)
540 #t))))))
541 (native-inputs
542 `(("texinfo" ,texinfo)
543 ("pkg-config" ,pkg-config)))
544 (inputs
545 `(("guile" ,guile-2.2)))
546 (synopsis "Lightweight concurrency facility for Guile")
547 (description
548 "Fibers is a Guile library that implements a a lightweight concurrency
549 facility, inspired by systems like Concurrent ML, Go, and Erlang. A fiber is
550 like a \"goroutine\" from the Go language: a lightweight thread-like
551 abstraction. Systems built with Fibers can scale up to millions of concurrent
552 fibers, tens of thousands of concurrent socket connections, and many parallel
553 cores. The Fibers library also provides Concurrent ML-like channels for
554 communication between fibers.
555
556 Note that Fibers makes use of some Guile 2.1/2.2-specific features and
557 is not available for Guile 2.0.")
558 (home-page "https://github.com/wingo/fibers")
559 (license license:lgpl3+)))
560
561 (define-public guile3.0-fibers
562 (package
563 (inherit guile-fibers)
564 (name "guile3.0-fibers")
565 (arguments
566 ;; The code uses 'scm_t_uint64' et al., which are deprecated in 3.0.
567 `(#:configure-flags '("CFLAGS=-Wno-error=deprecated-declarations")
568 ,@(package-arguments guile-fibers)))
569 (inputs `(("guile" ,guile-3.0)))))
570
571 (define-public guile-syntax-highlight
572 (package
573 (name "guile-syntax-highlight")
574 (version "0.1")
575 (source (origin
576 (method url-fetch)
577 (uri (string-append "https://files.dthompson.us/"
578 "guile-syntax-highlight/"
579 "guile-syntax-highlight-"
580 version ".tar.gz"))
581 (sha256
582 (base32
583 "1p771kq15x83483m23bhah1sz6vkalg3drm7x279f4j1cxligkzi"))
584 (modules '((guix build utils)))
585 (snippet
586 '(begin
587 ;; Allow builds with Guile 3.0.
588 (substitute* "configure"
589 (("2\\.2 2\\.0")
590 "3.0 2.2 2.0"))
591 #t))))
592 (build-system gnu-build-system)
593 (native-inputs
594 `(("pkg-config" ,pkg-config)))
595 (inputs
596 `(("guile" ,guile-2.2)))
597 (synopsis "General-purpose syntax highlighter for GNU Guile")
598 (description "Guile-syntax-highlight is a general-purpose syntax
599 highlighting library for GNU Guile. It can parse code written in various
600 programming languages into a simple s-expression that can be converted to
601 HTML (via SXML) or any other format for rendering.")
602 (home-page "https://dthompson.us/projects/guile-syntax-highlight.html")
603 (license license:lgpl3+)))
604
605 (define-public guile3.0-syntax-highlight
606 (package
607 (inherit guile-syntax-highlight)
608 (name "guile3.0-syntax-highlight")
609 (inputs `(("guile" ,guile-3.0)))))
610
611 (define-public guile-sjson
612 (package
613 (name "guile-sjson")
614 (version "0.2.1")
615 (source (origin
616 (method url-fetch)
617 (uri (string-append "https://dustycloud.org/misc/sjson-" version
618 ".tar.gz"))
619 (sha256
620 (base32
621 "1mzmapln79vv10qxaggz9qwcdbag3jnrj19xx8bgkmxss8h03sv3"))))
622 (build-system gnu-build-system)
623 (native-inputs
624 `(("autoconf" ,autoconf)
625 ("automake" ,automake)
626 ("pkg-config" ,pkg-config)))
627 (inputs
628 `(("guile" ,guile-2.2)))
629 (home-page "https://gitlab.com/dustyweb/guile-sjson")
630 (synopsis "S-expression based json reader/writer for Guile")
631 (description "guile-sjson is a json reader/writer for Guile.
632 It has a nice, simple s-expression based syntax.")
633 (license license:lgpl3+)))
634
635 (define-public guile-squee
636 (let ((commit "a85902a92bf6f58a1d35fd974a01ade163deda8d")
637 (revision "0"))
638 (package
639 (name "guile-squee")
640 (version (string-append "0-" revision "." (string-take commit 7)))
641 (source (origin
642 (method git-fetch)
643 (uri (git-reference
644 (url "https://notabug.org/cwebber/guile-squee.git")
645 (commit commit)))
646 (file-name (git-file-name name version))
647 (sha256
648 (base32
649 "0p1lpsp4kx57j3ai1dkxilm4ziavzzx8wbbc42m3hpziq0a7qz5z"))))
650 (build-system guile-build-system)
651 (arguments
652 '(#:phases
653 (modify-phases %standard-phases
654 (add-after 'unpack 'patch
655 (lambda* (#:key inputs #:allow-other-keys)
656 (substitute* "squee.scm"
657 (("dynamic-link \"libpq\"")
658 (string-append
659 "dynamic-link \""
660 (assoc-ref inputs "postgresql") "/lib/libpq.so"
661 "\"")))
662 #t)))))
663 (inputs
664 `(("postgresql" ,postgresql)))
665 (native-inputs
666 `(("guile" ,guile-2.2)))
667 (home-page "https://notabug.org/cwebber/guile-squee")
668 (synopsis "Connect to PostgreSQL using Guile")
669 (description
670 "@code{squee} is a Guile library for connecting to PostgreSQL databases
671 using Guile's foreign function interface.")
672 (license license:lgpl3+))))
673
674 (define-public guile3.0-squee
675 (package
676 (inherit guile-squee)
677 (name "guile3.0-squee")
678 (native-inputs `(("guile" ,guile-next)
679 ,@(alist-delete "guile"
680 (package-native-inputs guile-squee))))))
681
682 (define-public guile-colorized
683 (package
684 (name "guile-colorized")
685 (version "0.1")
686 (source
687 (origin
688 (method git-fetch)
689 (uri (git-reference
690 (url "https://gitlab.com/NalaGinrut/guile-colorized.git")
691 (commit (string-append "v" version))))
692 (file-name (git-file-name name version))
693 (sha256
694 (base32 "10mv8c63159r3qvwwdvsgnsvdg7nc2ghak85zapwqpv4ywrqp9zc"))))
695 (build-system guile-build-system)
696 (native-inputs
697 `(("guile" ,guile-2.2)))
698 (home-page "https://gitlab.com/NalaGinrut/guile-colorized")
699 (synopsis "Colorized REPL for Guile")
700 (description
701 "Guile-colorized provides you with a colorized REPL for GNU Guile.")
702 (license license:gpl3+)))
703
704 (define-public guile3.0-colorized
705 (package
706 (inherit guile-colorized)
707 (name "guile3.0-colorized")
708 (native-inputs `(("guile" ,guile-next)))))
709
710 (define-public guile-pfds
711 (package
712 (name "guile-pfds")
713 (version "0.3")
714 (home-page "https://github.com/ijp/pfds")
715 (source (origin
716 (method git-fetch)
717 (uri (git-reference
718 (url home-page)
719 (commit (string-append "v" version))))
720 (sha256
721 (base32
722 "19y33wg94pf0n98dkfqd1zbw93fgky4sawxsxl6s3vyqwl0yi5vh"))
723 (file-name (string-append name "-" version "-checkout"))))
724 (build-system guile-build-system)
725 (arguments
726 '(#:source-directory "src"
727 #:phases (modify-phases %standard-phases
728 (add-after 'unpack 'move-files-around
729 (lambda _
730 ;; Move files under a pfds/ directory to reflect the
731 ;; module hierarchy.
732 (mkdir-p "src/pfds")
733 (for-each (lambda (file)
734 (rename-file file
735 (string-append "src/pfds/"
736 file)))
737 '("bbtrees.sls"
738 "deques"
739 "deques.sls"
740 "dlists.sls"
741 "fingertrees.sls"
742 "hamts.sls"
743 "heaps.sls"
744 "private"
745 "psqs.sls"
746 "queues"
747 "queues.sls"
748 "sequences.sls"
749 "sets.sls"))
750
751 ;; In Guile <= 2.2.4, there's no way to tell 'guild
752 ;; compile' to accept the ".sls" extension. So...
753 (for-each (lambda (file)
754 (rename-file file
755 (string-append
756 (string-drop-right file 4)
757 ".scm")))
758 (find-files "." "\\.sls$"))
759 #t)))))
760 (native-inputs
761 `(("guile" ,guile-2.2)))
762 (synopsis "Purely functional data structures for Guile")
763 (description
764 "This package provides purely functional data structures written in R6RS
765 Scheme and compiled for Guile. It has been tested with Racket, Guile 2,
766 Vicare Scheme and IronScheme. Right now it contains:
767
768 @itemize
769 @item queues
770 @item deques
771 @item bbtrees
772 @item sets
773 @item dlists
774 @item priority search queues (PSQs)
775 @item finger trees
776 @item sequences
777 @item heaps
778 @item hash array mapped tries (HAMTs).
779 @end itemize\n")
780 (license license:bsd-3)))
781
782 (define-public guile3.0-pfds
783 (package
784 (inherit guile-pfds)
785 (name "guile3.0-pfds")
786 (native-inputs `(("guile" ,guile-3.0)))
787 (arguments
788 (substitute-keyword-arguments (package-arguments guile-pfds)
789 ((#:phases phases)
790 `(modify-phases ,phases
791 (add-after 'unpack 'work-around-guile-bug
792 (lambda _
793 ;; See bug #39210.
794 (substitute* '("fingertrees.sls"
795 "queues/private/condition.sls"
796 "deques/private/condition.sls")
797 (("&assertion") "&violation"))
798 #t))))))))
799
800 (define-public guile-aa-tree
801 (package
802 (name "guile-aa-tree")
803 (version "3.1.1")
804 (source (origin
805 (method url-fetch)
806 (uri (string-append "mirror://savannah/guile-aa-tree/guile-aa-tree-"
807 version ".tar.gz"))
808 (sha256
809 (base32
810 "0044c105r3q9vpl17pv3phl1b79kjm1llhkakqgiasixyav01blh"))))
811 (build-system guile-build-system)
812 (native-inputs `(("guile" ,guile-2.2)))
813 ;; https://savannah.nongnu.org/projects/guile-aa-tree
814 (home-page "https://qlfiles.net/guile-aa-tree/")
815 (synopsis "AA tree data structure for Guile")
816 (description
817 "This package provides an implementation of @dfn{AA trees}, a
818 self-balancing binary tree data structure, for Guile. It ensure @math{O(log
819 n)} worst case performance for core operations. The module provides
820 non-mutating insert, delete, and search operations, with support for
821 convenient nested tree operations.")
822 (license license:gpl3+)))
823
824 (define-public guile-simple-zmq
825 (let ((commit "68bedb6679716214fb9d3472da57544526f7a618")
826 (revision "3"))
827 (package
828 (name "guile-simple-zmq")
829 (version (git-version "0.0.0" revision commit))
830 (source
831 (origin
832 (method git-fetch)
833 (uri (git-reference
834 (url "https://github.com/jerry40/guile-simple-zmq")
835 (commit commit)))
836 (sha256
837 (base32
838 "1ad3xg69qqviy1f6dnlw0ysmfdbmp1jq65rfqb8nfd8dsrq2syli"))
839 (file-name (git-file-name name version))))
840 (build-system guile-build-system)
841 (arguments
842 `(#:source-directory "src"
843 #:phases (modify-phases %standard-phases
844 (add-after 'unpack 'set-libzmq-file-name
845 (lambda* (#:key inputs #:allow-other-keys)
846 (substitute* "src/simple-zmq.scm"
847 (("\\(dynamic-link \"libzmq\"\\)")
848 (format #f "(dynamic-link \"~a/lib/libzmq.so\")"
849 (assoc-ref inputs "zeromq"))))
850 #t)))))
851 (native-inputs
852 `(("guile" ,guile-2.2)))
853 (inputs
854 `(("zeromq" ,zeromq)))
855 (home-page "https://github.com/jerry40/guile-simple-zmq")
856 (synopsis "Guile wrapper over ZeroMQ library")
857 (description
858 "This package provides a Guile programming interface to the ZeroMQ
859 messaging library.")
860 (license license:gpl3+))))
861
862 (define-public guile3.0-simple-zmq
863 (package
864 (inherit guile-simple-zmq)
865 (name "guile3.0-simple-zmq")
866 (native-inputs `(("guile" ,guile-next)))))
867
868 (define-public jupyter-guile-kernel
869 (let ((commit "a7db9245a886e104138474df46c3e88b95cff629")
870 (revision "1"))
871 (package
872 (name "jupyter-guile-kernel")
873 (version (git-version "0.0.0" revision commit))
874 (source
875 (origin
876 (method git-fetch)
877 (uri (git-reference
878 (url "https://github.com/jerry40/guile-kernel")
879 (commit commit)))
880 (file-name (git-file-name name version))
881 (sha256
882 (base32
883 "0aj04853bqm47ivfcmrgpb7w3wkis847kc7qrwsa5zcn9h38qh2f"))))
884 (build-system guile-build-system)
885 (arguments
886 '(#:phases (modify-phases %standard-phases
887 (add-after 'unpack 'set-openssl-file-name
888 (lambda* (#:key inputs #:allow-other-keys)
889 ;; Record the absolute file name of the 'openssl'
890 ;; command.
891 (substitute* "src/hmac.scm"
892 (("openssl")
893 (string-append (assoc-ref inputs "openssl")
894 "/bin/openssl")))
895 #t))
896
897 ;; XXX: The code uses 'include' to include its own source
898 ;; files, and "-L src" isn't enough in this case.
899 (add-before 'build 'chdir
900 (lambda _ (chdir "src") #t))
901 (add-after 'build 'chdir-back
902 (lambda _ (chdir "..") #t))
903
904 (add-after 'install 'install-kernel
905 (lambda* (#:key inputs outputs #:allow-other-keys)
906 (let* ((out (assoc-ref outputs "out"))
907 (json (assoc-ref inputs "guile-json"))
908 (zmq (assoc-ref inputs "guile-simple-zmq"))
909 (deps (list json zmq))
910 (dir (string-append
911 out "/share/jupyter/kernels/guile"))
912 (effective (target-guile-effective-version)))
913 ;; Install kernel.
914 (install-file "src/kernel.json" dir)
915
916 ;; Fix hard-coded file name in the kernel.
917 (substitute* (string-append dir "/kernel.json")
918 (("/home/.*/guile-jupyter-kernel.scm")
919 (string-append out "/share/guile/site/"
920 (target-guile-effective-version)
921 "/guile-jupyter-kernel.scm"))
922 (("\"guile\"")
923 (string-append "\"" (assoc-ref inputs "guile")
924 "/bin/guile\""))
925 (("-s")
926 ;; Add '-L' and '-C' flags so that the kernel
927 ;; finds its dependencies.
928 (let ((-L (map (lambda (item)
929 (string-append "\"" item
930 "/share/guile/site/"
931 effective "\""))
932 deps))
933 (-C (map (lambda (item)
934 (string-append "\"" item
935 "/lib/guile/"
936 effective
937 "/site-ccache\""))
938 deps)))
939 (string-append "--no-auto-compile\""
940 (string-join -L ", \"-L\", "
941 'prefix)
942 (string-join -C ", \"-C\", "
943 'prefix)
944 ", \"-s"))))
945 #t))))))
946 (inputs
947 `(("openssl" ,openssl)
948 ("guile" ,guile-2.2)
949 ("guile-json" ,guile-json-1)
950 ("guile-simple-zmq" ,guile-simple-zmq)))
951 (synopsis "Guile kernel for the Jupyter Notebook")
952 (description
953 "This package provides a Guile 2.x kernel for the Jupyter Notebook. It
954 allows users to interact with the Guile REPL through Jupyter.")
955 (home-page "https://github.com/jerry40/guile-kernel")
956 (license license:gpl3+))))
957
958 (define-public guile-sparql
959 (package
960 (name "guile-sparql")
961 (version "0.0.7")
962 (source (origin
963 (method url-fetch)
964 (uri (string-append
965 "https://github.com/roelj/guile-sparql/releases/download/"
966 version "/guile-sparql-" version ".tar.gz"))
967 (sha256
968 (base32 "1drnvhsgl0gc5crmb16yyw1j98nkhwwcgssv9vgm36ng43nnzffd"))))
969 (build-system gnu-build-system)
970 (arguments `(#:tests? #f)) ; There are no tests.
971 (native-inputs
972 `(("pkg-config" ,pkg-config)))
973 (inputs
974 `(("guile" ,guile-2.2)))
975 (home-page "https://github.com/roelj/guile-sparql")
976 (synopsis "SPARQL module for Guile")
977 (description "This package provides the functionality to query a SPARQL
978 endpoint. Additionally, it provides an interface to write SPARQL queries
979 using S-expressions.")
980 (license license:gpl3+)))
981
982 (define-public guile-debbugs
983 (package
984 (name "guile-debbugs")
985 (version "0.0.3")
986 (source (origin
987 (method url-fetch)
988 (uri (string-append "mirror://gnu/guile-debbugs/guile-debbugs-"
989 version ".tar.gz"))
990 (sha256
991 (base32
992 "1cc63nw3xdfjrfk8c58r6d5lidmfq5cpqcy32yd5xp81yccprvn9"))))
993 (build-system gnu-build-system)
994 (propagated-inputs
995 `(("guile-email" ,guile-email)))
996 (native-inputs
997 `(("guile" ,guile-2.2)
998 ("pkg-config" ,pkg-config)))
999 (home-page "https://savannah.gnu.org/projects/guile-debbugs/")
1000 (synopsis "Guile interface to the Debbugs bug tracking service")
1001 (description
1002 "This package provides a Guile library to communicate with a Debbugs bug
1003 tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
1004 (license license:gpl3+)))
1005
1006 (define-public guile-email
1007 (package
1008 (name "guile-email")
1009 (version "0.2.2")
1010 (source
1011 (origin
1012 (method url-fetch)
1013 (uri (string-append
1014 "https://guile-email.systemreboot.net/releases/guile-email-"
1015 version ".tar.lz"))
1016 (sha256
1017 (base32
1018 "1rc8r0fgvflnyq5ckl7ii8sghpsgpkzxa8vskjr1ak2kyar6m35k"))))
1019 (build-system gnu-build-system)
1020 (native-inputs
1021 `(("pkg-config" ,pkg-config)
1022 ("lzip" ,lzip)))
1023 (inputs
1024 `(("guile" ,guile-2.2)))
1025 (arguments
1026 '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
1027 (home-page "https://guile-email.systemreboot.net")
1028 (synopsis "Guile email parser")
1029 (description "guile-email is a collection of email utilities implemented
1030 in pure guile. It supports parsing MIME (Multipurpose Internet Mail
1031 Extensions) compliant email messages and reading emails from the mbox
1032 format.")
1033 (license license:agpl3+)))
1034
1035 (define-public guile3.0-email
1036 (package
1037 (inherit guile-email)
1038 (name "guile3.0-email")
1039 (inputs `(("guile" ,guile-next)
1040 ,@(alist-delete "guile" (package-inputs guile-email))))))
1041
1042 (define-public guile-newt
1043 (package
1044 (name "guile-newt")
1045 (version "0.0.1")
1046 (source (origin
1047 (method git-fetch)
1048 (uri (git-reference
1049 (url "https://gitlab.com/mothacehe/guile-newt")
1050 (commit version)))
1051 (file-name (git-file-name name version))
1052 (sha256
1053 (base32
1054 "1w7qy4dw1f4bx622l6hw8mv49sf1ha8kch8j4nganyk8fj0wn695"))
1055 (modules '((guix build utils)))
1056 (snippet
1057 '(begin
1058 ;; Allow builds with Guile 3.0.
1059 (substitute* "configure.ac"
1060 (("^GUILE_PKG.*")
1061 "GUILE_PKG([3.0 2.2 2.0])\n"))
1062
1063 ;; Remove "guile.m4" since it contains an obsolete version
1064 ;; of 'GUILE_PKG' that doesn't work with development
1065 ;; versions such as 2.9.
1066 (delete-file "m4/guile.m4")
1067 #t))))
1068 (build-system gnu-build-system)
1069 (arguments
1070 '(#:make-flags
1071 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1072 (inputs
1073 `(("guile" ,guile-2.2)
1074 ("newt" ,newt)))
1075 (native-inputs
1076 `(("autoconf" ,autoconf)
1077 ("automake" ,automake)
1078 ("pkg-config" ,pkg-config)))
1079 (synopsis "Guile bindings to Newt")
1080 (description
1081 "This package provides bindings for Newt, a programming library for
1082 color text mode, widget based user interfaces. The bindings are written in pure
1083 Scheme by using Guile’s foreign function interface.")
1084 (home-page "https://gitlab.com/mothacehe/guile-newt")
1085 (license license:gpl3+)))
1086
1087 (define-public guile3.0-newt
1088 (package
1089 (inherit guile-newt)
1090 (name "guile3.0-newt")
1091 (inputs `(("guile" ,guile-next)
1092 ,@(alist-delete "guile" (package-inputs guile-newt))))))
1093
1094 (define-public guile-mastodon
1095 (package
1096 (name "guile-mastodon")
1097 (version "0.0.1")
1098 (source (origin
1099 (method git-fetch)
1100 (uri (git-reference
1101 (url "https://framagit.org/prouby/guile-mastodon.git")
1102 (commit (string-append "v" version))))
1103 (file-name (git-file-name name version))
1104 (sha256
1105 (base32
1106 "1vblf3d1bbwna3l09p2ap5y8ycvl549bz6whgk78imyfmn28ygry"))))
1107 (build-system gnu-build-system)
1108 (native-inputs
1109 `(("autoconf" ,autoconf)
1110 ("automake" ,automake)
1111 ("pkg-config" ,pkg-config)))
1112 (inputs
1113 `(("guile" ,guile-2.2)
1114 ("gnutls" ,gnutls)
1115 ("guile-json" ,guile-json-1)))
1116 (home-page "https://framagit.org/prouby/guile-mastodon")
1117 (synopsis "Guile Mastodon REST API module")
1118 (description "This package provides Guile modules to access the
1119 @uref{https://docs.joinmastodon.org/api/, REST API of Mastodon}, a federated
1120 microblogging service.")
1121 (license license:gpl3+)))
1122
1123 (define-public guile-parted
1124 (package
1125 (name "guile-parted")
1126 (version "0.0.2")
1127 (source (origin
1128 (method git-fetch)
1129 (uri (git-reference
1130 (url "https://gitlab.com/mothacehe/guile-parted")
1131 (commit version)))
1132 (file-name (git-file-name name version))
1133 (sha256
1134 (base32
1135 "01qmv6xnbbq3wih0dl9bscvca2d7zx7bjiqf35y6dkaqsp8nvdxf"))
1136 (modules '((guix build utils)))
1137 (snippet
1138 '(begin
1139 ;; Allow builds with Guile 3.0.
1140 (substitute* "configure.ac"
1141 (("^GUILE_PKG.*")
1142 "GUILE_PKG([3.0 2.2 2.0])\n"))
1143
1144 ;; Remove "guile.m4" since it contains an obsolete version
1145 ;; of 'GUILE_PKG' that doesn't work with development
1146 ;; versions such as 2.9.
1147 (delete-file "m4/guile.m4")
1148 #t))))
1149 (build-system gnu-build-system)
1150 (arguments
1151 '(#:make-flags
1152 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1153 (inputs
1154 `(("guile" ,guile-2.2)
1155 ("parted" ,parted)))
1156 (propagated-inputs
1157 `(("guile-bytestructures" ,guile-bytestructures)))
1158 (native-inputs
1159 `(("autoconf" ,autoconf)
1160 ("automake" ,automake)
1161 ("pkg-config" ,pkg-config)))
1162 (synopsis "Guile bindings to GNU Parted")
1163 (description
1164 "This package provides bindings for GNU Parted library, a C library
1165 allowing disk partition tables creation and manipulation. The bindings are
1166 written in pure Scheme by using Guile's foreign function interface.")
1167 (home-page "https://gitlab.com/mothacehe/guile-parted")
1168 (license license:gpl3+)))
1169
1170 (define-public guile3.0-parted
1171 (package
1172 (inherit guile-parted)
1173 (name "guile3.0-parted")
1174 (inputs `(("guile" ,guile-next)
1175 ,@(alist-delete "guile" (package-inputs guile-parted))))
1176 (propagated-inputs
1177 `(("guile-bytestructures" ,guile3.0-bytestructures)))))
1178
1179 (define-public guile-xosd
1180 (package
1181 (name "guile-xosd")
1182 (version "0.2.1")
1183 (source (origin
1184 (method url-fetch)
1185 (uri (string-append "https://github.com/alezost/" name
1186 "/releases/download/v" version
1187 "/" name "-" version ".tar.gz"))
1188 (sha256
1189 (base32
1190 "1ri5065c16kmgrf2pysn2ymxjqi5302lhpb07wkl1jr75ym8fn8p"))))
1191 (build-system gnu-build-system)
1192 (native-inputs
1193 `(("pkg-config" ,pkg-config)))
1194 (inputs
1195 `(("guile" ,guile-2.2)
1196 ("libx11" ,libx11)
1197 ("libxext" ,libxext)
1198 ("libxinerama" ,libxinerama)
1199 ("xosd" ,xosd)))
1200 (home-page "https://github.com/alezost/guile-xosd")
1201 (synopsis "XOSD bindings for Guile")
1202 (description
1203 "Guile-XOSD provides Guile bindings for @code{libxosd},
1204 @uref{http://sourceforge.net/projects/libxosd/, the X On Screen Display
1205 library}.")
1206 (license license:gpl3+)))
1207
1208 (define-public guile-dbi
1209 (package
1210 (name "guile-dbi")
1211 (version "2.1.6")
1212 (source (origin
1213 (method url-fetch)
1214 (uri (string-append
1215 "http://download.gna.org/guile-dbi/guile-dbi-"
1216 version ".tar.gz"))
1217 (sha256
1218 (base32
1219 "116njrprhgrsv1qm904sp3b02rq01fx639r433d657gyhw3x159n"))))
1220 (build-system gnu-build-system)
1221 (arguments
1222 '(#:configure-flags
1223 (list (string-append
1224 "--with-guile-site-dir=" %output "/share/guile/site/2.2"))
1225 #:make-flags
1226 (list (string-append
1227 "LDFLAGS=-Wl,-rpath=" %output "/lib:"
1228 (assoc-ref %build-inputs "guile-dbd-sqlite3") "/lib" ":"
1229 (assoc-ref %build-inputs "guile-dbd-postgresql") "/lib"))
1230 #:phases
1231 (modify-phases %standard-phases
1232 (add-after 'install 'patch-extension-path
1233 (lambda* (#:key outputs #:allow-other-keys)
1234 (let* ((out (assoc-ref outputs "out"))
1235 (dbi.scm (string-append
1236 out "/share/guile/site/2.2/dbi/dbi.scm"))
1237 (ext (string-append out "/lib/libguile-dbi")))
1238 (substitute* dbi.scm (("libguile-dbi") ext))
1239 #t))))))
1240 (inputs
1241 `(("guile-dbd-sqlite3" ,guile-dbd-sqlite3)
1242 ("guile-dbd-postgresql" ,guile-dbd-postgresql))) ; only shared library, no scheme files
1243 (propagated-inputs
1244 `(("guile" ,guile-2.2)))
1245 (synopsis "Guile database abstraction layer")
1246 (home-page "http://home.gna.org/guile-dbi/guile-dbi.html")
1247 (description
1248 "guile-dbi is a library for Guile that provides a convenient interface to
1249 SQL databases. Database programming with guile-dbi is generic in that the same
1250 programming interface is presented regardless of which database system is used.
1251 It currently supports MySQL, Postgres and SQLite3.")
1252 (license license:gpl2+)))
1253
1254 (define guile-dbi-bootstrap
1255 (package
1256 (inherit guile-dbi)
1257 (name "guile-dbi-bootstrap")
1258 (inputs '())
1259 (arguments
1260 (substitute-keyword-arguments (package-arguments guile-dbi)
1261 ((#:make-flags _) '(list))))))
1262
1263 (define-public guile-dbd-sqlite3
1264 (package
1265 (name "guile-dbd-sqlite3")
1266 (version "2.1.6")
1267 (source (origin
1268 (method url-fetch)
1269 (uri (string-append
1270 "http://download.gna.org/guile-dbi/guile-dbd-sqlite3-"
1271 version ".tar.gz"))
1272 (sha256
1273 (base32
1274 "0rg71jchxd2y8x496s8zmfmikr5g8zxi8zv2ar3f7a23pph92iw2"))))
1275 (build-system gnu-build-system)
1276 (native-inputs
1277 `(("pkg-config" ,pkg-config)
1278 ("guile-dbi-bootstrap" ,guile-dbi-bootstrap))) ; only required for headers
1279 (inputs
1280 `(("sqlite" ,sqlite)
1281 ("zlib" ,(@ (gnu packages compression) zlib))))
1282 (synopsis "Guile DBI driver for SQLite")
1283 (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
1284 (description
1285 "guile-dbi is a library for Guile that provides a convenient interface to
1286 SQL databases. This package implements the interface for SQLite.")
1287 (license license:gpl2+)))
1288
1289 (define-public guile-dbd-postgresql
1290 (let ((commit "e97589b6b018b206c901e4cc24db463407a4036b")
1291 (revision 0))
1292 (package
1293 (name "guile-dbd-postgresql")
1294 (version (string-append
1295 "2.1.6-" (number->string revision) "." (string-take commit 7)))
1296 (source
1297 (origin
1298 (method git-fetch)
1299 (uri (git-reference
1300 (url "https://github.com/opencog/guile-dbi.git")
1301 (commit commit)))
1302 (file-name (git-file-name name version))
1303 (sha256
1304 (base32 "0n1gv9a0kdys10a4qmnrwvg5sydwb03880asri4gqdchcj3fimni"))))
1305 (build-system gnu-build-system)
1306 (arguments
1307 '(#:phases
1308 (modify-phases %standard-phases
1309 (add-after 'unpack 'chdir
1310 (lambda _
1311 ;; The upstream Git repository contains all the code, so change
1312 ;; to the relevant directory.
1313 (chdir "guile-dbd-postgresql")
1314 #t))
1315 (add-after 'chdir 'patch-src/Makefile.am
1316 (lambda* (#:key inputs #:allow-other-keys)
1317 (substitute* "src/Makefile.am"
1318 (("/usr/include")
1319 (string-append (assoc-ref inputs "postgresql") "/include")))
1320 #t))
1321 (add-after 'patch-src/Makefile.am 'patch-src
1322 (lambda _
1323 (substitute* "src/guile-dbd-postgresql.c"
1324 (("postgresql/libpq-fe\\.h") "libpq-fe.h"))
1325 #t)))))
1326 (native-inputs
1327 `(("pkg-config" ,pkg-config)
1328 ("automake" ,automake)
1329 ("autoconf" ,autoconf)
1330 ("perl" ,perl)
1331 ("libtool" ,libtool)
1332 ("guile-dbi-bootstrap" ,guile-dbi-bootstrap)))
1333 (inputs
1334 `(("postgresql" ,postgresql)
1335 ("zlib" ,zlib)))
1336 (synopsis "Guile DBI driver for PostgreSQL")
1337 (home-page
1338 "https://github.com/opencog/guile-dbi/tree/master/guile-dbd-postgresql")
1339 (description
1340 "@code{guile-dbi} is a library for Guile that provides a convenient
1341 interface to SQL databases. This package implements the interface for
1342 PostgreSQL.")
1343 (license license:gpl2+))))
1344
1345 (define-public guile-config
1346 (package
1347 (name "guile-config")
1348 (version "0.3.1")
1349 (source
1350 (origin
1351 (method git-fetch)
1352 (uri (git-reference
1353 (url "https://gitlab.com/a-sassmannshausen/guile-config")
1354 (commit (string-append "v" version))))
1355 (file-name (git-file-name name version))
1356 (sha256 (base32
1357 "0gglsqwpw77gvrqcny8irpqfl7qdf2v8n9ggwrswanxalj4vcbvf"))))
1358 (build-system gnu-build-system)
1359 (native-inputs
1360 `(("autoconf" ,autoconf)
1361 ("automake" ,automake)
1362 ("pkg-config" ,pkg-config)
1363 ("texinfo" ,texinfo)))
1364 (inputs `(("guile" ,guile-2.2)))
1365 (synopsis
1366 "Guile application configuration parsing library.")
1367 (description
1368 "Guile Config is a library providing a declarative approach to
1369 application configuration specification. The library provides clean
1370 configuration declaration forms, and processors that take care of:
1371 configuration file creation; configuration file parsing; command-line
1372 parameter parsing using getopt-long; basic GNU command-line parameter
1373 generation (--help, --usage, --version); automatic output generation for the
1374 above command-line parameters.")
1375 (home-page
1376 "https://gitlab.com/a-sassmannshausen/guile-config")
1377 (license license:gpl3+)))
1378
1379 (define-public guile3.0-config
1380 (package
1381 (inherit guile-config)
1382 (name "guile3.0-config")
1383 (inputs `(("guile" ,guile-next)
1384 ,@(alist-delete "guile" (package-inputs guile-config))))))
1385
1386 (define-public guile-hall
1387 (package
1388 (name "guile-hall")
1389 (version "0.2.1")
1390 (source
1391 (origin
1392 (method git-fetch)
1393 (uri (git-reference
1394 (url "https://gitlab.com/a-sassmannshausen/guile-hall")
1395 (commit (string-append "v" version))))
1396 (file-name (git-file-name name version))
1397 (sha256 (base32
1398 "0dwx5iyg0dmdf64wq0b4w306bapr86jwnw35npgbjq4cqm8qbzqn"))))
1399 (build-system gnu-build-system)
1400 (arguments
1401 `(#:modules
1402 ((ice-9 match)
1403 (ice-9 ftw)
1404 ,@%gnu-build-system-modules)
1405 #:phases
1406 (modify-phases
1407 %standard-phases
1408 (add-after 'install 'hall-wrap-binaries
1409 (lambda* (#:key inputs outputs #:allow-other-keys)
1410 (let* ((compiled-dir
1411 (lambda (out version)
1412 (string-append
1413 out "/lib/guile/" version "/site-ccache")))
1414 (uncompiled-dir
1415 (lambda (out version)
1416 (string-append
1417 out "/share/guile/site"
1418 (if (string-null? version) "" "/") version)))
1419 (dep-path
1420 (lambda (env modules path)
1421 (list env ":" 'prefix
1422 (cons modules
1423 (map (lambda (input)
1424 (string-append
1425 (assoc-ref inputs input)
1426 path))
1427 ,''("guile-config"))))))
1428 (out (assoc-ref outputs "out"))
1429 (bin (string-append out "/bin/"))
1430 (site (uncompiled-dir out "")))
1431 (match (scandir site)
1432 (("." ".." version)
1433 (for-each
1434 (lambda (file)
1435 (wrap-program
1436 (string-append bin file)
1437 (dep-path
1438 "GUILE_LOAD_PATH"
1439 (uncompiled-dir out version)
1440 (uncompiled-dir "" version))
1441 (dep-path
1442 "GUILE_LOAD_COMPILED_PATH"
1443 (compiled-dir out version)
1444 (compiled-dir "" version))))
1445 ,''("hall"))
1446 #t))))))))
1447 (native-inputs
1448 `(("autoconf" ,autoconf)
1449 ("automake" ,automake)
1450 ("pkg-config" ,pkg-config)
1451 ("texinfo" ,texinfo)))
1452 (inputs `(("guile" ,guile-2.2)))
1453 (propagated-inputs
1454 `(("guile-config" ,guile-config)))
1455 (synopsis "Guile project tooling")
1456 (description
1457 "Hall is a command-line application and a set of Guile libraries that
1458 allow you to quickly create and publish Guile projects. It allows you to
1459 transparently support the GNU build system, manage a project hierarchy &
1460 provides tight coupling to Guix.")
1461 (home-page "https://gitlab.com/a-sassmannshausen/guile-hall")
1462 (license license:gpl3+)))
1463
1464 (define-public guile3.0-hall
1465 (package
1466 (inherit guile-hall)
1467 (name "guile3.0-hall")
1468 (inputs `(("guile" ,guile-next)
1469 ,@(alist-delete "guile" (package-inputs guile-hall))))
1470 (propagated-inputs
1471 `(("guile-config" ,guile3.0-config)
1472 ,@(alist-delete "guile-config"
1473 (package-propagated-inputs guile-hall))))))
1474
1475 (define-public guile-ics
1476 (package
1477 (name "guile-ics")
1478 (version "0.2.0")
1479 (source (origin
1480 (method git-fetch)
1481 (uri (git-reference
1482 (url "https://github.com/artyom-poptsov/guile-ics")
1483 (commit (string-append "v" version))))
1484 (file-name (string-append name "-" version "-checkout"))
1485 (sha256
1486 (base32
1487 "0qjjvadr7gibdq9jvwkmlkb4afsw9n2shfj9phpiadinxk3p4m2g"))
1488 (modules '((guix build utils)))
1489 (snippet
1490 '(begin
1491 ;; Allow builds with Guile 3.0.
1492 (substitute* "configure.ac"
1493 (("^GUILE_PKG.*")
1494 "GUILE_PKG([3.0 2.2 2.0])\n"))
1495 #t))))
1496 (build-system gnu-build-system)
1497 (native-inputs
1498 `(("autoconf" ,autoconf-wrapper)
1499 ("automake" ,automake)
1500 ("texinfo" ,texinfo)
1501 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
1502 ("gettext" ,gettext-minimal)
1503 ("pkg-config" ,pkg-config)))
1504 (inputs `(("guile" ,guile-2.2) ("which" ,which)))
1505 (propagated-inputs `(("guile-lib" ,guile-lib)))
1506 (home-page "https://github.com/artyom-poptsov/guile-ics")
1507 (synopsis "Guile parser library for the iCalendar format")
1508 (description
1509 "Guile-ICS is an iCalendar (RFC5545) format parser library written in
1510 pure Scheme. The library can be used to read and write iCalendar data.
1511
1512 The library is shipped with documentation in Info format and usage examples.")
1513 (license license:gpl3+)))
1514
1515 (define-public guile3.0-ics
1516 (package
1517 (inherit guile-ics)
1518 (name "guile3.0-ics")
1519 (inputs `(("guile" ,guile-3.0)
1520 ,@(alist-delete "guile" (package-inputs guile-ics))))
1521 (propagated-inputs `(("guile-lib" ,guile3.0-lib)))))
1522
1523 (define-public guile-wisp
1524 (package
1525 (name "guile-wisp")
1526 (version "1.0.2")
1527 (source (origin
1528 (method url-fetch)
1529 (uri (string-append "https://bitbucket.org/ArneBab/"
1530 "wisp/downloads/wisp-"
1531 version ".tar.gz"))
1532 (sha256
1533 (base32
1534 "03pz7pj9jyallynhflp5s7qax8dj1fs8la434wrfgz7g1kgjnvf6"))))
1535 (build-system gnu-build-system)
1536 (arguments
1537 `(#:modules ((guix build gnu-build-system)
1538 ((guix build emacs-build-system) #:prefix emacs:)
1539 (guix build utils)
1540 (guix build emacs-utils)
1541 (ice-9 rdelim)
1542 (ice-9 popen))
1543 #:imported-modules (,@%gnu-build-system-modules
1544 (guix build emacs-build-system)
1545 (guix build emacs-utils))
1546 #:phases
1547 (modify-phases %standard-phases
1548 (add-before 'configure 'patch-/usr/bin/env
1549 (lambda _
1550 (substitute* "Makefile.in"
1551 (("/usr/bin/env bash") (which "bash")))
1552 #t))
1553 ;; auto compilation breaks, but if we set HOME to /tmp,
1554 ;; that works ok
1555 (add-before 'check 'auto-compile-hacky-workaround
1556 (lambda _ (setenv "HOME" "/tmp") #t))
1557 (add-after 'install 'install-go-files
1558 (lambda* (#:key outputs inputs #:allow-other-keys)
1559 (let* ((out (assoc-ref outputs "out"))
1560 (effective (read-line
1561 (open-pipe* OPEN_READ
1562 "guile" "-c"
1563 "(display (effective-version))")))
1564 (module-dir (string-append out "/share/guile/site/"
1565 effective))
1566 (object-dir (string-append out "/lib/guile/" effective
1567 "/site-ccache"))
1568 (prefix (string-length module-dir)))
1569 ;; compile to the destination
1570 (for-each (lambda (file)
1571 (let* ((base (string-drop (string-drop-right file 4)
1572 prefix))
1573 (go (string-append object-dir base ".go")))
1574 (invoke "guild" "compile" "-L" module-dir
1575 file "-o" go)))
1576 (find-files module-dir "\\.scm$"))
1577 #t)))
1578 (add-after 'install 'install-emacs-files
1579 (assoc-ref emacs:%standard-phases 'install))
1580 (add-after 'install-emacs-files 'compile-emacs-files
1581 (assoc-ref emacs:%standard-phases 'build))
1582 (add-after 'compile-emacs-files 'make-autoloads
1583 (assoc-ref emacs:%standard-phases 'make-autoloads)))))
1584 (home-page "https://www.draketo.de/english/wisp")
1585 (inputs
1586 `(("guile" ,guile-2.2)))
1587 (native-inputs
1588 `(("emacs" ,emacs-minimal)
1589 ("python" ,python)
1590 ("pkg-config" ,pkg-config)))
1591 (synopsis "Whitespace to lisp syntax for Guile")
1592 (description "Wisp is a syntax for Guile which provides a Python-like
1593 whitespace-significant language. It may be easier on the eyes for some
1594 users and in some situations.")
1595 (license license:gpl3+)))
1596
1597 (define-public guile3.0-wisp
1598 (package
1599 (inherit guile-wisp)
1600 (name "guile3.0-wisp")
1601 (inputs `(("guile" ,guile-3.0)))
1602 (arguments
1603 (substitute-keyword-arguments (package-arguments guile-wisp)
1604 ((#:phases phases)
1605 `(modify-phases ,phases
1606 (add-after 'unpack 'support-guile-3.0
1607 (lambda _
1608 (substitute* "configure"
1609 (("_guile_versions_to_search=\"2.2")
1610 "_guile_versions_to_search=\"3.0 2.2"))
1611 #t))))))))
1612
1613 (define-public guile-sly
1614 (package
1615 (name "guile-sly")
1616 (version "0.1")
1617 (source (origin
1618 (method url-fetch)
1619 (uri (string-append "https://files.dthompson.us/sly/sly-"
1620 version ".tar.gz"))
1621 (sha256
1622 (base32
1623 "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))
1624 (modules '((guix build utils)))
1625 (snippet
1626 '(begin
1627 (substitute* "configure"
1628 (("_guile_required_version=\"2.0.11\"")
1629 "_guile_required_version=\"2\"")
1630 (("ac_subst_vars='")
1631 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1632 (substitute* (find-files "." "Makefile.in")
1633 (("moddir = .*$")
1634 (string-append
1635 "moddir = "
1636 "$(prefix)/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n"))
1637 (("godir = .*$")
1638 (string-append
1639 "godir = "
1640 "$(prefix)/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))
1641 #t))))
1642 (build-system gnu-build-system)
1643 (arguments
1644 '(#:configure-flags
1645 (list (string-append "--with-libfreeimage-prefix="
1646 (assoc-ref %build-inputs "freeimage"))
1647 (string-append "--with-libgslcblas-prefix="
1648 (assoc-ref %build-inputs "gsl")))))
1649 (native-inputs
1650 `(("pkg-config" ,pkg-config)))
1651 (propagated-inputs
1652 `(("guile-sdl" ,guile-sdl)
1653 ("guile-opengl" ,guile-opengl)))
1654 (inputs
1655 `(("guile" ,guile-2.2)
1656 ("gsl" ,gsl)
1657 ("freeimage" ,freeimage)
1658 ("mesa" ,mesa)))
1659 (synopsis "2D/3D game engine for GNU Guile")
1660 (description "Sly is a 2D/3D game engine written in Guile Scheme. Sly
1661 features a functional reactive programming interface and live coding
1662 capabilities.")
1663 (home-page "https://dthompson.us/projects/sly.html")
1664 (license license:gpl3+)))
1665
1666 (define-public g-wrap
1667 (package
1668 (name "g-wrap")
1669 (version "1.9.15")
1670 (source (origin
1671 (method url-fetch)
1672 (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
1673 version ".tar.gz"))
1674 (sha256
1675 (base32
1676 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
1677 (build-system gnu-build-system)
1678 (native-inputs
1679 `(("pkg-config" ,pkg-config)))
1680 (propagated-inputs
1681 `(("guile" ,guile-2.2)
1682 ("guile-lib" ,guile-lib)))
1683 (inputs
1684 `(("libffi" ,libffi)))
1685 (arguments
1686 `(#:configure-flags '("--disable-Werror")
1687 #:phases
1688 (modify-phases %standard-phases
1689 (add-before 'configure 'pre-configure
1690 (lambda* (#:key outputs #:allow-other-keys)
1691 (let ((out (assoc-ref outputs "out")))
1692 (substitute* (find-files "." "^Makefile.in$")
1693 (("guilemoduledir =.*guile/site" all)
1694 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
1695 #t))))))
1696 (synopsis "Generate C bindings for Guile")
1697 (description "G-Wrap is a tool and Guile library for generating function
1698 wrappers for inter-language calls. It currently only supports generating Guile
1699 wrappers for C functions. Given a definition of the types and prototypes for
1700 a given C interface, G-Wrap will automatically generate the C code that
1701 provides access to that interface and its types from the Scheme level.")
1702 (home-page "https://www.nongnu.org/g-wrap/index.html")
1703 (license license:lgpl2.1+)))
1704
1705 (define-public guile-miniadapton
1706 (let ((commit "1b5749422304567c96ac5367f2221dda9eff5880")
1707 (revision "1"))
1708 (package
1709 (name "guile-miniadapton")
1710 (version (string-append "0-" revision "." (string-take commit 9)))
1711 (source (origin
1712 (method git-fetch)
1713 (uri (git-reference
1714 (url "https://github.com/fisherdj/miniAdapton.git")
1715 (commit commit)))
1716 (file-name (string-append name "-" version "-checkout"))
1717 (sha256
1718 (base32
1719 "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
1720 (build-system guile-build-system)
1721 (native-inputs
1722 `(("guile" ,guile-2.2)))
1723 (home-page "https://github.com/fisherdj/miniAdapton")
1724 (synopsis "Minimal implementation of incremental computation in Guile
1725 Scheme")
1726 (description "This package provides a complete Scheme implementation of
1727 miniAdapton, which implements the core functionality of the Adapton system for
1728 incremental computation (also known as self-adjusting computation). Like
1729 Adapton, miniAdapton allows programmers to safely combine mutation and
1730 memoization. miniAdapton is built on top of an even simpler system,
1731 microAdapton. Both miniAdapton and microAdapton are designed to be easy to
1732 understand, extend, and port to host languages other than Scheme.")
1733 (license license:expat))))
1734
1735 (define-public guile-reader
1736 (package
1737 (name "guile-reader")
1738 (version "0.6.2")
1739 (source (origin
1740 (method url-fetch)
1741 (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
1742 version ".tar.gz"))
1743 (sha256
1744 (base32
1745 "0592s2s8ampqmqwilc4fvcild6rb9gy79di6vxv5kcdmv23abkgx"))))
1746 (build-system gnu-build-system)
1747 (native-inputs `(("pkgconfig" ,pkg-config)
1748 ("gperf" ,gperf-3.0)))
1749 (inputs `(("guile" ,guile-2.2)))
1750 (synopsis "Framework for building readers for GNU Guile")
1751 (description
1752 "Guile-Reader is a simple framework for building readers for GNU Guile.
1753
1754 The idea is to make it easy to build procedures that extend Guile’s read
1755 procedure. Readers supporting various syntax variants can easily be written,
1756 possibly by re-using existing “token readers” of a standard Scheme
1757 readers. For example, it is used to implement Skribilo’s R5RS-derived
1758 document syntax.
1759
1760 Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
1761 hopefully more powerful and flexible (for instance, one may instantiate as
1762 many readers as needed).")
1763 (home-page "https://www.nongnu.org/guile-reader/")
1764 (license license:gpl3+)))
1765
1766 (define-public guile-ncurses
1767 (package
1768 (name "guile-ncurses")
1769 (version "3.0")
1770 (source (origin
1771 (method url-fetch)
1772 (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
1773 version ".tar.gz"))
1774 (sha256
1775 (base32
1776 "038xbffalhymg26lvmzgf7ljilxz2f2zmqg5r5nfzbipfbprwjhf"))))
1777 (build-system gnu-build-system)
1778 (inputs `(("ncurses" ,ncurses)
1779 ("guile" ,guile-2.2)))
1780 (native-inputs `(("pkg-config" ,pkg-config)))
1781 (arguments
1782 '(#:configure-flags (list "--with-ncursesw" ; Unicode support
1783 "--with-gnu-filesystem-hierarchy")
1784 #:phases
1785 (modify-phases %standard-phases
1786 (add-before 'build 'fix-libguile-ncurses-file-name
1787 (lambda* (#:key outputs #:allow-other-keys)
1788 (invoke "make" "install"
1789 "-C" "src/ncurses"
1790 "-j" (number->string
1791 (parallel-job-count)))
1792 (let* ((out (assoc-ref outputs "out"))
1793 (dir "src/ncurses")
1794 (files (find-files dir ".scm")))
1795 (substitute* files
1796 (("\"libguile-ncurses\"")
1797 (format #f "\"~a/lib/guile/2.2/libguile-ncurses\""
1798 out)))
1799 #t))))))
1800 (home-page "https://www.gnu.org/software/guile-ncurses/")
1801 (synopsis "Guile bindings to ncurses")
1802 (description
1803 "guile-ncurses provides Guile language bindings for the ncurses
1804 library.")
1805 (license license:lgpl3+)))
1806
1807 (define-public guile-ncurses/gpm
1808 (package
1809 (inherit guile-ncurses)
1810 (name "guile-ncurses-with-gpm")
1811 (inputs `(("ncurses" ,ncurses/gpm)
1812 ("guile" ,guile-2.2)))))
1813
1814 (define-public guile-lib
1815 (package
1816 (name "guile-lib")
1817 (version "0.2.6.1")
1818 (source (origin
1819 (method url-fetch)
1820 (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
1821 version ".tar.gz"))
1822 (sha256
1823 (base32
1824 "0aizxdif5dpch9cvs8zz5g8ds5s4xhfnwza2il5ji7fv2h7ks7bd"))
1825 (modules '((guix build utils)))
1826 (snippet
1827 '(begin
1828 ;; Work around miscompilation on Guile 3.0.0 at -O2:
1829 ;; <https://bugs.gnu.org/39251>.
1830 (substitute* "src/md5.scm"
1831 (("\\(define f-ash ash\\)")
1832 "(define f-ash (@ (guile) ash))\n")
1833 (("\\(define f-add \\+\\)")
1834 "(define f-add (@ (guile) +))\n"))
1835 #t))))
1836 (build-system gnu-build-system)
1837 (arguments
1838 '(#:make-flags
1839 '("GUILE_AUTO_COMPILE=0") ; to prevent guild errors
1840 #:phases
1841 (modify-phases %standard-phases
1842 (add-before 'configure 'patch-module-dir
1843 (lambda _
1844 (substitute* "src/Makefile.in"
1845 (("^moddir = ([[:graph:]]+)")
1846 "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
1847 (("^godir = ([[:graph:]]+)")
1848 "godir = \
1849 $(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n"))
1850 #t)))))
1851 (native-inputs `(("pkg-config" ,pkg-config)))
1852 (inputs `(("guile" ,guile-2.2)))
1853 (home-page "https://www.nongnu.org/guile-lib/")
1854 (synopsis "Collection of useful Guile Scheme modules")
1855 (description
1856 "Guile-Lib is intended as an accumulation place for pure-scheme Guile
1857 modules, allowing for people to cooperate integrating their generic Guile
1858 modules into a coherent library. Think \"a down-scaled, limited-scope CPAN
1859 for Guile\".")
1860
1861 ;; The whole is under GPLv3+, but some modules are under laxer
1862 ;; distribution terms such as LGPL and public domain. See `COPYING' for
1863 ;; details.
1864 (license license:gpl3+)))
1865
1866 (define-public guile2.0-lib
1867 (package
1868 (inherit guile-lib)
1869 (name "guile2.0-lib")
1870 (inputs `(("guile" ,guile-2.0)))))
1871
1872 (define-public guile3.0-lib
1873 (package
1874 (inherit guile-lib)
1875 (name "guile3.0-lib")
1876 (inputs `(("guile" ,guile-3.0)))))
1877
1878 (define-public guile-minikanren
1879 (package
1880 (name "guile-minikanren")
1881 (version "20150424.e844d85")
1882 (source (origin
1883 (method git-fetch)
1884 (uri (git-reference
1885 (url "https://github.com/ijp/minikanren.git")
1886 (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
1887 (file-name (string-append name "-" version "-checkout"))
1888 (sha256
1889 (base32
1890 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
1891 (build-system guile-build-system)
1892 (native-inputs
1893 `(("guile" ,guile-2.2)))
1894 (home-page "https://github.com/ijp/minikanren")
1895 (synopsis "MiniKanren declarative logic system, packaged for Guile")
1896 (description
1897 "MiniKanren is a relational programming extension to the Scheme
1898 programming Language, written as a smaller version of Kanren suitable for
1899 pedagogical purposes. It is featured in the book, The Reasoned Schemer,
1900 written by Dan Friedman, William Byrd, and Oleg Kiselyov.
1901
1902 This is Ian Price's r6rs packaged version of miniKanren, which deviates
1903 slightly from miniKanren mainline.
1904
1905 See http://minikanren.org/ for more on miniKanren generally.")
1906 (license license:expat)))
1907
1908 (define-public guile2.0-minikanren
1909 (package
1910 (inherit guile-minikanren)
1911 (name "guile2.0-minikanren")
1912 (native-inputs `(("guile" ,guile-2.0)))))
1913
1914 (define-public guile3.0-minikanren
1915 (package
1916 (inherit guile-minikanren)
1917 (name "guile3.0-minikanren")
1918 (native-inputs `(("guile" ,guile-next)))))
1919
1920 (define-public guile-irregex
1921 (package
1922 (name "guile-irregex")
1923 (version "0.9.6")
1924 (source (origin
1925 (method url-fetch)
1926 (uri (string-append
1927 "http://synthcode.com/scheme/irregex/irregex-"
1928 version ".tar.gz"))
1929 (sha256
1930 (base32
1931 "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq"))))
1932 (build-system guile-build-system)
1933 (arguments
1934 '(#:phases (modify-phases %standard-phases
1935 (add-after 'unpack 'move-files-around
1936 (lambda _
1937 ;; Move the relevant source files to src/ and create the
1938 ;; rx/ directory to match the expected module hierarchy.
1939 (mkdir-p "src/rx/source")
1940 (rename-file "irregex-guile.scm"
1941 "src/rx/irregex.scm")
1942 (rename-file "irregex.scm"
1943 "src/rx/source/irregex.scm")
1944 ;; Not really reachable via guile's packaging system,
1945 ;; but nice to have around.
1946 (rename-file "irregex-utils.scm"
1947 "src/rx/source/irregex-utils.scm")
1948 #t)))
1949 #:source-directory "src"))
1950 (native-inputs
1951 `(("guile" ,guile-2.2)))
1952 (home-page "http://synthcode.com/scheme/irregex")
1953 (synopsis "S-expression based regular expressions")
1954 (description
1955 "Irregex is an s-expression based alternative to your classic
1956 string-based regular expressions. It implements SRFI 115 and is deeply
1957 inspired by the SCSH regular expression system.")
1958 (license license:bsd-3)))
1959
1960 (define-public guile2.0-irregex
1961 (package
1962 (inherit guile-irregex)
1963 (name "guile2.0-irregex")
1964 (native-inputs `(("guile" ,guile-2.0)))))
1965
1966 (define-public guile3.0-irregex
1967 (package
1968 (inherit guile-irregex)
1969 (name "guile3.0-irregex")
1970 (native-inputs `(("guile" ,guile-next)))))
1971
1972 (define-public haunt
1973 (package
1974 (name "haunt")
1975 (version "0.2.4")
1976 (source (origin
1977 (method url-fetch)
1978 (uri (string-append "https://files.dthompson.us/haunt/haunt-"
1979 version ".tar.gz"))
1980 (sha256
1981 (base32
1982 "056z4znikk83nr5mr0x2ac3iinqbywa2bvb37mhr566a1q50isfc"))
1983 (modules '((guix build utils)))
1984 (snippet
1985 '(begin
1986 ;; Allow builds with Guile 3.0.
1987 (substitute* "configure"
1988 (("2\\.2 2\\.0")
1989 "3.0 2.2 2.0"))
1990 #t))))
1991 (build-system gnu-build-system)
1992 (arguments
1993 `(#:modules ((ice-9 match) (ice-9 ftw)
1994 ,@%gnu-build-system-modules)
1995 #:tests? #f ; test suite is non-deterministic :(
1996 #:phases (modify-phases %standard-phases
1997 (add-after 'install 'wrap-haunt
1998 (lambda* (#:key inputs outputs #:allow-other-keys)
1999 ;; Wrap the 'haunt' command to refer to the right
2000 ;; modules.
2001 (let* ((out (assoc-ref outputs "out"))
2002 (bin (string-append out "/bin"))
2003 (site (string-append
2004 out "/share/guile/site"))
2005 (guile-reader (assoc-ref inputs "guile-reader"))
2006 (deps `(,@(if guile-reader
2007 (list guile-reader)
2008 '())
2009 ,(assoc-ref inputs "guile-commonmark"))))
2010 (match (scandir site)
2011 (("." ".." version)
2012 (let ((modules (string-append site "/" version))
2013 (compiled-modules (string-append
2014 out "/lib/guile/" version
2015 "/site-ccache")))
2016 (wrap-program (string-append bin "/haunt")
2017 `("GUILE_LOAD_PATH" ":" prefix
2018 (,modules
2019 ,@(map (lambda (dep)
2020 (string-append dep
2021 "/share/guile/site/"
2022 version))
2023 deps)))
2024 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
2025 (,compiled-modules
2026 ,@(map (lambda (dep)
2027 (string-append dep "/lib/guile/"
2028 version
2029 "/site-ccache"))
2030 deps))))
2031 #t)))))))))
2032 (native-inputs
2033 `(("pkg-config" ,pkg-config)
2034 ("texinfo" ,texinfo)))
2035 (inputs
2036 `(("guile" ,guile-2.2)))
2037 (propagated-inputs
2038 `(("guile-reader" ,guile-reader)
2039 ("guile-commonmark" ,guile-commonmark)))
2040 (synopsis "Functional static site generator")
2041 (description "Haunt is a static site generator written in Guile
2042 Scheme. Haunt features a functional build system and an extensible
2043 interface for reading articles in any format.")
2044 (home-page "http://haunt.dthompson.us")
2045 (license license:gpl3+)))
2046
2047 (define-public guile3.0-haunt
2048 (package
2049 (inherit haunt)
2050 (name "guile3.0-haunt")
2051 (inputs `(("guile" ,guile-3.0)))
2052 (propagated-inputs
2053 ;; XXX: Guile-Reader is currently unavailable for Guile 3.0 so strip it.
2054 `(("guile-commonmark" ,guile3.0-commonmark)))))
2055
2056 (define-public guile2.0-haunt
2057 (package
2058 (inherit haunt)
2059 (name "guile2.0-haunt")
2060 (inputs `(("guile" ,guile-2.0)))))
2061
2062 (define-public guile-redis
2063 (package
2064 (name "guile-redis")
2065 (version "1.3.0")
2066 (home-page "https://github.com/aconchillo/guile-redis")
2067 (source (origin
2068 (method git-fetch)
2069 (uri (git-reference
2070 (url home-page)
2071 (commit version)))
2072 (file-name (git-file-name name version))
2073 (sha256
2074 (base32
2075 "14izs8daxh7pb7vwpxi5g427qa31137jkaxrb1cy5rpjkwchy723"))))
2076 (build-system gnu-build-system)
2077 (native-inputs
2078 `(("autoconf" ,autoconf)
2079 ("automake" ,automake)
2080 ("pkg-config" ,pkg-config)
2081 ("guile" ,guile-2.2)))
2082 (synopsis "Redis client library for Guile")
2083 (description "Guile-redis provides a Scheme interface to the Redis
2084 key-value cache and store.")
2085 (license license:lgpl3+)))
2086
2087 (define-public guile2.0-redis
2088 (package
2089 (inherit guile-redis)
2090 (name "guile2.0-redis")
2091 (native-inputs `(("guile" ,guile-2.0)
2092 ,@(alist-delete "guile"
2093 (package-native-inputs guile-redis))))))
2094
2095 (define-public guile-commonmark
2096 (package
2097 (name "guile-commonmark")
2098 (version "0.1.2")
2099 (source (origin
2100 (method url-fetch)
2101 (uri (string-append "https://github.com/OrangeShark/" name
2102 "/releases/download/v" version
2103 "/" name "-" version ".tar.gz"))
2104 (sha256
2105 (base32
2106 "17lrsdisa3kckh24q114vfmzdc4wkqa6ccwl4hdlrng5wpn1iman"))
2107 (modules '((guix build utils)))
2108 (snippet
2109 '(begin
2110 ;; Allow builds with Guile 3.0.
2111 (substitute* "configure"
2112 (("2\\.2 2\\.0")
2113 "3.0 2.2 2.0"))
2114 #t))))
2115 (build-system gnu-build-system)
2116 (inputs
2117 `(("guile" ,guile-2.2)))
2118 (native-inputs
2119 `(("pkg-config" ,pkg-config)))
2120 (synopsis "CommonMark parser for Guile")
2121 (description
2122 "guile-commonmark is a library for parsing CommonMark, a fully specified
2123 variant of Markdown. The library is written in Guile Scheme and is designed
2124 to transform a CommonMark document to SXML. guile-commonmark tries to closely
2125 follow the @uref{http://commonmark.org/, CommonMark spec}, the main difference
2126 is no support for parsing block and inline level HTML.")
2127 (home-page "https://github.com/OrangeShark/guile-commonmark")
2128 (license license:lgpl3+)))
2129
2130 (define-public guile3.0-commonmark
2131 (package
2132 (inherit guile-commonmark)
2133 (name "guile3.0-commonmark")
2134 (inputs `(("guile" ,guile-3.0)))))
2135
2136 (define-public guile2.0-commonmark
2137 (package
2138 (inherit guile-commonmark)
2139 (name "guile2.0-commonmark")
2140 (inputs `(("guile" ,guile-2.0)))))
2141
2142 (define-public mcron
2143 (package
2144 (name "mcron")
2145 (version "1.1.3")
2146 (source (origin
2147 (method url-fetch)
2148 (uri (string-append "mirror://gnu/mcron/mcron-"
2149 version ".tar.gz"))
2150 (sha256
2151 (base32
2152 "00kv7fgllzjpis0g1m9csycp4f6l11774m09dqy255cvmim2g743"))))
2153 (build-system gnu-build-system)
2154 (arguments
2155 '(#:phases (modify-phases %standard-phases
2156 (add-after 'unpack 'fix-finding-guile
2157 (lambda _
2158 (substitute* "configure"
2159 (("2\\.0") "3.0 2.2 2.0"))
2160 #t))
2161 (add-before 'check 'adjust-tests
2162 (lambda _
2163 (substitute* "tests/job-specifier.scm"
2164 ;; (getpw) fails with "entry not found" in the build
2165 ;; environment, so pass an argument.
2166 (("\\(getpw\\)")
2167 "(getpwnam (getuid))")
2168 ;; The build environment lacks an entry for root in
2169 ;; /etc/passwd.
2170 (("\\(getpw 0\\)")
2171 "(getpwnam \"nobody\")")
2172
2173 ;; FIXME: Skip the 4 faulty tests (see above).
2174 (("\\(test-equal \"next-year\"" all)
2175 (string-append "(test-skip 4)\n" all)))
2176 #t)))))
2177 (native-inputs `(("pkg-config" ,pkg-config)
2178 ("tzdata" ,tzdata-for-tests)))
2179 (inputs `(("guile" ,guile-2.2.7))) ;fix <https://bugs.gnu.org/37237>
2180 (home-page "https://www.gnu.org/software/mcron/")
2181 (synopsis "Run jobs at scheduled times")
2182 (description
2183 "GNU Mcron is a complete replacement for Vixie cron. It is used to run
2184 tasks on a schedule, such as every hour or every Monday. Mcron is written in
2185 Guile, so its configuration can be written in Scheme; the original cron
2186 format is also supported.")
2187 (license license:gpl3+)))
2188
2189 (define-public guile3.0-mcron
2190 (package
2191 (inherit mcron)
2192 (name "guile3.0-mcron")
2193 (inputs `(("guile" ,guile-3.0)))))
2194
2195 (define-public guile-picture-language
2196 (let ((commit "91d10c96708d732145006dd2802acc4de08b632e")
2197 (revision "1"))
2198 (package
2199 (name "guile-picture-language")
2200 (version (git-version "0.0.1" revision commit))
2201 (source (origin
2202 (method git-fetch)
2203 (uri (git-reference
2204 (url "https://git.elephly.net/software/guile-picture-language.git")
2205 (commit commit)))
2206 (file-name (git-file-name name version))
2207 (sha256
2208 (base32
2209 "1ydvw9dvssdvlvhh1dr8inyzy2x6m41qgp8hsivca1xysr4gc23a"))))
2210 (build-system gnu-build-system)
2211 (inputs
2212 `(("guile" ,guile-2.2)))
2213 (native-inputs
2214 `(("autoconf" ,autoconf)
2215 ("automake" ,automake)
2216 ("imagemagick" ,imagemagick)
2217 ("pkg-config" ,pkg-config)
2218 ("texinfo" ,texinfo)))
2219 (home-page "https://git.elephly.net/software/guile-picture-language.git")
2220 (synopsis "Picture language for Guile")
2221 (description
2222 "This package provides a simple SVG-based picture language for Guile.
2223 The picture values can directly be displayed in Geiser.")
2224 (license license:lgpl3+))))
2225
2226 (define-public guile3.0-picture-language
2227 (package
2228 (inherit guile-picture-language)
2229 (name "guile3.0-picture-language")
2230 (inputs `(("guile" ,guile-3.0)))))
2231
2232 (define-public guile-studio
2233 (package
2234 (name "guile-studio")
2235 (version "0.0.2")
2236 (source (origin
2237 (method git-fetch)
2238 (uri (git-reference
2239 (url "https://git.elephly.net/software/guile-studio.git")
2240 (commit version)))
2241 (file-name (git-file-name name version))
2242 (sha256
2243 (base32
2244 "10ls4ra148hd9ra7sin4kh9vv0am5pwk48p7dsjhrlg2l1hsh4hi"))))
2245 (build-system gnu-build-system)
2246 (arguments
2247 `(#:modules
2248 ((ice-9 match)
2249 (srfi srfi-1)
2250 ,@%gnu-build-system-modules)
2251 #:tests? #f ; there are none
2252 #:make-flags
2253 (list (string-append "ICONS_DIR="
2254 (assoc-ref %build-inputs "adwaita-icon-theme")
2255 "/share/icons/Adwaita/")
2256 (string-append "PICT_DIR="
2257 (assoc-ref %build-inputs "guile-picture-language"))
2258 (string-append "EMACS_DIR="
2259 (assoc-ref %build-inputs "emacs"))
2260 (string-append "GUILE_DIR="
2261 (assoc-ref %build-inputs "guile"))
2262 (string-join (cons "INPUTS="
2263 (filter-map
2264 (lambda (input)
2265 (match input
2266 ((label . pkg)
2267 (and (string-prefix? "emacs" label) pkg))))
2268 %build-inputs)))
2269 (string-append "PREFIX=" (assoc-ref %outputs "out")))
2270 #:phases
2271 (modify-phases %standard-phases
2272 (delete 'configure)
2273 (delete 'install))))
2274 (inputs
2275 `(("guile" ,guile-2.2)
2276 ("guile-picture-language" ,guile-picture-language)
2277 ("emacs" ,emacs)
2278 ("emacs-geiser" ,emacs-geiser)
2279 ("emacs-company" ,emacs-company)
2280 ("emacs-flycheck" ,emacs-flycheck)
2281 ("emacs-smart-mode-line" ,emacs-smart-mode-line)
2282 ("emacs-paren-face" ,emacs-paren-face)
2283 ("adwaita-icon-theme" ,adwaita-icon-theme)))
2284 (native-inputs
2285 `(("texinfo" ,texinfo)))
2286 (home-page "https://gnu.org/software/guile")
2287 (synopsis "IDE for Guile")
2288 (description
2289 "This is Emacs with a few settings that make working with Guile easier
2290 for people new to Emacs. Features include: CUA mode, Geiser, tool bar icons
2291 to evaluate Guile buffers, support for Guile's very own picture language, code
2292 completion, a simple mode line, etc.")
2293 (license license:gpl3+)))
2294
2295 (define-public guile-stis-parser
2296 (let ((commit "6e85d37ffc333b722f4413a6c648263701eb75bd")
2297 (revision "1"))
2298 (package
2299 (name "guile-stis-parser")
2300 (version (git-version "0" revision commit))
2301 (source (origin
2302 (method git-fetch)
2303 (uri (git-reference
2304 (url "https://gitlab.com/tampe/stis-parser")
2305 (commit commit)))
2306 (file-name (git-file-name name version))
2307 (sha256
2308 (base32
2309 "0v4hvq7rlpbra1ni73lf8k6sdmjlflr50yi3p1f24g85h77pc7c0"))))
2310 (build-system gnu-build-system)
2311 (arguments
2312 `(#:parallel-build? #f ; not supported
2313 #:phases
2314 (modify-phases %standard-phases
2315 (add-after 'unpack 'chdir
2316 (lambda _ (chdir "modules") #t))
2317 (add-after 'chdir 'use-canonical-directory-for-go-files
2318 (lambda _
2319 (substitute* "Makefile.am"
2320 (("/ccache") "/site-ccache"))
2321 #t))
2322 (add-after 'chdir 'delete-broken-symlink
2323 (lambda _
2324 (delete-file "parser/stis-parser/lang/.#calc.scm")
2325 #t)))))
2326 (inputs
2327 `(("guile" ,guile-2.2)))
2328 (native-inputs
2329 `(("autoconf" ,autoconf)
2330 ("automake" ,automake)
2331 ("pkg-config" ,pkg-config)))
2332 (home-page "https://gitlab.com/tampe/stis-parser")
2333 (synopsis "Parser combinator framework")
2334 (description
2335 "This package provides a functional parser combinator library that
2336 supports backtracking and a small logical framework. The idea is to build up
2337 chunks that are memoized and there is no clear scanner/parser separation,
2338 chunks can be expressions as well as simple tokens.")
2339 (license license:lgpl2.0+))))
2340
2341 (define-public guile-persist
2342 (let ((commit "b14927b0368af51c024560aee5f55724aee35233")
2343 (revision "1"))
2344 (package
2345 (name "guile-persist")
2346 (version (git-version "0" revision commit))
2347 (source (origin
2348 (method git-fetch)
2349 (uri (git-reference
2350 (url "https://gitlab.com/tampe/guile-persist")
2351 (commit commit)))
2352 (file-name (git-file-name name version))
2353 (sha256
2354 (base32
2355 "0z5nf377wh8yj6n3sx2ddn4bdx1qrqnw899dlqjhg0q69qzil522"))
2356 (modules '((guix build utils)))
2357 (snippet
2358 '(begin
2359 ;; Install .go files in the right place.
2360 (substitute* "Makefile.am"
2361 (("/ccache") "/site-ccache"))
2362 #t))))
2363 (build-system gnu-build-system)
2364 (arguments
2365 `(#:phases
2366 (modify-phases %standard-phases
2367 (add-after 'unpack 'patch-prefix
2368 (lambda* (#:key inputs outputs #:allow-other-keys)
2369 (substitute* "src/Makefile.am"
2370 (("/usr/local/lib/guile")
2371 (string-append (assoc-ref outputs "out") "/lib/guile"))
2372 (("/usr/local/include/guile")
2373 (string-append (assoc-ref inputs "guile") "/include/guile"))
2374 (("-L/usr/local/lib")
2375 (string-append "-L" (assoc-ref inputs "guile") "/lib"))
2376 ;; Use canonical directory for go files.
2377 (("/ccache") "/site-ccache"))
2378 #t))
2379 (add-after 'unpack 'patch-library-reference
2380 (lambda* (#:key outputs #:allow-other-keys)
2381 (let ((out (assoc-ref outputs "out")))
2382 (substitute* "persist/persistance.scm"
2383 (("\"libguile-persist\"")
2384 (format #f "\"~a/lib/guile/2.2/extensions/libguile-persist\"" out)))
2385 #t))))))
2386 (inputs
2387 `(("guile" ,guile-2.2)))
2388 (native-inputs
2389 `(("autoconf" ,autoconf)
2390 ("automake" ,automake)
2391 ("libtool" ,libtool)
2392 ("pkg-config" ,pkg-config)))
2393 (home-page "https://gitlab.com/tampe/guile-persist")
2394 (synopsis "Persistence programming framework for Guile")
2395 (description
2396 "This is a serialization library for serializing objects like classes
2397 and objects, closures and structs. This currently does not support
2398 serializing continuations or delimited continuations.")
2399 (license license:lgpl2.0+))))
2400
2401 (define-public python-on-guile
2402 (let ((commit "00a51a23247f1edc4ae8eda72b30df5cd7d0015f")
2403 (revision "3"))
2404 (package
2405 (name "python-on-guile")
2406 (version (git-version "0.1.0" revision commit))
2407 (source (origin
2408 (method git-fetch)
2409 (uri (git-reference
2410 (url "https://git.elephly.net/software/python-on-guile.git")
2411 (commit commit)))
2412 (file-name (git-file-name name version))
2413 (sha256
2414 (base32
2415 "03rpnqr08rqr3gay128g564rwk8w4jbj28ss6b46z1d4vjs4nk68"))))
2416 (build-system gnu-build-system)
2417 (arguments
2418 `(#:parallel-build? #f ; not supported
2419 #:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
2420
2421 #:phases
2422 (modify-phases %standard-phases
2423 (add-after 'unpack 'chdir
2424 (lambda _ (chdir "modules") #t))
2425 (add-after 'install 'wrap
2426 (lambda* (#:key outputs #:allow-other-keys)
2427 ;; Wrap the 'python' executable so it can find its
2428 ;; dependencies.
2429 (let ((out (assoc-ref outputs "out")))
2430 (wrap-program (string-append out "/bin/python")
2431 `("GUILE_LOAD_PATH" ":" prefix
2432 (,(getenv "GUILE_LOAD_PATH")))
2433 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
2434 (,(getenv "GUILE_LOAD_COMPILED_PATH"))))
2435 #t))))))
2436 (inputs
2437 `(("guile" ,guile-2.2)))
2438 (propagated-inputs
2439 `(("guile-persist" ,guile-persist)
2440 ("guile-readline" ,guile-readline)
2441 ("guile-stis-parser" ,guile-stis-parser)))
2442 (native-inputs
2443 `(("autoconf" ,autoconf)
2444 ("automake" ,automake)
2445 ("libtool" ,libtool)
2446 ("pkg-config" ,pkg-config)))
2447 (home-page "https://gitlab.com/python-on-guile/python-on-guile/")
2448 (synopsis "Python implementation in Guile")
2449 (description
2450 "This package allows you to compile a Guile Python file to any target
2451 from @code{tree-il}.")
2452 (license license:lgpl2.0+))))
2453
2454 (define-public guile-file-names
2455 (package
2456 (name "guile-file-names")
2457 (version "0.3")
2458 (source (origin
2459 (method url-fetch)
2460 (uri (string-append "http://brandon.invergo.net/software/download/"
2461 "guile-file-names/guile-file-names-"
2462 version ".tar.gz"))
2463 (sha256
2464 (base32
2465 "01chizdxkhw6aqv629vxka9f5x3534ij7r0jqndawsg2vxm1r9sz"))))
2466 (build-system gnu-build-system)
2467 (arguments
2468 `(#:phases
2469 (modify-phases %standard-phases
2470 (add-after 'unpack 'fix-target-directory
2471 (lambda _
2472 (substitute* "src/Makefile.in"
2473 (("guilemoddir = \\$\\(GUILE_SITE\\)")
2474 "guilemoddir = $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
2475 #t)))))
2476 (inputs
2477 `(("guile" ,guile-2.2)))
2478 (native-inputs
2479 `(("pkg-config" ,pkg-config)))
2480 (home-page "https://gitlab.com/brandoninvergo/guile-file-names")
2481 (synopsis "Manipulate file names")
2482 (description
2483 "The @code{(file-names)} module provides tools for manipulating file
2484 names. The module was built on the idea that doing anything more than a
2485 non-trivial modification of a file name string is a pain (making sure all
2486 slashes are present and accounted for, resolving @code{.} and @code{..}, etc).
2487 Inevitably, you have to break the string up into chunks and operate on that
2488 list of components. This module takes care of that for you.")
2489 (license license:lgpl3+)))
2490
2491 (define-public guile-gi
2492 (package
2493 (name "guile-gi")
2494 (version "0.2.2")
2495 (source (origin
2496 (method url-fetch)
2497 (uri (string-append "http://lonelycactus.com/tarball/guile_gi-"
2498 version ".tar.gz"))
2499 (sha256
2500 (base32
2501 "1v82kz8mz7wgq6w5llaz8a2wwdnl8vk2667dpjwjxscl0qyxsy6y"))))
2502 (build-system gnu-build-system)
2503 (arguments
2504 `(#:configure-flags '("--with-gnu-filesystem-hierarchy")
2505 #:modules ((guix build gnu-build-system)
2506 (guix build utils)
2507 (ice-9 popen)
2508 (ice-9 rdelim))
2509 #:phases
2510 (modify-phases %standard-phases
2511 (add-after 'unpack 'patch-references-to-extension
2512 (lambda* (#:key outputs #:allow-other-keys)
2513 (let ((effective (read-line
2514 (open-pipe* OPEN_READ
2515 "guile" "-c"
2516 "(display (effective-version))"))))
2517 (substitute* '("module/gi.scm"
2518 "module/gi/oop.scm"
2519 "module/gi/documentation.scm"
2520 "module/gi/types.scm"
2521 "module/gi/repository.scm")
2522 (("\\(load-extension \"libguile-gi\" \"(.*)\"\\)" m arg)
2523 (format #f "~s"
2524 `(load-extension
2525 (format #f "~alibguile-gi"
2526 (if (getenv "GUILE_GI_UNINSTALLED")
2527 ""
2528 ,(format #f "~a/lib/guile/~a/"
2529 (assoc-ref outputs "out")
2530 effective)))
2531 ,arg)))))
2532 (setenv "GUILE_GI_UNINSTALLED" "1")
2533 #t))
2534 (add-before 'check 'start-xorg-server
2535 (lambda* (#:key inputs #:allow-other-keys)
2536 ;; The init_check test requires a running X server.
2537 (system (format #f "~a/bin/Xvfb :1 &"
2538 (assoc-ref inputs "xorg-server")))
2539 (setenv "DISPLAY" ":1")
2540 #t)))))
2541 (native-inputs
2542 `(("gettext" ,gettext-minimal)
2543 ("glib:bin" ,glib "bin") ; for glib-compile-resources
2544 ("libtool" ,libtool)
2545 ("pkg-config" ,pkg-config)
2546 ("xorg-server" ,xorg-server)))
2547 (propagated-inputs
2548 `(("glib" ,glib)
2549 ("gobject-introspection" ,gobject-introspection)
2550 ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)
2551 ("gtk+" ,gtk+)
2552 ("guile-lib" ,guile-lib)
2553 ("webkitgtk" ,webkitgtk)))
2554 (inputs `(("guile" ,guile-2.2)))
2555 (home-page "https://github.com/spk121/guile-gi")
2556 (synopsis "GObject bindings for Guile")
2557 (description
2558 "Guile-GI is a library for Guile that allows using GObject-based
2559 libraries, such as GTK+3. Its README comes with the disclaimer: This is
2560 pre-alpha code.")
2561 (license license:gpl3+)))
2562
2563 (define-public guile3.0-gi
2564 (package
2565 (inherit guile-gi)
2566 (name "guile3.0-gi")
2567 (native-inputs
2568 `(("guile" ,guile-3.0)
2569 ,@(package-native-inputs guile-gi)))))
2570
2571 (define-public guile-srfi-159
2572 (let ((commit "1bd98abda2ae4ef8f36761a167903e55c6bda7bb")
2573 (revision "0"))
2574 (package
2575 (name "guile-srfi-159")
2576 (version (git-version "0" revision commit))
2577 (home-page "https://bitbucket.org/bjoli/guile-srfi-159")
2578 (source (origin
2579 (method hg-fetch)
2580 (uri (hg-reference (changeset commit)
2581 (url home-page)))
2582 (sha256
2583 (base32
2584 "1zw6cmcy7xdbfiz3nz9arqnn7l2daidaps6ixkcrc9b6k51fdv3p"))
2585 (file-name (git-file-name name version))))
2586 (build-system guile-build-system)
2587 (arguments
2588 ;; The *-impl.scm files are actually included from module files; they
2589 ;; should not be compiled separately, but they must be installed.
2590 '(#:not-compiled-file-regexp "-impl\\.scm$"))
2591 (inputs
2592 `(("guile" ,guile-2.2)))
2593 (synopsis "Formatting combinators for Guile")
2594 (description
2595 "The @code{(srfi-159)} module and its sub-modules implement the
2596 formatting combinators specified by
2597 @uref{https://srfi.schemers.org/srfi-159/srfi-159.html, SRFI-159}. These are
2598 more expressive and flexible than the traditional @code{format} procedure.")
2599 (license license:bsd-3))))
2600
2601 (define-public emacsy
2602 (package
2603 (name "emacsy")
2604 (version "0.4.1")
2605 (source (origin
2606 (method url-fetch)
2607 (uri (string-append
2608 "https://download.savannah.nongnu.org/releases/"
2609 name "/" name "-" version ".tar.gz"))
2610 (sha256
2611 (base32
2612 "1cpb85dl1nibd34c2x2h7vfmjpkgh353p5b1w20v6cs6gmvgg4np"))))
2613 (build-system gnu-build-system)
2614 (native-inputs
2615 `(("autoconf" ,autoconf)
2616 ("automake" ,automake)
2617 ("bzip2" ,bzip2)
2618 ("guile" ,guile-2.2)
2619 ("gettext" ,gettext-minimal)
2620 ("libtool" ,libtool)
2621 ("perl" ,perl)
2622 ("pkg-config" ,pkg-config)
2623 ("texinfo" ,texinfo)
2624 ("texlive" ,(texlive-union (list texlive-generic-epsf)))))
2625 (inputs
2626 `(("dbus-glib" ,dbus-glib)
2627 ("guile" ,guile-2.2)
2628 ("guile-lib" ,guile-lib)
2629 ("guile-readline" ,guile-readline)
2630 ("freeglut" ,freeglut)
2631 ("webkitgtk" ,webkitgtk)))
2632 (propagated-inputs
2633 `(("glib-networking" ,glib-networking)
2634 ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)))
2635 (arguments
2636 `(#:modules ((guix build gnu-build-system)
2637 (guix build utils)
2638 (ice-9 popen)
2639 (ice-9 rdelim)
2640 (ice-9 regex)
2641 (ice-9 ftw)
2642 (srfi srfi-26))
2643 #:phases
2644 (modify-phases %standard-phases
2645 (add-before 'configure 'setenv
2646 (lambda _
2647 (setenv "GUILE_AUTO_COMPILE" "0")
2648 #t))
2649 (add-after 'install 'wrap-binaries
2650 (lambda* (#:key inputs outputs #:allow-other-keys)
2651 (let* ((out (assoc-ref outputs "out"))
2652 (effective (read-line
2653 (open-pipe* OPEN_READ
2654 "guile" "-c"
2655 "(display (effective-version))")))
2656 (deps (map (cut assoc-ref inputs <>)
2657 '("guile-lib" "guile-readline")))
2658 (scm-path (map (cut string-append <> "/share/guile/site/"
2659 effective) `(,out ,@deps)))
2660 (go-path (map (cut string-append <> "/lib/guile/" effective
2661 "/site-ccache/") `(,out ,@deps)))
2662 (examples (filter (cut string-match "emacsy" <>)
2663 (scandir (string-append out "/bin/"))))
2664 (progs (map (cut string-append out "/bin/" <>)
2665 examples)))
2666 (map (cut wrap-program <>
2667 `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
2668 `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))
2669 progs)
2670 #t))))))
2671 (home-page "https://savannah.nongnu.org/projects/emacsy")
2672 (synopsis "Embeddable GNU Emacs-like library using Guile")
2673 (description
2674 "Emacsy is an embeddable Emacs-like library that uses GNU Guile
2675 as extension language. Emacsy can give a C program an Emacsy feel with
2676 keymaps, minibuffer, recordable macros, history, tab completion, major
2677 and minor modes, etc., and can also be used as a pure Guile library. It
2678 comes with a simple counter example using FreeGLUT and browser examples
2679 in C using Gtk+-3 and WebKitGtk.")
2680 (license license:gpl3+)))
2681
2682 (define-public emacsy-minimal
2683 (let ((commit "f3bf0dbd803d7805b6ae8303253507ad13922293"))
2684 (package
2685 (inherit emacsy)
2686 (name "emacsy-minimal")
2687 (version (git-version "v0.4.1" "19" commit))
2688 (source (origin
2689 (method git-fetch)
2690 (uri (git-reference
2691 (url "https://git.savannah.gnu.org/git/emacsy.git")
2692 (commit commit)))
2693 (file-name (git-file-name name version))
2694 (sha256
2695 (base32
2696 "0ivy28km1p7nlrf63xx3hvrpxf5ld5amk1wcan3k7sqv1kq9mqdb"))))
2697 (build-system gnu-build-system)
2698 (inputs
2699 `(("guile" ,guile-2.2)
2700 ("guile-lib" ,guile-lib)
2701 ("guile-readline" ,guile-readline)))
2702 (propagated-inputs '())
2703 (arguments
2704 `(#:configure-flags '("--without-examples")
2705 #:phases
2706 (modify-phases %standard-phases
2707 (add-before 'configure 'setenv
2708 (lambda _
2709 (setenv "GUILE_AUTO_COMPILE" "0")
2710 #t))))))))
2711
2712 (define-public guile-jpeg
2713 (let ((commit "6a1673578b297c2c1b28e44a76bd5c49e76a5046")
2714 (revision "0"))
2715 (package
2716 (name "guile-jpeg")
2717 (version (git-version "0.0" revision commit))
2718 (home-page "https://gitlab.com/wingo/guile-jpeg")
2719 (source (origin
2720 (method git-fetch)
2721 (uri (git-reference (url home-page)
2722 (commit commit)))
2723 (sha256
2724 (base32
2725 "05z9m408w3h6aqb5k3r3qa7khir0k10rxwvsrzhkcq1hr5vbmr4m"))
2726 (file-name (git-file-name name version))
2727 (modules '((guix build utils)))
2728 (snippet
2729 '(begin
2730 ;; Install .go files in the right place.
2731 (substitute* "Makefile.am"
2732 (("/ccache") "/site-ccache"))
2733 #t))))
2734 (build-system gnu-build-system)
2735 (native-inputs
2736 `(("autoconf" ,autoconf)
2737 ("automake" ,automake)
2738 ("pkg-config" ,pkg-config)
2739 ("guile" ,guile-2.2)))
2740 (synopsis "JPEG file parsing library for Guile")
2741 (description
2742 "Guile-JPEG is a Scheme library to parse JPEG image files and to
2743 perform geometrical transforms on JPEG images.")
2744 (license license:gpl3+))))
2745
2746 (define-public nomad
2747 (package
2748 (name "nomad")
2749 (version "0.1.2-alpha")
2750 (source (origin
2751 (method git-fetch)
2752 (uri (git-reference
2753 (url "https://git.savannah.gnu.org/git/nomad.git")
2754 (commit version)))
2755 (file-name (git-file-name name version))
2756 (sha256
2757 (base32
2758 "1dnkr1hmvfkwgxd75dcf93pg39yfgawvdpzdhv991yhghv0qxc9h"))))
2759 (build-system gnu-build-system)
2760 (native-inputs
2761 `(("autoconf" ,autoconf)
2762 ("automake" ,automake)
2763 ("bash" ,bash)
2764 ("pkg-config" ,pkg-config)
2765 ("libtool" ,libtool)
2766 ("guile" ,guile-2.2)
2767 ("glib:bin" ,glib "bin")
2768 ("texinfo" ,texinfo)
2769 ("perl" ,perl)))
2770 (inputs
2771 `(("guile" ,guile-2.2)
2772 ("guile-lib" ,guile-lib)
2773 ("guile-gcrypt" ,guile-gcrypt)
2774 ("guile-readline" ,guile-readline)
2775 ("gnutls" ,gnutls)
2776 ("shroud" ,shroud)
2777 ("emacsy" ,emacsy-minimal)
2778 ("glib" ,glib)
2779 ("dbus-glib" ,dbus-glib)
2780 ("gtk+" ,gtk+)
2781 ("gtksourceview" ,gtksourceview)
2782 ("webkitgtk" ,webkitgtk)
2783 ("xorg-server" ,xorg-server)))
2784 (propagated-inputs
2785 `(("glib" ,glib)
2786 ("glib-networking" ,glib-networking)
2787 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
2788 (arguments
2789 `(#:modules ((guix build gnu-build-system)
2790 (guix build utils)
2791 (ice-9 popen)
2792 (ice-9 rdelim)
2793 (srfi srfi-26))
2794 #:phases
2795 (modify-phases %standard-phases
2796 (add-before 'check 'start-xorg-server
2797 (lambda* (#:key inputs #:allow-other-keys)
2798 ;; The test suite requires a running X server.
2799 (system (format #f "~a/bin/Xvfb :1 &"
2800 (assoc-ref inputs "xorg-server")))
2801 (setenv "DISPLAY" ":1")
2802 #t))
2803 (add-after 'install 'wrap-binaries
2804 (lambda* (#:key inputs outputs #:allow-other-keys)
2805 (let* ((out (assoc-ref outputs "out"))
2806 (gio-deps (map (cut assoc-ref inputs <>) '("glib-networking"
2807 "glib")))
2808 (gio-mod-path (map (cut string-append <> "/lib/gio/modules")
2809 gio-deps))
2810 (effective (read-line (open-pipe*
2811 OPEN_READ
2812 "guile" "-c"
2813 "(display (effective-version))")))
2814 (deps (map (cut assoc-ref inputs <>)
2815 '("emacsy" "guile-lib" "guile-readline"
2816 "shroud")))
2817 (scm-path (map (cut string-append <>
2818 "/share/guile/site/" effective)
2819 `(,out ,@deps)))
2820 (go-path (map (cut string-append <>
2821 "/lib/guile/" effective "/site-ccache")
2822 `(,out ,@deps)))
2823 (progs (map (cut string-append out "/bin/" <>)
2824 '("nomad"))))
2825 (map (cut wrap-program <>
2826 `("GIO_EXTRA_MODULES" ":" prefix ,gio-mod-path)
2827 `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
2828 `("GUILE_LOAD_COMPILED_PATH" ":"
2829 prefix ,go-path))
2830 progs)
2831 #t))))))
2832 (home-page "https://savannah.nongnu.org/projects/nomad/")
2833 (synopsis "Extensible Web Browser in Guile Scheme")
2834 (description "Nomad is an Emacs-like Web Browser built using Webkitgtk and
2835 Emacsy. It has a small C layer and most browser features are fully
2836 programmable in Guile. It has hooks, keymaps, and self documentation
2837 features.")
2838 (license license:gpl3+)))
2839
2840 (define-public guile-cv
2841 (package
2842 (name "guile-cv")
2843 (version "0.2.1")
2844 (source (origin
2845 (method url-fetch)
2846 (uri (string-append "mirror://gnu/guile-cv/guile-cv-"
2847 version ".tar.gz"))
2848 (sha256
2849 (base32
2850 "0qdf0s2h1xj5lbhnc1pfw69i3zg08pqy2y6869b92ydfis8r82j9"))))
2851 (build-system gnu-build-system)
2852 (arguments
2853 `(#:phases
2854 (modify-phases %standard-phases
2855 (add-after 'unpack 'prepare-build
2856 (lambda* (#:key inputs outputs #:allow-other-keys)
2857 (substitute* "configure"
2858 (("SITEDIR=\"\\$datadir/guile-cv\"")
2859 "SITEDIR=\"$datadir/guile/site/$GUILE_EFFECTIVE_VERSION\"")
2860 (("SITECCACHEDIR=\"\\$libdir/guile-cv/")
2861 "SITECCACHEDIR=\"$libdir/"))
2862 (substitute* "cv/init.scm"
2863 (("\\(dynamic-link \"libvigra_c\"\\)")
2864 (string-append "(dynamic-link \""
2865 (assoc-ref inputs "vigra-c")
2866 "/lib/libvigra_c\")"))
2867 (("\\(dynamic-link \"libguile-cv\"\\)")
2868 (format #f "~s"
2869 `(dynamic-link
2870 (format #f "~alibguile-cv"
2871 (if (getenv "GUILE_CV_UNINSTALLED")
2872 ""
2873 ,(format #f "~a/lib/"
2874 (assoc-ref outputs "out"))))))))
2875 (setenv "GUILE_CV_UNINSTALLED" "1")
2876 ;; Only needed to satisfy the configure script.
2877 (setenv "LD_LIBRARY_PATH"
2878 (string-append (assoc-ref inputs "vigra-c") "/lib"))
2879 #t)))))
2880 (inputs
2881 `(("vigra" ,vigra)
2882 ("vigra-c" ,vigra-c)
2883 ("guile" ,guile-2.2)))
2884 (native-inputs
2885 `(("texlive" ,(texlive-union (list texlive-booktabs
2886 texlive-lm
2887 texlive-siunitx
2888 texlive-standalone
2889 texlive-xcolor
2890 texlive-fonts-iwona)))
2891 ("pkg-config" ,pkg-config)))
2892 (propagated-inputs
2893 `(("guile-lib" ,guile-lib)))
2894 (home-page "https://www.gnu.org/software/guile-cv/")
2895 (synopsis "Computer vision library for Guile")
2896 (description "Guile-CV is a Computer Vision functional programming library
2897 for the Guile Scheme language. It is based on Vigra (Vision with Generic
2898 Algorithms), a C++ image processing and analysis library. Guile-CV contains
2899 bindings to Vigra C (a C wrapper to most of the Vigra functionality) and is
2900 enriched with pure Guile Scheme algorithms, all accessible through a nice,
2901 clean and easy to use high level API.")
2902 (license license:gpl3+)))
2903
2904 (define-public guile-ffi-fftw
2905 (let ((commit "294ad9e7491dcb40026d2fec9be2af05263be1c0")
2906 (revision "2"))
2907 (package
2908 (name "guile-ffi-fftw")
2909 (version (git-version "0" revision commit))
2910 (source (origin
2911 (method git-fetch)
2912 (uri (git-reference
2913 (url "https://github.com/lloda/guile-ffi-fftw.git")
2914 (commit commit)))
2915 (file-name (git-file-name "guile-ffi-fftw" version))
2916 (sha256
2917 (base32
2918 "08j40a5p6a8pgvhffmzb5rfdnrav2mksy3gfjkdqy93jfj1z5afg"))))
2919 (build-system guile-build-system)
2920 (arguments
2921 `(#:source-directory "mod"
2922 #:phases
2923 (modify-phases %standard-phases
2924 (add-after 'unpack 'prepare-build
2925 (lambda* (#:key inputs #:allow-other-keys)
2926 (substitute* "mod/ffi/fftw.scm"
2927 (("\\(getenv \"GUILE_FFI_FFTW_LIBFFTW3_PATH\"\\)")
2928 (format #f "\"~a/lib\"" (assoc-ref inputs "fftw"))))
2929 #t))
2930 (add-after 'build 'check
2931 (lambda _
2932 (invoke "guile" "-L" "mod"
2933 "-s" "test/test-ffi-fftw.scm"))))))
2934 (inputs
2935 `(("fftw" ,fftw)
2936 ("guile" ,guile-2.2)))
2937 (home-page "https://github.com/lloda/guile-ffi-fftw/")
2938 (synopsis "Access FFTW through Guile's FFI")
2939 (description "This is a minimal set of Guile FFI bindings for the FFTW
2940 library's ‘guru interface’. It provides two functions: @code{fftw-dft! rank
2941 sign in out} and @code{fftw-dft rank sign in}. These bindings being minimal,
2942 there is no support for computing & reusing plans, or split r/i transforms, or
2943 anything other than straight complex DFTs.")
2944 (license license:lgpl3+))))
2945
2946 (define-public srfi-64-driver
2947 (package
2948 (name "srfi-64-driver")
2949 (version "0.1")
2950 (source (origin
2951 (method url-fetch)
2952 (uri (string-append "https://files.ngyro.com/srfi-64-driver/"
2953 "srfi-64-driver-" version ".tar.gz"))
2954 (sha256
2955 (base32
2956 "188b6mb7sjjg0a8zldikinglf40ky8mg8rwh5768gjmch6gkk3ph"))))
2957 (build-system gnu-build-system)
2958 (arguments
2959 `(#:tests? #f
2960 #:phases
2961 (modify-phases %standard-phases
2962 (delete 'build))))
2963 (native-inputs
2964 `(("pkg-config" ,pkg-config)))
2965 (inputs
2966 `(("guile" ,guile-2.2)))
2967 (home-page "https://ngyro.com/software/srfi-64-driver.html")
2968 (synopsis "Automake test driver for SRFI 64 test suites")
2969 (description "This package provides an Automake test driver that can
2970 run SRFI 64 test suites. It gives Automake insight into the individual
2971 tests being run, resulting clearer and more specific output.")
2972 (license license:gpl3+)))
2973
2974 (define-public guile-semver
2975 (package
2976 (name "guile-semver")
2977 (version "0.1.1")
2978 (source (origin
2979 (method url-fetch)
2980 (uri (string-append "https://files.ngyro.com/guile-semver/"
2981 "guile-semver-" version ".tar.gz"))
2982 (sha256
2983 (base32
2984 "109p4n39ln44cxvwdccf9kgb96qx54makvd2ir521ssz6wchjyag"))))
2985 (build-system gnu-build-system)
2986 (native-inputs
2987 `(("pkg-config" ,pkg-config)))
2988 (inputs
2989 `(("guile" ,guile-2.2)))
2990 (home-page "https://ngyro.com/software/guile-semver.html")
2991 (synopsis "Semantic Versioning (SemVer) for Guile")
2992 (description "This Guile library provides tools for reading,
2993 comparing, and writing Semantic Versions. It also includes ranges in
2994 the style of the Node Package Manager (NPM).")
2995 (license license:gpl3+)))
2996
2997 (define-public guile3.0-semver
2998 (package
2999 (inherit guile-semver)
3000 (name "guile3.0-semver")
3001 (inputs
3002 `(("guile" ,guile-3.0)))))
3003
3004 (define-public guile-hashing
3005 (package
3006 (name "guile-hashing")
3007 (version "1.2.0")
3008 (home-page "https://github.com/weinholt/hashing")
3009 (source (origin
3010 (method git-fetch)
3011 (uri (git-reference
3012 (url home-page)
3013 (commit (string-append "v" version))))
3014 (file-name (git-file-name name version))
3015 (sha256
3016 (base32
3017 "1362d3lmpv7slmv1zmr9wy8panq9sjr9787gc2hagd646mpsfpkl"))))
3018 (build-system guile-build-system)
3019 (arguments
3020 `(#:modules ((guix build guile-build-system)
3021 (guix build utils)
3022 (srfi srfi-26)
3023 (ice-9 ftw))
3024 #:implicit-inputs? #f ;needs nothing but Guile
3025 #:phases (modify-phases %standard-phases
3026 (add-before 'build 'move-sls-files
3027 (lambda _
3028 ;; Move the source under hashing/ in order to match
3029 ;; module names, and rename .sls files to .scm.
3030 (define (target file)
3031 (string-append "hashing/" file))
3032
3033 (define (sls->scm sls)
3034 (string-append (string-drop-right sls 4)
3035 ".scm"))
3036
3037 (mkdir "hashing")
3038 (for-each (lambda (file)
3039 (rename-file file (sls->scm file)))
3040 (find-files "." "\\.sls$"))
3041 (for-each (lambda (file)
3042 (rename-file file (target file)))
3043 (scandir "." (cut string-suffix? ".scm" <>)))
3044 (rename-file "private" "hashing/private")
3045 #t)))))
3046 (native-inputs
3047 `(("guile" ,guile-2.2)))
3048 (synopsis "Cryprographic hash functions implemented in Scheme")
3049 (description
3050 "The @code{(hashing @dots{})} modules implement cryptographic hash
3051 functions in pure R6RS Scheme: CRC, HMAC, MD5, SHA-1, and SHA-2 (SHA-256,
3052 SHA-512).")
3053 (license license:expat)))
3054
3055 (define-public guile3.0-hashing
3056 (package
3057 (inherit guile-hashing)
3058 (name "guile3.0-hashing")
3059 (native-inputs
3060 `(("guile" ,guile-next)))))
3061
3062 (define-public guile-webutils
3063 (let ((commit "8541904f761066dc9c27b1153e9a838be9a55299")
3064 (revision "0"))
3065 (package
3066 (name "guile-webutils")
3067 (version (git-version "0.1" revision commit))
3068 (source (origin
3069 (method git-fetch)
3070 (uri (git-reference
3071 (url "https://notabug.org/cwebber/guile-webutils.git")
3072 (commit commit)))
3073 (file-name (git-file-name name version))
3074 (sha256
3075 (base32
3076 "1s9n3hbxd7lfpdi0x8wr0cfvlsf6g62ird9gbspxdrp5p05rbi64"))))
3077 (build-system gnu-build-system)
3078 (native-inputs
3079 `(("autoconf" ,autoconf)
3080 ("automake" ,automake)
3081 ("pkg-config" ,pkg-config)
3082 ("texinfo" ,texinfo)))
3083 (inputs
3084 `(("guile" ,guile-2.2)))
3085 (propagated-inputs
3086 `(("guile-irregex" ,guile-irregex)
3087 ("guile-gcrypt" ,guile-gcrypt)))
3088 (home-page "https://notabug.org/cwebber/guile-webutils")
3089 (synopsis "Web application authoring utilities for Guile")
3090 (description
3091 "This package provides tooling to write web applications in Guile, such
3092 as signed sessions, multipart message support, etc.")
3093 (license license:gpl3+))))
3094
3095 (define-public guile-lens
3096 (let ((commit "14b15d07255f9d3f55d40a3b750d13c9ee3a154f")
3097 (revision "0"))
3098 (package
3099 (name "guile-lens")
3100 (version (git-version "0.1" revision commit))
3101 (source (origin
3102 (method git-fetch)
3103 (uri (git-reference
3104 (url "https://gitlab.com/a-sassmannshausen/guile-lens.git")
3105 (commit commit)))
3106 (file-name (git-file-name name version))
3107 (sha256
3108 (base32
3109 "0w8jzqyla56yrgj7acsgd4nspyir6zgp3vgxid4xmwhg9wmf1ida"))))
3110 (build-system gnu-build-system)
3111 (arguments
3112 '(#:phases
3113 (modify-phases %standard-phases
3114 (add-after 'unpack 'run-hall
3115 (lambda _
3116 (setenv "HOME" "/tmp") ; for ~/.hall
3117 (invoke "hall" "dist" "-x"))))))
3118 (native-inputs
3119 `(("autoconf" ,autoconf)
3120 ("automake" ,automake)
3121 ("guile" ,guile-2.2)
3122 ("guile-hall" ,guile-hall)
3123 ("pkg-config" ,pkg-config)
3124 ("texinfo" ,texinfo)))
3125 (home-page "https://gitlab.com/a-sassmannshausen/guile-lens.git")
3126 (synopsis "Composable lenses for data structures in Guile")
3127 (description
3128 "Guile-Lens is a library implementing lenses in Guile. The library is
3129 currently a re-implementation of the lentes library for Clojure. Lenses
3130 provide composable procedures, which can be used to focus, apply functions
3131 over, or update a value in arbitrary data structures.")
3132 (license license:gpl3+))))
3133
3134 (define-public guile-xapian
3135 (let ((commit "ede26b808188eb4d14c6b4181c933dfc09c0a22e")
3136 (revision "0"))
3137 (package
3138 (name "guile-xapian")
3139 (version (git-version "0" revision commit))
3140 (home-page "https://git.systemreboot.net/guile-xapian")
3141 (source
3142 (origin
3143 (method git-fetch)
3144 (uri (git-reference (url home-page)
3145 (commit commit)))
3146 (file-name (git-file-name name version))
3147 (sha256
3148 (base32
3149 "07a9fmqi3pm6mbbpzi01mjwrqwnljs2rnc3603sq49dz4lf663gb"))))
3150 (build-system gnu-build-system)
3151 (arguments
3152 '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
3153 (inputs
3154 `(("guile" ,guile-2.2)
3155 ("xapian" ,xapian)
3156 ("zlib" ,zlib)))
3157 (native-inputs
3158 `(("autoconf" ,autoconf)
3159 ("autoconf-archive" ,autoconf-archive)
3160 ("automake" ,automake)
3161 ("libtool" ,libtool)
3162 ("pkg-config" ,pkg-config)
3163 ("swig" ,swig)))
3164 (synopsis "Guile bindings for Xapian")
3165 (description "@code{guile-xapian} provides Guile bindings for Xapian, a
3166 search engine library. Xapian is a highly adaptable toolkit which allows
3167 developers to easily add advanced indexing and search facilities to their own
3168 applications. It has built-in support for several families of weighting
3169 models and also supports a rich set of boolean query operators.")
3170 (license license:gpl2+))))
3171
3172 (define-public guile3.0-xapian
3173 (package
3174 (inherit guile-xapian)
3175 (name "guile3.0-xapian")
3176 (inputs
3177 `(("guile" ,guile-next)
3178 ,@(alist-delete "guile" (package-inputs guile-xapian))))))
3179
3180 (define-public guile-torrent
3181 (package
3182 (name "guile-torrent")
3183 (version "0.1.3")
3184 (source (origin (method git-fetch)
3185 (uri (git-reference
3186 (url
3187 "https://github.com/o-nly/torrent.git")
3188 (commit version)))
3189 (file-name (git-file-name name version))
3190 (sha256
3191 (base32
3192 "1yiagi55ncq1x7s9n7salzywjm4l96y3n7y3s47a9anvz87mrmim"))))
3193 (build-system gnu-build-system)
3194 (native-inputs
3195 `(("autoconf" ,autoconf)
3196 ("automake" ,automake)
3197 ("guile" ,guile-2.2)
3198 ("texinfo" ,texinfo)
3199 ("perl" ,perl)
3200 ("pkg-config" ,pkg-config)))
3201 (propagated-inputs
3202 `(("guile-gcrypt" ,guile-gcrypt)))
3203 (home-page "https://github.com/o-nly/torrent")
3204 (synopsis "Torrent library for GNU Guile")
3205 (description "This package provides facilities for working with
3206 @code{.torrent} or metainfo files. Implements a bencode reader and writer
3207 according to Bitorrent BEP003.")
3208 (license license:gpl3+)))
3209
3210 (define-public guile-irc
3211 (let ((commit "375d3bde9c6ae7ccc9d7cc65817966b6fda8f26a")
3212 (revision "0"))
3213 (package
3214 (name "guile-irc")
3215 (version (git-version "0.3.0" revision commit))
3216 (source (origin
3217 (method git-fetch)
3218 (uri (git-reference
3219 (url "https://github.com/rekado/guile-irc.git")
3220 (commit commit)))
3221 (file-name (git-file-name name version))
3222 (sha256
3223 (base32
3224 "113lcckcywrz9060w1c3fnvr8d7crdsjgsv4h47hgmr1slgadl4y"))))
3225 (build-system gnu-build-system)
3226 (arguments
3227 `(#:configure-flags '("--enable-gnutls=yes")))
3228 (native-inputs
3229 `(("autoconf" ,autoconf)
3230 ("automake" ,automake)
3231 ("texinfo" ,texinfo)))
3232 (inputs
3233 `(("gnutls" ,gnutls)
3234 ("guile" ,guile-2.2)))
3235 (home-page "https://github.com/rekado/guile-irc")
3236 (synopsis "IRC library for Guile")
3237 (description "This package provides a Guile library for @dfn{Internet
3238 Relay Chat} (IRC).")
3239 ;; Some file headers incorrectly say LGPLv2+.
3240 (license license:lgpl2.1+))))
3241
3242 (define-public guile3.0-websocket
3243 (let ((commit "c854e0f84a40d972cbd532bbb89c97ca0126a7cf"))
3244 (package
3245 (name "guile3.0-websocket")
3246 (version "0.1")
3247 (source
3248 (origin
3249 (method git-fetch)
3250 (uri (git-reference
3251 (url "git://dthompson.us/guile-websocket.git")
3252 (commit commit)))
3253 (file-name (git-file-name name version))
3254 (sha256
3255 (base32
3256 "1hymvsfrmq9qxr5cxnsgdz7y757yp1cpsgxmdp3f5wxxxpqgsmzx"))))
3257 (build-system gnu-build-system)
3258 (arguments
3259 '(#:make-flags
3260 '("GUILE_AUTO_COMPILE=0")
3261 #:phases
3262 (modify-phases %standard-phases
3263 ;; The package was developed for Guile 2.0 and has this version
3264 ;; hardcoded in the configure.ac and Makefile.am files. Substitute
3265 ;; 3.0 instead so it can support Guile 3.0.
3266 (add-after 'unpack 'update-guile-version
3267 (lambda _
3268 (substitute* "configure.ac"
3269 (("2.0.9") "3.0.0"))
3270 (substitute* "Makefile.am"
3271 (("2.0") "3.0")
3272
3273 ;; Install .go files where they belong.
3274 (("/ccache") "/site-ccache"))
3275 #t)))))
3276 (native-inputs
3277 `(("autoconf" ,autoconf)
3278 ("automake" ,automake)))
3279 (inputs
3280 `(("guile" ,guile-next)))
3281 (synopsis "Websocket server/client for Guile")
3282 (description "Guile-websocket provides an implementation of the
3283 WebSocket protocol as defined by RFC 6455.")
3284 (home-page "https://git.dthompson.us/guile-websocket.git")
3285 (license license:lgpl3+))))