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