gnu: guile-simple-zmq: Update to 0.0.0-9.b2ea97e.
[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, 2021 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, 2021 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
8 ;;; Copyright © 2016, 2019, 2020, 2021 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, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
16 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
17 ;;; Copyright © 2017 Nikita <nikita@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, 2020 Martin Becze <mjbecze@riseup.net>
27 ;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
28 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
29 ;;; Copyright © 2020 Julien Lepiler <julien@lepiller.eu>
30 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
31 ;;; Copyright © 2020 Masaya Tojo <masaya@tojo.tokyo>
32 ;;; Copyright © 2020 Jesse Gibbons <jgibbons2357@gmail.com>
33 ;;; Copyright © 2020 Mike Rosset <mike.rosset@gmail.com>
34 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
35 ;;; Copyright © 2020, 2021 pukkamustard <pukkamustard@posteo.net>
36 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
37 ;;;
38 ;;; This file is part of GNU Guix.
39 ;;;
40 ;;; GNU Guix is free software; you can redistribute it and/or modify it
41 ;;; under the terms of the GNU General Public License as published by
42 ;;; the Free Software Foundation; either version 3 of the License, or (at
43 ;;; your option) any later version.
44 ;;;
45 ;;; GNU Guix is distributed in the hope that it will be useful, but
46 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
47 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
48 ;;; GNU General Public License for more details.
49 ;;;
50 ;;; You should have received a copy of the GNU General Public License
51 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
52
53 (define-module (gnu packages guile-xyz)
54 #:use-module ((guix licenses) #:prefix license:)
55 #:use-module (gnu packages)
56 #:use-module (gnu packages algebra)
57 #:use-module (gnu packages aspell)
58 #:use-module (gnu packages autotools)
59 #:use-module (gnu packages avahi)
60 #:use-module (gnu packages base)
61 #:use-module (gnu packages bash)
62 #:use-module (gnu packages compression)
63 #:use-module (gnu packages crypto)
64 #:use-module (gnu packages databases)
65 #:use-module (gnu packages disk)
66 #:use-module (gnu packages emacs)
67 #:use-module (gnu packages emacs-xyz)
68 #:use-module (gnu packages gawk)
69 #:use-module (gnu packages gettext)
70 #:use-module (gnu packages gl)
71 #:use-module (gnu packages glib)
72 #:use-module (gnu packages gnome)
73 #:use-module (gnu packages gnupg)
74 #:use-module (gnu packages gperf)
75 #:use-module (gnu packages gstreamer)
76 #:use-module (gnu packages gtk)
77 #:use-module (gnu packages guile)
78 #:use-module (gnu packages hurd)
79 #:use-module (gnu packages image)
80 #:use-module (gnu packages imagemagick)
81 #:use-module (gnu packages libffi)
82 #:use-module (gnu packages libunistring)
83 #:use-module (gnu packages linux)
84 #:use-module (gnu packages man)
85 #:use-module (gnu packages maths)
86 #:use-module (gnu packages mes)
87 #:use-module (gnu packages multiprecision)
88 #:use-module (gnu packages ncurses)
89 #:use-module (gnu packages networking)
90 #:use-module (gnu packages noweb)
91 #:use-module (gnu packages nss)
92 #:use-module (gnu packages password-utils)
93 #:use-module (gnu packages perl)
94 #:use-module (gnu packages pkg-config)
95 #:use-module (gnu packages python)
96 #:use-module (gnu packages readline)
97 #:use-module (gnu packages sdl)
98 #:use-module (gnu packages search)
99 #:use-module (gnu packages slang)
100 #:use-module (gnu packages sqlite)
101 #:use-module (gnu packages swig)
102 #:use-module (gnu packages tex)
103 #:use-module (gnu packages texinfo)
104 #:use-module (gnu packages tls)
105 #:use-module (gnu packages version-control)
106 #:use-module (gnu packages web)
107 #:use-module (gnu packages webkit)
108 #:use-module (gnu packages xdisorg)
109 #:use-module (gnu packages xorg)
110 #:use-module (guix packages)
111 #:use-module (guix download)
112 #:use-module (guix git-download)
113 #:use-module (guix hg-download)
114 #:use-module (guix build-system cmake)
115 #:use-module (guix build-system glib-or-gtk)
116 #:use-module (guix build-system gnu)
117 #:use-module (guix build-system guile)
118 #:use-module (guix utils)
119 #:use-module ((guix build utils) #:select (alist-replace))
120 #:use-module (ice-9 match)
121 #:use-module ((srfi srfi-1) #:select (alist-delete)))
122
123 (define-public artanis
124 (package
125 (name "artanis")
126 (version "0.4.1")
127 (source (origin
128 (method url-fetch)
129 (uri (string-append "mirror://gnu/artanis/artanis-"
130 version ".tar.gz"))
131 (sha256
132 (base32
133 "0nnmdfx5xwcc3kck64var7msz7g3qk817d7bv9l159nkmic0v9w4"))
134 (modules '((guix build utils)))
135 (snippet
136 '(begin
137 ;; Unbundle guile-redis and guile-json
138 (delete-file-recursively "artanis/third-party/json.scm")
139 (delete-file-recursively "artanis/third-party/json")
140 (delete-file-recursively "artanis/third-party/redis.scm")
141 (delete-file-recursively "artanis/third-party/redis")
142 (substitute* '("artanis/artanis.scm"
143 "artanis/lpc.scm"
144 "artanis/oht.scm")
145 (("(#:use-module \\()artanis third-party (json\\))" _
146 use-module json)
147 (string-append use-module json)))
148 (substitute* '("artanis/lpc.scm"
149 "artanis/session.scm")
150 (("(#:use-module \\()artanis third-party (redis\\))" _
151 use-module redis)
152 (string-append use-module redis)))
153 (substitute* "artanis/oht.scm"
154 (("([[:punct:][:space:]]+)(->json-string)([[:punct:][:space:]]+)"
155 _ pre json-string post)
156 (string-append pre
157 "scm" json-string
158 post)))
159 (substitute* "artanis/artanis.scm"
160 (("[[:punct:][:space:]]+->json-string[[:punct:][:space:]]+")
161 ""))
162 #t))))
163 (build-system gnu-build-system)
164 (inputs
165 `(("guile" ,guile-2.2)
166 ("nss" ,nss)))
167 ;; FIXME the bundled csv contains one more exported procedure
168 ;; (sxml->csv-string) than guile-csv. The author is maintainer of both
169 ;; projects.
170 ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
171 (propagated-inputs
172 `(("guile-json" ,guile-json-1) ; This is already using guile-2.2.
173 ("guile-readline" ,guile2.2-readline)
174 ("guile-redis" ,guile2.2-redis)))
175 (native-inputs
176 `(("bash" ,bash) ;for the `source' builtin
177 ("pkgconfig" ,pkg-config)
178 ("util-linux" ,util-linux))) ;for the `script' command
179 (arguments
180 '(#:make-flags
181 ;; TODO: The documentation must be built with the `docs' target.
182 (let* ((out (assoc-ref %outputs "out"))
183 (scm (string-append out "/share/guile/site/2.2"))
184 (go (string-append out "/lib/guile/2.2/site-ccache")))
185 ;; Don't use (%site-dir) for site paths.
186 (list (string-append "MOD_PATH=" scm)
187 (string-append "MOD_COMPILED_PATH=" go)))
188 #:test-target "test"
189 #:phases
190 (modify-phases %standard-phases
191 (add-after 'unpack 'patch-site-dir
192 (lambda* (#:key outputs #:allow-other-keys)
193 (substitute* "artanis/commands/help.scm"
194 (("\\(%site-dir\\)")
195 (string-append "\""
196 (assoc-ref outputs "out")
197 "/share/guile/site/2.2\"")))))
198 (add-after 'unpack 'patch-reference-to-libnss
199 (lambda* (#:key inputs #:allow-other-keys)
200 (substitute* "artanis/security/nss.scm"
201 (("ffi-binding \"libnss3\"")
202 (string-append
203 "ffi-binding \""
204 (assoc-ref inputs "nss") "/lib/nss/libnss3.so"
205 "\"")))
206 #t))
207 (add-before 'install 'substitute-root-dir
208 (lambda* (#:key outputs #:allow-other-keys)
209 (let ((out (assoc-ref outputs "out")))
210 (substitute* "Makefile" ;ignore the execution of bash.bashrc
211 ((" /etc/bash.bashrc") " /dev/null"))
212 (substitute* "Makefile" ;set the root of config files to OUT
213 ((" /etc") (string-append " " out "/etc")))
214 (mkdir-p (string-append out "/bin")) ;for the `art' executable
215 #t)))
216 (add-after 'install 'wrap-art
217 (lambda* (#:key inputs outputs #:allow-other-keys)
218 (let* ((out (assoc-ref outputs "out"))
219 (bin (string-append out "/bin"))
220 (scm (string-append out "/share/guile/site/2.2"))
221 (go (string-append out "/lib/guile/2.2/site-ccache")))
222 (wrap-program (string-append bin "/art")
223 `("GUILE_LOAD_PATH" ":" prefix
224 (,scm ,(getenv "GUILE_LOAD_PATH")))
225 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
226 (,go ,(getenv "GUILE_LOAD_COMPILED_PATH"))))
227 #t))))))
228 (synopsis "Web application framework written in Guile")
229 (description "GNU Artanis is a web application framework written in Guile
230 Scheme. A web application framework (WAF) is a software framework that is
231 designed to support the development of dynamic websites, web applications, web
232 services and web resources. The framework aims to alleviate the overhead
233 associated with common activities performed in web development. Artanis
234 provides several tools for web development: database access, templating
235 frameworks, session management, URL-remapping for RESTful, page caching, and
236 more.")
237 (home-page "https://www.gnu.org/software/artanis/")
238 (license (list license:gpl3+ license:lgpl3+)))) ;dual license
239
240 ;; There has not been any release yet.
241 (define-public guildhall
242 (let ((commit "2fe2cc539f4b811bbcd69e58738db03eb5a2b778")
243 (revision "1"))
244 (package
245 (name "guildhall")
246 (version (string-append "0-" revision "." (string-take commit 9)))
247 (source (origin
248 (method git-fetch)
249 (uri (git-reference
250 (url "https://github.com/ijp/guildhall")
251 (commit commit)))
252 (file-name (string-append name "-" version "-checkout"))
253 (sha256
254 (base32
255 "115bym7bg66h3gs399yb2vkzc2ygriaqsn4zbrg8f054mgy8wzn1"))))
256 (build-system gnu-build-system)
257 (arguments
258 `(#:phases
259 (modify-phases %standard-phases
260 ;; Tests fail without this fix because they try to load the bash
261 ;; executable as a Scheme file. See bug report at
262 ;; https://github.com/ijp/guildhall/issues/22
263 (add-after 'unpack 'fix-bug-22
264 (lambda _
265 (substitute* "Makefile.am"
266 (("TESTS_ENVIRONMENT=.*")
267 "AM_TESTS_ENVIRONMENT=srcdir=$(abs_top_srcdir)/tests/
268 TEST_EXTENSIONS = .scm
269 SCM_LOG_COMPILER= $(top_builddir)/env $(GUILE)
270 AM_SCM_LOG_FLAGS = --no-auto-compile -s")
271 ;; FIXME: one of the database tests fails for unknown
272 ;; reasons. It does not fail when run outside of Guix.
273 (("tests/database.scm") ""))
274 #t)))))
275 (inputs
276 `(("guile" ,guile-2.0)))
277 (native-inputs
278 `(("zip" ,zip) ; for tests
279 ("autoconf" ,autoconf)
280 ("automake" ,automake)
281 ("texinfo" ,texinfo)))
282 (synopsis "Package manager for Guile")
283 (description
284 "Guildhall is a package manager written for Guile Scheme. A guild is
285 an association of independent craftspeople. A guildhall is where they meet.
286 This Guildhall aims to make a virtual space for Guile wizards and journeyfolk
287 to share code.
288
289 On a practical level, Guildhall lets you share Scheme modules and programs
290 over the internet, and install code that has been shared by others. Guildhall
291 can handle dependencies, so when a program requires several libraries, and
292 each of those has further dependencies, all of the prerequisites for the
293 program can be installed in one go.")
294 (home-page "https://github.com/ijp/guildhall")
295 (license license:gpl3+))))
296
297 (define-public guile-aspell
298 (package
299 (name "guile-aspell")
300 (version "0.4")
301 (source (origin
302 (method url-fetch)
303 (uri (string-append
304 "http://lonelycactus.com/tarball/guile_aspell-"
305 version ".tar.gz"))
306 (sha256
307 (base32
308 "0vpk5xj9m9qc702z3khmkwhgpb949qbsyz8kw2qycda6qnxk0077"))))
309 (build-system gnu-build-system)
310 (arguments
311 '(#:phases (modify-phases %standard-phases
312 (add-before 'configure 'set-guilesitedir
313 (lambda _
314 (substitute* "Makefile.in"
315 (("^guilesitedir =.*$")
316 "guilesitedir = \
317 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
318 #t))
319 (add-before 'build 'set-libaspell-file-name
320 (lambda* (#:key inputs #:allow-other-keys)
321 (let ((aspell (assoc-ref inputs "aspell")))
322 (substitute* "aspell.scm"
323 (("\"libaspell\\.so\"")
324 (string-append "\"" aspell
325 "/lib/libaspell\"")))
326 #t))))))
327 (native-inputs `(("pkg-config" ,pkg-config)))
328 (inputs `(("guile" ,guile-2.2)
329 ("aspell" ,aspell)))
330 (home-page "https://github.com/spk121/guile-aspell")
331 (synopsis "Spell-checking from Guile")
332 (description
333 "guile-aspell is a Guile Scheme library for comparing a string against a
334 dictionary and suggesting spelling corrections.")
335 (license license:gpl3+)))
336
337 (define-public guile-bash
338 ;; This project is currently retired. It was initially announced here:
339 ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
340 (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
341 (revision "0"))
342 (package
343 (name "guile-bash")
344 (version (string-append "0.1.6-" revision "." (string-take commit 7)))
345 (home-page
346 "https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git")
347 (source (origin
348 (method git-fetch)
349 (uri (git-reference
350 (commit commit)
351 (url home-page)))
352 (sha256
353 (base32
354 "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
355 (file-name (string-append name "-" version "-checkout"))))
356 (build-system gnu-build-system)
357 (arguments
358 '(#:configure-flags
359 ;; Add -I to match 'bash.pc' of Bash 4.4.
360 (list (string-append "CPPFLAGS=-I"
361 (assoc-ref %build-inputs "bash:include")
362 "/include/bash/include")
363
364 ;; The '.a' file is useless.
365 "--disable-static"
366
367 ;; Install 'lib/bash' as Bash 4.4 expects.
368 (string-append "--libdir=" (assoc-ref %outputs "out")
369 "/lib/bash"))))
370 (native-inputs `(("pkg-config" ,pkg-config)
371 ("autoconf" ,autoconf-wrapper)
372 ("automake" ,automake)
373 ("libtool" ,libtool)
374 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
375 ("gettext" ,gettext-minimal)
376
377 ;; Bash with loadable module support, for the test
378 ;; suite.
379 ("bash-full" ,bash)))
380 (inputs `(("guile" ,guile-2.0)
381 ("bash:include" ,bash "include")))
382 (synopsis "Extend Bash using Guile")
383 (description
384 "Guile-Bash provides a shared library and set of Guile modules,
385 allowing you to extend Bash in Scheme. Scheme interfaces allow you to access
386 the following aspects of Bash:
387
388 @itemize
389 @item aliases;
390 @item setting and getting Bash variables;
391 @item creating dynamic variables;
392 @item creating Bash functions with a Scheme implementation;
393 @item reader macro for output capturing;
394 @item reader macro for evaluating raw Bash commands.
395 @end itemize
396
397 To enable it, run:
398
399 @example
400 enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
401 @end example
402
403 and then run @command{scm example.scm}.")
404 (license license:gpl3+))))
405
406 (define-public guile-8sync
407 (package
408 (name "guile-8sync")
409 (version "0.4.2")
410 (source (origin
411 (method url-fetch)
412 (uri (string-append "mirror://gnu/8sync/8sync-" version
413 ".tar.gz"))
414 (sha256
415 (base32
416 "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
417 (build-system gnu-build-system)
418 (native-inputs `(("autoconf" ,autoconf)
419 ("automake" ,automake)
420 ("guile" ,guile-2.2)
421 ("pkg-config" ,pkg-config)
422 ("texinfo" ,texinfo)))
423 (arguments
424 `(#:phases (modify-phases %standard-phases
425 (add-before 'configure 'setenv
426 (lambda _
427 ;; quiet warnings
428 (setenv "GUILE_AUTO_COMPILE" "0")
429 #t)))))
430 (home-page "https://gnu.org/s/8sync/")
431 (synopsis "Asynchronous actor model library for Guile")
432 (description
433 "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
434 library for GNU Guile based on the actor model.
435
436 Note that 8sync is only available for Guile 2.2.")
437 (properties '((upstream-name . "8sync")))
438 (license license:lgpl3+)))
439
440 (define-public guile-daemon
441 (package
442 (name "guile-daemon")
443 (version "0.1.3")
444 (source (origin
445 (method url-fetch)
446 (uri (string-append "https://github.com/alezost/" name
447 "/releases/download/v" version
448 "/" name "-" version ".tar.gz"))
449 (sha256
450 (base32
451 "08gaqrgjlly9k5si72vvpbr4xhq5v52l5ma5y6a7spid5dd057cy"))))
452 (build-system gnu-build-system)
453 (native-inputs
454 `(("pkg-config" ,pkg-config)))
455 (inputs
456 `(("guile" ,guile-2.2)))
457 (home-page "https://github.com/alezost/guile-daemon")
458 (synopsis "Evaluate code in a running Guile process")
459 (description
460 "Guile-Daemon is a small Guile program that loads your initial
461 configuration file, and then reads and evaluates Guile expressions that
462 you send to a FIFO file.")
463 (license license:gpl3+)))
464
465 (define-public guile-dsv
466 (package
467 (name "guile-dsv")
468 (version "0.4.0")
469 (source (origin
470 (method git-fetch)
471 (uri (git-reference
472 (url "https://github.com/artyom-poptsov/guile-dsv")
473 (commit (string-append "v" version))))
474 (file-name (string-append name "-" version "-checkout"))
475 (sha256
476 (base32
477 "1mvyc8i38j56frjh3p6vwziv8lrzlyqndz30663h5nwcp0044sdn"))))
478 (build-system gnu-build-system)
479 (native-inputs
480 `(("autoconf" ,autoconf)
481 ("automake" ,automake)
482 ("pkg-config" ,pkg-config)
483 ("texinfo" ,texinfo)))
484 (inputs `(("guile" ,guile-3.0)))
485 (propagated-inputs `(("guile-lib" ,guile-lib)))
486 (arguments
487 `(#:modules (((guix build guile-build-system)
488 #:select (target-guile-effective-version))
489 ,@%gnu-build-system-modules)
490 #:imported-modules ((guix build guile-build-system)
491 ,@%gnu-build-system-modules)
492 #:phases (modify-phases %standard-phases
493 (add-before 'configure 'set-guilesitedir
494 (lambda _
495 (substitute* "Makefile.in"
496 (("^guilesitedir =.*$")
497 "guilesitedir = \
498 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
499 (substitute* "modules/Makefile.in"
500 (("^guilesitedir =.*$")
501 "guilesitedir = \
502 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
503 (substitute* "modules/dsv/Makefile.in"
504 (("^guilesitedir =.*$")
505 "guilesitedir = \
506 $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
507 #t))
508 (add-after 'install 'wrap-program
509 (lambda* (#:key inputs outputs #:allow-other-keys)
510 (let* ((out (assoc-ref outputs "out"))
511 (bin (string-append out "/bin"))
512 (guile-lib (assoc-ref inputs "guile-lib"))
513 (version (target-guile-effective-version))
514 (scm (string-append "/share/guile/site/"
515 version))
516 (go (string-append "/lib/guile/"
517 version "/site-ccache")))
518 (wrap-program (string-append bin "/dsv")
519 `("GUILE_LOAD_PATH" prefix
520 (,(string-append out scm)
521 ,(string-append guile-lib scm)))
522 `("GUILE_LOAD_COMPILED_PATH" prefix
523 (,(string-append out go)
524 ,(string-append guile-lib go)))))
525 #t)))))
526 (home-page "https://github.com/artyom-poptsov/guile-dsv")
527 (synopsis "DSV module for Guile")
528 (description
529 "Guile-DSV is a GNU Guile module for working with the
530 delimiter-separated values (DSV) data format. Guile-DSV supports the
531 Unix-style DSV format and RFC 4180 format.")
532 (license license:gpl3+)))
533
534 (define-public guile2.2-dsv
535 (package
536 (inherit guile-dsv)
537 (name "guile2.2-dsv")
538 (inputs `(("guile" ,guile-2.2)))
539 (propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
540
541 (define-public guile-fibers
542 (package
543 (name "guile-fibers")
544 (version "1.0.0")
545 (source (origin
546 (method url-fetch)
547 (uri (string-append "https://wingolog.org/pub/fibers/fibers-"
548 version ".tar.gz"))
549 (sha256
550 (base32
551 "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0"))
552 (modules '((guix build utils)))
553 (snippet
554 '(begin
555 ;; Allow builds with Guile 3.0.
556 (substitute* "configure"
557 (("search=\"2\\.2\"")
558 "search=\"3.0 2.2\""))
559
560 ;; Explicitly include system headers rather than relying on
561 ;; <libguile.h> to do it for us.
562 (substitute* "epoll.c"
563 (("#include.*libguile\\.h.*$" all)
564 (string-append "#include <unistd.h>\n"
565 "#include <string.h>\n"
566 all "\n")))
567
568 ;; Import (ice-9 threads) for 'current-processor-count'.
569 (substitute* "tests/channels.scm"
570 (("#:use-module \\(fibers\\)")
571 (string-append "#:use-module (fibers)\n"
572 "#:use-module (ice-9 threads)\n")))
573 #t))
574 (patches
575 ;; fixes a resource leak that causes crashes in the tests
576 (search-patches "guile-fibers-destroy-peer-schedulers.patch"))))
577 (build-system gnu-build-system)
578 (arguments
579 '(;; The code uses 'scm_t_uint64' et al., which are deprecated in 3.0.
580 #:configure-flags '("CFLAGS=-Wno-error=deprecated-declarations")
581 #:phases (modify-phases %standard-phases
582 (add-after 'install 'mode-guile-objects
583 (lambda* (#:key outputs #:allow-other-keys)
584 ;; .go files are installed to "lib/guile/X.Y/cache".
585 ;; This phase moves them to "…/site-ccache".
586 (let* ((out (assoc-ref outputs "out"))
587 (lib (string-append out "/lib/guile"))
588 (old (car (find-files lib "^ccache$"
589 #:directories? #t)))
590 (new (string-append (dirname old)
591 "/site-ccache")))
592 (rename-file old new)
593 #t))))))
594 (native-inputs
595 `(("texinfo" ,texinfo)
596 ("pkg-config" ,pkg-config)))
597 (inputs
598 `(("guile" ,guile-3.0)))
599 (synopsis "Lightweight concurrency facility for Guile")
600 (description
601 "Fibers is a Guile library that implements a a lightweight concurrency
602 facility, inspired by systems like Concurrent ML, Go, and Erlang. A fiber is
603 like a \"goroutine\" from the Go language: a lightweight thread-like
604 abstraction. Systems built with Fibers can scale up to millions of concurrent
605 fibers, tens of thousands of concurrent socket connections, and many parallel
606 cores. The Fibers library also provides Concurrent ML-like channels for
607 communication between fibers.
608
609 Note that Fibers makes use of some Guile 2.1/2.2-specific features and
610 is not available for Guile 2.0.")
611 (home-page "https://github.com/wingo/fibers")
612 (license license:lgpl3+)))
613
614 (define-public guile2.0-fibers
615 (package
616 (inherit guile-fibers)
617 (name "guile2.2-fibers")
618 (inputs `(("guile" ,guile-2.2)))))
619
620 (define-public guile3.0-fibers
621 (deprecated-package "guile3.0-fibers" guile-fibers))
622
623 (define-public guile-filesystem
624 (package
625 (name "guile-filesystem")
626 (version "0.1.0")
627 (source (origin
628 (method git-fetch)
629 (uri (git-reference
630 (url "https://gitlab.com/leoprikler/guile-filesystem.git")
631 (commit version)))
632 (file-name (git-file-name name version))
633 (sha256
634 (base32
635 "1shmkc0y9r2sj3kw7hrsnamnp7y8xifkhf3m3rnfxczqg63k67vy"))))
636 (build-system gnu-build-system)
637 (native-inputs
638 `(("autoconf" ,autoconf-wrapper)
639 ("automake" ,automake)
640 ("pkg-config" ,pkg-config)
641 ("texinfo" ,texinfo)))
642 (inputs
643 `(("guile" ,guile-3.0)))
644 (home-page "https://gitlab.com/leoprikler/guile-filesystem")
645 (synopsis "Complementary library to Guile's built-in file system procedures")
646 (description "@code{guile-filesystem} provides a set of utility functions,
647 that augment Guile's support for handling files and their names.")
648 (license license:lgpl3+)))
649
650 (define-public guile2.0-filesystem
651 (package
652 (inherit guile-filesystem)
653 (name "guile2.0-filesystem")
654 (inputs `(("guile" ,guile-2.0)))))
655
656 (define-public guile2.2-filesystem
657 (package
658 (inherit guile-filesystem)
659 (name "guile2.2-filesystem")
660 (inputs `(("guile" ,guile-2.2)))))
661
662 (define-public guile-syntax-highlight
663 (package
664 (name "guile-syntax-highlight")
665 (version "0.1")
666 (source (origin
667 (method url-fetch)
668 (uri (string-append "https://files.dthompson.us/"
669 "guile-syntax-highlight/"
670 "guile-syntax-highlight-"
671 version ".tar.gz"))
672 (sha256
673 (base32
674 "1p771kq15x83483m23bhah1sz6vkalg3drm7x279f4j1cxligkzi"))
675 (modules '((guix build utils)))
676 (snippet
677 '(begin
678 ;; Allow builds with Guile 3.0.
679 (substitute* "configure"
680 (("2\\.2 2\\.0")
681 "3.0 2.2 2.0"))
682 #t))))
683 (build-system gnu-build-system)
684 (native-inputs
685 `(("pkg-config" ,pkg-config)))
686 (inputs
687 `(("guile" ,guile-3.0)))
688 (synopsis "General-purpose syntax highlighter for GNU Guile")
689 (description "Guile-syntax-highlight is a general-purpose syntax
690 highlighting library for GNU Guile. It can parse code written in various
691 programming languages into a simple s-expression that can be converted to
692 HTML (via SXML) or any other format for rendering.")
693 (home-page "https://dthompson.us/projects/guile-syntax-highlight.html")
694 (license license:lgpl3+)))
695
696 (define-public guile2.2-syntax-highlight
697 (package
698 (inherit guile-syntax-highlight)
699 (name "guile2.2-syntax-highlight")
700 (inputs `(("guile" ,guile-2.2)))))
701
702 (define-public guile3.0-syntax-highlight
703 (deprecated-package "guile3.0-syntax-highlight" guile-syntax-highlight))
704
705 (define-public guile-sjson
706 (package
707 (name "guile-sjson")
708 (version "0.2.1")
709 (source (origin
710 (method url-fetch)
711 (uri (string-append "https://dustycloud.org/misc/sjson-" version
712 ".tar.gz"))
713 (sha256
714 (base32
715 "1mzmapln79vv10qxaggz9qwcdbag3jnrj19xx8bgkmxss8h03sv3"))
716 (modules '((guix build utils)))
717 (snippet
718 '(begin
719 ;; Allow builds with Guile 3.0.
720 (substitute* "configure"
721 (("2\\.2 2\\.0")
722 "3.0 2.2 2.0"))
723 #t))))
724 (build-system gnu-build-system)
725 (native-inputs
726 `(("autoconf" ,autoconf)
727 ("automake" ,automake)
728 ("pkg-config" ,pkg-config)))
729 (inputs
730 `(("guile" ,guile-3.0)))
731 (home-page "https://gitlab.com/dustyweb/guile-sjson")
732 (synopsis "S-expression based json reader/writer for Guile")
733 (description "guile-sjson is a json reader/writer for Guile.
734 It has a nice, simple s-expression based syntax.")
735 (license license:lgpl3+)))
736
737 (define-public guile2.2-sjson
738 (package
739 (inherit guile-sjson)
740 (name "guile2.2-sjson")
741 (inputs `(("guile" ,guile-2.2)))))
742
743 (define-public guile-squee
744 (let ((commit "c1497a216e881cfde39d6aa7c73d0bf6b497c89b")
745 (revision "2"))
746 (package
747 (name "guile-squee")
748 (version (string-append "0-" revision "." (string-take commit 7)))
749 (source (origin
750 (method git-fetch)
751 (uri (git-reference
752 (url "https://notabug.org/cwebber/guile-squee.git")
753 (commit commit)))
754 (file-name (git-file-name name version))
755 (sha256
756 (base32
757 "1alskrplnyl1n5wb39drn72cwplp47a8cpdd1n9cdnw3jhk5p12p"))))
758 (build-system guile-build-system)
759 (arguments
760 '(#:phases
761 (modify-phases %standard-phases
762 (add-after 'unpack 'patch
763 (lambda* (#:key inputs #:allow-other-keys)
764 (substitute* "squee.scm"
765 (("dynamic-link \"libpq\"")
766 (string-append
767 "dynamic-link \""
768 (assoc-ref inputs "postgresql") "/lib/libpq.so"
769 "\"")))
770 #t)))))
771 (inputs
772 `(("postgresql" ,postgresql)))
773 (native-inputs
774 `(("guile" ,guile-3.0)))
775 (home-page "https://notabug.org/cwebber/guile-squee")
776 (synopsis "Connect to PostgreSQL using Guile")
777 (description
778 "@code{squee} is a Guile library for connecting to PostgreSQL databases
779 using Guile's foreign function interface.")
780 (license license:lgpl3+))))
781
782 (define-public guile2.2-squee
783 (package
784 (inherit guile-squee)
785 (name "guile2.2-squee")
786 (native-inputs `(("guile" ,guile-2.2)
787 ,@(alist-delete "guile"
788 (package-native-inputs guile-squee))))))
789
790 (define-public guile3.0-squee
791 (deprecated-package "guile3.0-squee" guile-squee))
792
793 (define-public guile-colorized
794 (package
795 (name "guile-colorized")
796 (version "0.1")
797 (source
798 (origin
799 (method git-fetch)
800 (uri (git-reference
801 (url "https://gitlab.com/NalaGinrut/guile-colorized.git")
802 (commit (string-append "v" version))))
803 (file-name (git-file-name name version))
804 (sha256
805 (base32 "10mv8c63159r3qvwwdvsgnsvdg7nc2ghak85zapwqpv4ywrqp9zc"))))
806 (build-system guile-build-system)
807 (native-inputs
808 `(("guile" ,guile-3.0)))
809 (home-page "https://gitlab.com/NalaGinrut/guile-colorized")
810 (synopsis "Colorized REPL for Guile")
811 (description
812 "Guile-colorized provides you with a colorized REPL for GNU Guile.")
813 (license license:gpl3+)))
814
815 (define-public guile2.2-colorized
816 (package
817 (inherit guile-colorized)
818 (name "guile2.2-colorized")
819 (native-inputs `(("guile" ,guile-2.2)))))
820
821 (define-public guile3.0-colorized
822 (deprecated-package "guile3.0-colorized" guile-colorized))
823
824 (define-public guile-pfds
825 (package
826 (name "guile-pfds")
827 (version "0.3")
828 (home-page "https://github.com/ijp/pfds")
829 (source (origin
830 (method git-fetch)
831 (uri (git-reference
832 (url home-page)
833 (commit (string-append "v" version))))
834 (sha256
835 (base32
836 "19y33wg94pf0n98dkfqd1zbw93fgky4sawxsxl6s3vyqwl0yi5vh"))
837 (file-name (string-append name "-" version "-checkout"))))
838 (build-system guile-build-system)
839 (arguments
840 '(#:source-directory "src"
841 #:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
842 #:phases (modify-phases %standard-phases
843 (add-after 'unpack 'move-files-around
844 (lambda _
845 ;; Move files under a pfds/ directory to reflect the
846 ;; module hierarchy.
847 (mkdir-p "src/pfds")
848 (for-each (lambda (file)
849 (rename-file file
850 (string-append "src/pfds/" file)))
851 '("bbtrees.sls"
852 "deques"
853 "deques.sls"
854 "dlists.sls"
855 "fingertrees.sls"
856 "hamts.sls"
857 "heaps.sls"
858 "private"
859 "psqs.sls"
860 "queues"
861 "queues.sls"
862 "sequences.sls"
863 "sets.sls"))
864 #t)))))
865 (native-inputs
866 `(("guile" ,guile-3.0)))
867 (synopsis "Purely functional data structures for Guile")
868 (description
869 "This package provides purely functional data structures written in R6RS
870 Scheme and compiled for Guile. It has been tested with Racket, Guile 2,
871 Vicare Scheme and IronScheme. Right now it contains:
872
873 @itemize
874 @item queues
875 @item deques
876 @item bbtrees
877 @item sets
878 @item dlists
879 @item priority search queues (PSQs)
880 @item finger trees
881 @item sequences
882 @item heaps
883 @item hash array mapped tries (HAMTs).
884 @end itemize\n")
885 (license license:bsd-3)))
886
887 (define-public guile2.0-pg
888 (package
889 (name "guile2.0-pg")
890 (version "0.49")
891 (source (origin
892 (method url-fetch)
893 (uri (string-append "mirror://savannah/guile-pg/guile-pg-"
894 version ".tar.xz"))
895 (sha256
896 (base32
897 "1fizcqga96p9n2jjhi9nprhry20hg9wvcl5b8gya4vhzwz6qhysp"))))
898 (build-system gnu-build-system)
899 (arguments
900 '(#:phases
901 (modify-phases %standard-phases
902 (add-before 'install 'patch-src/Makefile
903 (lambda* (#:key outputs #:allow-other-keys)
904 (substitute* "src/Makefile"
905 (("\\/share\\/guile\\/site") "/share/guile/site/2.0"))
906 #t)))))
907 (native-inputs
908 `(("procps" ,procps) ; fake-cluster-control uses ps
909 ("guile" ,guile-2.0)
910 ("postgresql" ,postgresql)))
911 (inputs
912 `(("guile" ,guile-2.0)
913 ("postgresql" ,postgresql)))
914 (home-page "https://www.nongnu.org/guile-pg/")
915 (synopsis "Guile modules for accessing PostgreSQL")
916 (description
917 "Guile-PG is a collection of modules for Guile allowing access to the
918 PostgreSQL RDBMS from Scheme programs.
919
920 This has been tested against PostgreSQL 10 through 13, but currently only
921 works with Guile 1.4.x to 2.0.x.")
922 (license license:gpl3+)))
923
924 (define-public guile-prometheus
925 (let ((commit "35dc26c0ea44c3d70f1819f240d84e2cbb4b7b4c")
926 (revision "5"))
927 (package
928 (name "guile-prometheus")
929 (version (git-version "0" revision commit))
930 (source (origin
931 (method git-fetch)
932 (uri (git-reference
933 (url "https://git.cbaines.net/git/guile/prometheus")
934 (commit commit)))
935 (sha256
936 (base32
937 "07822jj4appw37lf444kc4xlgl7nm64mgldag56072l55kwashgb"))
938 (file-name (string-append name "-" version "-checkout"))))
939 (build-system gnu-build-system)
940 (native-inputs
941 `(("pkg-config" ,pkg-config)
942 ("autoconf" ,autoconf)
943 ("automake" ,automake)
944 ("guile" ,guile-3.0)))
945 (inputs
946 `(("guile" ,guile-3.0)))
947 (home-page "https://git.cbaines.net/guile/prometheus")
948 (synopsis "Prometheus client library for Guile")
949 (description
950 "This Guile library provides instrumentation code intended to be used
951 with the Prometheus time series service. Counter, gauge and histogram metric
952 types are supported.")
953 (license license:gpl3+))))
954
955 (define-public guile2.2-pfds
956 (package
957 (inherit guile-pfds)
958 (name "guile2.2-pfds")
959 (native-inputs `(("guile" ,guile-2.2)))
960 (arguments
961 (substitute-keyword-arguments (package-arguments guile-pfds)
962 ((#:phases phases)
963 `(modify-phases ,phases
964 (delete 'work-around-guile-bug)
965 (add-after 'move-files-around 'sls->scm
966 (lambda _
967 ;; In Guile <= 2.2.4, there's no way to tell 'guild
968 ;; compile' to accept the ".sls" extension. So...
969 (for-each (lambda (file)
970 (rename-file file
971 (string-append
972 (string-drop-right file 4)
973 ".scm")))
974 (find-files "." "\\.sls$"))
975 #t))))))))
976
977 (define-public guile3.0-pfds
978 (deprecated-package "guile3.0-pfds" guile-pfds))
979
980 (define-public guile-aa-tree
981 (package
982 (name "guile-aa-tree")
983 (version "3.1.1")
984 (source (origin
985 (method url-fetch)
986 (uri (string-append "mirror://savannah/guile-aa-tree/guile-aa-tree-"
987 version ".tar.gz"))
988 (sha256
989 (base32
990 "0044c105r3q9vpl17pv3phl1b79kjm1llhkakqgiasixyav01blh"))))
991 (build-system guile-build-system)
992 (native-inputs `(("guile" ,guile-2.2)))
993 ;; https://savannah.nongnu.org/projects/guile-aa-tree
994 (home-page "https://qlfiles.net/guile-aa-tree/")
995 (synopsis "AA tree data structure for Guile")
996 (description
997 "This package provides an implementation of @dfn{AA trees}, a
998 self-balancing binary tree data structure, for Guile. It ensure @math{O(log
999 n)} worst case performance for core operations. The module provides
1000 non-mutating insert, delete, and search operations, with support for
1001 convenient nested tree operations.")
1002 (license license:gpl3+)))
1003
1004 (define-public guile-simple-zmq
1005 (let ((commit "b2ea97e5a0e7417ce718b27b6fd55a3146364b82")
1006 (revision "9"))
1007 (package
1008 (name "guile-simple-zmq")
1009 (version (git-version "0.0.0" revision commit))
1010 (source
1011 (origin
1012 (method git-fetch)
1013 (uri (git-reference
1014 (url "https://github.com/jerry40/guile-simple-zmq")
1015 (commit commit)))
1016 (sha256
1017 (base32
1018 "08qvcxx0njz9545xa0lq3wpf55v9cl9nbb640ry1lig11wpymqxb"))
1019 (file-name (git-file-name name version))))
1020 (build-system gnu-build-system)
1021 (arguments
1022 '(#:make-flags
1023 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1024
1025 (native-inputs
1026 `(("guile" ,guile-3.0)))
1027 (inputs
1028 `(("autoconf" ,autoconf)
1029 ("automake" ,automake)
1030 ("pkg-config" ,pkg-config)
1031 ("zeromq" ,zeromq)))
1032 (home-page "https://github.com/jerry40/guile-simple-zmq")
1033 (synopsis "Guile wrapper over ZeroMQ library")
1034 (description
1035 "This package provides a Guile programming interface to the ZeroMQ
1036 messaging library.")
1037 (license license:gpl3+))))
1038
1039 (define-public guile2.2-simple-zmq
1040 (package
1041 (inherit guile-simple-zmq)
1042 (name "guile2.2-simple-zmq")
1043 (native-inputs `(("guile" ,guile-2.2)))))
1044
1045 (define-public guile3.0-simple-zmq
1046 (deprecated-package "guile3.0-simple-zmq" guile-simple-zmq))
1047
1048 (define-public jupyter-guile-kernel
1049 (let ((commit "f25fb90b95529b17a006a807bd04e6aee12ea304")
1050 (revision "2"))
1051 (package
1052 (name "jupyter-guile-kernel")
1053 (version (git-version "0.0.0" revision commit))
1054 (source
1055 (origin
1056 (method git-fetch)
1057 (uri (git-reference
1058 (url "https://github.com/jerry40/guile-kernel")
1059 (commit commit)))
1060 (file-name (git-file-name name version))
1061 (sha256
1062 (base32
1063 "0zr1fasdb2yv9kn21yll993y9higqss4jnfs030ndhjb93raa9sr"))))
1064 (build-system guile-build-system)
1065 (arguments
1066 '(#:phases (modify-phases %standard-phases
1067 (add-after 'unpack 'set-openssl-file-name
1068 (lambda* (#:key inputs #:allow-other-keys)
1069 ;; Record the absolute file name of the 'openssl'
1070 ;; command.
1071 (substitute* "src/hmac.scm"
1072 (("openssl")
1073 (string-append (assoc-ref inputs "openssl")
1074 "/bin/openssl")))
1075 #t))
1076
1077 ;; XXX: The code uses 'include' to include its own source
1078 ;; files, and "-L src" isn't enough in this case.
1079 (add-before 'build 'chdir
1080 (lambda _ (chdir "src") #t))
1081 (add-after 'build 'chdir-back
1082 (lambda _ (chdir "..") #t))
1083
1084 (add-after 'install 'install-kernel
1085 (lambda* (#:key inputs outputs #:allow-other-keys)
1086 (let* ((out (assoc-ref outputs "out"))
1087 (json (assoc-ref inputs "guile-json"))
1088 (zmq (assoc-ref inputs "guile-simple-zmq"))
1089 (deps (list json zmq))
1090 (dir (string-append
1091 out "/share/jupyter/kernels/guile"))
1092 (effective (target-guile-effective-version)))
1093 ;; Install kernel.
1094 (install-file "src/kernel.json" dir)
1095
1096 ;; Fix hard-coded file name in the kernel.
1097 (substitute* (string-append dir "/kernel.json")
1098 (("/usr/local/.*/guile-jupyter-kernel.scm")
1099 (string-append out "/share/guile/site/"
1100 (target-guile-effective-version)
1101 "/guile-jupyter-kernel.scm"))
1102 (("\"guile\"")
1103 (string-append "\"" (assoc-ref inputs "guile")
1104 "/bin/guile\""))
1105 (("-s")
1106 ;; Add '-L' and '-C' flags so that the kernel
1107 ;; finds its dependencies.
1108 (let ((-L (map (lambda (item)
1109 (string-append "\"" item
1110 "/share/guile/site/"
1111 effective "\""))
1112 deps))
1113 (-C (map (lambda (item)
1114 (string-append "\"" item
1115 "/lib/guile/"
1116 effective
1117 "/site-ccache\""))
1118 deps)))
1119 (string-append "--no-auto-compile\""
1120 (string-join -L ", \"-L\", "
1121 'prefix)
1122 (string-join -C ", \"-C\", "
1123 'prefix)
1124 ", \"-s"))))
1125 #t))))))
1126 (inputs
1127 `(("openssl" ,openssl)
1128 ("guile" ,guile-3.0)
1129 ("guile-json" ,guile-json-3)
1130 ("guile-simple-zmq" ,guile-simple-zmq)))
1131 (synopsis "Guile kernel for the Jupyter Notebook")
1132 (description
1133 "This package provides a Guile 2.x kernel for the Jupyter Notebook. It
1134 allows users to interact with the Guile REPL through Jupyter.")
1135 (home-page "https://github.com/jerry40/guile-kernel")
1136 (license license:gpl3+))))
1137
1138 (define-public guile-sparql
1139 (package
1140 (name "guile-sparql")
1141 (version "0.0.8")
1142 (source (origin
1143 (method url-fetch)
1144 (uri (string-append
1145 "https://github.com/roelj/guile-sparql/releases/download/"
1146 version "/guile-sparql-" version ".tar.gz"))
1147 (sha256
1148 (base32 "1jf4972f9fpm0rd865xpnc9mzl3xv6vhfnp0iygadydy905z9nln"))))
1149 (build-system gnu-build-system)
1150 (native-inputs
1151 `(("pkg-config" ,pkg-config)))
1152 (inputs
1153 `(("guile" ,guile-3.0)))
1154 (home-page "https://github.com/roelj/guile-sparql")
1155 (synopsis "SPARQL module for Guile")
1156 (description "This package provides the functionality to query a SPARQL
1157 endpoint. Additionally, it provides an interface to write SPARQL queries
1158 using S-expressions.")
1159 (license license:gpl3+)))
1160
1161 (define-public guile-debbugs
1162 (package
1163 (name "guile-debbugs")
1164 (version "0.0.3")
1165 (source (origin
1166 (method url-fetch)
1167 (uri (string-append "mirror://gnu/guile-debbugs/guile-debbugs-"
1168 version ".tar.gz"))
1169 (sha256
1170 (base32
1171 "1cc63nw3xdfjrfk8c58r6d5lidmfq5cpqcy32yd5xp81yccprvn9"))))
1172 (build-system gnu-build-system)
1173 (propagated-inputs
1174 `(("guile-email" ,guile-email)))
1175 (native-inputs
1176 `(("guile" ,guile-3.0)
1177 ("pkg-config" ,pkg-config)))
1178 (home-page "https://savannah.gnu.org/projects/guile-debbugs/")
1179 (synopsis "Guile interface to the Debbugs bug tracking service")
1180 (description
1181 "This package provides a Guile library to communicate with a Debbugs bug
1182 tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
1183 (license license:gpl3+)))
1184
1185 (define-public guile-email
1186 (package
1187 (name "guile-email")
1188 (version "0.2.2")
1189 (source
1190 (origin
1191 (method url-fetch)
1192 (uri (string-append
1193 "https://guile-email.systemreboot.net/releases/guile-email-"
1194 version ".tar.lz"))
1195 (sha256
1196 (base32
1197 "1rc8r0fgvflnyq5ckl7ii8sghpsgpkzxa8vskjr1ak2kyar6m35k"))))
1198 (build-system gnu-build-system)
1199 (native-inputs
1200 `(("pkg-config" ,pkg-config)
1201 ("lzip" ,lzip)))
1202 (inputs
1203 `(("guile" ,guile-3.0)))
1204 (arguments
1205 '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
1206 (home-page "https://guile-email.systemreboot.net")
1207 (synopsis "Guile email parser")
1208 (description "guile-email is a collection of email utilities implemented
1209 in pure guile. It supports parsing MIME (Multipurpose Internet Mail
1210 Extensions) compliant email messages and reading emails from the mbox
1211 format.")
1212 (license license:agpl3+)))
1213
1214 (define-public guile-email-latest
1215 (let ((commit "03e9cacb826bd4a56d3d834fe5526e497d7c57eb")
1216 (revision "1"))
1217 (package
1218 (inherit guile-email)
1219 (name "guile-email-latest")
1220 (version (git-version "0.2.2" revision commit))
1221 (source
1222 (origin
1223 (method git-fetch)
1224 (uri (git-reference
1225 (url "https://git.systemreboot.net/guile-email")
1226 (commit commit)))
1227 (file-name (git-file-name name version))
1228 (sha256
1229 (base32
1230 "1a15gdlbmzx220xg82fgyd0zk2wqn13ddmzs13nhgfzx8d5cns68"))))
1231 (native-inputs
1232 `(("pkg-config" ,pkg-config)
1233 ("autoconf" ,autoconf)
1234 ("automake" ,automake)
1235 ("texinfo" ,texinfo))))))
1236
1237 (define-public guile2.2-email
1238 (package
1239 (inherit guile-email)
1240 (name "guile2.2-email")
1241 (inputs `(("guile" ,guile-2.2)
1242 ,@(alist-delete "guile" (package-inputs guile-email))))))
1243
1244 (define-public guile3.0-email
1245 (deprecated-package "guile3.0-email" guile-email))
1246
1247 (define-public guile-newt
1248 (package
1249 (name "guile-newt")
1250 (version "0.0.2")
1251 (source (origin
1252 (method git-fetch)
1253 (uri (git-reference
1254 (url "https://gitlab.com/mothacehe/guile-newt")
1255 (commit version)))
1256 (file-name (git-file-name name version))
1257 (sha256
1258 (base32
1259 "1gksd1lzgjjh1p9vczghg8jw995d22hm34kbsiv8rcryirv2xy09"))))
1260 (build-system gnu-build-system)
1261 (arguments
1262 '(#:make-flags
1263 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1264 (inputs
1265 `(("guile" ,guile-3.0)
1266 ("newt" ,newt)))
1267 (native-inputs
1268 `(("autoconf" ,autoconf)
1269 ("automake" ,automake)
1270 ("pkg-config" ,pkg-config)))
1271 (synopsis "Guile bindings to Newt")
1272 (description
1273 "This package provides bindings for Newt, a programming library for
1274 color text mode, widget based user interfaces. The bindings are written in pure
1275 Scheme by using Guile’s foreign function interface.")
1276 (home-page "https://gitlab.com/mothacehe/guile-newt")
1277 (license license:gpl3+)))
1278
1279 (define-public guile2.2-newt
1280 (package
1281 (inherit guile-newt)
1282 (name "guile2.2-newt")
1283 (inputs `(("guile" ,guile-2.2)
1284 ,@(alist-delete "guile" (package-inputs guile-newt))))))
1285
1286 (define-public guile3.0-newt
1287 (deprecated-package "guile3.0-newt" guile-newt))
1288
1289 (define-public guile-mastodon
1290 (package
1291 (name "guile-mastodon")
1292 (version "0.0.1")
1293 (source (origin
1294 (method git-fetch)
1295 (uri (git-reference
1296 (url "https://framagit.org/prouby/guile-mastodon.git")
1297 (commit (string-append "v" version))))
1298 (file-name (git-file-name name version))
1299 (sha256
1300 (base32
1301 "1vblf3d1bbwna3l09p2ap5y8ycvl549bz6whgk78imyfmn28ygry"))
1302 (modules '((guix build utils)))
1303 (snippet
1304 '(begin
1305 ;; Allow builds with Guile 3.0.
1306 (substitute* "configure.ac"
1307 (("^PKG_CHECK.*") "")
1308 (("^GUILE_PKG.*")
1309 "GUILE_PKG([3.0 2.2])\n"))
1310 #t))))
1311 (build-system gnu-build-system)
1312 (native-inputs
1313 `(("autoconf" ,autoconf)
1314 ("automake" ,automake)
1315 ("emacs" ,emacs-minimal)
1316 ("pkg-config" ,pkg-config)
1317 ("texinfo" ,texinfo)))
1318 (inputs
1319 `(("guile" ,guile-3.0)
1320 ("gnutls" ,gnutls)
1321 ("guile-json" ,guile-json-4)))
1322 (home-page "https://framagit.org/prouby/guile-mastodon")
1323 (synopsis "Guile Mastodon REST API module")
1324 (description "This package provides Guile modules to access the
1325 @uref{https://docs.joinmastodon.org/api/, REST API of Mastodon}, a federated
1326 microblogging service.")
1327 (license license:gpl3+)))
1328
1329 (define-public guile-parted
1330 (package
1331 (name "guile-parted")
1332 (version "0.0.4")
1333 (source (origin
1334 (method git-fetch)
1335 (uri (git-reference
1336 (url "https://gitlab.com/mothacehe/guile-parted")
1337 (commit version)))
1338 (file-name (git-file-name name version))
1339 (sha256
1340 (base32
1341 "0b7h8psfm9gmmwb65pp5zwzglvwnfmw5j40g09hhf3f7kwxc0mv2"))
1342 (modules '((guix build utils)))))
1343 (build-system gnu-build-system)
1344 (arguments
1345 '(#:make-flags
1346 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
1347 (inputs
1348 `(("guile" ,guile-3.0)
1349 ("parted" ,parted)))
1350 (propagated-inputs
1351 `(("guile-bytestructures" ,guile-bytestructures)))
1352 (native-inputs
1353 `(("autoconf" ,autoconf)
1354 ("automake" ,automake)
1355 ("pkg-config" ,pkg-config)))
1356 (synopsis "Guile bindings to GNU Parted")
1357 (description
1358 "This package provides bindings for GNU Parted library, a C library
1359 allowing disk partition tables creation and manipulation. The bindings are
1360 written in pure Scheme by using Guile's foreign function interface.")
1361 (home-page "https://gitlab.com/mothacehe/guile-parted")
1362 (license license:gpl3+)))
1363
1364 (define-public guile2.2-parted
1365 (package
1366 (inherit guile-parted)
1367 (name "guile2.2-parted")
1368 (inputs `(("guile" ,guile-2.2)
1369 ,@(alist-delete "guile" (package-inputs guile-parted))))
1370 (propagated-inputs
1371 `(("guile-bytestructures" ,guile2.2-bytestructures)))))
1372
1373 (define-public guile3.0-parted
1374 (deprecated-package "guile3.0-parted" guile-parted))
1375
1376 (define-public guile-xosd
1377 (package
1378 (name "guile-xosd")
1379 (version "0.2.1")
1380 (source (origin
1381 (method url-fetch)
1382 (uri (string-append "https://github.com/alezost/" name
1383 "/releases/download/v" version
1384 "/" name "-" version ".tar.gz"))
1385 (sha256
1386 (base32
1387 "1ri5065c16kmgrf2pysn2ymxjqi5302lhpb07wkl1jr75ym8fn8p"))))
1388 (build-system gnu-build-system)
1389 (native-inputs
1390 `(("pkg-config" ,pkg-config)))
1391 (inputs
1392 `(("guile" ,guile-2.2)
1393 ("libx11" ,libx11)
1394 ("libxext" ,libxext)
1395 ("libxinerama" ,libxinerama)
1396 ("xosd" ,xosd)))
1397 (home-page "https://github.com/alezost/guile-xosd")
1398 (synopsis "XOSD bindings for Guile")
1399 (description
1400 "Guile-XOSD provides Guile bindings for @code{libxosd},
1401 @uref{http://sourceforge.net/projects/libxosd/, the X On Screen Display
1402 library}.")
1403 (license license:gpl3+)))
1404
1405 (define-public guile-dbi
1406 (package
1407 (name "guile-dbi")
1408 (version "2.1.6")
1409 (source (origin
1410 (method url-fetch)
1411 (uri (string-append
1412 "http://download.gna.org/guile-dbi/guile-dbi-"
1413 version ".tar.gz"))
1414 (sha256
1415 (base32
1416 "116njrprhgrsv1qm904sp3b02rq01fx639r433d657gyhw3x159n"))))
1417 (build-system gnu-build-system)
1418 (arguments
1419 '(#:configure-flags
1420 (list (string-append
1421 "--with-guile-site-dir=" %output "/share/guile/site/2.2"))
1422 #:make-flags
1423 (list (string-append
1424 "LDFLAGS=-Wl,-rpath=" %output "/lib:"
1425 (assoc-ref %build-inputs "guile-dbd-sqlite3") "/lib" ":"
1426 (assoc-ref %build-inputs "guile-dbd-postgresql") "/lib"))
1427 #:phases
1428 (modify-phases %standard-phases
1429 (add-after 'install 'patch-extension-path
1430 (lambda* (#:key outputs #:allow-other-keys)
1431 (let* ((out (assoc-ref outputs "out"))
1432 (dbi.scm (string-append
1433 out "/share/guile/site/2.2/dbi/dbi.scm"))
1434 (ext (string-append out "/lib/libguile-dbi")))
1435 (substitute* dbi.scm (("libguile-dbi") ext))
1436 #t))))))
1437 (inputs
1438 `(("guile-dbd-sqlite3" ,guile-dbd-sqlite3)
1439 ("guile-dbd-postgresql" ,guile-dbd-postgresql))) ; only shared library, no scheme files
1440 (propagated-inputs
1441 `(("guile" ,guile-2.2)))
1442 (synopsis "Guile database abstraction layer")
1443 (home-page "http://home.gna.org/guile-dbi/guile-dbi.html")
1444 (description
1445 "guile-dbi is a library for Guile that provides a convenient interface to
1446 SQL databases. Database programming with guile-dbi is generic in that the same
1447 programming interface is presented regardless of which database system is used.
1448 It currently supports MySQL, Postgres and SQLite3.")
1449 (license license:gpl2+)))
1450
1451 (define guile-dbi-bootstrap
1452 (package
1453 (inherit guile-dbi)
1454 (name "guile-dbi-bootstrap")
1455 (inputs '())
1456 (arguments
1457 (substitute-keyword-arguments (package-arguments guile-dbi)
1458 ((#:make-flags _) '(list))))))
1459
1460 (define-public guile-dbd-sqlite3
1461 (package
1462 (name "guile-dbd-sqlite3")
1463 (version "2.1.6")
1464 (source (origin
1465 (method url-fetch)
1466 (uri (string-append
1467 "http://download.gna.org/guile-dbi/guile-dbd-sqlite3-"
1468 version ".tar.gz"))
1469 (sha256
1470 (base32
1471 "0rg71jchxd2y8x496s8zmfmikr5g8zxi8zv2ar3f7a23pph92iw2"))))
1472 (build-system gnu-build-system)
1473 (native-inputs
1474 `(("pkg-config" ,pkg-config)
1475 ("guile-dbi-bootstrap" ,guile-dbi-bootstrap))) ; only required for headers
1476 (inputs
1477 `(("sqlite" ,sqlite)
1478 ("zlib" ,(@ (gnu packages compression) zlib))))
1479 (synopsis "Guile DBI driver for SQLite")
1480 (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
1481 (description
1482 "guile-dbi is a library for Guile that provides a convenient interface to
1483 SQL databases. This package implements the interface for SQLite.")
1484 (license license:gpl2+)))
1485
1486 (define-public guile-dbd-postgresql
1487 (let ((commit "e97589b6b018b206c901e4cc24db463407a4036b")
1488 (revision 0))
1489 (package
1490 (name "guile-dbd-postgresql")
1491 (version (string-append
1492 "2.1.6-" (number->string revision) "." (string-take commit 7)))
1493 (source
1494 (origin
1495 (method git-fetch)
1496 (uri (git-reference
1497 (url "https://github.com/opencog/guile-dbi")
1498 (commit commit)))
1499 (file-name (git-file-name name version))
1500 (sha256
1501 (base32 "0n1gv9a0kdys10a4qmnrwvg5sydwb03880asri4gqdchcj3fimni"))))
1502 (build-system gnu-build-system)
1503 (arguments
1504 '(#:phases
1505 (modify-phases %standard-phases
1506 (add-after 'unpack 'chdir
1507 (lambda _
1508 ;; The upstream Git repository contains all the code, so change
1509 ;; to the relevant directory.
1510 (chdir "guile-dbd-postgresql")
1511 #t))
1512 (add-after 'chdir 'patch-src/Makefile.am
1513 (lambda* (#:key inputs #:allow-other-keys)
1514 (substitute* "src/Makefile.am"
1515 (("/usr/include")
1516 (string-append (assoc-ref inputs "postgresql") "/include")))
1517 #t))
1518 (add-after 'patch-src/Makefile.am 'patch-src
1519 (lambda _
1520 (substitute* "src/guile-dbd-postgresql.c"
1521 (("postgresql/libpq-fe\\.h") "libpq-fe.h"))
1522 #t)))))
1523 (native-inputs
1524 `(("pkg-config" ,pkg-config)
1525 ("automake" ,automake)
1526 ("autoconf" ,autoconf)
1527 ("perl" ,perl)
1528 ("libtool" ,libtool)
1529 ("guile-dbi-bootstrap" ,guile-dbi-bootstrap)))
1530 (inputs
1531 `(("postgresql" ,postgresql)
1532 ("zlib" ,zlib)))
1533 (synopsis "Guile DBI driver for PostgreSQL")
1534 (home-page
1535 "https://github.com/opencog/guile-dbi/tree/master/guile-dbd-postgresql")
1536 (description
1537 "@code{guile-dbi} is a library for Guile that provides a convenient
1538 interface to SQL databases. This package implements the interface for
1539 PostgreSQL.")
1540 (license license:gpl2+))))
1541
1542 (define-public guile-config
1543 (package
1544 (name "guile-config")
1545 (version "0.4.2")
1546 (source
1547 (origin
1548 (method git-fetch)
1549 (uri (git-reference
1550 (url "https://gitlab.com/a-sassmannshausen/guile-config")
1551 (commit version)))
1552 (file-name (git-file-name name version))
1553 (sha256 (base32
1554 "09028ylbddjdp3d67zdjz3pnsjqz6zs2bfck5rr3dfaa0qjap40n"))))
1555 (build-system gnu-build-system)
1556 (native-inputs
1557 `(("autoconf" ,autoconf)
1558 ("automake" ,automake)
1559 ("pkg-config" ,pkg-config)
1560 ("texinfo" ,texinfo)))
1561 (inputs `(("guile" ,guile-3.0)))
1562 (synopsis
1563 "Guile application configuration parsing library.")
1564 (description
1565 "Guile Config is a library providing a declarative approach to
1566 application configuration specification. The library provides clean
1567 configuration declaration forms, and processors that take care of:
1568 configuration file creation; configuration file parsing; command-line
1569 parameter parsing using getopt-long; basic GNU command-line parameter
1570 generation (--help, --usage, --version); automatic output generation for the
1571 above command-line parameters.")
1572 (home-page
1573 "https://gitlab.com/a-sassmannshausen/guile-config")
1574 (license license:gpl3+)))
1575
1576 (define-public guile2.2-config
1577 (package
1578 (inherit guile-config)
1579 (name "guile2.2-config")
1580 (inputs `(("guile" ,guile-2.2)
1581 ,@(alist-delete "guile" (package-inputs guile-config))))))
1582
1583 (define-public guile3.0-config
1584 (deprecated-package "guile3.0-config" guile-config))
1585
1586 (define-public guile-hall
1587 (package
1588 (name "guile-hall")
1589 (version "0.3.1")
1590 (source
1591 (origin
1592 (method git-fetch)
1593 (uri (git-reference
1594 (url "https://gitlab.com/a-sassmannshausen/guile-hall")
1595 (commit version)))
1596 (file-name "guile-hall-0.3.1-checkout")
1597 (sha256
1598 (base32 "1s24nigdra6rvclvy15l2aw00c3aq9vv8qwxylzs60darbl36206"))))
1599 (build-system gnu-build-system)
1600 (arguments
1601 `(#:modules
1602 ((ice-9 match)
1603 (ice-9 ftw)
1604 ,@%gnu-build-system-modules)
1605 #:phases
1606 (modify-phases
1607 %standard-phases
1608 (add-after 'install 'hall-wrap-binaries
1609 (lambda* (#:key inputs outputs #:allow-other-keys)
1610 (let* ((compiled-dir
1611 (lambda (out version)
1612 (string-append
1613 out "/lib/guile/" version "/site-ccache")))
1614 (uncompiled-dir
1615 (lambda (out version)
1616 (string-append
1617 out "/share/guile/site"
1618 (if (string-null? version) "" "/") version)))
1619 (dep-path
1620 (lambda (env modules path)
1621 (list env ":" 'prefix
1622 (cons modules
1623 (map (lambda (input)
1624 (string-append
1625 (assoc-ref inputs input)
1626 path))
1627 ,''("guile-config"))))))
1628 (out (assoc-ref outputs "out"))
1629 (bin (string-append out "/bin/"))
1630 (site (uncompiled-dir out "")))
1631 (match (scandir site)
1632 (("." ".." version)
1633 (for-each
1634 (lambda (file)
1635 (wrap-program
1636 (string-append bin file)
1637 (dep-path
1638 "GUILE_LOAD_PATH"
1639 (uncompiled-dir out version)
1640 (uncompiled-dir "" version))
1641 (dep-path
1642 "GUILE_LOAD_COMPILED_PATH"
1643 (compiled-dir out version)
1644 (compiled-dir "" version))))
1645 ,''("hall"))
1646 #t))))))))
1647 (native-inputs
1648 `(("autoconf" ,autoconf)
1649 ("automake" ,automake)
1650 ("pkg-config" ,pkg-config)
1651 ("texinfo" ,texinfo)))
1652 (inputs `(("guile" ,guile-3.0)))
1653 (propagated-inputs
1654 `(("guile-config" ,guile-config)))
1655 (synopsis "Guile project tooling")
1656 (description
1657 "Hall is a command-line application and a set of Guile libraries that
1658 allow you to quickly create and publish Guile projects. It allows you to
1659 transparently support the GNU build system, manage a project hierarchy &
1660 provides tight coupling to Guix.")
1661 (home-page "https://gitlab.com/a-sassmannshausen/guile-hall")
1662 (license license:gpl3+)))
1663
1664 (define-public guile2.2-hall
1665 (package
1666 (inherit guile-hall)
1667 (name "guile2.2-hall")
1668 (inputs `(("guile" ,guile-2.2)
1669 ,@(alist-delete "guile" (package-inputs guile-hall))))
1670 (propagated-inputs
1671 `(("guile-config" ,guile2.2-config)
1672 ,@(alist-delete "guile-config"
1673 (package-propagated-inputs guile-hall))))))
1674
1675 (define-public guile3.0-hall
1676 (deprecated-package "guile3.0-hall" guile-hall))
1677
1678 (define-public guile-ics
1679 (package
1680 (name "guile-ics")
1681 (version "0.2.0")
1682 (source (origin
1683 (method git-fetch)
1684 (uri (git-reference
1685 (url "https://github.com/artyom-poptsov/guile-ics")
1686 (commit (string-append "v" version))))
1687 (file-name (string-append name "-" version "-checkout"))
1688 (sha256
1689 (base32
1690 "0qjjvadr7gibdq9jvwkmlkb4afsw9n2shfj9phpiadinxk3p4m2g"))
1691 (modules '((guix build utils)))
1692 (snippet
1693 '(begin
1694 ;; Allow builds with Guile 3.0.
1695 (substitute* "configure.ac"
1696 (("^GUILE_PKG.*")
1697 "GUILE_PKG([3.0 2.2 2.0])\n"))
1698 #t))))
1699 (build-system gnu-build-system)
1700 (native-inputs
1701 `(("autoconf" ,autoconf-wrapper)
1702 ("automake" ,automake)
1703 ("texinfo" ,texinfo)
1704 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
1705 ("gettext" ,gettext-minimal)
1706 ("pkg-config" ,pkg-config)))
1707 (inputs `(("guile" ,guile-3.0) ("which" ,which)))
1708 (propagated-inputs `(("guile-lib" ,guile-lib)))
1709 (home-page "https://github.com/artyom-poptsov/guile-ics")
1710 (synopsis "Guile parser library for the iCalendar format")
1711 (description
1712 "Guile-ICS is an iCalendar (RFC5545) format parser library written in
1713 pure Scheme. The library can be used to read and write iCalendar data.
1714
1715 The library is shipped with documentation in Info format and usage examples.")
1716 (license license:gpl3+)))
1717
1718 (define-public guile2.2-ics
1719 (package
1720 (inherit guile-ics)
1721 (name "guile2.2-ics")
1722 (inputs `(("guile" ,guile-2.2)
1723 ,@(alist-delete "guile" (package-inputs guile-ics))))
1724 (propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
1725
1726 (define-public guile3.0-ics
1727 (deprecated-package "guile3.0-ics" guile-ics))
1728
1729 (define-public guile-wisp
1730 (package
1731 (name "guile-wisp")
1732 (version "1.0.3")
1733 (source (origin
1734 (method hg-fetch)
1735 (uri (hg-reference
1736 (url "https://hg.sr.ht/~arnebab/wisp")
1737 (changeset (string-append "v" version))))
1738 (file-name (git-file-name name version))
1739 (sha256
1740 (base32
1741 "10g97jz3ahpb5mg933ajsc3pa9jxlg14f42yf01qwx0dwq1b06d5"))))
1742 (build-system gnu-build-system)
1743 (arguments
1744 `(#:modules ((guix build gnu-build-system)
1745 ((guix build emacs-build-system) #:prefix emacs:)
1746 (guix build utils)
1747 (guix build emacs-utils)
1748 (ice-9 rdelim)
1749 (ice-9 popen))
1750 #:imported-modules (,@%gnu-build-system-modules
1751 (guix build emacs-build-system)
1752 (guix build emacs-utils))
1753 #:phases
1754 (modify-phases %standard-phases
1755 (replace 'bootstrap
1756 (lambda _
1757 (invoke "autoreconf" "-vif")
1758 #t))
1759 (add-before 'configure 'patch-/usr/bin/env
1760 (lambda _
1761 (substitute* "Makefile.in"
1762 (("/usr/bin/env bash") (which "bash")))
1763 #t))
1764 ;; auto compilation breaks, but if we set HOME to /tmp,
1765 ;; that works ok
1766 (add-before 'check 'auto-compile-hacky-workaround
1767 (lambda _ (setenv "HOME" "/tmp") #t))
1768 (add-after 'install 'install-go-files
1769 (lambda* (#:key outputs inputs #:allow-other-keys)
1770 (let* ((out (assoc-ref outputs "out"))
1771 (effective (read-line
1772 (open-pipe* OPEN_READ
1773 "guile" "-c"
1774 "(display (effective-version))")))
1775 (module-dir (string-append out "/share/guile/site/"
1776 effective))
1777 (object-dir (string-append out "/lib/guile/" effective
1778 "/site-ccache"))
1779 (prefix (string-length module-dir)))
1780 ;; compile to the destination
1781 (for-each (lambda (file)
1782 (let* ((base (string-drop (string-drop-right file 4)
1783 prefix))
1784 (go (string-append object-dir base ".go")))
1785 (invoke "guild" "compile" "-L" module-dir
1786 file "-o" go)))
1787 (find-files module-dir "\\.scm$"))
1788 #t)))
1789 (add-after 'install 'install-emacs-files
1790 (assoc-ref emacs:%standard-phases 'install))
1791 (add-after 'install-emacs-files 'compile-emacs-files
1792 (assoc-ref emacs:%standard-phases 'build))
1793 (add-after 'compile-emacs-files 'make-autoloads
1794 (assoc-ref emacs:%standard-phases 'make-autoloads)))))
1795 (home-page "https://www.draketo.de/english/wisp")
1796 (inputs
1797 `(("guile" ,guile-3.0)))
1798 (native-inputs
1799 `(("autoconf" ,autoconf)
1800 ("automake" ,automake)
1801 ("emacs" ,emacs-minimal)
1802 ("python" ,python)
1803 ("pkg-config" ,pkg-config)))
1804 (synopsis "Whitespace to lisp syntax for Guile")
1805 (description "Wisp is a syntax for Guile which provides a Python-like
1806 whitespace-significant language. It may be easier on the eyes for some
1807 users and in some situations.")
1808 (license license:gpl3+)))
1809
1810 (define-public guile2.2-wisp
1811 (package
1812 (inherit guile-wisp)
1813 (name "guile2.2-wisp")
1814 (inputs `(("guile" ,guile-2.2)))))
1815
1816 (define-public guile3.0-wisp
1817 (deprecated-package "guile3.0-wisp" guile-wisp))
1818
1819 (define-public guile-udev
1820 (package
1821 (name "guile-udev")
1822 (version "0.1.0")
1823 (source (origin
1824 (method git-fetch)
1825 (uri (git-reference
1826 (url "https://github.com/artyom-poptsov/guile-udev")
1827 (commit (string-append "v" version))))
1828 (file-name (git-file-name name version))
1829 (sha256
1830 (base32
1831 "1l6csncjqnx58c6c3wdl7rshnhk4pzhjq2q8lnkg483564s9w5py"))))
1832 (build-system gnu-build-system)
1833 (native-inputs
1834 `(("autoconf" ,autoconf-wrapper)
1835 ("automake" ,automake)
1836 ("gettext" ,gettext-minimal)
1837 ("libtool" ,libtool)
1838 ("texinfo" ,texinfo)
1839 ("pkg-config" ,pkg-config)
1840 ("which" ,which)))
1841 (inputs
1842 `(("guile" ,guile-3.0)
1843 ("eudev" ,eudev)))
1844 (home-page "https://github.com/artyom-poptsov/guile-udev")
1845 (synopsis "Guile bindings to libudev")
1846 (description
1847 "Guile-Udev provides GNU Guile bindings to libudev.")
1848 (license license:gpl3+)))
1849
1850 (define-public guile-sly
1851 (package
1852 (name "guile-sly")
1853 (version "0.1")
1854 (source (origin
1855 (method url-fetch)
1856 (uri (string-append "https://files.dthompson.us/sly/sly-"
1857 version ".tar.gz"))
1858 (sha256
1859 (base32
1860 "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))
1861 (modules '((guix build utils)))
1862 (snippet
1863 '(begin
1864 (substitute* "configure"
1865 (("_guile_required_version=\"2.0.11\"")
1866 "_guile_required_version=\"2\"")
1867 (("ac_subst_vars='")
1868 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1869 (substitute* (find-files "." "Makefile.in")
1870 (("moddir = .*$")
1871 (string-append
1872 "moddir = "
1873 "$(prefix)/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n"))
1874 (("godir = .*$")
1875 (string-append
1876 "godir = "
1877 "$(prefix)/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))
1878 #t))))
1879 (build-system gnu-build-system)
1880 (arguments
1881 '(#:configure-flags
1882 (list (string-append "--with-libfreeimage-prefix="
1883 (assoc-ref %build-inputs "freeimage"))
1884 (string-append "--with-libgslcblas-prefix="
1885 (assoc-ref %build-inputs "gsl")))))
1886 (native-inputs
1887 `(("pkg-config" ,pkg-config)))
1888 (propagated-inputs
1889 `(("guile-sdl" ,guile-sdl)
1890 ("guile-opengl" ,guile-opengl)))
1891 (inputs
1892 `(("guile" ,guile-2.2)
1893 ("gsl" ,gsl)
1894 ("freeimage" ,freeimage)
1895 ("mesa" ,mesa)))
1896 (synopsis "2D/3D game engine for GNU Guile")
1897 (description "Sly is a 2D/3D game engine written in Guile Scheme. Sly
1898 features a functional reactive programming interface and live coding
1899 capabilities.")
1900 (home-page "https://dthompson.us/projects/sly.html")
1901 (license license:gpl3+)))
1902
1903 (define-public g-golf
1904 (let ((commit "ef830107b9765bd6a2da848d0cbe45e11374c0b5")
1905 (revision "839"))
1906 (package
1907 (name "g-golf")
1908 (version (git-version "0.1.0" revision commit))
1909 (source
1910 (origin
1911 (method git-fetch)
1912 (uri (git-reference
1913 (url "https://git.savannah.gnu.org/git/g-golf.git")
1914 (commit commit)))
1915 (file-name (git-file-name name version))
1916 (sha256
1917 (base32 "0r472hvmf447kqvkahp1wy4irb5gy8y793hm8r9rc511smdx66cw"))))
1918 (build-system gnu-build-system)
1919 (native-inputs
1920 `(("autoconf" ,autoconf)
1921 ("automake" ,automake)
1922 ("texinfo" ,texinfo)
1923 ("gettext" ,gettext-minimal)
1924 ("libtool" ,libtool)
1925 ("pkg-config" ,pkg-config)
1926 ("xorg-server" ,xorg-server)))
1927 (inputs
1928 `(("guile" ,guile-2.2)
1929 ("guile-lib" ,guile2.2-lib)
1930 ("clutter" ,clutter)
1931 ("gtk" ,gtk+)
1932 ("glib" ,glib)))
1933 (propagated-inputs
1934 `(("gobject-introspection" ,gobject-introspection)))
1935 (arguments
1936 `(#:phases
1937 (modify-phases %standard-phases
1938 (add-before 'configure 'tests-work-arounds
1939 (lambda* (#:key inputs #:allow-other-keys)
1940 ;; In build environment, There is no /dev/tty
1941 (substitute*
1942 "test-suite/tests/gobject.scm"
1943 (("/dev/tty") "/dev/null"))))
1944 (add-before 'configure 'substitute-libs
1945 (lambda* (#:key inputs outputs #:allow-other-keys)
1946 (let* ((get (lambda (key lib)
1947 (string-append (assoc-ref inputs key) "/lib/" lib)))
1948 (libgi (get "gobject-introspection" "libgirepository-1.0"))
1949 (libglib (get "glib" "libglib-2.0"))
1950 (libgobject (get "glib" "libgobject-2.0"))
1951 (libgdk (get "gtk" "libgdk-3")))
1952 (substitute* "configure"
1953 (("SITEDIR=\"\\$datadir/g-golf\"")
1954 "SITEDIR=\"$datadir/guile/site/$GUILE_EFFECTIVE_VERSION\"")
1955 (("SITECCACHEDIR=\"\\$libdir/g-golf/")
1956 "SITECCACHEDIR=\"$libdir/"))
1957 (substitute* "g-golf/init.scm"
1958 (("libgirepository-1.0") libgi)
1959 (("libglib-2.0") libglib)
1960 (("libgdk-3") libgdk)
1961 (("libgobject-2.0") libgobject)
1962 (("\\(dynamic-link \"libg-golf\"\\)")
1963 (format #f "~s"
1964 `(dynamic-link
1965 (format #f "~alibg-golf"
1966 (if (getenv "GUILE_GGOLF_UNINSTALLED")
1967 ""
1968 ,(format #f "~a/lib/"
1969 (assoc-ref outputs "out"))))))))
1970 (setenv "GUILE_AUTO_COMPILE" "0")
1971 (setenv "GUILE_GGOLF_UNINSTALLED" "1")
1972 #t)))
1973 (add-before 'check 'start-xorg-server
1974 (lambda* (#:key inputs #:allow-other-keys)
1975 ;; The test suite requires a running X server.
1976 (system (format #f "~a/bin/Xvfb :1 &"
1977 (assoc-ref inputs "xorg-server")))
1978 (setenv "DISPLAY" ":1")
1979 #t)))))
1980 (home-page "https://www.gnu.org/software/g-golf/")
1981 (synopsis "Guile bindings for GObject Introspection")
1982 (description
1983 "G-Golf (Gnome: (Guile Object Library for)) is a library for developing
1984 modern applications in Guile Scheme. It comprises a direct binding to the
1985 GObject Introspection API and higher-level functionality for importing Gnome
1986 libraries and making GObject classes (and methods) available in Guile's
1987 object-oriented programming system, GOOPS.")
1988 (license license:lgpl3+))))
1989
1990 (define-public g-wrap
1991 (package
1992 (name "g-wrap")
1993 (version "1.9.15")
1994 (source (origin
1995 (method url-fetch)
1996 (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
1997 version ".tar.gz"))
1998 (sha256
1999 (base32
2000 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
2001 (build-system gnu-build-system)
2002 (native-inputs
2003 `(("pkg-config" ,pkg-config)))
2004 (propagated-inputs
2005 `(("guile" ,guile-2.2)
2006 ("guile-lib" ,guile-lib)))
2007 (inputs
2008 `(("libffi" ,libffi)))
2009 (arguments
2010 `(#:configure-flags '("--disable-Werror")
2011 #:phases
2012 (modify-phases %standard-phases
2013 (add-before 'configure 'pre-configure
2014 (lambda* (#:key outputs #:allow-other-keys)
2015 (let ((out (assoc-ref outputs "out")))
2016 (substitute* (find-files "." "^Makefile.in$")
2017 (("guilemoduledir =.*guile/site" all)
2018 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
2019 #t))))))
2020 (synopsis "Generate C bindings for Guile")
2021 (description "G-Wrap is a tool and Guile library for generating function
2022 wrappers for inter-language calls. It currently only supports generating Guile
2023 wrappers for C functions. Given a definition of the types and prototypes for
2024 a given C interface, G-Wrap will automatically generate the C code that
2025 provides access to that interface and its types from the Scheme level.")
2026 (home-page "https://www.nongnu.org/g-wrap/index.html")
2027 (license license:lgpl2.1+)))
2028
2029 (define-public guile-miniadapton
2030 (let ((commit "1b5749422304567c96ac5367f2221dda9eff5880")
2031 (revision "1"))
2032 (package
2033 (name "guile-miniadapton")
2034 (version (string-append "0-" revision "." (string-take commit 9)))
2035 (source (origin
2036 (method git-fetch)
2037 (uri (git-reference
2038 (url "https://github.com/fisherdj/miniAdapton")
2039 (commit commit)))
2040 (file-name (string-append name "-" version "-checkout"))
2041 (sha256
2042 (base32
2043 "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
2044 (build-system guile-build-system)
2045 (native-inputs
2046 `(("guile" ,guile-2.2)))
2047 (home-page "https://github.com/fisherdj/miniAdapton")
2048 (synopsis "Minimal implementation of incremental computation in Guile
2049 Scheme")
2050 (description "This package provides a complete Scheme implementation of
2051 miniAdapton, which implements the core functionality of the Adapton system for
2052 incremental computation (also known as self-adjusting computation). Like
2053 Adapton, miniAdapton allows programmers to safely combine mutation and
2054 memoization. miniAdapton is built on top of an even simpler system,
2055 microAdapton. Both miniAdapton and microAdapton are designed to be easy to
2056 understand, extend, and port to host languages other than Scheme.")
2057 (license license:expat))))
2058
2059 (define-public guile-reader
2060 (package
2061 (name "guile-reader")
2062 (version "0.6.3")
2063 (source (origin
2064 (method url-fetch)
2065 (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
2066 version ".tar.gz"))
2067 (sha256
2068 (base32
2069 "1fyjckmygkhq22lq8nqc86yl5zzbqd7a944dnz5c1f6vx92b9hiq"))))
2070 (build-system gnu-build-system)
2071 (native-inputs `(("pkgconfig" ,pkg-config)
2072 ("gperf" ,gperf)))
2073 (inputs `(("guile" ,guile-3.0)))
2074 (synopsis "Framework for building readers for GNU Guile")
2075 (description
2076 "Guile-Reader is a simple framework for building readers for GNU Guile.
2077
2078 The idea is to make it easy to build procedures that extend Guile’s read
2079 procedure. Readers supporting various syntax variants can easily be written,
2080 possibly by re-using existing “token readers” of a standard Scheme
2081 readers. For example, it is used to implement Skribilo’s R5RS-derived
2082 document syntax.
2083
2084 Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
2085 hopefully more powerful and flexible (for instance, one may instantiate as
2086 many readers as needed).")
2087 (home-page "https://www.nongnu.org/guile-reader/")
2088 (license license:gpl3+)))
2089
2090 (define-public guile2.2-reader
2091 (package
2092 (inherit guile-reader)
2093 (name "guile2.2-reader")
2094 (inputs `(("guile" ,guile-2.2)))))
2095
2096 (define-public guile-ncurses
2097 (package
2098 (name "guile-ncurses")
2099 (version "3.0")
2100 (source (origin
2101 (method url-fetch)
2102 (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
2103 version ".tar.gz"))
2104 (sha256
2105 (base32
2106 "038xbffalhymg26lvmzgf7ljilxz2f2zmqg5r5nfzbipfbprwjhf"))))
2107 (build-system gnu-build-system)
2108 (inputs `(("ncurses" ,ncurses)
2109 ("guile" ,guile-3.0)))
2110 (native-inputs `(("pkg-config" ,pkg-config)))
2111 (arguments
2112 `(#:modules ((guix build gnu-build-system)
2113 ((guix build guile-build-system)
2114 #:select (target-guile-effective-version))
2115 (guix build utils))
2116 #:imported-modules ((guix build guile-build-system)
2117 ,@%gnu-build-system-modules)
2118 #:configure-flags (list "--with-ncursesw" ; Unicode support
2119 "--with-gnu-filesystem-hierarchy")
2120 #:phases
2121 (modify-phases %standard-phases
2122 (add-before 'build 'fix-libguile-ncurses-file-name
2123 (lambda* (#:key outputs #:allow-other-keys)
2124 (invoke "make" "install"
2125 "-C" "src/ncurses"
2126 "-j" (number->string
2127 (parallel-job-count)))
2128 (let* ((out (assoc-ref outputs "out"))
2129 (dir "src/ncurses")
2130 (files (find-files dir ".scm")))
2131 (substitute* files
2132 (("\"libguile-ncurses\"")
2133 (format #f "\"~a/lib/guile/~a/libguile-ncurses\""
2134 out (target-guile-effective-version))))
2135 #t))))))
2136 (home-page "https://www.gnu.org/software/guile-ncurses/")
2137 (synopsis "Guile bindings to ncurses")
2138 (description
2139 "guile-ncurses provides Guile language bindings for the ncurses
2140 library.")
2141 (license license:lgpl3+)))
2142
2143 (define-public guile2.2-ncurses
2144 (package
2145 (inherit guile-ncurses)
2146 (name "guile2.2-ncurses")
2147 (inputs `(("ncurses" ,ncurses)
2148 ("guile" ,guile-2.2)))))
2149
2150 (define-public guile3.0-ncurses
2151 (deprecated-package "guile3.0-ncurses" guile-ncurses))
2152
2153 (define-public guile-ncurses/gpm
2154 (package
2155 (inherit guile-ncurses)
2156 (name "guile-ncurses-with-gpm")
2157 (inputs `(("ncurses" ,ncurses/gpm)
2158 ("guile" ,guile-2.2)))))
2159
2160 (define-public guile3.0-ncurses/gpm
2161 (package
2162 (inherit guile3.0-ncurses)
2163 (name "guile3.0-ncurses-with-gpm")
2164 (inputs `(("ncurses" ,ncurses/gpm)
2165 ("guile" ,guile-3.0)))))
2166
2167 (define-public guile-lib
2168 (package
2169 (name "guile-lib")
2170 (version "0.2.6.1")
2171 (source (origin
2172 (method url-fetch)
2173 (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
2174 version ".tar.gz"))
2175 (sha256
2176 (base32
2177 "0aizxdif5dpch9cvs8zz5g8ds5s4xhfnwza2il5ji7fv2h7ks7bd"))
2178 (modules '((guix build utils)))
2179 (snippet
2180 '(begin
2181 ;; Work around miscompilation on Guile 3.0.0 at -O2:
2182 ;; <https://bugs.gnu.org/39251>.
2183 (substitute* "src/md5.scm"
2184 (("\\(define f-ash ash\\)")
2185 "(define f-ash (@ (guile) ash))\n")
2186 (("\\(define f-add \\+\\)")
2187 "(define f-add (@ (guile) +))\n"))
2188 #t))))
2189 (build-system gnu-build-system)
2190 (arguments
2191 '(#:make-flags
2192 '("GUILE_AUTO_COMPILE=0") ; to prevent guild errors
2193 #:phases
2194 (modify-phases %standard-phases
2195 (add-after 'unpack 'patch-for-cross-compilation
2196 (lambda _
2197 (substitute* "configure.ac"
2198 (("GUILE_FLAGS")
2199 "GUILE_FLAGS
2200 if test \"$cross_compiling\" != no; then
2201 GUILE_TARGET=\"--target=$host_alias\"
2202 AC_SUBST([GUILE_TARGET])
2203 fi
2204 "))
2205 (substitute* "am/guile.mk"
2206 (("guild compile") "guild compile $(GUILE_TARGET)"))
2207 (delete-file "configure") ; trigger the bootstrap phase to run
2208 ; autoreconf
2209 #t))
2210 (add-before 'configure 'patch-module-dir
2211 (lambda _
2212 (substitute* "src/Makefile.in"
2213 (("^moddir = ([[:graph:]]+)")
2214 "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
2215 (("^godir = ([[:graph:]]+)")
2216 "godir = \
2217 $(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n"))
2218 #t)))))
2219 (native-inputs
2220 `(("autoconf" ,autoconf)
2221 ("automake" ,automake)
2222 ("gettext" ,gettext-minimal)
2223 ("guile" ,guile-3.0)
2224 ("pkg-config" ,pkg-config)))
2225 (inputs
2226 `(("guile" ,guile-3.0)))
2227 (home-page "https://www.nongnu.org/guile-lib/")
2228 (synopsis "Collection of useful Guile Scheme modules")
2229 (description
2230 "Guile-Lib is intended as an accumulation place for pure-scheme Guile
2231 modules, allowing for people to cooperate integrating their generic Guile
2232 modules into a coherent library. Think \"a down-scaled, limited-scope CPAN
2233 for Guile\".")
2234
2235 ;; The whole is under GPLv3+, but some modules are under laxer
2236 ;; distribution terms such as LGPL and public domain. See `COPYING' for
2237 ;; details.
2238 (license license:gpl3+)))
2239
2240 (define-public guile2.0-lib
2241 (package
2242 (inherit guile-lib)
2243 (name "guile2.0-lib")
2244 (native-inputs
2245 (alist-replace "guile" (list guile-2.0)
2246 (package-native-inputs guile-lib)))
2247 (inputs
2248 (alist-replace "guile" (list guile-2.0)
2249 (package-inputs guile-lib)))))
2250
2251 (define-public guile2.2-lib
2252 (package
2253 (inherit guile-lib)
2254 (name "guile2.2-lib")
2255 (native-inputs
2256 (alist-replace "guile" (list guile-2.2)
2257 (package-native-inputs guile-lib)))
2258 (inputs
2259 (alist-replace "guile" (list guile-2.2)
2260 (package-inputs guile-lib)))))
2261
2262 (define-public guile3.0-lib
2263 (deprecated-package "guile3.0-lib" guile-lib))
2264
2265 (define-public guile-minikanren
2266 (package
2267 (name "guile-minikanren")
2268 (version "20150424.e844d85")
2269 (source (origin
2270 (method git-fetch)
2271 (uri (git-reference
2272 (url "https://github.com/ijp/minikanren")
2273 (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
2274 (file-name (string-append name "-" version "-checkout"))
2275 (sha256
2276 (base32
2277 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
2278 (build-system guile-build-system)
2279 (native-inputs
2280 `(("guile" ,guile-3.0)))
2281 (home-page "https://github.com/ijp/minikanren")
2282 (synopsis "MiniKanren declarative logic system, packaged for Guile")
2283 (description
2284 "MiniKanren is a relational programming extension to the Scheme
2285 programming Language, written as a smaller version of Kanren suitable for
2286 pedagogical purposes. It is featured in the book, The Reasoned Schemer,
2287 written by Dan Friedman, William Byrd, and Oleg Kiselyov.
2288
2289 This is Ian Price's r6rs packaged version of miniKanren, which deviates
2290 slightly from miniKanren mainline.
2291
2292 See http://minikanren.org/ for more on miniKanren generally.")
2293 (license license:expat)))
2294
2295 (define-public guile2.0-minikanren
2296 (package
2297 (inherit guile-minikanren)
2298 (name "guile2.0-minikanren")
2299 (native-inputs `(("guile" ,guile-2.0)))))
2300
2301 (define-public guile2.2-minikanren
2302 (package
2303 (inherit guile-minikanren)
2304 (name "guile2.2-minikanren")
2305 (native-inputs `(("guile" ,guile-2.2)))))
2306
2307 (define-public guile3.0-minikanren
2308 (deprecated-package "guile3.0-minikanren" guile-minikanren))
2309
2310 (define-public guile-irregex
2311 (package
2312 (name "guile-irregex")
2313 (version "0.9.6")
2314 (source (origin
2315 (method url-fetch)
2316 (uri (string-append
2317 "http://synthcode.com/scheme/irregex/irregex-"
2318 version ".tar.gz"))
2319 (sha256
2320 (base32
2321 "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq"))))
2322 (build-system guile-build-system)
2323 (arguments
2324 '(#:phases (modify-phases %standard-phases
2325 (add-after 'unpack 'move-files-around
2326 (lambda _
2327 ;; Move the relevant source files to src/ and create the
2328 ;; rx/ directory to match the expected module hierarchy.
2329 (mkdir-p "src/rx/source")
2330 (rename-file "irregex-guile.scm"
2331 "src/rx/irregex.scm")
2332 (rename-file "irregex.scm"
2333 "src/rx/source/irregex.scm")
2334 ;; Not really reachable via guile's packaging system,
2335 ;; but nice to have around.
2336 (rename-file "irregex-utils.scm"
2337 "src/rx/source/irregex-utils.scm")
2338 #t)))
2339 #:source-directory "src"))
2340 (native-inputs
2341 `(("guile" ,guile-3.0)))
2342 (home-page "http://synthcode.com/scheme/irregex")
2343 (synopsis "S-expression based regular expressions")
2344 (description
2345 "Irregex is an s-expression based alternative to your classic
2346 string-based regular expressions. It implements SRFI 115 and is deeply
2347 inspired by the SCSH regular expression system.")
2348 (license license:bsd-3)))
2349
2350 (define-public guile2.0-irregex
2351 (package
2352 (inherit guile-irregex)
2353 (name "guile2.0-irregex")
2354 (native-inputs `(("guile" ,guile-2.0)))))
2355
2356 (define-public guile2.2-irregex
2357 (package
2358 (inherit guile-irregex)
2359 (name "guile2.2-irregex")
2360 (native-inputs `(("guile" ,guile-2.2)))))
2361
2362 (define-public guile3.0-irregex
2363 (deprecated-package "guile3.0-irregex" guile-irregex))
2364
2365 (define-public haunt
2366 (package
2367 (name "haunt")
2368 (version "0.2.4")
2369 (source (origin
2370 (method url-fetch)
2371 (uri (string-append "https://files.dthompson.us/haunt/haunt-"
2372 version ".tar.gz"))
2373 (sha256
2374 (base32
2375 "056z4znikk83nr5mr0x2ac3iinqbywa2bvb37mhr566a1q50isfc"))
2376 (modules '((guix build utils)))
2377 (snippet
2378 '(begin
2379 ;; Allow builds with Guile 3.0.
2380 (substitute* "configure"
2381 (("2\\.2 2\\.0")
2382 "3.0 2.2 2.0"))
2383 #t))))
2384 (build-system gnu-build-system)
2385 (arguments
2386 `(#:modules ((ice-9 match) (ice-9 ftw)
2387 ,@%gnu-build-system-modules)
2388 #:tests? #f ; test suite is non-deterministic :(
2389 #:phases (modify-phases %standard-phases
2390 (add-after 'install 'wrap-haunt
2391 (lambda* (#:key inputs outputs #:allow-other-keys)
2392 ;; Wrap the 'haunt' command to refer to the right
2393 ;; modules.
2394 (let* ((out (assoc-ref outputs "out"))
2395 (bin (string-append out "/bin"))
2396 (site (string-append
2397 out "/share/guile/site"))
2398 (guile-reader (assoc-ref inputs "guile-reader"))
2399 (deps `(,@(if guile-reader
2400 (list guile-reader)
2401 '())
2402 ,(assoc-ref inputs "guile-commonmark"))))
2403 (match (scandir site)
2404 (("." ".." version)
2405 (let ((modules (string-append site "/" version))
2406 (compiled-modules (string-append
2407 out "/lib/guile/" version
2408 "/site-ccache")))
2409 (wrap-program (string-append bin "/haunt")
2410 `("GUILE_LOAD_PATH" ":" prefix
2411 (,modules
2412 ,@(map (lambda (dep)
2413 (string-append dep
2414 "/share/guile/site/"
2415 version))
2416 deps)))
2417 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
2418 (,compiled-modules
2419 ,@(map (lambda (dep)
2420 (string-append dep "/lib/guile/"
2421 version
2422 "/site-ccache"))
2423 deps))))
2424 #t)))))))))
2425 (native-inputs
2426 `(("pkg-config" ,pkg-config)
2427 ("texinfo" ,texinfo)))
2428 (inputs
2429 ;; Depend on the latest Guile to avoid bytecode compatibility issues when
2430 ;; using modules built against the latest version.
2431 `(("guile" ,guile-3.0-latest)))
2432 (propagated-inputs
2433 `(("guile-reader" ,guile-reader)
2434 ("guile-commonmark" ,guile-commonmark)))
2435 (synopsis "Functional static site generator")
2436 (description "Haunt is a static site generator written in Guile
2437 Scheme. Haunt features a functional build system and an extensible
2438 interface for reading articles in any format.")
2439 (home-page "https://dthompson.us/projects/haunt.html")
2440 (license license:gpl3+)))
2441
2442 (define-public guile2.2-haunt
2443 (package
2444 (inherit haunt)
2445 (name "guile2.2-haunt")
2446 (inputs `(("guile" ,guile-2.2)))
2447 (propagated-inputs
2448 `(("guile-reader" ,guile2.2-reader)
2449 ("guile-commonmark" ,guile2.2-commonmark)))))
2450
2451 (define-public guile2.0-haunt
2452 (package
2453 (inherit haunt)
2454 (name "guile2.0-haunt")
2455 (inputs `(("guile" ,guile-2.0)))))
2456
2457 (define-public guile3.0-haunt
2458 (deprecated-package "guile3.0-haunt" haunt))
2459
2460 (define-public guile-redis
2461 (package
2462 (name "guile-redis")
2463 (version "2.0.0")
2464 (home-page "https://github.com/aconchillo/guile-redis")
2465 (source (origin
2466 (method git-fetch)
2467 (uri (git-reference
2468 (url home-page)
2469 (commit version)))
2470 (file-name (git-file-name name version))
2471 (sha256
2472 (base32
2473 "1zk2x37lw6ygf7rwy71svnsian8lj51axpxmm66ah7dazn69swlm"))))
2474 (build-system gnu-build-system)
2475 (arguments
2476 '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
2477 (native-inputs
2478 `(("autoconf" ,autoconf)
2479 ("automake" ,automake)
2480 ("pkg-config" ,pkg-config)
2481 ("guile" ,guile-3.0)))
2482 (synopsis "Redis client library for Guile")
2483 (description "Guile-redis provides a Scheme interface to the Redis
2484 key-value cache and store.")
2485 (license license:lgpl3+)))
2486
2487 (define-public guile2.2-redis
2488 (package
2489 (inherit guile-redis)
2490 (name "guile2.2-redis")
2491 (native-inputs `(("guile" ,guile-2.2)
2492 ,@(alist-delete "guile"
2493 (package-native-inputs guile-redis))))))
2494
2495 (define-public guile2.0-redis
2496 (package
2497 (inherit guile-redis)
2498 (name "guile2.0-redis")
2499 (arguments
2500 `(#:phases
2501 (modify-phases %standard-phases
2502 (add-after 'unpack 'patch-source
2503 (lambda _
2504 ;; put-string is in (rnrs io ports) in guile2.0,
2505 ;; not in (ice-9 textual-ports)
2506 (substitute* "redis/utils.scm"
2507 (("\\(ice-9 textual-ports\\)")
2508 "(rnrs io ports)"))
2509 #t)))
2510 ,@(package-arguments guile-redis)))
2511 (native-inputs `(("guile" ,guile-2.0)
2512 ,@(alist-delete "guile"
2513 (package-native-inputs guile-redis))))))
2514
2515 (define-public guile-commonmark
2516 (package
2517 (name "guile-commonmark")
2518 (version "0.1.2")
2519 (source (origin
2520 (method url-fetch)
2521 (uri (string-append "https://github.com/OrangeShark/" name
2522 "/releases/download/v" version
2523 "/" name "-" version ".tar.gz"))
2524 (sha256
2525 (base32
2526 "17lrsdisa3kckh24q114vfmzdc4wkqa6ccwl4hdlrng5wpn1iman"))
2527 (modules '((guix build utils)))
2528 (snippet
2529 '(begin
2530 ;; Allow builds with Guile 3.0.
2531 (substitute* "configure"
2532 (("2\\.2 2\\.0")
2533 "3.0 2.2 2.0"))
2534 #t))))
2535 (build-system gnu-build-system)
2536 ;; The tests throw exceptions with Guile 3.0.5, because they evaluate
2537 ;; (exit ...).
2538 ;;
2539 ;; This has been fixed upstream, but there has not been a new release
2540 ;; containing this change.
2541 (arguments
2542 '(#:phases
2543 (modify-phases %standard-phases
2544 (add-after 'unpack 'fix-tests-when-building-with-guile-3.0.5
2545 (lambda _
2546 (substitute* (find-files "tests" "\\.scm$")
2547 (("\\(exit.*") ""))
2548 #t)))))
2549 (inputs
2550 `(("guile" ,guile-3.0)))
2551 (native-inputs
2552 `(("pkg-config" ,pkg-config)))
2553 (synopsis "CommonMark parser for Guile")
2554 (description
2555 "guile-commonmark is a library for parsing CommonMark, a fully specified
2556 variant of Markdown. The library is written in Guile Scheme and is designed
2557 to transform a CommonMark document to SXML. guile-commonmark tries to closely
2558 follow the @uref{http://commonmark.org/, CommonMark spec}, the main difference
2559 is no support for parsing block and inline level HTML.")
2560 (home-page "https://github.com/OrangeShark/guile-commonmark")
2561 (license license:lgpl3+)))
2562
2563 (define-public guile2.2-commonmark
2564 (package
2565 (inherit guile-commonmark)
2566 (name "guile2.2-commonmark")
2567 (inputs `(("guile" ,guile-2.2)))))
2568
2569 (define-public guile2.0-commonmark
2570 (package
2571 (inherit guile-commonmark)
2572 (name "guile2.0-commonmark")
2573 (inputs `(("guile" ,guile-2.0)))))
2574
2575 (define-public guile3.0-commonmark
2576 (deprecated-package "guile3.0-commonmark" guile-commonmark))
2577
2578 (define-public mcron
2579 (package
2580 (name "mcron")
2581 (version "1.2.0")
2582 (source (origin
2583 (method url-fetch)
2584 (uri (string-append "mirror://gnu/mcron/mcron-"
2585 version ".tar.gz"))
2586 (sha256
2587 (base32
2588 "1midrn15d5kqy4zd2029bj1db6gnfhxg8mcgfy4bkp5p9nl4v4rd"))))
2589 (build-system gnu-build-system)
2590 (arguments
2591 '(#:phases (modify-phases %standard-phases
2592 (add-before 'check 'adjust-tests
2593 (lambda _
2594 (substitute* "tests/job-specifier.scm"
2595 ;; (getpw) fails with "entry not found" in the build
2596 ;; environment, so pass an argument.
2597 (("\\(getpw\\)")
2598 "(getpwnam (getuid))")
2599 ;; The build environment lacks an entry for root in
2600 ;; /etc/passwd.
2601 (("\\(getpw 0\\)")
2602 "(getpwnam \"nobody\")")
2603
2604 ;; FIXME: Skip the 4 faulty tests (see above).
2605 (("\\(test-equal \"next-year\"" all)
2606 (string-append "(test-skip 4)\n" all)))
2607 #t)))))
2608 (native-inputs `(("pkg-config" ,pkg-config)
2609 ("tzdata" ,tzdata-for-tests)
2610 ("guile-native" ;for 'guild compile'
2611 ,@(assoc-ref (package-inputs this-package) "guile"))))
2612 (inputs `(("guile" ,guile-3.0)))
2613 (home-page "https://www.gnu.org/software/mcron/")
2614 (synopsis "Run jobs at scheduled times")
2615 (description
2616 "GNU Mcron is a complete replacement for Vixie cron. It is used to run
2617 tasks on a schedule, such as every hour or every Monday. Mcron is written in
2618 Guile, so its configuration can be written in Scheme; the original cron
2619 format is also supported.")
2620 (license license:gpl3+)))
2621
2622 (define-public guile2.2-mcron
2623 (package
2624 (inherit mcron)
2625 (name "guile2.2-mcron")
2626 (inputs `(("guile" ,guile-2.2)))))
2627
2628 (define-public guile3.0-mcron
2629 (deprecated-package "guile3.0-mcron" mcron))
2630
2631 (define-public guile-picture-language
2632 (let ((commit "291a746a1d3b4784d38b05239bdd7b8e796ce761")
2633 (revision "4"))
2634 (package
2635 (name "guile-picture-language")
2636 (version (git-version "0.0.1" revision commit))
2637 (source (origin
2638 (method git-fetch)
2639 (uri (git-reference
2640 (url "https://git.elephly.net/software/guile-picture-language.git")
2641 (commit commit)))
2642 (file-name (git-file-name name version))
2643 (sha256
2644 (base32
2645 "0rnhf13ds92sbdicshy4sy4kl2kc431fy9vzm1divw974p7v57sd"))))
2646 (build-system gnu-build-system)
2647 (inputs
2648 `(("guile" ,guile-3.0)))
2649 (propagated-inputs
2650 `(("guile-cairo" ,guile-cairo)
2651 ("guile-rsvg" ,guile-rsvg)))
2652 (native-inputs
2653 `(("autoconf" ,autoconf)
2654 ("automake" ,automake)
2655 ("librsvg" ,librsvg)
2656 ("pkg-config" ,pkg-config)
2657 ("texinfo" ,texinfo)))
2658 (home-page "https://git.elephly.net/software/guile-picture-language.git")
2659 (synopsis "Picture language for Guile")
2660 (description
2661 "This package provides a simple SVG-based picture language for Guile.
2662 The picture values can directly be displayed in Geiser.")
2663 ;; (pict base64) is under GPLv3+, the rest is under LGPLv3+
2664 (license (list license:lgpl3+
2665 license:gpl3+)))))
2666
2667 (define-public guile2.2-picture-language
2668 (package
2669 (inherit guile-picture-language)
2670 (name "guile2.2-picture-language")
2671 (inputs `(("guile" ,guile-2.2)))
2672 (propagated-inputs
2673 `(("guile-cairo" ,guile2.2-cairo)
2674 ("guile-rsvg" ,guile2.2-rsvg)))))
2675
2676 (define-public guile3.0-picture-language
2677 (deprecated-package "guile3.0-picture-language"
2678 guile-picture-language))
2679
2680 (define-public guile-studio
2681 (let ((commit "93622e788e727d3275291f999f7e570de6a5bb35")
2682 (revision "1"))
2683 (package
2684 (name "guile-studio")
2685 (version (git-version "0.1.0" revision commit))
2686 (source (origin
2687 (method git-fetch)
2688 (uri (git-reference
2689 (url "https://git.elephly.net/software/guile-studio.git")
2690 (commit commit)))
2691 (file-name (git-file-name name version))
2692 (sha256
2693 (base32
2694 "0n6y0bcmkx50m8rccz7a6h4yxmwq54pf2bfzpd5ndz2bsiwiq13l"))))
2695 (build-system gnu-build-system)
2696 (arguments
2697 `(#:modules
2698 ((ice-9 match)
2699 (srfi srfi-1)
2700 ,@%gnu-build-system-modules)
2701 #:tests? #f ; there are none
2702 #:make-flags
2703 (list (string-append "PICT_DIR="
2704 (assoc-ref %build-inputs "guile-picture-language"))
2705 (string-append "EMACS_DIR="
2706 (assoc-ref %build-inputs "emacs"))
2707 (string-append "GUILE_DIR="
2708 (assoc-ref %build-inputs "guile"))
2709 (string-join (cons "INPUTS="
2710 (filter-map
2711 (lambda (input)
2712 (match input
2713 ((label . pkg)
2714 (and (string-prefix? "emacs" label) pkg))))
2715 %build-inputs)))
2716 (string-append "PREFIX=" (assoc-ref %outputs "out")))
2717 #:phases
2718 (modify-phases %standard-phases
2719 (delete 'configure)
2720 (delete 'install))))
2721 (inputs
2722 `(("guile" ,guile-3.0)
2723 ("guile-picture-language" ,guile-picture-language)
2724 ("emacs" ,emacs)
2725 ("emacs-f" ,emacs-f) ; needed by doom-modeline
2726 ("emacs-memoize" ,emacs-memoize) ; needed by all-the-icons
2727 ("emacs-all-the-icons" ,emacs-all-the-icons) ; needed by doom-modeline
2728 ("emacs-all-the-icons-dired" ,emacs-all-the-icons-dired)
2729 ("emacs-dired-sidebar" ,emacs-dired-sidebar)
2730 ("emacs-doom-modeline" ,emacs-doom-modeline)
2731 ("emacs-modus-themes" ,emacs-modus-themes)
2732 ("emacs-geiser" ,emacs-geiser)
2733 ("emacs-company" ,emacs-company)
2734 ("emacs-ivy" ,emacs-ivy)
2735 ("emacs-flycheck" ,emacs-flycheck)
2736 ("emacs-flycheck-guile" ,emacs-flycheck-guile)
2737 ("emacs-paren-face" ,emacs-paren-face)))
2738 (native-inputs
2739 `(("texinfo" ,texinfo)))
2740 (home-page "https://gnu.org/software/guile")
2741 (synopsis "IDE for Guile")
2742 (description
2743 "This is Emacs with a few settings that make working with Guile easier
2744 for people new to Emacs. Features include: CUA mode, Geiser, tool bar icons
2745 to evaluate Guile buffers, support for Guile's very own picture language, code
2746 completion, a simple mode line, etc.")
2747 (license license:gpl3+))))
2748
2749 (define-public guile-stis-parser
2750 (package
2751 (name "guile-stis-parser")
2752 (version "1.2.4.1")
2753 (source (origin
2754 (method git-fetch)
2755 (uri (git-reference
2756 (url "https://gitlab.com/tampe/stis-parser")
2757 (commit (string-append "v" version))))
2758 (file-name (git-file-name name version))
2759 (sha256
2760 (base32
2761 "1fvxdfvc80zqhwzq5x3kxyr6j8p4b51yx85fx1gr3d4gy2ddpx5w"))))
2762 (build-system gnu-build-system)
2763 (arguments
2764 `(#:parallel-build? #f ; not supported
2765 #:phases
2766 (modify-phases %standard-phases
2767 (add-after 'unpack 'chdir
2768 (lambda _ (chdir "modules") #t))
2769 (add-after 'chdir 'delete-broken-symlink
2770 (lambda _
2771 (delete-file "parser/stis-parser/lang/.#calc.scm")
2772 #t)))))
2773 (inputs
2774 `(("guile" ,guile-3.0)))
2775 (native-inputs
2776 `(("autoconf" ,autoconf)
2777 ("automake" ,automake)
2778 ("pkg-config" ,pkg-config)))
2779 (home-page "https://gitlab.com/tampe/stis-parser")
2780 (synopsis "Parser combinator framework")
2781 (description
2782 "This package provides a functional parser combinator library that
2783 supports backtracking and a small logical framework. The idea is to build up
2784 chunks that are memoized and there is no clear scanner/parser separation,
2785 chunks can be expressions as well as simple tokens.")
2786 (license license:lgpl2.0+)))
2787
2788 (define-public guile-persist
2789 (package
2790 (name "guile-persist")
2791 (version "1.2.3")
2792 (source (origin
2793 (method git-fetch)
2794 (uri (git-reference
2795 (url "https://gitlab.com/tampe/guile-persist")
2796 (commit (string-append "v" version))))
2797 (file-name (git-file-name name version))
2798 (sha256
2799 (base32
2800 "19f8hqcax4v40858kx2j8fy1cvzc2djj99r0n17dy1xxmwa097qi"))))
2801 (build-system gnu-build-system)
2802 (arguments
2803 `(#:phases
2804 (modify-phases %standard-phases
2805 (add-after 'unpack 'patch-prefix
2806 (lambda* (#:key inputs outputs #:allow-other-keys)
2807 (substitute* "src/Makefile.am"
2808 (("/usr/local/lib/guile")
2809 (string-append (assoc-ref outputs "out") "/lib/guile"))
2810 (("/usr/local/include/guile")
2811 (string-append (assoc-ref inputs "guile") "/include/guile"))
2812 (("-L/usr/local/lib")
2813 (string-append "-L" (assoc-ref inputs "guile") "/lib")))
2814 #t))
2815 (add-after 'unpack 'patch-library-reference
2816 (lambda* (#:key outputs #:allow-other-keys)
2817 (let ((out (assoc-ref outputs "out")))
2818 (substitute* "persist/persistance.scm"
2819 (("\"libguile-persist\"")
2820 (format #f "\"~a/lib/guile/3.0/extensions/libguile-persist\"" out)))
2821 #t))))))
2822 (inputs
2823 `(("guile" ,guile-3.0)))
2824 (native-inputs
2825 `(("autoconf" ,autoconf)
2826 ("automake" ,automake)
2827 ("libtool" ,libtool)
2828 ("pkg-config" ,pkg-config)))
2829 (home-page "https://gitlab.com/tampe/guile-persist")
2830 (synopsis "Persistence programming framework for Guile")
2831 (description
2832 "This is a serialization library for serializing objects like classes
2833 and objects, closures and structs. This currently does not support
2834 serializing continuations or delimited continuations.")
2835 (license license:lgpl2.0+)))
2836
2837 (define-public python-on-guile
2838 (package
2839 (name "python-on-guile")
2840 (version "1.2.3.5")
2841 (home-page "https://gitlab.com/python-on-guile/python-on-guile")
2842 (source (origin
2843 (method git-fetch)
2844 (uri (git-reference (url home-page)
2845 (commit (string-append "v" version))))
2846 (file-name (git-file-name name version))
2847 (sha256
2848 (base32
2849 "05xrvcj6a4gzq1ybyin270qz8wamgc7w2skyi9iy6hkpgdhxy8vf"))))
2850 (build-system gnu-build-system)
2851 (arguments
2852 `(#:parallel-build? #f ;not supported
2853 #:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
2854 #:phases
2855 (modify-phases %standard-phases
2856 (add-after 'unpack 'chdir
2857 (lambda _ (chdir "modules") #t))
2858 (add-after 'chdir 'augment-GUILE_LOAD_PATH
2859 (lambda _
2860 ;; TODO: It would be better to patch the Makefile.
2861 (setenv "GUILE_LOAD_PATH"
2862 (string-append ".:"
2863 (getenv "GUILE_LOAD_PATH")))
2864 #t))
2865 (add-after 'install 'wrap
2866 (lambda* (#:key outputs #:allow-other-keys)
2867 ;; Wrap the 'python' executable so it can find its
2868 ;; dependencies and own modules.
2869 (let* ((out (assoc-ref outputs "out"))
2870 (guile-version ,(version-major+minor
2871 (package-version guile-3.0)))
2872 (scm (string-append out "/share/guile/site/"
2873 guile-version))
2874 (ccache (string-append out "/lib/guile/" guile-version
2875 "/site-ccache"))
2876 (load-path (string-join
2877 (cons scm
2878 ;; XXX: cdr because we augment it above.
2879 (cdr (string-split
2880 (getenv "GUILE_LOAD_PATH") #\:)))
2881 ":"))
2882 (compiled-path (string-append
2883 ccache ":"
2884 (getenv "GUILE_LOAD_COMPILED_PATH"))))
2885 (wrap-program (string-append out "/bin/python")
2886 `("GUILE_LOAD_PATH" ":" prefix
2887 (,load-path))
2888 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
2889 (,compiled-path)))
2890 #t))))))
2891 (inputs
2892 `(("guile" ,guile-3.0)
2893 ("guile-persist" ,guile-persist)
2894 ("guile-readline" ,guile-readline)
2895 ("guile-stis-parser" ,guile-stis-parser)))
2896 (native-inputs
2897 `(("autoconf" ,autoconf)
2898 ("automake" ,automake)
2899 ("libtool" ,libtool)
2900 ("pkg-config" ,pkg-config)))
2901 (synopsis "Python implementation in Guile")
2902 (description
2903 "This package allows you to compile a Guile Python file to any target
2904 from @code{tree-il}.")
2905 (license license:lgpl2.0+)))
2906
2907 (define-public guile-file-names
2908 (package
2909 (name "guile-file-names")
2910 (version "0.3")
2911 (source (origin
2912 (method url-fetch)
2913 (uri (string-append "http://brandon.invergo.net/software/download/"
2914 "guile-file-names/guile-file-names-"
2915 version ".tar.gz"))
2916 (sha256
2917 (base32
2918 "01chizdxkhw6aqv629vxka9f5x3534ij7r0jqndawsg2vxm1r9sz"))))
2919 (build-system gnu-build-system)
2920 (arguments
2921 `(#:phases
2922 (modify-phases %standard-phases
2923 (add-after 'unpack 'fix-target-directory
2924 (lambda _
2925 (substitute* "src/Makefile.in"
2926 (("guilemoddir = \\$\\(GUILE_SITE\\)")
2927 "guilemoddir = $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
2928 #t)))))
2929 (inputs
2930 `(("guile" ,guile-2.2)))
2931 (native-inputs
2932 `(("pkg-config" ,pkg-config)))
2933 (home-page "https://gitlab.com/brandoninvergo/guile-file-names")
2934 (synopsis "Manipulate file names")
2935 (description
2936 "The @code{(file-names)} module provides tools for manipulating file
2937 names. The module was built on the idea that doing anything more than a
2938 non-trivial modification of a file name string is a pain (making sure all
2939 slashes are present and accounted for, resolving @code{.} and @code{..}, etc).
2940 Inevitably, you have to break the string up into chunks and operate on that
2941 list of components. This module takes care of that for you.")
2942 (license license:lgpl3+)))
2943
2944 (define-public guile-gi
2945 (package
2946 (name "guile-gi")
2947 (version "0.3.1")
2948 (source (origin
2949 (method url-fetch)
2950 (uri (string-append "http://lonelycactus.com/tarball/guile_gi-"
2951 version ".tar.gz"))
2952 (sha256
2953 (base32
2954 "1ljcfyar1nb6h4jskxnnzrcxcsblawc50qqfdn8cax3zqfskmvzj"))))
2955 (build-system glib-or-gtk-build-system)
2956 (arguments
2957 `(#:configure-flags '("--with-gnu-filesystem-hierarchy")
2958 #:modules ((guix build glib-or-gtk-build-system)
2959 (guix build utils)
2960 (ice-9 popen)
2961 (ice-9 rdelim))
2962 #:phases
2963 (modify-phases %standard-phases
2964 (add-after 'unpack 'patch-references-to-extension
2965 (lambda* (#:key outputs #:allow-other-keys)
2966 (let ((effective (read-line
2967 (open-pipe* OPEN_READ
2968 "guile" "-c"
2969 "(display (effective-version))"))))
2970 (substitute* (find-files "module" ".*\\.scm")
2971 (("\\(load-extension \"libguile-gi\" \"(.*)\"\\)" m arg)
2972 (format #f "~s"
2973 `(load-extension
2974 (format #f "~alibguile-gi"
2975 (if (getenv "GUILE_GI_UNINSTALLED")
2976 ""
2977 ,(format #f "~a/lib/guile/~a/extensions/"
2978 (assoc-ref outputs "out")
2979 effective)))
2980 ,arg)))))
2981 (setenv "GUILE_GI_UNINSTALLED" "1")
2982 #t))
2983 (add-before 'check 'start-xorg-server
2984 (lambda* (#:key inputs #:allow-other-keys)
2985 ;; The init_check test requires a running X server.
2986 (system (format #f "~a/bin/Xvfb :1 &"
2987 (assoc-ref inputs "xorg-server")))
2988 (setenv "DISPLAY" ":1")
2989 #t)))))
2990 (native-inputs
2991 `(("gettext" ,gettext-minimal)
2992 ("glib:bin" ,glib "bin") ; for glib-compile-resources
2993 ("libtool" ,libtool)
2994 ("pkg-config" ,pkg-config)
2995 ("xorg-server" ,xorg-server)))
2996 (propagated-inputs
2997 `(("glib" ,glib)
2998 ("gobject-introspection" ,gobject-introspection)
2999 ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)
3000 ("gtk+" ,gtk+)
3001 ("guile-lib" ,guile-lib)
3002 ("webkitgtk" ,webkitgtk)))
3003 (inputs `(("guile" ,guile-3.0)))
3004 (home-page "https://github.com/spk121/guile-gi")
3005 (synopsis "GObject bindings for Guile")
3006 (description
3007 "Guile-GI is a library for Guile that allows using GObject-based
3008 libraries, such as GTK+3. Its README comes with the disclaimer: This is
3009 pre-alpha code.")
3010 (license license:gpl3+)))
3011
3012 (define-public guile2.2-gi
3013 (package
3014 (inherit guile-gi)
3015 (name "guile2.2-gi")
3016 (inputs
3017 `(("guile" ,guile-2.2)
3018 ,@(alist-delete "guile" (package-inputs guile-gi))))))
3019
3020 (define-public guile3.0-gi
3021 (deprecated-package "guile3.0-gi" guile-gi))
3022
3023 (define-public guile-srfi-89
3024 (package
3025 (name "guile-srfi-89")
3026 (version "0.0.1")
3027 (source
3028 (origin
3029 (method git-fetch)
3030 (uri (git-reference
3031 (url "https://gitlab.com/mjbecze/guile-srfi-89.git")
3032 (commit version)))
3033 (sha256
3034 (base32
3035 "1981c0rrzxqx3md9jx8ir7j3m2mzg9m72b33p5jvw36zirbzpl20"))
3036 (file-name (git-file-name name version))))
3037 (build-system guile-build-system)
3038 (native-inputs
3039 `(("guile" ,guile-3.0)))
3040 (home-page "https://gitlab.com/mjbecze/guile-srfi-89")
3041 (synopsis "Hygienic implementation of SRFI-89 for Guile")
3042 (description
3043 "This package provides SRFI-89 optional positional and named
3044 parameters, which define* and lambda* special forms")
3045 (license license:gpl3+)))
3046
3047 (define-public guile-srfi-145
3048 (package
3049 (name "guile-srfi-145")
3050 (version "0.0.1")
3051 (source
3052 (origin
3053 (method git-fetch)
3054 (uri (git-reference
3055 (url "https://gitlab.com/mjbecze/guile-srfi-145.git")
3056 (commit version)))
3057 (sha256
3058 (base32
3059 "1gssa8cmcp8640fil9z8dpil8v5l279wlalqjcx3fls5jwv13q1b"))
3060 (file-name (git-file-name name version))))
3061 (build-system guile-build-system)
3062 (native-inputs
3063 `(("guile" ,guile-3.0)))
3064 (home-page "https://gitlab.com/mjbecze/guile-srfi-145")
3065 (synopsis "SRFI-145 port for Guile")
3066 (description
3067 "This package provides SRFI-145. This provides the means to
3068 denote the invalidity of certain code paths in a Scheme program.")
3069 (license license:gpl3+)))
3070
3071 (define-public guile-srfi-158
3072 (package
3073 (name "guile-srfi-158")
3074 (version "0.0.1")
3075 (source
3076 (origin
3077 (method git-fetch)
3078 (uri (git-reference
3079 (url "https://gitlab.com/mjbecze/guile-srfi-158.git")
3080 (commit version)))
3081 (sha256
3082 (base32
3083 "0b8hlv1bldbcwkcxi9y8mm6xp5gbgpg7b15bwqxv70iynl9d9a7c"))
3084 (file-name (git-file-name name version))))
3085 (build-system gnu-build-system)
3086 (native-inputs
3087 `(("autoconf" ,autoconf)
3088 ("automake" ,automake)
3089 ("pkg-config" ,pkg-config)))
3090 (inputs
3091 `(("guile" ,guile-3.0)))
3092 (home-page "https://gitlab.com/samplet/guile-srfi-158")
3093 (synopsis "SRFI 158 (Generators and Accumulators) for Guile")
3094 (description "This package provides an implementation of SRFI 158
3095 for Guile. SRFI 158 defines utility procedures that create,
3096 transform, and consume generators. It also defines procedures that
3097 return accumulators. It is implemented by wrapping the sample
3098 implementation in a thin Guile compatibility layer.")
3099 (license license:gpl3+)))
3100
3101 (define-public guile-srfi-159
3102 (let ((commit "1bd98abda2ae4ef8f36761a167903e55c6bda7bb")
3103 (revision "0"))
3104 (package
3105 (name "guile-srfi-159")
3106 (version (git-version "0" revision commit))
3107 (home-page "https://bitbucket.org/bjoli/guile-srfi-159")
3108 (source (origin
3109 (method hg-fetch)
3110 (uri (hg-reference (changeset commit)
3111 (url home-page)))
3112 (sha256
3113 (base32
3114 "1zw6cmcy7xdbfiz3nz9arqnn7l2daidaps6ixkcrc9b6k51fdv3p"))
3115 (file-name (git-file-name name version))))
3116 (build-system guile-build-system)
3117 (arguments
3118 ;; The *-impl.scm files are actually included from module files; they
3119 ;; should not be compiled separately, but they must be installed.
3120 '(#:not-compiled-file-regexp "-impl\\.scm$"))
3121 (inputs
3122 `(("guile" ,guile-2.2)))
3123 (synopsis "Formatting combinators for Guile")
3124 (description
3125 "The @code{(srfi-159)} module and its sub-modules implement the
3126 formatting combinators specified by
3127 @uref{https://srfi.schemers.org/srfi-159/srfi-159.html, SRFI-159}. These are
3128 more expressive and flexible than the traditional @code{format} procedure.")
3129 (license license:bsd-3))))
3130
3131 (define-public guile-srfi-180
3132 (let ((commit "9188bf9724c6d320ef804579d222e855b007b193")
3133 (revision "0"))
3134 (package
3135 (name "guile-srfi-180")
3136 (version (git-version "0" revision commit))
3137 (source
3138 (origin
3139 (method git-fetch)
3140 (uri (git-reference
3141 (url "https://github.com/scheme-requests-for-implementation/srfi-180")
3142 (commit commit)))
3143 (sha256
3144 (base32
3145 "08lf70rsak8mwfij55xc37pg9zg7c87fizmhz7ln46skzj68sl3y"))
3146 (modules '((guix build utils)))
3147 (snippet
3148 '(begin
3149 (delete-file-recursively "srfi/files")
3150 (delete-file "srfi/run-r7rs-checks.guile.scm")
3151 (delete-file "srfi/run-r7rs-checks.scm")
3152 (delete-file "srfi/check.scm")
3153 #t))
3154 (file-name (git-file-name name version))))
3155 (build-system guile-build-system)
3156 (arguments
3157 '(#:not-compiled-file-regexp "body\\.scm$"))
3158 (native-inputs
3159 `(("guile" ,guile-3.0)))
3160 (propagated-inputs
3161 `(("guile-srfi-145" ,guile-srfi-145)))
3162 (home-page "https://srfi.schemers.org/srfi-180/")
3163 (synopsis "JSON parser and printer for Guile")
3164 (description
3165 "This library implements a JavaScript Object Notation (JSON) parser and printer.
3166 It also supports parsing JSON objects that may be bigger than memory with a streaming
3167 API.")
3168 (license license:expat))))
3169
3170 (define-public emacsy
3171 (package
3172 (name "emacsy")
3173 (version "0.4.1")
3174 (source (origin
3175 (method url-fetch)
3176 (uri (string-append "mirror://savannah/emacsy/emacsy-"
3177 version ".tar.gz"))
3178 (sha256
3179 (base32
3180 "1cpb85dl1nibd34c2x2h7vfmjpkgh353p5b1w20v6cs6gmvgg4np"))
3181 (modules '((guix build utils)))
3182 (snippet
3183 '(begin
3184 (substitute* "configure"
3185 ;; Allow builds with Guile 3.0.
3186 (("2\\.2 2\\.0")
3187 "3.0 2.2 2.0")
3188
3189 ;; Freeglut 3.2 provides 'glut.pc', not 'freeglut.pc'.
3190 (("freeglut >= ")
3191 "glut >= "))
3192
3193 (substitute* '("emacsy/emacsy.c"
3194 "example/hello-emacsy.c")
3195 (("#include <libguile\\.h>")
3196 (string-append "#include <stdlib.h>\n"
3197 "#include <stdio.h>\n"
3198 "#include <string.h>\n"
3199 "#include <unistd.h>\n"
3200 "#include <libguile.h>\n")))))))
3201 (build-system gnu-build-system)
3202 (native-inputs
3203 `(("bzip2" ,bzip2)
3204 ("guile" ,guile-3.0)
3205 ("gettext" ,gettext-minimal)
3206 ("libtool" ,libtool)
3207 ("perl" ,perl)
3208 ("pkg-config" ,pkg-config)
3209 ("texinfo" ,texinfo)
3210 ("texlive" ,(texlive-union (list texlive-generic-epsf)))))
3211 (inputs
3212 `(("dbus-glib" ,dbus-glib)
3213 ("guile" ,guile-3.0)
3214 ("guile-lib" ,guile-lib)
3215 ("guile-readline" ,guile-readline)
3216 ("freeglut" ,freeglut)
3217 ("webkitgtk" ,webkitgtk)))
3218 (propagated-inputs
3219 `(("glib-networking" ,glib-networking)
3220 ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)))
3221 (arguments
3222 `(#:modules ((guix build gnu-build-system)
3223 (guix build utils)
3224 (ice-9 popen)
3225 (ice-9 rdelim)
3226 (ice-9 regex)
3227 (ice-9 ftw)
3228 (srfi srfi-26))
3229 #:phases
3230 (modify-phases %standard-phases
3231 (add-before 'configure 'setenv
3232 (lambda _
3233 (setenv "GUILE_AUTO_COMPILE" "0")
3234 #t))
3235 (add-after 'install 'wrap-binaries
3236 (lambda* (#:key inputs outputs #:allow-other-keys)
3237 (let* ((out (assoc-ref outputs "out"))
3238 (effective (read-line
3239 (open-pipe* OPEN_READ
3240 "guile" "-c"
3241 "(display (effective-version))")))
3242 (deps (map (cut assoc-ref inputs <>)
3243 '("guile-lib" "guile-readline")))
3244 (scm-path (map (cut string-append <> "/share/guile/site/"
3245 effective) `(,out ,@deps)))
3246 (go-path (map (cut string-append <> "/lib/guile/" effective
3247 "/site-ccache/") `(,out ,@deps)))
3248 (examples (filter (cut string-match "emacsy" <>)
3249 (scandir (string-append out "/bin/"))))
3250 (progs (map (cut string-append out "/bin/" <>)
3251 examples)))
3252 (map (cut wrap-program <>
3253 `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
3254 `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))
3255 progs)
3256 #t))))))
3257 (home-page "https://savannah.nongnu.org/projects/emacsy")
3258 (synopsis "Embeddable GNU Emacs-like library using Guile")
3259 (description
3260 "Emacsy is an embeddable Emacs-like library that uses GNU Guile
3261 as extension language. Emacsy can give a C program an Emacsy feel with
3262 keymaps, minibuffer, recordable macros, history, tab completion, major
3263 and minor modes, etc., and can also be used as a pure Guile library. It
3264 comes with a simple counter example using FreeGLUT and browser examples
3265 in C using Gtk+-3 and WebKitGtk.")
3266 (license license:gpl3+)))
3267
3268 (define-public emacsy-minimal
3269 (let ((commit "v0.4.1-37-g5f91ee6"))
3270 (package
3271 (inherit emacsy)
3272 (name "emacsy-minimal")
3273 (version (string-drop commit 1))
3274 (source
3275 (origin
3276 (method git-fetch)
3277 (uri (git-reference
3278 (url "https://git.savannah.gnu.org/git/emacsy.git")
3279 (commit commit)))
3280 (file-name (git-file-name name version))
3281 (sha256
3282 (base32 "03ym14g9qhjqmryr5z065kynqm8yhmvnbs2djl6vp3i9cmqln8cl"))))
3283 (build-system gnu-build-system)
3284 (inputs
3285 `(("guile" ,guile-2.2)
3286 ("guile-lib" ,guile2.2-lib)
3287 ("guile-readline" ,guile2.2-readline)))
3288 (propagated-inputs '())
3289 (arguments
3290 `(#:configure-flags '("--without-examples")
3291 #:phases
3292 (modify-phases %standard-phases
3293 (add-before 'configure 'setenv
3294 (lambda _
3295 (setenv "GUILE_AUTO_COMPILE" "0")
3296 #t))))))))
3297
3298 (define-public guile-jpeg
3299 (let ((commit "6a1673578b297c2c1b28e44a76bd5c49e76a5046")
3300 (revision "0"))
3301 (package
3302 (name "guile-jpeg")
3303 (version (git-version "0.0" revision commit))
3304 (home-page "https://gitlab.com/wingo/guile-jpeg")
3305 (source (origin
3306 (method git-fetch)
3307 (uri (git-reference (url home-page)
3308 (commit commit)))
3309 (sha256
3310 (base32
3311 "05z9m408w3h6aqb5k3r3qa7khir0k10rxwvsrzhkcq1hr5vbmr4m"))
3312 (file-name (git-file-name name version))
3313 (modules '((guix build utils)))
3314 (snippet
3315 '(begin
3316 ;; Install .go files in the right place.
3317 (substitute* "Makefile.am"
3318 (("/ccache") "/site-ccache"))
3319 #t))))
3320 (build-system gnu-build-system)
3321 (native-inputs
3322 `(("autoconf" ,autoconf)
3323 ("automake" ,automake)
3324 ("pkg-config" ,pkg-config)
3325 ("guile" ,guile-2.2)))
3326 (synopsis "JPEG file parsing library for Guile")
3327 (description
3328 "Guile-JPEG is a Scheme library to parse JPEG image files and to
3329 perform geometrical transforms on JPEG images.")
3330 (license license:gpl3+))))
3331
3332 (define-public nomad
3333 (package
3334 (name "nomad")
3335 (version "0.2.0-alpha-199-g3e7a475")
3336 (source (origin
3337 (method git-fetch)
3338 (uri (git-reference
3339 (url "https://git.savannah.gnu.org/git/nomad.git/")
3340 (commit version)))
3341 (file-name (git-file-name name version))
3342 (sha256
3343 (base32
3344 "0p0ha6prp7pyadp61clbhc6b55023vxzfwy14j2qygb2mkq7fhic"))))
3345 (build-system gnu-build-system)
3346 (native-inputs
3347 `(("autoconf" ,autoconf)
3348 ("automake" ,automake)
3349 ("bash" ,bash)
3350 ("pkg-config" ,pkg-config)
3351 ("libtool" ,libtool)
3352 ("guile" ,guile-2.2)
3353 ("glib:bin" ,glib "bin")
3354 ("texinfo" ,texinfo)
3355 ("gettext" ,gettext-minimal)
3356 ("perl" ,perl)))
3357 (inputs
3358 `(;; Guile
3359 ("guile" ,guile-2.2)
3360 ("guile-lib" ,guile2.2-lib)
3361 ("guile-readline" ,guile2.2-readline)
3362 ("guile-gcrypt" ,guile2.2-gcrypt)
3363 ("gnutls" ,gnutls)
3364 ("g-golf" ,g-golf)
3365 ("shroud" ,shroud)
3366 ("emacsy" ,emacsy-minimal)
3367 ;; Gtk
3368 ("glib" ,glib)
3369 ("dbus-glib" ,dbus-glib)
3370 ("glib-networking" ,glib-networking)
3371 ("gtk+" ,gtk+)
3372 ("gtk+:bin" ,gtk+ "bin")
3373 ("webkitgtk" ,webkitgtk)
3374 ("gtksourceview" ,gtksourceview)
3375 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
3376 ("vte" ,vte)
3377 ;; Gstreamer
3378 ("gstreamer" ,gstreamer)
3379 ("gst-plugins-base" ,gst-plugins-base)
3380 ("gst-plugins-good" ,gst-plugins-good)
3381 ("gst-plugins-bad" ,gst-plugins-bad)
3382 ("gst-plugins-ugly" ,gst-plugins-ugly)
3383 ;; Util
3384 ("xorg-server" ,xorg-server)))
3385 (arguments
3386 `(#:modules ((guix build gnu-build-system)
3387 (guix build utils)
3388 (ice-9 popen)
3389 (ice-9 rdelim)
3390 (srfi srfi-26))
3391 #:phases
3392 (modify-phases %standard-phases
3393 (add-before 'check 'start-xorg-server
3394 (lambda* (#:key inputs #:allow-other-keys)
3395 ;; The test suite requires a running X server.
3396 (system (format #f "~a/bin/Xvfb :1 &"
3397 (assoc-ref inputs "xorg-server")))
3398 (setenv "DISPLAY" ":1")
3399 #t))
3400 (add-after 'install 'wrap-binaries
3401 (lambda* (#:key inputs outputs #:allow-other-keys)
3402 (let* ((out (assoc-ref outputs "out"))
3403 (effective (read-line (open-pipe*
3404 OPEN_READ
3405 "guile" "-c"
3406 "(display (effective-version))")))
3407 (gst-plugins (map (lambda (i)
3408 (string-append (assoc-ref inputs i)
3409 "/lib/gstreamer-1.0"))
3410 `("gstreamer"
3411 "gst-plugins-base"
3412 "gst-plugins-good"
3413 "gst-plugins-bad"
3414 "gst-plugins-ugly")))
3415 (out-append (lambda (. args)
3416 (apply string-append out args)))
3417 (gi-path (out-append "/lib/girepository-1.0"))
3418 (load-path (out-append "/share/guile/site/" effective))
3419 (comp-path (out-append "/lib/guile/"
3420 effective "/site-ccache"))
3421 (ext-path (out-append "/libexec/nomad")))
3422 (wrap-program (string-append out "/bin/nomad")
3423 `("GUILE_LOAD_PATH" ":" prefix
3424 (,load-path
3425 ,(getenv "GUILE_LOAD_PATH")))
3426 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
3427 (,comp-path
3428 ,(getenv "GUILE_LOAD_COMPILED_PATH")))
3429 `("GI_TYPELIB_PATH" ":" prefix
3430 (,gi-path ,(getenv "GI_TYPELIB_PATH")))
3431 `("GIO_EXTRA_MODULES" ":" prefix
3432 (,(getenv "GIO_EXTRA_MODULES")))
3433 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix ,gst-plugins)
3434 `("NOMAD_WEB_EXTENSION_DIR" ":" prefix (,ext-path)))
3435 #t))))))
3436 (home-page "https://savannah.nongnu.org/projects/nomad/")
3437 (synopsis "Extensible Web Browser in Guile Scheme")
3438 (description "Nomad is a Emacs-like web browser that consists of a modular
3439 feature-set, fully programmable in Guile Scheme.")
3440 (license license:gpl3+)))
3441
3442 (define-public guile-cv
3443 (package
3444 (name "guile-cv")
3445 (version "0.2.1")
3446 (source (origin
3447 (method url-fetch)
3448 (uri (string-append "mirror://gnu/guile-cv/guile-cv-"
3449 version ".tar.gz"))
3450 (sha256
3451 (base32
3452 "0qdf0s2h1xj5lbhnc1pfw69i3zg08pqy2y6869b92ydfis8r82j9"))))
3453 (build-system gnu-build-system)
3454 (arguments
3455 `(#:phases
3456 (modify-phases %standard-phases
3457 (add-after 'unpack 'prepare-build
3458 (lambda* (#:key inputs outputs #:allow-other-keys)
3459 (substitute* "configure"
3460 (("SITEDIR=\"\\$datadir/guile-cv\"")
3461 "SITEDIR=\"$datadir/guile/site/$GUILE_EFFECTIVE_VERSION\"")
3462 (("SITECCACHEDIR=\"\\$libdir/guile-cv/")
3463 "SITECCACHEDIR=\"$libdir/"))
3464 (substitute* "cv/init.scm"
3465 (("\\(dynamic-link \"libvigra_c\"\\)")
3466 (string-append "(dynamic-link \""
3467 (assoc-ref inputs "vigra-c")
3468 "/lib/libvigra_c\")"))
3469 (("\\(dynamic-link \"libguile-cv\"\\)")
3470 (format #f "~s"
3471 `(dynamic-link
3472 (format #f "~alibguile-cv"
3473 (if (getenv "GUILE_CV_UNINSTALLED")
3474 ""
3475 ,(format #f "~a/lib/"
3476 (assoc-ref outputs "out"))))))))
3477 (setenv "GUILE_CV_UNINSTALLED" "1")
3478 ;; Only needed to satisfy the configure script.
3479 (setenv "LD_LIBRARY_PATH"
3480 (string-append (assoc-ref inputs "vigra-c") "/lib"))
3481 #t)))))
3482 (inputs
3483 `(("vigra" ,vigra)
3484 ("vigra-c" ,vigra-c)
3485 ("guile" ,guile-2.2)))
3486 (native-inputs
3487 `(("texlive" ,(texlive-union (list texlive-booktabs
3488 texlive-lm
3489 texlive-siunitx
3490 texlive-standalone
3491 texlive-xcolor
3492 texlive-fonts-iwona)))
3493 ("pkg-config" ,pkg-config)))
3494 (propagated-inputs
3495 `(("guile-lib" ,guile-lib)))
3496 (home-page "https://www.gnu.org/software/guile-cv/")
3497 (synopsis "Computer vision library for Guile")
3498 (description "Guile-CV is a Computer Vision functional programming library
3499 for the Guile Scheme language. It is based on Vigra (Vision with Generic
3500 Algorithms), a C++ image processing and analysis library. Guile-CV contains
3501 bindings to Vigra C (a C wrapper to most of the Vigra functionality) and is
3502 enriched with pure Guile Scheme algorithms, all accessible through a nice,
3503 clean and easy to use high level API.")
3504 (license license:gpl3+)))
3505
3506 (define-public guile-ffi-fftw
3507 (let ((commit "294ad9e7491dcb40026d2fec9be2af05263be1c0")
3508 (revision "2"))
3509 (package
3510 (name "guile-ffi-fftw")
3511 (version (git-version "0" revision commit))
3512 (source (origin
3513 (method git-fetch)
3514 (uri (git-reference
3515 (url "https://github.com/lloda/guile-ffi-fftw")
3516 (commit commit)))
3517 (file-name (git-file-name "guile-ffi-fftw" version))
3518 (sha256
3519 (base32
3520 "08j40a5p6a8pgvhffmzb5rfdnrav2mksy3gfjkdqy93jfj1z5afg"))))
3521 (build-system guile-build-system)
3522 (arguments
3523 `(#:source-directory "mod"
3524 #:phases
3525 (modify-phases %standard-phases
3526 (add-after 'unpack 'prepare-build
3527 (lambda* (#:key inputs #:allow-other-keys)
3528 (substitute* "mod/ffi/fftw.scm"
3529 (("\\(getenv \"GUILE_FFI_FFTW_LIBFFTW3_PATH\"\\)")
3530 (format #f "\"~a/lib\"" (assoc-ref inputs "fftw"))))
3531 #t))
3532 (add-after 'build 'check
3533 (lambda _
3534 (invoke "guile" "-L" "mod"
3535 "-s" "test/test-ffi-fftw.scm"))))))
3536 (inputs
3537 `(("fftw" ,fftw)
3538 ("guile" ,guile-2.2)))
3539 (home-page "https://github.com/lloda/guile-ffi-fftw/")
3540 (synopsis "Access FFTW through Guile's FFI")
3541 (description "This is a minimal set of Guile FFI bindings for the FFTW
3542 library's ‘guru interface’. It provides two functions: @code{fftw-dft! rank
3543 sign in out} and @code{fftw-dft rank sign in}. These bindings being minimal,
3544 there is no support for computing & reusing plans, or split r/i transforms, or
3545 anything other than straight complex DFTs.")
3546 (license license:lgpl3+))))
3547
3548 (define-public srfi-64-driver
3549 (package
3550 (name "srfi-64-driver")
3551 (version "0.1")
3552 (source (origin
3553 (method url-fetch)
3554 (uri (string-append "https://files.ngyro.com/srfi-64-driver/"
3555 "srfi-64-driver-" version ".tar.gz"))
3556 (sha256
3557 (base32
3558 "188b6mb7sjjg0a8zldikinglf40ky8mg8rwh5768gjmch6gkk3ph"))))
3559 (build-system gnu-build-system)
3560 (arguments
3561 `(#:tests? #f
3562 #:phases
3563 (modify-phases %standard-phases
3564 (delete 'build))))
3565 (native-inputs
3566 `(("pkg-config" ,pkg-config)))
3567 (inputs
3568 `(("guile" ,guile-2.2)))
3569 (home-page "https://ngyro.com/software/srfi-64-driver.html")
3570 (synopsis "Automake test driver for SRFI 64 test suites")
3571 (description "This package provides an Automake test driver that can
3572 run SRFI 64 test suites. It gives Automake insight into the individual
3573 tests being run, resulting clearer and more specific output.")
3574 (license license:gpl3+)))
3575
3576 (define-public guile-semver
3577 (package
3578 (name "guile-semver")
3579 (version "0.1.1")
3580 (source (origin
3581 (method url-fetch)
3582 (uri (string-append "https://files.ngyro.com/guile-semver/"
3583 "guile-semver-" version ".tar.gz"))
3584 (sha256
3585 (base32
3586 "109p4n39ln44cxvwdccf9kgb96qx54makvd2ir521ssz6wchjyag"))))
3587 (build-system gnu-build-system)
3588 (native-inputs
3589 `(("pkg-config" ,pkg-config)))
3590 (inputs
3591 `(("guile" ,guile-3.0)))
3592 (home-page "https://ngyro.com/software/guile-semver.html")
3593 (synopsis "Semantic Versioning (SemVer) for Guile")
3594 (description "This Guile library provides tools for reading,
3595 comparing, and writing Semantic Versions. It also includes ranges in
3596 the style of the Node Package Manager (NPM).")
3597 (license license:gpl3+)))
3598
3599 (define-public guile3.0-semver
3600 (deprecated-package "guile3.0-semver" guile-semver))
3601
3602 (define-public guile2.2-semver
3603 (package
3604 (inherit guile-semver)
3605 (name "guile2.2-semver")
3606 (inputs
3607 `(("guile" ,guile-2.2)))))
3608
3609 (define-public guile-hashing
3610 (package
3611 (name "guile-hashing")
3612 (version "1.2.0")
3613 (home-page "https://github.com/weinholt/hashing")
3614 (source (origin
3615 (method git-fetch)
3616 (uri (git-reference
3617 (url home-page)
3618 (commit (string-append "v" version))))
3619 (file-name (git-file-name name version))
3620 (sha256
3621 (base32
3622 "1362d3lmpv7slmv1zmr9wy8panq9sjr9787gc2hagd646mpsfpkl"))))
3623 (build-system guile-build-system)
3624 (arguments
3625 `(#:modules ((guix build guile-build-system)
3626 (guix build utils)
3627 (srfi srfi-26)
3628 (ice-9 ftw))
3629 #:implicit-inputs? #f ;needs nothing but Guile
3630 #:phases (modify-phases %standard-phases
3631 (add-before 'build 'move-sls-files
3632 (lambda _
3633 ;; Move the source under hashing/ in order to match
3634 ;; module names, and rename .sls files to .scm.
3635 (define (target file)
3636 (string-append "hashing/" file))
3637
3638 (define (sls->scm sls)
3639 (string-append (string-drop-right sls 4)
3640 ".scm"))
3641
3642 (mkdir "hashing")
3643 (for-each (lambda (file)
3644 (rename-file file (sls->scm file)))
3645 (find-files "." "\\.sls$"))
3646 (for-each (lambda (file)
3647 (rename-file file (target file)))
3648 (scandir "." (cut string-suffix? ".scm" <>)))
3649 (rename-file "private" "hashing/private")
3650 #t)))))
3651 (native-inputs
3652 `(("guile" ,guile-3.0)))
3653 (synopsis "Cryprographic hash functions implemented in Scheme")
3654 (description
3655 "The @code{(hashing @dots{})} modules implement cryptographic hash
3656 functions in pure R6RS Scheme: CRC, HMAC, MD5, SHA-1, and SHA-2 (SHA-256,
3657 SHA-512).")
3658 (license license:expat)))
3659
3660 (define-public guile2.2-hashing
3661 (package
3662 (inherit guile-hashing)
3663 (name "guile2.2-hashing")
3664 (native-inputs
3665 `(("guile" ,guile-2.2)))))
3666
3667 (define-public guile3.0-hashing
3668 (deprecated-package "guile3.0-hashing" guile-hashing))
3669
3670 (define-public guile-packrat
3671 (package
3672 (name "guile-packrat")
3673 (version "0.1.1")
3674 (home-page "https://github.com/weinholt/packrat")
3675 (source (origin
3676 (method git-fetch)
3677 (uri (git-reference
3678 (url home-page)
3679 (commit (string-append "v" version))))
3680 (file-name (git-file-name name version))
3681 (sha256
3682 (base32
3683 "1aga17164fkhbgllqc7ni6fk5zl8mkmgkl5zcsy67x7ngpyalbby"))))
3684 (build-system guile-build-system)
3685 (arguments
3686 `(#:implicit-inputs? #f ;needs nothing but Guile
3687 #:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
3688 #:not-compiled-file-regexp "/extensible\\.scm$"
3689 #:phases (modify-phases %standard-phases
3690 (add-before 'build 'no-srfi-23
3691 (lambda _
3692 (substitute* "packrat.sls"
3693 (("\\(srfi :23 error\\)")
3694 (object->string '(only (guile) error))))
3695 #t)))))
3696 (native-inputs
3697 `(("guile" ,guile-3.0)))
3698 (synopsis "Packrat parser library in R6RS Scheme")
3699 (description
3700 "This is an R6RS Scheme adaptation of the
3701 @uref{https://bford.info/packrat/, packrat parsing}. Packrat parsing is a
3702 memoizing, backtracking, recursive-descent parsing technique that runs in time
3703 and space linear in the size of the input text.")
3704 (license license:expat)))
3705
3706 (define-public guile-ac-d-bus
3707 (package
3708 (name "guile-ac-d-bus")
3709 (version "1.0.0-beta.0")
3710 (home-page "https://gitlab.com/weinholt/ac-d-bus/")
3711 (source (origin
3712 (method git-fetch)
3713 (uri (git-reference
3714 (url home-page)
3715 (commit (string-append "v" version))))
3716 (file-name (git-file-name name version))
3717 (sha256
3718 (base32
3719 "0rl809qimhgz6b0rixakb42r2l4g53jr09a2g0s1hxgab0blz0kb"))))
3720 (build-system guile-build-system)
3721 (arguments
3722 `(#:implicit-inputs? #f ;needs nothing but Guile
3723 #:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
3724 #:phases (modify-phases %standard-phases
3725 (add-before 'build 'adjust-for-guile
3726 (lambda _
3727 ;; Adjust source file names for Guile.
3728 (define (guile-sls->sls file)
3729 (string-append (string-drop-right
3730 file (string-length ".guile.sls"))
3731 ".sls"))
3732
3733 ;; Remove files targeting other implementations:
3734 ;; *.mosh.sls, etc.
3735 (for-each delete-file
3736 (find-files
3737 "compat"
3738 (lambda (file stat)
3739 (not (string-contains file ".guile.")))))
3740
3741 ;; Rename *.guile.sls to *.sls so the ".guile" bit does
3742 ;; not appear in .go file names.
3743 (for-each (lambda (file)
3744 (rename-file file (guile-sls->sls file)))
3745 (find-files "compat" "\\.guile\\.sls"))
3746
3747 ;; Move directories under d-bus/ to match module names.
3748 (mkdir "d-bus")
3749 (for-each (lambda (directory)
3750 (rename-file directory
3751 (string-append "d-bus/"
3752 directory)))
3753 '("compat" "protocol"))
3754
3755 #t)))))
3756 (native-inputs
3757 `(("guile" ,guile-3.0)))
3758 (propagated-inputs
3759 `(("guile-packrat" ,guile-packrat)))
3760 (synopsis "D-Bus protocol implementation in R6RS Scheme")
3761 (description
3762 "AC/D-Bus is an implementation of the D-Bus wire protocol. D-Bus is an
3763 interprocess communication protocol popular on GNU/Linux systems to
3764 communicate with a variety of services. Originally designed for desktop
3765 environments, it is now used by programs like VLC media player, BlueZ,
3766 NetworkManager, Pulseaudio, systemd (including logind and resolved), Polkit,
3767 gnome-keyring, and many more.")
3768 (license license:expat)))
3769
3770 (define-public guile-webutils
3771 (let ((commit "8541904f761066dc9c27b1153e9a838be9a55299")
3772 (revision "0"))
3773 (package
3774 (name "guile-webutils")
3775 (version (git-version "0.1" revision commit))
3776 (source (origin
3777 (method git-fetch)
3778 (uri (git-reference
3779 (url "https://notabug.org/cwebber/guile-webutils.git")
3780 (commit commit)))
3781 (file-name (git-file-name name version))
3782 (sha256
3783 (base32
3784 "1s9n3hbxd7lfpdi0x8wr0cfvlsf6g62ird9gbspxdrp5p05rbi64"))
3785 (modules '((guix build utils)))
3786 (snippet
3787 '(begin
3788 ;; Allow builds with Guile 3.0.
3789 (substitute* "configure.ac"
3790 (("2\\.2 2\\.0")
3791 "3.0 2.2 2.0"))
3792 #t))))
3793 (build-system gnu-build-system)
3794 (native-inputs
3795 `(("autoconf" ,autoconf)
3796 ("automake" ,automake)
3797 ("pkg-config" ,pkg-config)
3798 ("texinfo" ,texinfo)))
3799 (inputs
3800 `(("guile" ,guile-3.0)))
3801 (propagated-inputs
3802 `(("guile-irregex" ,guile-irregex)
3803 ("guile-gcrypt" ,guile-gcrypt)))
3804 (home-page "https://notabug.org/cwebber/guile-webutils")
3805 (synopsis "Web application authoring utilities for Guile")
3806 (description
3807 "This package provides tooling to write web applications in Guile, such
3808 as signed sessions, multipart message support, etc.")
3809 (license license:gpl3+))))
3810
3811 (define-public guile2.2-webutils
3812 (package
3813 (inherit guile-webutils)
3814 (name "guile2.2-webutils")
3815 (inputs
3816 `(("guile" ,guile-2.2)))
3817 (propagated-inputs
3818 `(("guile-irregex" ,guile2.2-irregex)
3819 ("guile-gcrypt" ,guile2.2-gcrypt)))))
3820
3821 (define-public guile-lens
3822 (let ((commit "14b15d07255f9d3f55d40a3b750d13c9ee3a154f")
3823 (revision "0"))
3824 (package
3825 (name "guile-lens")
3826 (version (git-version "0.1" revision commit))
3827 (source (origin
3828 (method git-fetch)
3829 (uri (git-reference
3830 (url "https://gitlab.com/a-sassmannshausen/guile-lens.git")
3831 (commit commit)))
3832 (file-name (git-file-name name version))
3833 (sha256
3834 (base32
3835 "0w8jzqyla56yrgj7acsgd4nspyir6zgp3vgxid4xmwhg9wmf1ida"))))
3836 (build-system gnu-build-system)
3837 (arguments
3838 '(#:phases
3839 (modify-phases %standard-phases
3840 (add-after 'unpack 'run-hall
3841 (lambda _
3842 (setenv "HOME" "/tmp") ; for ~/.hall
3843 (invoke "hall" "dist" "-x"))))))
3844 (native-inputs
3845 `(("autoconf" ,autoconf)
3846 ("automake" ,automake)
3847 ("guile" ,guile-3.0)
3848 ("guile-hall" ,guile-hall)
3849 ("pkg-config" ,pkg-config)
3850 ("texinfo" ,texinfo)))
3851 (home-page "https://gitlab.com/a-sassmannshausen/guile-lens.git")
3852 (synopsis "Composable lenses for data structures in Guile")
3853 (description
3854 "Guile-Lens is a library implementing lenses in Guile. The library is
3855 currently a re-implementation of the lentes library for Clojure. Lenses
3856 provide composable procedures, which can be used to focus, apply functions
3857 over, or update a value in arbitrary data structures.")
3858 (license license:gpl3+))))
3859
3860 (define-public guile2.2-lens
3861 (package
3862 (inherit guile-lens)
3863 (name "guile2.2-lens")
3864 (native-inputs
3865 `(("guile" ,guile-2.2)
3866 ,@(alist-delete "guile" (package-native-inputs guile-lens))))))
3867
3868 (define-public guile-xapian
3869 (package
3870 (name "guile-xapian")
3871 (version "0.1.0")
3872 (home-page "https://git.systemreboot.net/guile-xapian")
3873 (source
3874 (origin
3875 (method git-fetch)
3876 (uri (git-reference (url home-page)
3877 (commit (string-append "v" version))))
3878 (file-name (git-file-name name version))
3879 (sha256
3880 (base32
3881 "16k61f1jn3g48jaf3730b9l0izr5j933jzyri73nmcnjd09gm35i"))))
3882 (build-system gnu-build-system)
3883 (arguments
3884 '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
3885 (inputs
3886 `(("guile" ,guile-3.0)
3887 ("xapian" ,xapian)
3888 ("zlib" ,zlib)))
3889 (native-inputs
3890 `(("autoconf" ,autoconf)
3891 ("autoconf-archive" ,autoconf-archive)
3892 ("automake" ,automake)
3893 ("libtool" ,libtool)
3894 ("pkg-config" ,pkg-config)
3895 ("swig" ,swig)))
3896 (synopsis "Guile bindings for Xapian")
3897 (description "@code{guile-xapian} provides Guile bindings for Xapian, a
3898 search engine library. Xapian is a highly adaptable toolkit which allows
3899 developers to easily add advanced indexing and search facilities to their own
3900 applications. It has built-in support for several families of weighting
3901 models and also supports a rich set of boolean query operators.")
3902 (license license:gpl2+)))
3903
3904 (define-public guile2.2-xapian
3905 (package
3906 (inherit guile-xapian)
3907 (name "guile2.2-xapian")
3908 (inputs
3909 `(("guile" ,guile-2.2)
3910 ,@(alist-delete "guile" (package-inputs guile-xapian))))))
3911
3912 (define-public guile3.0-xapian
3913 (deprecated-package "guile3.0-xapian" guile-xapian))
3914
3915 (define-public guile-torrent
3916 (package
3917 (name "guile-torrent")
3918 (version "0.1.3")
3919 (source (origin (method git-fetch)
3920 (uri (git-reference
3921 (url
3922 "https://github.com/o-nly/torrent")
3923 (commit version)))
3924 (file-name (git-file-name name version))
3925 (sha256
3926 (base32
3927 "1yiagi55ncq1x7s9n7salzywjm4l96y3n7y3s47a9anvz87mrmim"))))
3928 (build-system gnu-build-system)
3929 (native-inputs
3930 `(("autoconf" ,autoconf)
3931 ("automake" ,automake)
3932 ("guile" ,guile-2.2)
3933 ("texinfo" ,texinfo)
3934 ("perl" ,perl)
3935 ("pkg-config" ,pkg-config)))
3936 (propagated-inputs
3937 `(("guile-gcrypt" ,guile-gcrypt)))
3938 (home-page "https://github.com/o-nly/torrent")
3939 (synopsis "Torrent library for GNU Guile")
3940 (description "This package provides facilities for working with
3941 @code{.torrent} or metainfo files. Implements a bencode reader and writer
3942 according to Bitorrent BEP003.")
3943 (license license:gpl3+)))
3944
3945 (define-public guile-irc
3946 (let ((commit "375d3bde9c6ae7ccc9d7cc65817966b6fda8f26a")
3947 (revision "0"))
3948 (package
3949 (name "guile-irc")
3950 (version (git-version "0.3.0" revision commit))
3951 (source (origin
3952 (method git-fetch)
3953 (uri (git-reference
3954 (url "https://github.com/rekado/guile-irc")
3955 (commit commit)))
3956 (file-name (git-file-name name version))
3957 (sha256
3958 (base32
3959 "113lcckcywrz9060w1c3fnvr8d7crdsjgsv4h47hgmr1slgadl4y"))))
3960 (build-system gnu-build-system)
3961 (arguments
3962 `(#:configure-flags '("--enable-gnutls=yes")))
3963 (native-inputs
3964 `(("autoconf" ,autoconf)
3965 ("automake" ,automake)
3966 ("texinfo" ,texinfo)))
3967 (inputs
3968 `(("gnutls" ,gnutls)
3969 ("guile" ,guile-3.0)))
3970 (home-page "https://github.com/rekado/guile-irc")
3971 (synopsis "IRC library for Guile")
3972 (description "This package provides a Guile library for @dfn{Internet
3973 Relay Chat} (IRC).")
3974 ;; Some file headers incorrectly say LGPLv2+.
3975 (license license:lgpl2.1+))))
3976
3977 (define-public guile-websocket
3978 (let ((commit "c854e0f84a40d972cbd532bbb89c97ca0126a7cf"))
3979 (package
3980 (name "guile-websocket")
3981 (version "0.1")
3982 (source
3983 (origin
3984 (method git-fetch)
3985 (uri (git-reference
3986 (url "git://dthompson.us/guile-websocket.git")
3987 (commit commit)))
3988 (file-name (git-file-name name version))
3989 (sha256
3990 (base32
3991 "1hymvsfrmq9qxr5cxnsgdz7y757yp1cpsgxmdp3f5wxxxpqgsmzx"))))
3992 (build-system gnu-build-system)
3993 (arguments
3994 '(#:make-flags
3995 '("GUILE_AUTO_COMPILE=0")
3996 #:phases
3997 (modify-phases %standard-phases
3998 ;; The package was developed for Guile 2.0 and has this version
3999 ;; hardcoded in the configure.ac and Makefile.am files. Substitute
4000 ;; 3.0 instead so it can support Guile 3.0.
4001 (add-after 'unpack 'update-guile-version
4002 (lambda _
4003 (substitute* "configure.ac"
4004 (("2.0.9") "3.0.0"))
4005 (substitute* "Makefile.am"
4006 (("2.0") "3.0")
4007
4008 ;; Install .go files where they belong.
4009 (("/ccache") "/site-ccache"))
4010 #t)))))
4011 (native-inputs
4012 `(("autoconf" ,autoconf)
4013 ("automake" ,automake)))
4014 (inputs
4015 `(("guile" ,guile-3.0)))
4016 (synopsis "Websocket server/client for Guile")
4017 (description "Guile-websocket provides an implementation of the
4018 WebSocket protocol as defined by RFC 6455.")
4019 (home-page "https://git.dthompson.us/guile-websocket.git")
4020 (license license:lgpl3+))))
4021
4022 (define-public guile3.0-websocket
4023 (deprecated-package "guile3.0-websocket" guile-websocket))
4024
4025 (define-public guile-rdf
4026 (package
4027 (name "guile-rdf")
4028 (version "1.0")
4029 (source
4030 (origin
4031 (method git-fetch)
4032 (uri (git-reference
4033 (url "https://framagit.org/tyreunom/guile-rdf")
4034 (commit version)))
4035 (file-name (git-file-name name version))
4036 (sha256
4037 (base32
4038 "0dwn3app1fscbpmpgvjs5jy1y0gwy3j5gdx8br79af6a88zjlnqf"))))
4039 (build-system gnu-build-system)
4040 (arguments
4041 `(#:tests? #f)); tests require network
4042 (inputs
4043 `(("guile" ,guile-3.0)))
4044 (native-inputs
4045 `(("automake" ,automake)
4046 ("autoconf" ,autoconf)
4047 ("pkg-config" ,pkg-config)
4048 ("texinfo" ,texinfo)))
4049 (home-page "https://framagit.org/tyreunom/guile-rdf")
4050 (synopsis "Guile implementation of the RDF abstract and concrete syntaxes")
4051 (description "Guile RDF is an implementation of the RDF (Resource Description
4052 Framework) format defined by the W3C for GNU Guile. RDF structures include
4053 triples (facts with a subject, a predicate and an object), graphs which are
4054 sets of triples, and datasets, which are collections of graphs.
4055
4056 RDF specifications include the specification of concrete syntaxes and of
4057 operations on graphs. This library implements some basic functionalities,
4058 such as parsing and producing turtle and nquads syntax, as well as
4059 manipulating graphs and datasets.")
4060 (license license:gpl3+)))
4061
4062 (define-public guile-jsonld
4063 (package
4064 (name "guile-jsonld")
4065 (version "1.0.2")
4066 (source
4067 (origin
4068 (method git-fetch)
4069 (uri (git-reference
4070 (url "https://framagit.org/tyreunom/guile-jsonld")
4071 (commit version)))
4072 (file-name (git-file-name name version))
4073 (sha256
4074 (base32
4075 "1ryyvh71899z2inivqglb8d78zzp1sd0wv9a56kvcmrxf1966z6r"))))
4076 (build-system gnu-build-system)
4077 (arguments
4078 `(#:tests? #f)); require network
4079 (propagated-inputs
4080 `(("guile-gnutls" ,gnutls)
4081 ("guile-json" ,guile-json-4)
4082 ("guile-rdf" ,guile-rdf)))
4083 (inputs
4084 `(("guile" ,guile-3.0)))
4085 (native-inputs
4086 `(("automake" ,automake)
4087 ("autoconf" ,autoconf)
4088 ("pkg-config" ,pkg-config)
4089 ("texinfo" ,texinfo)))
4090 (home-page "https://framagit.org/tyreunom/guile-jsonld")
4091 (synopsis "Guile implementation of the JsonLD API specification")
4092 (description "Guile JsonLD is an implementation of the JsonLD (Json for
4093 Linked Data) API defined by the W3C for GNU Guile. It allows you to express links
4094 between data, in a way that is very similar to WikiData or RDF for instance.
4095 An object can have relations (in the form of an IRI) that relates it to one or
4096 more objects or strings, represented by a Json object or an IRI.")
4097 (license license:gpl3+)))
4098
4099 (define-public guile-struct-pack
4100 (package
4101 (name "guile-struct-pack")
4102 (version "1.1.1")
4103 (source
4104 (origin
4105 (method git-fetch)
4106 (uri (git-reference
4107 (url "https://github.com/weinholt/struct-pack")
4108 (commit (string-append "v" version))))
4109 (file-name (git-file-name name version))
4110 (sha256
4111 (base32 "0hd72m821pahjphzyjn26i55542v8makr55xzjll2cycja4wsbc1"))))
4112 (build-system guile-build-system)
4113 (arguments
4114 `(#:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
4115 #:modules ((guix build guile-build-system)
4116 (guix build utils)
4117 (srfi srfi-26)
4118 (ice-9 ftw))
4119 #:phases (modify-phases %standard-phases
4120 (add-before 'build 'move-sls-files
4121 (lambda _
4122 ;; Move files under a struct/ directory to reflect the
4123 ;; module hierarchy.
4124 (define dst-folder "struct")
4125 (define (target file)
4126 (string-append dst-folder "/" file))
4127 (define files
4128 (scandir "." (negate (cut member <> '("." "..")))))
4129 (mkdir dst-folder)
4130 (for-each (lambda (file)
4131 (rename-file file (target file)))
4132 files)
4133 #t)))))
4134 (native-inputs
4135 `(("guile" ,guile-3.0)))
4136 (home-page "https://github.com/weinholt/struct-pack")
4137 (synopsis "R6RS library for working with packed byte structures")
4138 (description
4139 "This is an R6RS library for working with packed byte structures. It is
4140 similar to struct in Python or pack and unpack in Perl.")
4141 (license license:expat)))
4142
4143 (define-public guile-machine-code
4144 (package
4145 (name "guile-machine-code")
4146 (version "2.1.0")
4147 (source
4148 (origin
4149 (method git-fetch)
4150 (uri (git-reference
4151 (url "https://github.com/weinholt/machine-code")
4152 (commit (string-append "v" version))))
4153 (file-name (git-file-name name version))
4154 (sha256
4155 (base32 "0wzj3caj2jypzyjqfkfqkvr3kkbjabsnhldv9kvnx9w9qnria5yd"))))
4156 (build-system guile-build-system)
4157 (arguments
4158 `(#:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
4159 #:modules ((guix build guile-build-system)
4160 (guix build utils)
4161 (srfi srfi-26)
4162 (ice-9 ftw))
4163 #:phases (modify-phases %standard-phases
4164 (add-before 'build 'move-sls-files
4165 (lambda _
4166 ;; Move files under a struct/ directory to reflect the
4167 ;; module hierarchy.
4168 (define dst-folder "machine-code")
4169 (define (target file)
4170 (string-append dst-folder "/" file))
4171 (define files
4172 (scandir "." (negate (cut member <> '("." "..")))))
4173 (mkdir dst-folder)
4174 (for-each (lambda (file)
4175 (rename-file file (target file)))
4176 files)
4177 #t)))))
4178 (native-inputs
4179 `(("guile" ,guile-3.0)))
4180 (propagated-inputs
4181 `(("guile-struct-pack" ,guile-struct-pack)))
4182 (home-page "https://github.com/weinholt/machine-code")
4183 (synopsis "Tools that relate to machine code and object formats")
4184 (description
4185 "This project is about the development of tools that relate to machine
4186 code and object formats; for all architectures. Here you'll find libraries
4187 for working with binary code: assembly, disassembly, instruction tables,
4188 object formats and related areas.")
4189 (license license:expat)))
4190
4191 (define-public guile-laesare
4192 (package
4193 (name "guile-laesare")
4194 (version "1.0.0")
4195 (source
4196 (origin
4197 (method git-fetch)
4198 (uri (git-reference
4199 (url "https://github.com/weinholt/laesare")
4200 (commit (string-append "v" version))))
4201 (file-name (git-file-name name version))
4202 (sha256
4203 (base32 "15q619gzw717r8r1ql23zfdaibpnp9qqs96032vdc3rj74msxc92"))))
4204 (build-system guile-build-system)
4205 (arguments
4206 `(#:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
4207 #:modules ((guix build guile-build-system)
4208 (guix build utils)
4209 (srfi srfi-26)
4210 (ice-9 ftw))
4211 #:phases (modify-phases %standard-phases
4212 (add-before 'build 'move-sls-files
4213 (lambda _
4214 ;; Move files under a laesare directory to reflect
4215 ;; the module hierarchy.
4216 (define dst-folder "laesare")
4217 (define (target file)
4218 (string-append dst-folder "/" file))
4219 (define files
4220 (scandir "." (negate (cut member <> '("." "..")))))
4221 (mkdir dst-folder)
4222 (for-each (lambda (file)
4223 (rename-file file (target file)))
4224 files)
4225 #t)))))
4226 (native-inputs
4227 `(("guile" ,guile-3.0)))
4228 (home-page "https://github.com/weinholt/laesare")
4229 (synopsis "R6RS Scheme library that provides a reader")
4230 (description
4231 "This is an R6RS Scheme library that provides a reader with some extra
4232 features not found in the standard read procedure such as a compatible mode
4233 with support for other RnRS standards and a tolerant mode that continues on
4234 errors.")
4235 (license license:expat)))
4236
4237 (define-public guile-avahi
4238 (let ((commit "6d43caf64f672a9694bf6c98bbf7a734f17a51e8")
4239 (revision "1"))
4240 (package
4241 (name "guile-avahi")
4242 (version (git-version "0.4.0" revision commit))
4243 (source (origin
4244 (method git-fetch)
4245 (uri (git-reference
4246 (url "git://git.sv.gnu.org/guile-avahi.git")
4247 (commit commit)))
4248 (file-name (git-file-name name version))
4249 (sha256
4250 (base32
4251 "0fvrf8x22yvc71180hd3xkhspg9yvadi0pbv8shzlsaxqncwy1m9"))
4252 (modules '((guix build utils)))))
4253 (build-system gnu-build-system)
4254 (arguments
4255 `(#:modules (((guix build guile-build-system)
4256 #:select (target-guile-effective-version))
4257 ,@%gnu-build-system-modules)
4258 #:imported-modules ((guix build guile-build-system)
4259 ,@%gnu-build-system-modules)
4260 #:make-flags
4261 '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
4262 #:phases
4263 (modify-phases %standard-phases
4264 (add-before 'check 'fix-guile-avahi-file-name
4265 (lambda* (#:key outputs #:allow-other-keys)
4266 (with-directory-excursion "src"
4267 (invoke "make" "install"
4268 "-j" (number->string
4269 (parallel-job-count))))
4270 (let* ((out (assoc-ref outputs "out"))
4271 (files (find-files "modules" ".scm")))
4272 (substitute* files
4273 (("\"guile-avahi-v-0\"")
4274 (format #f "\"~a/lib/guile/~a/extensions/guile-avahi-v-0\""
4275 out (target-guile-effective-version))))
4276 #t))))))
4277 (inputs
4278 `(("guile" ,guile-3.0)
4279 ("avahi" ,avahi)))
4280 (native-inputs
4281 `(("autoconf" ,autoconf)
4282 ("automake" ,automake)
4283 ("libtool" ,libtool)
4284 ("pkg-config" ,pkg-config)
4285 ("texinfo" ,texinfo)))
4286 (synopsis "Guile bindings to Avahi")
4287 (description
4288 "This package provides bindings for Avahi. It allows programmers to
4289 use functionalities of the Avahi client library from Guile Scheme programs.
4290 Avahi itself is an implementation of multicast DNS (mDNS) and DNS Service
4291 Discovery (DNS-SD).")
4292 (home-page "https://www.nongnu.org/guile-avahi/")
4293 (license license:lgpl3+))))
4294
4295 (define-public guile-mkdir-p
4296 (package
4297 (name "guile-mkdir-p")
4298 (version "1.0.1")
4299 (source
4300 (origin
4301 (method git-fetch)
4302 (uri (git-reference
4303 (url "https://code.divoplade.fr/mkdir-p.git")
4304 (commit (string-append "v" version))))
4305 (sha256
4306 (base32 "01k20rjcv6p0spmw8ls776aar6bfw0jxw46d2n12w0cb2p79xjv8"))
4307 (file-name (git-file-name name version))
4308 (snippet
4309 `(begin
4310 (with-output-to-file ".tarball-version"
4311 (lambda _ (format #t "~a~%" ,version)))
4312 #t))))
4313 (build-system gnu-build-system)
4314 (arguments `())
4315 (native-inputs
4316 `(("guile" ,guile-3.0)
4317 ("texinfo" ,texinfo)
4318 ("autoconf" ,autoconf)
4319 ("autoconf-archive" ,autoconf-archive)
4320 ("automake" ,automake)
4321 ("pkg-config" ,pkg-config)
4322 ("gettext" ,gettext-minimal)))
4323 (inputs `(("guile" ,guile-3.0)))
4324 (synopsis "Implementation of a recursive @code{mkdir} for Guile")
4325 (description
4326 "This package provides within the @code{(mkdir-p)} module the
4327 @code{mkdir-p} function that tries to create the chain of directories
4328 recursively. It also provides new versions of @code{open-output-file},
4329 @code{call-with-output-file} and @code{with-output-to-file} to create the
4330 directory of its argument if it does not exist.")
4331 (home-page "https://mkdir-p.divoplade.fr")
4332 (license license:asl2.0)))
4333
4334 (define-public guile-jwt
4335 (package
4336 (name "guile-jwt")
4337 (version "0.2.0")
4338 (source
4339 (origin
4340 (method git-fetch)
4341 (uri (git-reference
4342 (url "https://github.com/aconchillo/guile-jwt")
4343 (commit version)))
4344 (file-name (git-file-name name version))
4345 (sha256
4346 (base32
4347 "1p8sapiv5im18rjnzc8xnw6y7dr661rycf9g10z5ww0dl4rfz3z1"))))
4348 (build-system gnu-build-system)
4349 (native-inputs
4350 `(("autoconf" ,autoconf)
4351 ("automake" ,automake)
4352 ("pkg-config" ,pkg-config)))
4353 (propagated-inputs
4354 `(("guile-json" ,guile-json-4)))
4355 (inputs
4356 `(("guile" ,guile-3.0)))
4357 (home-page "https://github.com/aconchillo/guile-jwt")
4358 (synopsis "JSON Web Token library for Guile")
4359 (description
4360 "guile-jwt is a JSON Web Token module for Guile. JSON Web Tokens are an
4361 open, industry standard (RFC 7519) method for representing claims securely
4362 between two parties. guile-jwt allows you to decode, verify and generate
4363 JWT. Supported algorithms: HS256, HS384, HS512.")
4364 (license license:gpl3+)))
4365
4366 (define-public guile-sodium
4367 (package
4368 (name "guile-sodium")
4369 (version "0.1.0")
4370 (source
4371 (origin
4372 (method git-fetch)
4373 (uri (git-reference
4374 (url "https://inqlab.net/git/guile-sodium.git")
4375 (commit (string-append "v" version))))
4376 (file-name (git-file-name name version))
4377 (sha256 (base32 "189jsj87hycs57a54x0b9lifwvhr63nypb9vfxdrq7rwrpcvi5f8"))))
4378 (build-system gnu-build-system)
4379 (arguments `())
4380 (native-inputs
4381 `(("autoconf" ,autoconf)
4382 ("automake" ,automake)
4383 ("pkg-config" ,pkg-config)
4384 ("texinfo" ,texinfo)))
4385 (inputs `(("guile" ,guile-3.0)))
4386 (propagated-inputs `(("libsodium" ,libsodium)))
4387 (synopsis "Guile bindings to the libsodium cryptographic library")
4388 (description
4389 "This package provides Guile bindings to the libsodium cryptographic library
4390 which provides core cryptographic primitives needed to build higher-level
4391 tools.")
4392 (home-page "https://inqlab.net/git/guile-sodium.git")
4393 (license license:gpl3+)))
4394
4395 (define-public guile-eris
4396 (package
4397 (name "guile-eris")
4398 (version "0.2.0")
4399 (source
4400 (origin
4401 (method git-fetch)
4402 (uri (git-reference
4403 (url "https://inqlab.net/git/eris.git")
4404 (commit (string-append "v" version))))
4405 (file-name (git-file-name name version))
4406 (sha256 (base32 "1ijglmwkdy1l87gj429qfjis0v8b1zlxhbyfhx5za8664h68nqka"))))
4407 (build-system gnu-build-system)
4408 (arguments '())
4409 (native-inputs
4410 `(("autoconf" ,autoconf)
4411 ("automake" ,automake)
4412 ("pkg-config" ,pkg-config)
4413 ("texinfo" ,texinfo)
4414 ;; test dependency
4415 ("guile-srfi-180" ,guile-srfi-180)))
4416 (inputs `(("guile" ,guile-3.0)))
4417 (propagated-inputs
4418 `(("guile-sodium" ,guile-sodium)))
4419 (synopsis "Guile implementation of the Encoding for Robust Immutable Storage (ERIS)")
4420 (description
4421 "Guile-ERIS is the reference implementation of the Encoding for Robust
4422 Immutable Storage (ERIS). ERIS allows arbirtary content to be encoded into
4423 uniformly sized, encrypted blocks that can be reassembled using a short
4424 read-capability.")
4425 (home-page "https://inqlab.net/git/eris.git")
4426 (license license:gpl3+)))
4427
4428 (define-public guile-r6rs-protobuf
4429 (package
4430 (name "guile-r6rs-protobuf")
4431 (version "0.9")
4432 (source
4433 (origin
4434 (method git-fetch)
4435 (uri (git-reference
4436 (url "https://gitlab.com/joolean/r6rs-protobuf")
4437 (commit (string-append "v" version))))
4438 (file-name (git-file-name name version))
4439 (sha256
4440 (base32
4441 "1xmn7jlr1xiqgd35klq910p1bnil1iwdvqxkjr3zzml3spy8p2aa"))))
4442 (build-system guile-build-system)
4443 (arguments
4444 `(#:compile-flags '("--r6rs")))
4445 (inputs
4446 `(("guile" ,guile-3.0)))
4447 (home-page "https://gitlab.com/joolean/r6rs-protobuf/")
4448 (synopsis "Scheme implementation of Protocol Buffers")
4449 (description
4450 "This project provides a pure Scheme implementation of Protocol Buffers,
4451 including parsing and code generation.")
4452 (license license:gpl3+)))
4453
4454 (define-public guile-shapefile
4455 (package
4456 (name "guile-shapefile")
4457 (version "0.1.2")
4458 (source
4459 (origin
4460 (method git-fetch)
4461 (uri (git-reference
4462 (url "https://github.com/HugoNikanor/guile-shapefile")
4463 (commit (string-append "v" version))))
4464 (file-name (git-file-name name version))
4465 (sha256
4466 (base32
4467 "1zvrpc8bshw9w0vhdpmhv00j07mzsdyg2f9hfabr83v08zhfi8ml"))))
4468 (build-system guile-build-system)
4469 (arguments
4470 `(#:phases
4471 (modify-phases %standard-phases
4472 (add-after 'unpack 'delete-pre-generated-docs
4473 (lambda _
4474 (delete-file-recursively "docs")
4475 #t))
4476 (add-after 'install 'install-info-documentation
4477 (lambda* (#:key outputs #:allow-other-keys)
4478 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
4479 (doc (string-append share "/doc/" ,name "-" ,version))
4480 (info (string-append share "/info/"))
4481 (makeinfo (string-append (assoc-ref %build-inputs "texinfo")
4482 "/bin/makeinfo")))
4483 (invoke makeinfo "guile-shapefile.texi" "-o" info)
4484 #t))))))
4485 (inputs
4486 `(("guile" ,guile-3.0)))
4487 (native-inputs
4488 `(("texinfo" ,texinfo)))
4489 (home-page "https://github.com/HugoNikanor/guile-shapefile")
4490 (synopsis "Parse shapefiles in Guile")
4491 (description
4492 "Guile Shapefile is a Guile library for reading shapefiles.")
4493 (license license:expat)))
4494
4495 (define-public guile-libyaml
4496 (let ((commit "f5d33a6880e96571d3cb079ed7755ffc156cac46")
4497 (revision "1"))
4498 (package
4499 (name "guile-libyaml")
4500 (version (git-version "0" revision commit))
4501 (source
4502 (origin
4503 (method git-fetch)
4504 (uri (git-reference
4505 (url "https://github.com/mwette/guile-libyaml")
4506 (commit commit)))
4507 (file-name (git-file-name name version))
4508 (sha256
4509 (base32
4510 "12x91983fh1j39zy7kbk19acc1rqdh8515ddx1mh7l26j04k9wgq"))))
4511 (build-system gnu-build-system)
4512 (arguments
4513 `(#:modules (((guix build guile-build-system)
4514 #:prefix guile:)
4515 ,@%gnu-build-system-modules)
4516 #:imported-modules ((guix build guile-build-system)
4517 ,@%gnu-build-system-modules)
4518 #:tests? #false ; there are none
4519 #:phases
4520 (modify-phases %standard-phases
4521 (delete 'configure)
4522 (add-after 'unpack 'remove-unused-files
4523 (lambda* (#:key inputs #:allow-other-keys)
4524 (for-each delete-file
4525 '("guix.scm" "demo1.yml" "demo1.scm"
4526 "yaml/libyaml.scm"
4527 ;; This file is mismatched with the generated FFI code.
4528 "yaml/ffi-help-rt.scm"))
4529 (copy-file (string-append (assoc-ref inputs "nyacc")
4530 "/share/guile/site/3.0/system/ffi-help-rt.scm")
4531 "yaml/ffi-help-rt.scm")
4532 (substitute* "yaml/ffi-help-rt.scm"
4533 (("system ffi-help-rt") "yaml ffi-help-rt"))
4534 #true))
4535 (add-before 'build 'build-ffi
4536 (lambda* (#:key inputs #:allow-other-keys)
4537 (invoke "guild" "compile-ffi"
4538 "--no-exec" ; allow us to patch the generated file
4539 "yaml/libyaml.ffi")
4540 (substitute* "yaml/libyaml.scm"
4541 (("system ffi-help-rt") "yaml ffi-help-rt")
4542 (("dynamic-link \"libyaml\"")
4543 (format #false "dynamic-link \"~a/lib/libyaml\""
4544 (assoc-ref inputs "libyaml"))))
4545 #true))
4546 (replace 'build
4547 (assoc-ref guile:%standard-phases 'build))
4548 (delete 'install))))
4549 (inputs
4550 `(("guile" ,guile-3.0)
4551 ("libyaml" ,libyaml)))
4552 (propagated-inputs
4553 `(("guile-bytestructures" ,guile-bytestructures)))
4554 (native-inputs
4555 `(("nyacc" ,nyacc)))
4556 (home-page "https://github.com/mwette/guile-libyaml")
4557 (synopsis "Guile wrapper for libyaml")
4558 (description
4559 "This package provides a simple yaml module for Guile using the
4560 ffi-helper from nyacc.")
4561 (license license:lgpl3+))))
4562
4563 (define-public schmutz
4564 (let ((commit "add24588c59552537b8f1316df99a0cdd62c221e")
4565 (revision "1"))
4566 (package
4567 (name "schmutz")
4568 (version (git-version "0" revision commit))
4569 (source (origin
4570 (method git-fetch)
4571 (uri (git-reference
4572 (url "https://github.com/arximboldi/schmutz")
4573 (commit commit)))
4574 (file-name (git-file-name name version))
4575 (sha256
4576 (base32
4577 "1z3n61sj62lnn15mandvyrpjzli07rp9r62ypvgg3a8bvh37yc89"))))
4578 (build-system cmake-build-system)
4579 (arguments `(#:tests? #f))
4580 (native-inputs
4581 `(("pkg-config" ,pkg-config)))
4582 (inputs
4583 `(("guile" ,guile-2.2)))
4584 (home-page "https://github.com/arximboldi/schmutz")
4585 (synopsis "Bind C++ code to Scheme")
4586 (description "Schmutz is a header-only library to declare Scheme bindings
4587 for C++ code using a simple embedded DSL. Think of it as @code{Boost.Python}
4588 or @code{LuaBind} but for Scheme.")
4589 (license license:boost1.0))))
4590
4591 (define-public guile-cbor
4592 (package
4593 (name "guile-cbor")
4594 (version "0.1.0")
4595 (source
4596 (origin
4597 (method git-fetch)
4598 (uri (git-reference
4599 (url "https://inqlab.net/git/guile-cbor.git")
4600 (commit (string-append "v" version))))
4601 (file-name (git-file-name name version))
4602 (sha256 (base32 "0bdqg3ifayf7m2j09lqrgdfprbdaa67azf09bcq9b4k71inxfnxl"))))
4603 (build-system gnu-build-system)
4604 (arguments `())
4605 (native-inputs
4606 `(("autoconf" ,autoconf)
4607 ("automake" ,automake)
4608 ("pkg-config" ,pkg-config)
4609 ("texinfo" ,texinfo)))
4610 (inputs `(("guile" ,guile-3.0)))
4611 (synopsis "Guile implementation of CBOR")
4612 (description
4613 "The Concise Binary Object Representation (CBOR), as specified by RFC 8949, is
4614 a binary data serialization format. CBOR is similar to JSON but serializes to
4615 binary which is smaller and faster to generate and parse. This package provides
4616 a Guile implementation of CBOR.")
4617 (home-page "https://inqlab.net/git/guile-cbor.git")
4618 (license license:gpl3+)))