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