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