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