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