gnu: xvfb-run: Add man page licence.
[jackhill/guix/guix.git] / gnu / packages / guile.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
9b65dea8 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
0791437f
RW
3;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
4;;; Copyright © 2014, 2016, 2018 David Thompson <davet@gnu.org>
5;;; Copyright © 2014, 2017, 2018 Mark H Weaver <mhw@netris.org>
c5793e7e 6;;; Copyright © 2015, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
c5793e7e 7;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
0791437f 8;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
a71d3358 9;;; Copyright © 2016, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
aaf1bdc3 10;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
0791437f 11;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
e53bf62e 12;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
0791437f
RW
13;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
14;;; Copyright © 2017, 2018 Amirouche <amirouche@hypermove.net>
15;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
c8e3651a 16;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
0791437f 17;;; Copyright © 2019 Taylan Kammer <taylan.kammer@gmail.com>
3d867fea 18;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
1722d680 19;;;
233e7676 20;;; This file is part of GNU Guix.
1722d680 21;;;
233e7676 22;;; GNU Guix is free software; you can redistribute it and/or modify it
1722d680
LC
23;;; under the terms of the GNU General Public License as published by
24;;; the Free Software Foundation; either version 3 of the License, or (at
25;;; your option) any later version.
26;;;
233e7676 27;;; GNU Guix is distributed in the hope that it will be useful, but
1722d680
LC
28;;; WITHOUT ANY WARRANTY; without even the implied warranty of
29;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30;;; GNU General Public License for more details.
31;;;
32;;; You should have received a copy of the GNU General Public License
233e7676 33;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
1722d680 34
1ffa7090 35(define-module (gnu packages guile)
71e0f217 36 #:use-module ((guix licenses) #:prefix license:)
59a43334 37 #:use-module (gnu packages)
146c6b62
RW
38 #:use-module (gnu packages autotools)
39 #:use-module (gnu packages base)
9c782445 40 #:use-module (gnu packages bash)
1ffa7090 41 #:use-module (gnu packages bdw-gc)
148585c2 42 #:use-module (gnu packages compression)
255d1bbe 43 #:use-module (gnu packages dbm)
146c6b62 44 #:use-module (gnu packages flex)
1ffa7090 45 #:use-module (gnu packages gawk)
146c6b62 46 #:use-module (gnu packages gettext)
ee8ee748 47 #:use-module (gnu packages hurd)
1ffa7090 48 #:use-module (gnu packages libffi)
1ffa7090 49 #:use-module (gnu packages libunistring)
7119cca8 50 #:use-module (gnu packages linux)
1ffa7090
LC
51 #:use-module (gnu packages m4)
52 #:use-module (gnu packages multiprecision)
53 #:use-module (gnu packages pkg-config)
54 #:use-module (gnu packages readline)
cd0322a3 55 #:use-module (gnu packages sqlite)
f906d30c 56 #:use-module (gnu packages texinfo)
bd233722 57 #:use-module (gnu packages version-control)
1722d680 58 #:use-module (guix packages)
87f5d366 59 #:use-module (guix download)
6bc24063 60 #:use-module (guix git-download)
32795fcf 61 #:use-module (guix build-system gnu)
977d8666 62 #:use-module (guix build-system guile)
84af1e74 63 #:use-module (guix deprecation)
32795fcf 64 #:use-module (guix utils)
d4660a54
MC
65 #:use-module (ice-9 match)
66 #:use-module ((srfi srfi-1) #:prefix srfi-1:))
1722d680
LC
67
68;;; Commentary:
69;;;
c44899a2 70;;; GNU Guile, and modules and extensions.
1722d680
LC
71;;;
72;;; Code:
73
c44899a2
LC
74(define-public guile-1.8
75 (package
76 (name "guile")
77 (version "1.8.8")
78 (source (origin
87f5d366 79 (method url-fetch)
0db342a5 80 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
81 ".tar.gz"))
82 (sha256
83 (base32
01eafd38 84 "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
fc1adab1 85 (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
c44899a2
LC
86 (build-system gnu-build-system)
87 (arguments '(#:configure-flags '("--disable-error-on-warning")
c44899a2
LC
88
89 ;; Insert a phase before `configure' to patch things up.
dc1d3cde
KK
90 #:phases
91 (modify-phases %standard-phases
92 (add-before 'configure 'patch-stuff
93 (lambda* (#:key outputs #:allow-other-keys)
94 ;; Add a call to `lt_dladdsearchdir' so that
95 ;; `libguile-readline.so' & co. are in the
96 ;; loader's search path.
97 (substitute* "libguile/dynl.c"
98 (("lt_dlinit.*$" match)
99 (format #f
100 " ~a~% lt_dladdsearchdir(\"~a/lib\");~%"
101 match
102 (assoc-ref outputs "out"))))
2f4fbe1c 103
dc1d3cde
KK
104 ;; The usual /bin/sh...
105 (substitute* "ice-9/popen.scm"
106 (("/bin/sh") (which "sh")))
107 #t)))))
528ea990
LC
108
109 ;; When cross-compiling, a native version of Guile itself is needed.
110 (native-inputs (if (%current-target-system)
111 `(("self" ,this-package))
112 '()))
113
01eafd38 114 (inputs `(("gawk" ,gawk)
c44899a2
LC
115 ("readline" ,readline)))
116
117 ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
118 ;; propagated.
119 (propagated-inputs `(("gmp" ,gmp)
be11b102 120 ("libltdl" ,libltdl)))
c44899a2 121
9be8d7c8
LC
122 (native-search-paths
123 (list (search-path-specification
124 (variable "GUILE_LOAD_PATH")
af070955 125 (files '("share/guile/site")))))
9be8d7c8 126
f50d2669 127 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 128 (description
a22dc0c4
LC
129 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
130official extension language of the GNU system. It is an implementation of
131the Scheme language which can be easily embedded in other applications to
132provide a convenient means of extending the functionality of the application
133without requiring the source code to be rewritten.")
6fd52309 134 (home-page "https://www.gnu.org/software/guile/")
71e0f217 135 (license license:lgpl2.0+)))
c44899a2
LC
136
137(define-public guile-2.0
138 (package
139 (name "guile")
b5efd14a 140 (version "2.0.14")
c44899a2 141 (source (origin
87f5d366 142 (method url-fetch)
0db342a5 143 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
144 ".tar.xz"))
145 (sha256
146 (base32
b5efd14a 147 "10lxc6l5alf3lzbs3ihnbfy6dfcrsyf8667wa57f26vf4mk2ai78"))))
c44899a2 148 (build-system gnu-build-system)
528ea990
LC
149
150 ;; When cross-compiling, a native version of Guile itself is needed.
151 (native-inputs `(,@(if (%current-target-system)
152 `(("self" ,this-package))
153 '())
154 ("pkgconfig" ,pkg-config)))
c44899a2 155 (inputs `(("libffi" ,libffi)
88da729f 156 ,@(libiconv-if-needed)
baf549df
LC
157
158 ;; We need Bash when cross-compiling because some of the scripts
159 ;; in bin/ refer to it. Use 'bash-minimal' because we don't need
160 ;; an interactive Bash with Readline and all.
161 ,@(if (target-mingw?) '() `(("bash" ,bash-minimal)))))
c44899a2
LC
162 (propagated-inputs
163 `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
164 ;; reads `-lltdl -lunistring', adding them here will add the needed
165 ;; `-L' flags. As for why the `.la' file lacks the `-L' flags, see
166 ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
167 ("libunistring" ,libunistring)
be11b102
LC
168
169 ;; Depend on LIBLTDL, not LIBTOOL. That way, we avoid some the extra
170 ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
171 ("libltdl" ,libltdl)
c44899a2
LC
172
173 ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
174 ;; must be propagated.
bda1bc6c 175 ("bdw-gc" ,libgc)
c44899a2
LC
176 ("gmp" ,gmp)))
177
9bf62d9b
LC
178 (outputs '("out" "debug"))
179
8ffaa93b 180 (arguments
20897536
TGR
181 `(#:configure-flags '("--disable-static") ; saves 3 MiB
182 #:phases
183 (modify-phases %standard-phases
ba2f61bb
JN
184 ,@(if (hurd-system?)
185 '((add-after 'unpack 'disable-tests
186 (lambda _
187 ;; Hangs at: "Running 00-repl-server.test"
188 (rename-file "test-suite/tests/00-repl-server.test" "00-repl-server.test")
189 ;; Sometimes Hangs at: "Running 00-socket.test"
190 (rename-file "test-suite/tests/00-socket.test" "00-socket.test")
191 ;; FAIL: srfi-18.test: thread-sleep!: thread sleeps fractions of a second
192 (rename-file "test-suite/tests/srfi-18.test" "srfi-18.test")
193 ;; failed to remove 't-guild-compile-7215.go.tdL7yC
194 (substitute* "test-suite/standalone/Makefile.in"
195 (("test-guild-compile ") ""))
196 #t)))
197 '())
20897536
TGR
198 (add-before 'configure 'pre-configure
199 (lambda* (#:key inputs #:allow-other-keys)
200 ;; Tell (ice-9 popen) the file name of Bash.
201 (let ((bash (assoc-ref inputs "bash")))
202 (substitute* "module/ice-9/popen.scm"
203 ;; If bash is #f allow fallback for user to provide
204 ;; "bash" in PATH. This happens when cross-building to
205 ;; MinGW for which we do not have Bash yet.
206 (("/bin/sh")
207 ,@(if (target-mingw?)
208 '((if bash
209 (string-append bash "/bin/bash")
210 "bash"))
211 '((string-append bash "/bin/bash")))))
212 #t))))))
8ffaa93b 213
9be8d7c8
LC
214 (native-search-paths
215 (list (search-path-specification
216 (variable "GUILE_LOAD_PATH")
af070955 217 (files '("share/guile/site/2.0")))
9be8d7c8
LC
218 (search-path-specification
219 (variable "GUILE_LOAD_COMPILED_PATH")
b03f270e 220 (files '("lib/guile/2.0/site-ccache")))))
9be8d7c8 221
f50d2669 222 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 223 (description
a22dc0c4
LC
224 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
225official extension language of the GNU system. It is an implementation of
226the Scheme language which can be easily embedded in other applications to
227provide a convenient means of extending the functionality of the application
228without requiring the source code to be rewritten.")
6fd52309 229 (home-page "https://www.gnu.org/software/guile/")
71e0f217 230 (license license:lgpl3+)))
c44899a2 231
f6396d86 232(define-public guile-2.2
f906d30c 233 (package (inherit guile-2.0)
f6396d86 234 (name "guile")
edc8fd2e 235 (version "2.2.7")
4eae7980
LC
236 (source (origin
237 (method url-fetch)
34d624ce
LC
238
239 ;; Note: we are limited to one of the compression formats
240 ;; supported by the bootstrap binaries, so no lzip here.
80a72572 241 (uri (string-append "mirror://gnu/guile/guile-" version
34d624ce 242 ".tar.xz"))
4eae7980
LC
243 (sha256
244 (base32
edc8fd2e 245 "013mydzhfswqci6xmyc1ajzd59pfbdak15i0b090nhr9bzm7dxyd"))
d9f0788a 246 (modules '((guix build utils)))
44f07d1d
CD
247 (patches (search-patches
248 "guile-2.2-skip-oom-test.patch"))
d9f0788a
LC
249
250 ;; Remove the pre-built object files. Instead, build everything
251 ;; from source, at the expense of significantly longer build
252 ;; times (almost 3 hours on a 4-core Intel i5).
6cbee49d
MW
253 (snippet '(begin
254 (for-each delete-file
255 (find-files "prebuilt" "\\.go$"))
256 #t))))
4fbd0f4f 257 (properties '((timeout . 72000) ;20 hours
16b0f205 258 (max-silent-time . 36000))) ;10 hours (needed on ARM
1577a658 259 ; when heavily loaded)
dd90ed89
DT
260 (native-search-paths
261 (list (search-path-specification
262 (variable "GUILE_LOAD_PATH")
263 (files '("share/guile/site/2.2")))
264 (search-path-specification
265 (variable "GUILE_LOAD_COMPILED_PATH")
1dcca83a 266 (files '("lib/guile/2.2/site-ccache")))))))
4eae7980 267
edc8fd2e 268(define-deprecated guile-2.2/bug-fix guile-2.2)
4bd6f1d1 269
8400d097
LC
270(define-public guile-2.2.4
271 (package/inherit
272 guile-2.2
273 (version "2.2.4")
274 (source (origin
275 (inherit (package-source guile-2.2))
276 (uri (string-append "mirror://gnu/guile/guile-" version
277 ".tar.xz"))
278 (sha256
279 (base32
280 "07p3g0v2ba2vlfbfidqzlgbhnzdx46wh2rgc5gszq1mjyx5bks6r"))))))
34d624ce 281
e7921d5e
LC
282(define-public guile-3.0
283 ;; This is the latest Guile stable version.
2d0e802f
DT
284 (package
285 (inherit guile-2.2)
b6bee63b 286 (name "guile")
7f1aa73b 287 (version "3.0.2")
2d0e802f
DT
288 (source (origin
289 (inherit (package-source guile-2.2))
1a30351b 290 (uri (string-append "mirror://gnu/guile/guile-"
2d0e802f
DT
291 version ".tar.xz"))
292 (sha256
293 (base32
7f1aa73b 294 "12lziar4j27j9whqp2n18427q45y9ghq7gdd8lqhmj1k0lr7vi2k"))))
916ec91f
LC
295 (arguments
296 ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd.
297 (if (hurd-target?)
298 (substitute-keyword-arguments (package-arguments guile-2.2)
299 ((#:configure-flags flags ''())
300 `(cons "--disable-jit" ,flags)))
301 (package-arguments guile-2.2)))
2d0e802f
DT
302 (native-search-paths
303 (list (search-path-specification
304 (variable "GUILE_LOAD_PATH")
305 (files '("share/guile/site/3.0")))
306 (search-path-specification
307 (variable "GUILE_LOAD_COMPILED_PATH")
308 (files '("lib/guile/3.0/site-ccache"
e7921d5e
LC
309 "share/guile/site/3.0")))))))
310
9e91f862 311(define-public guile-3.0-latest
89ab6bfb 312 ;; TODO: Make this 'guile-3.0' on the next rebuild cycle.
21cf0d36
MO
313 (package-with-extra-patches
314 (package
315 (inherit guile-3.0)
316 (version "3.0.5")
317 (source (origin
318 (inherit (package-source guile-3.0))
319 (uri (string-append "mirror://gnu/guile/guile-"
320 version ".tar.xz"))
321 (sha256
322 (base32
323 "1wah6fq1h8vmbpdadjych1mq8hyqkd7p015cbxm14ri37l1gnxid")))))
324 ;; Remove on the next rebuild cycle.
325 (search-patches "guile-2.2-skip-so-test.patch")))
89ab6bfb 326
0e8b0517
LC
327(define-public guile-next
328 (deprecated-package "guile-next" guile-3.0))
5cd074ea 329
cef392f3
CB
330(define-public guile-3.0/libgc-7
331 ;; Using libgc-7 avoid crashes that can occur, particularly when loading
332 ;; data in to the Guix Data Service:
333 ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40525
334 (hidden-package
335 (package
9e91f862 336 (inherit guile-3.0-latest)
cef392f3
CB
337 (propagated-inputs
338 `(("bdw-gc" ,libgc-7)
339 ,@(srfi-1:alist-delete "bdw-gc" (package-propagated-inputs guile-3.0)))))))
340
b6bee63b
LC
341(define-public guile-3.0/fixed
342 ;; A package of Guile that's rarely changed. It is the one used in the
343 ;; `base' module, and thus changing it entails a full rebuild.
344 (package
345 (inherit guile-3.0)
346 (properties '((hidden? . #t) ;people should install 'guile-2.2'
347 (timeout . 72000) ;20 hours
348 (max-silent-time . 36000))))) ;10 hours (needed on ARM
349 ; when heavily loaded)
350
7c3b6b2e 351(define* (make-guile-readline guile #:optional (name "guile-readline"))
2ba2c98d 352 (package
7c3b6b2e 353 (name name)
2ba2c98d
LC
354 (version (package-version guile))
355 (source (package-source guile))
356 (build-system gnu-build-system)
357 (arguments
358 '(#:configure-flags '("--disable-silent-rules")
359 #:phases (modify-phases %standard-phases
360 (add-before 'build 'chdir
361 (lambda* (#:key outputs #:allow-other-keys)
362 (invoke "make" "-C" "libguile" "scmconfig.h")
363 (invoke "make" "-C" "lib")
364 (chdir "guile-readline")
365
366 (substitute* "Makefile"
367 (("../libguile/libguile-[[:graph:]]+\\.la")
368 ;; Remove dependency on libguile-X.Y.la.
369 "")
370 (("^READLINE_LIBS = (.*)$" _ libs)
371 ;; Link against the provided libguile.
372 (string-append "READLINE_LIBS = "
373 "-lguile-$(GUILE_EFFECTIVE_VERSION) "
374 libs "\n"))
375 (("\\$\\(top_builddir\\)/meta/build-env")
376 ;; Use the provided Guile, not the one from
377 ;; $(builddir).
378 "")
379
380 ;; Install modules to the 'site' directories.
381 (("^moddir = .*$")
382 "moddir = $(pkgdatadir)/site/$(GUILE_EFFECTIVE_VERSION)\n")
383 (("^ccachedir = .*$")
384 "ccachedir = $(pkglibdir)/$(GUILE_EFFECTIVE_VERSION)/site-ccache\n"))
385
386 ;; Load 'guile-readline.so' from the right place.
387 (substitute* "ice-9/readline.scm"
388 (("load-extension \"guile-readline\"")
389 (format #f "load-extension \
390 (string-append ~s \"/lib/guile/\" (effective-version) \"/extensions/guile-readline\")"
391 (assoc-ref outputs "out"))))
392 #t)))))
393 (home-page (package-home-page guile))
394 (native-inputs (package-native-inputs guile))
395 (inputs
396 `(,@(package-inputs guile) ;to placate 'configure'
397 ,@(package-propagated-inputs guile)
398 ("guile" ,guile)
399 ("readline" ,readline)))
400 (synopsis "Line editing support for GNU Guile")
401 (description
402 "This module provides line editing support via the Readline library for
403GNU@tie{}Guile. Use the @code{(ice-9 readline)} module and call its
404@code{activate-readline} procedure to enable it.")
405 (license license:gpl3+)))
406
407(define-public guile-readline
142cd4dc 408 (make-guile-readline guile-3.0))
2ba2c98d 409
142cd4dc
MB
410(define-public guile2.2-readline
411 (make-guile-readline guile-2.2 "guile2.2-readline"))
7c3b6b2e 412
8f4acad7
LC
413(define (guile-variant-package-name prefix)
414 (lambda (name)
415 "Return NAME with PREFIX instead of \"guile-\", when applicable."
416 (if (string-prefix? "guile-" name)
417 (string-append prefix "-"
418 (string-drop name
419 (string-length "guile-")))
420 name)))
947a5d47 421
8f4acad7 422(define package-for-guile-2.0
10b507b2 423 ;; A procedure that rewrites the dependency tree of the given package to use
e8bc2a01
MB
424 ;; GUILE-2.0 instead of GUILE-3.0.
425 (package-input-rewriting `((,guile-3.0 . ,guile-2.0))
8819551c
LC
426 (guile-variant-package-name "guile2.0")
427 #:deep? #f))
947a5d47 428
b6bee63b
LC
429(define package-for-guile-2.2
430 (package-input-rewriting `((,guile-3.0 . ,guile-2.2))
8819551c
LC
431 (guile-variant-package-name "guile2.2")
432 #:deep? #f))
b6bee63b
LC
433
434(define-syntax define-deprecated-guile3.0-package
435 (lambda (s)
436 "Define a deprecated package alias for \"guile3.0-something\"."
437 (syntax-case s ()
438 ((_ name)
439 (and (identifier? #'name)
440 (string-prefix? "guile3.0-" (symbol->string (syntax->datum
441 #'name))))
442 (let ((->guile (lambda (str)
443 (let ((base (string-drop str
444 (string-length "guile3.0-"))))
445 (string-append "guile-" base)))))
446 (with-syntax ((package-name (symbol->string (syntax->datum #'name)))
447 (package
448 (datum->syntax
449 #'name
450 (string->symbol
f69cf407
LC
451 (->guile (symbol->string (syntax->datum
452 #'name))))))
453 (old-name
454 ;; XXX: This is the name generated by
455 ;; 'define-deprecated'.
456 (datum->syntax
457 #'name
458 (symbol-append '% (syntax->datum #'name)
459 '/deprecated))))
b6bee63b
LC
460 #'(begin
461 (define-deprecated name package
462 (deprecated-package package-name package))
f69cf407 463 (export old-name))))))))
89a99d53 464
142cd4dc
MB
465(define-deprecated-guile3.0-package guile3.0-readline)
466
4eae7980 467(define-public guile-for-guile-emacs
a71d3358
RW
468 (let ((commit "15ca78482ac0dd2e3eb36dcb31765d8652d7106d")
469 (revision "1"))
470 (package (inherit guile-2.2)
471 (name "guile-for-guile-emacs")
472 (version (git-version "2.1.2" revision commit))
473 (source (origin
474 (method git-fetch)
475 (uri (git-reference
476 (url "git://git.savannah.gnu.org/guile.git")
477 (commit commit)))
478 (file-name (git-file-name name version))
479 (sha256
480 (base32
481 "1l7ik4q4zk7vq4m3gnwizc0b64b1mdr31hxqlzxs94xaf2lvi7s2"))))
482 (arguments
483 (substitute-keyword-arguments (package-arguments guile-2.2)
484 ((#:phases phases '%standard-phases)
485 `(modify-phases ,phases
486 (replace 'bootstrap
487 (lambda _
488 ;; Disable broken tests.
489 ;; TODO: Fix them!
490 (substitute* "test-suite/tests/gc.test"
491 (("\\(pass-if \"after-gc-hook gets called\"" m)
492 (string-append "#;" m)))
493 (substitute* "test-suite/tests/version.test"
494 (("\\(pass-if \"version reporting works\"" m)
495 (string-append "#;" m)))
496 ;; Warning: Unwind-only `out-of-memory' exception; skipping pre-unwind handler.
497 ;; FAIL: test-out-of-memory
498 (substitute* "test-suite/standalone/Makefile.am"
499 (("(check_SCRIPTS|TESTS) \\+= test-out-of-memory") ""))
500
501 (patch-shebang "build-aux/git-version-gen")
502 (invoke "sh" "autogen.sh")
503 #t))))))
504 (native-inputs
505 `(("autoconf" ,autoconf)
506 ("automake" ,automake)
507 ("libtool" ,libtool)
508 ("flex" ,flex)
509 ("texinfo" ,texinfo)
510 ("gettext" ,gettext-minimal)
511 ,@(package-native-inputs guile-2.2))))))
be3feafe 512
c44899a2
LC
513\f
514;;;
515;;; Extensions.
516;;;
517
84af1e74 518(define-public guile-json-1
6050a1fb
CR
519 (package
520 (name "guile-json")
327ebd55 521 (version "1.3.2")
f52ef55e 522 (home-page "https://github.com/aconchillo/guile-json")
6050a1fb 523 (source (origin
ffc72ec6 524 (method url-fetch)
28123c01
LC
525 (uri (string-append "mirror://savannah/guile-json/guile-json-"
526 version ".tar.gz"))
ffc72ec6
LC
527 (sha256
528 (base32
327ebd55 529 "0m6yzb169r6iz56k3nkncjaiijwi4p0x9ijn1p5ax3s77jklxy9k"))))
6050a1fb 530 (build-system gnu-build-system)
327ebd55
EF
531 (arguments
532 `(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
6efccabe 533 (native-inputs `(("pkg-config" ,pkg-config)
f52ef55e
LC
534 ("guile" ,guile-2.2)))
535 (inputs `(("guile" ,guile-2.2)))
6050a1fb
CR
536 (synopsis "JSON module for Guile")
537 (description
0f31d4f0
LC
538 "Guile-JSON supports parsing and building JSON documents according to the
539specification. These are the main features:
540
541@itemize
542@item Strictly complies to @uref{http://json.org, specification}.
543@item Build JSON documents programmatically via macros.
544@item Unicode support for strings.
545@item Allows JSON pretty printing.
546@end itemize\n")
15214828
LC
547
548 ;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+).
549 (license license:gpl3+)))
6050a1fb 550
84af1e74
LC
551;; Deprecate the 'guile-json' alias to force the use 'guile-json-1' or
552;; 'guile-json-3'. In the future, we may reuse 'guile-json' as an alias for
553;; 'guile-json-3'.
9b65dea8 554(define-deprecated guile-json guile-json-1)
7f81cce3 555(export guile-json)
584a3ca3 556
2252f087 557(define-public guile2.0-json
84af1e74 558 (package-for-guile-2.0 guile-json-1))
947a5d47 559
152d4076
LC
560(define-public guile-json-3
561 ;; This version is incompatible with 1.x; see the 'NEWS' file.
562 (package
84af1e74 563 (inherit guile-json-1)
152d4076 564 (name "guile-json")
5d9e2187 565 (version "3.5.0")
152d4076
LC
566 (source (origin
567 (method url-fetch)
28123c01
LC
568 (uri (string-append "mirror://savannah/guile-json/guile-json-"
569 version ".tar.gz"))
152d4076
LC
570 (sha256
571 (base32
5d9e2187
MB
572 "0nj0684qgh6ppkbdyxqfyjwsv2qbyairxpi8fzrhsi3xnc7jn4im"))))
573 (native-inputs `(("pkg-config" ,pkg-config)
b6bee63b 574 ("guile" ,guile-3.0)))
5d9e2187 575 (inputs `(("guile" ,guile-3.0)))))
b6bee63b 576
89a99d53 577(define-public guile3.0-json
b6bee63b 578 (deprecated-package "guile3.0-json" guile-json-3))
89a99d53 579
793a48ed
LC
580(define-public guile-json-4
581 (package
582 (inherit guile-json-3)
583 (name "guile-json")
fc5f9de5 584 (version "4.5.2")
793a48ed
LC
585 (source (origin
586 (method url-fetch)
587 (uri (string-append "mirror://savannah/guile-json/guile-json-"
588 version ".tar.gz"))
589 (sha256
590 (base32
fc5f9de5 591 "0cqr0ljqmzlc2bwrapcsmcgxg147h66mcxf23824ri5i6vn4dc0s"))))))
793a48ed
LC
592
593(define-public guile2.2-json
594 (package-for-guile-2.2 guile-json-4))
595
93e7199b
CAW
596;; There are two guile-gdbm packages, one using the FFI and one with
597;; direct C bindings, hence the verbose name.
598
599(define-public guile-gdbm-ffi
600 (package
601 (name "guile-gdbm-ffi")
602 (version "20120209.fa1d5b6")
603 (source (origin
604 (method git-fetch)
605 (uri (git-reference
b0e7b699 606 (url "https://github.com/ijp/guile-gdbm")
93e7199b 607 (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246")))
821f4dc2 608 (file-name (string-append name "-" version "-checkout"))
977d8666
LC
609 (patches (search-patches
610 "guile-gdbm-ffi-support-gdbm-1.14.patch"))
93e7199b
CAW
611 (sha256
612 (base32
613 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
977d8666
LC
614 (build-system guile-build-system)
615 (arguments
616 '(#:phases (modify-phases %standard-phases
617 (add-after 'unpack 'move-examples
618 (lambda* (#:key outputs #:allow-other-keys)
619 ;; Move examples where they belong.
620 (let* ((out (assoc-ref outputs "out"))
621 (doc (string-append out "/share/doc/"
622 (strip-store-file-name out)
623 "/examples")))
624 (copy-recursively "examples" doc)
625 (delete-file-recursively "examples")
626 #t)))
627 (add-after 'unpack 'set-libgdbm-file-name
628 (lambda* (#:key inputs #:allow-other-keys)
629 (substitute* "gdbm.scm"
630 (("\\(dynamic-link \"libgdbm\"\\)")
631 (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
632 (assoc-ref inputs "gdbm"))))
633 #t)))))
634 (native-inputs
b6bee63b 635 `(("guile" ,guile-3.0)))
56f31a9f 636 (inputs
56f31a9f 637 `(("gdbm" ,gdbm)))
93e7199b
CAW
638 (home-page "https://github.com/ijp/guile-gdbm")
639 (synopsis "Guile bindings to the GDBM library via Guile's FFI")
640 (description
641 "Guile bindings to the GDBM key-value storage system, using
642Guile's foreign function interface.")
71e0f217 643 (license license:gpl3+)))
93e7199b 644
5bd3a841
LC
645(define-public guile2.0-gdbm-ffi
646 (package-for-guile-2.0 guile-gdbm-ffi))
647
b6bee63b
LC
648(define-public guile2.2-gdbm-ffi
649 (package-for-guile-2.2 guile-gdbm-ffi))
650
651(define-deprecated-guile3.0-package guile3.0-gdbm-ffi)
93e7199b 652
e8ac1f8f 653(define-public guile-sqlite3
319e26e4
LC
654 (package
655 (name "guile-sqlite3")
1eec6b0c 656 (version "0.1.2")
3527f600 657 (home-page "https://notabug.org/guile-sqlite3/guile-sqlite3.git")
319e26e4
LC
658 (source (origin
659 (method git-fetch)
660 (uri (git-reference
661 (url home-page)
662 (commit (string-append "v" version))))
663 (sha256
664 (base32
1eec6b0c 665 "1nryy9j3bk34i0alkmc9bmqsm0ayz92k1cdf752mvhyjjn8nr928"))
29e4d3ea 666 (file-name (string-append name "-" version "-checkout"))))
319e26e4
LC
667 (build-system gnu-build-system)
668 (native-inputs
669 `(("autoconf" ,autoconf)
670 ("automake" ,automake)
02ed227f 671 ("guile" ,guile-3.0)
319e26e4
LC
672 ("pkg-config" ,pkg-config)))
673 (inputs
b6bee63b 674 `(("guile" ,guile-3.0)
319e26e4
LC
675 ("sqlite" ,sqlite)))
676 (synopsis "Access SQLite databases from Guile")
677 (description
678 "This package provides Guile bindings to the SQLite database system.")
679 (license license:gpl3+)))
e8ac1f8f 680
c8e3651a
EB
681(define-public guile2.0-sqlite3
682 (package-for-guile-2.0 guile-sqlite3))
683
b6bee63b
LC
684(define-public guile2.2-sqlite3
685 (package-for-guile-2.2 guile-sqlite3))
686
687(define-deprecated-guile3.0-package guile3.0-sqlite3)
d15e4b1d 688
3b5783fc
AB
689(define-public guile-bytestructures
690 (package
691 (name "guile-bytestructures")
0a1da465 692 (version "1.0.9")
16e42db0 693 (home-page "https://github.com/TaylanUB/scheme-bytestructures")
3b5783fc 694 (source (origin
16e42db0
MO
695 (method git-fetch)
696 (uri (git-reference
697 (url home-page)
0a1da465 698 (commit version)))
43476625 699 (file-name (git-file-name name version))
3b5783fc
AB
700 (sha256
701 (base32
0a1da465 702 "0r59sqrvwbsknw21bf44bppi6wdhd2rl2v5dw9i2vij3v8w7pgkm"))))
4f85f7f7 703 (build-system gnu-build-system)
9a78e181 704 (arguments
7ed9c312
LC
705 `(#:make-flags '("GUILE_AUTO_COMPILE=0") ;to prevent guild warnings
706
707 #:phases (modify-phases %standard-phases
708 (add-after 'install 'install-doc
709 (lambda* (#:key outputs #:allow-other-keys)
710 (let* ((out (assoc-ref outputs "out"))
711 (package ,(package-full-name this-package "-"))
712 (doc (string-append out "/share/doc/" package)))
713 (install-file "README.md" doc)
714 #t))))))
726ecfeb 715 (native-inputs
16e42db0
MO
716 `(("autoconf" ,autoconf)
717 ("automake" ,automake)
b9a9c8ef 718 ("pkg-config" ,pkg-config)
b6bee63b 719 ("guile" ,guile-3.0)))
3b5783fc 720 (inputs
b6bee63b 721 `(("guile" ,guile-3.0)))
3b5783fc
AB
722 (synopsis "Structured access to bytevector contents for Guile")
723 (description
724 "Guile bytestructures offers a system imitating the type system
725of the C programming language, to be used on bytevectors. C's type
726system works on raw memory, and Guile works on bytevectors which are
727an abstraction over raw memory. It's also more powerful than the C
728type system, elevating types to first-class status.")
abba4073
LC
729 (license license:gpl3+)
730 (properties '((upstream-name . "bytestructures")))))
3b5783fc 731
726ecfeb
LC
732(define-public guile2.0-bytestructures
733 (package-for-guile-2.0 guile-bytestructures))
734
b6bee63b
LC
735(define-public guile2.2-bytestructures
736 (package-for-guile-2.2 guile-bytestructures))
737
738(define-deprecated-guile3.0-package guile3.0-bytestructures)
89a99d53 739
bd233722 740(define-public guile-git
e85035c9
LC
741 (package
742 (name "guile-git")
fbac2572 743 (version "0.4.0")
e85035c9
LC
744 (home-page "https://gitlab.com/guile-git/guile-git.git")
745 (source (origin
25623647
MB
746 (method url-fetch)
747 (uri (string-append "https://gitlab.com/guile-git/guile-git/uploads/"
fbac2572 748 "2600bb0dfdfb00bfbe46811dccad51d8/guile-git-"
25623647 749 version ".tar.gz"))
e85035c9
LC
750 (sha256
751 (base32
fbac2572 752 "1kxyg9x2aa1pg69cl48wysq0pbxvwfahy1xpl5ab6p8babhf7kic"))))
e85035c9 753 (build-system gnu-build-system)
3d867fea
EF
754 (arguments
755 `(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
e85035c9 756 (native-inputs
96a9675b 757 `(("pkg-config" ,pkg-config)
b6bee63b 758 ("guile" ,guile-3.0)
96a9675b 759 ("guile-bytestructures" ,guile-bytestructures)))
e85035c9 760 (inputs
b6bee63b 761 `(("guile" ,guile-3.0)
e85035c9
LC
762 ("libgit2" ,libgit2)))
763 (propagated-inputs
764 `(("guile-bytestructures" ,guile-bytestructures)))
765 (synopsis "Guile bindings for libgit2")
766 (description
767 "This package provides Guile bindings to libgit2, a library to
bd233722 768manipulate repositories of the Git version control system.")
e85035c9 769 (license license:gpl3+)))
c5793e7e 770
b6bee63b
LC
771(define-public guile2.2-git
772 (package-for-guile-2.2 guile-git))
01c11aeb 773
70bc6085 774(define-public guile2.0-git
2bd60ca1 775 (package-for-guile-2.0 guile-git))
70bc6085 776
b6bee63b
LC
777(define-deprecated-guile3.0-package guile3.0-git)
778
e5758aeb
MO
779(define-public guile-zlib
780 (package
781 (name "guile-zlib")
782 (version "0.0.1")
44241391
MO
783 (source
784 (origin
4aa7dfe4
MO
785 ;; XXX: Do not use "git-fetch" method here that would create and
786 ;; endless inclusion loop, because this package is used as an extension
787 ;; in the same method.
44241391
MO
788 (method url-fetch)
789 (uri
790 (string-append "https://notabug.org/guile-zlib/guile-zlib/archive/"
791 version ".tar.gz"))
b4d6e378 792 (file-name (string-append name "-" version ".tar.gz"))
44241391
MO
793 (sha256
794 (base32
795 "1caz6cbl6sg5567nk68z88rshp0m26zmb0a9ry1jkc1ivpk0n47i"))))
e5758aeb
MO
796 (build-system gnu-build-system)
797 (arguments
798 '(#:make-flags
799 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
800 (native-inputs
801 `(("autoconf" ,autoconf)
802 ("automake" ,automake)
65777dce
MO
803 ("pkg-config" ,pkg-config)
804 ,@(if (%current-target-system)
805 `(("guile" ,guile-3.0)) ;for 'guild compile' and 'guile-3.0.pc'
806 '())))
e5758aeb
MO
807 (inputs
808 `(("guile" ,guile-3.0)
809 ("zlib" ,zlib)))
810 (synopsis "Guile bindings to zlib")
811 (description
812 "This package provides Guile bindings for zlib, a lossless
813data-compression library. The bindings are written in pure Scheme by using
814Guile's foreign function interface.")
815 (home-page "https://notabug.org/guile-zlib/guile-zlib")
816 (license license:gpl3+)))
a8307a17 817
e5758aeb
MO
818(define-public guile-lzlib
819 (package
820 (name "guile-lzlib")
af56f60e 821 (version "0.0.2")
69361e88
MO
822 (source
823 (origin
824 (method url-fetch)
825 (uri
826 (string-append "https://notabug.org/guile-lzlib/guile-lzlib/archive/"
827 version ".tar.gz"))
90748666 828 (file-name (string-append name "-" version ".tar.gz"))
69361e88
MO
829 (sha256
830 (base32
af56f60e 831 "11sggvncyx08ssp1s5xii4d6nskh1qwqihnbpzzvkrs7sivxn8w6"))))
e5758aeb
MO
832 (build-system gnu-build-system)
833 (arguments
834 '(#:make-flags
835 '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
836 (native-inputs
837 `(("autoconf" ,autoconf)
838 ("automake" ,automake)
0c50d723
MO
839 ("pkg-config" ,pkg-config)
840 ,@(if (%current-target-system)
841 `(("guile" ,guile-3.0)) ;for 'guild compile' and 'guile-3.0.pc'
842 '())))
e5758aeb
MO
843 (inputs
844 `(("guile" ,guile-3.0)
845 ("lzlib" ,lzlib)))
846 (synopsis "Guile bindings to lzlib")
847 (description
848 "This package provides Guile bindings for lzlib, a C library for
849in-memory LZMA compression and decompression. The bindings are written in
850pure Scheme by using Guile's foreign function interface.")
851 (home-page "https://notabug.org/guile-lzlib/guile-lzlib")
852 (license license:gpl3+)))
853
32568f5b
LC
854(define-public guile-zstd
855 (package
856 (name "guile-zstd")
857 (version "0.1.1")
858 (home-page "https://notabug.org/guile-zstd/guile-zstd")
859 (source (origin
860 (method git-fetch)
861 (uri (git-reference (url home-page)
862 (commit (string-append "v" version))))
863 (file-name (git-file-name name version))
864 (sha256
865 (base32
866 "1c8l7829b5yx8wdc0mrhzjfwb6h9hb7cd8dfxcr71a7vlsi86310"))))
867 (build-system gnu-build-system)
868 (native-inputs
869 `(("autoconf" ,autoconf)
870 ("automake" ,automake)
871 ("pkg-config" ,pkg-config)
872 ("guile" ,guile-3.0)))
873 (inputs
874 `(("zstd" ,zstd "lib")
875 ("guile" ,guile-3.0)))
876 (synopsis "GNU Guile bindings to the zstd compression library")
877 (description
878 "This package provides a GNU Guile interface to the zstd (``zstandard'')
879compression library.")
880 (license license:gpl3+)))
881
e5758aeb 882;;; guile.scm ends here