gnu: libdvdcss: Update to 1.4.3.
[jackhill/guix/guix.git] / gnu / packages / scheme.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013, 2014, 2015, 2016, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
4 ;;; Copyright © 2015, 2016 Federico Beffa <beffa@fbengineering.ch>
5 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
6 ;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
7 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
8 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
9 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
10 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
11 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
12 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
13 ;;; Copyright © 2018 Gabriel Hondet <gabrielhondet@gmail.com>
14 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
15 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
16 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
17 ;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
18 ;;;
19 ;;; This file is part of GNU Guix.
20 ;;;
21 ;;; GNU Guix is free software; you can redistribute it and/or modify it
22 ;;; under the terms of the GNU General Public License as published by
23 ;;; the Free Software Foundation; either version 3 of the License, or (at
24 ;;; your option) any later version.
25 ;;;
26 ;;; GNU Guix is distributed in the hope that it will be useful, but
27 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
28 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 ;;; GNU General Public License for more details.
30 ;;;
31 ;;; You should have received a copy of the GNU General Public License
32 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
33
34 (define-module (gnu packages scheme)
35 #:use-module (gnu packages)
36 #:use-module ((guix licenses)
37 #:select (gpl2+ lgpl2.0+ lgpl2.1 lgpl2.1+ lgpl3+ asl2.0 bsd-3
38 cc-by-sa4.0 non-copyleft expat))
39 #:use-module (guix packages)
40 #:use-module (guix download)
41 #:use-module (guix git-download)
42 #:use-module (guix utils)
43 #:use-module (guix build-system gnu)
44 #:use-module (guix build-system trivial)
45 #:use-module (gnu packages autotools)
46 #:use-module (gnu packages bdw-gc)
47 #:use-module (gnu packages bash)
48 #:use-module (gnu packages compression)
49 #:use-module (gnu packages databases)
50 #:use-module (gnu packages libevent)
51 #:use-module (gnu packages libunistring)
52 #:use-module (gnu packages m4)
53 #:use-module (gnu packages multiprecision)
54 #:use-module (gnu packages ncurses)
55 #:use-module (gnu packages pcre)
56 #:use-module (gnu packages emacs)
57 #:use-module (gnu packages ghostscript)
58 #:use-module (gnu packages netpbm)
59 #:use-module (gnu packages texinfo)
60 #:use-module (gnu packages tex)
61 #:use-module (gnu packages base)
62 #:use-module (gnu packages compression)
63 #:use-module (gnu packages pkg-config)
64 #:use-module (gnu packages avahi)
65 #:use-module (gnu packages libphidget)
66 #:use-module (gnu packages gcc)
67 #:use-module (gnu packages glib)
68 #:use-module (gnu packages gtk)
69 #:use-module (gnu packages libffi)
70 #:use-module (gnu packages fontutils)
71 #:use-module (gnu packages image)
72 #:use-module (gnu packages xorg)
73 #:use-module (gnu packages sqlite)
74 #:use-module (gnu packages tls)
75 #:use-module (gnu packages gl)
76 #:use-module (gnu packages libedit)
77 #:use-module (gnu packages linux)
78 #:use-module (srfi srfi-1)
79 #:use-module (ice-9 match))
80
81 (define (mit-scheme-source-directory system version)
82 (string-append "mit-scheme-"
83 (if (or (string-prefix? "x86_64" system)
84 (string-prefix? "i686" system))
85 ""
86 "c-")
87 version))
88
89 (define-public mit-scheme
90 (package
91 (name "mit-scheme")
92 (version "10.1.3")
93 (source #f) ; see below
94 (outputs '("out" "doc"))
95 (build-system gnu-build-system)
96 (arguments
97 `(#:modules ((guix build gnu-build-system)
98 (guix build utils)
99 (srfi srfi-1))
100 #:phases
101 (modify-phases %standard-phases
102 (replace 'unpack
103 (lambda* (#:key inputs #:allow-other-keys)
104 (invoke "tar" "xzvf"
105 (assoc-ref inputs "source"))
106 (chdir ,(mit-scheme-source-directory (%current-system)
107 version))
108 ;; Delete these dangling symlinks since they break
109 ;; `patch-shebangs'.
110 (for-each delete-file
111 (find-files "src/compiler" "^make\\."))
112 (chdir "src")
113 #t))
114 (add-after 'unpack 'patch-/bin/sh
115 (lambda _
116 (setenv "CONFIG_SHELL" (which "sh"))
117 (substitute* '("../tests/ffi/autogen.sh"
118 "../tests/ffi/autobuild.sh"
119 "../tests/ffi/test-ffi.sh"
120 "../tests/runtime/test-process.scm"
121 "runtime/unxprm.scm")
122 (("/bin/sh") (which "sh"))
123 (("\\./autogen\\.sh")
124 (string-append (which "sh") " autogen.sh"))
125 (("\\./configure")
126 (string-append (which "sh") " configure")))
127 #t))
128 ;; FIXME: the texlive-union insists on regenerating fonts. It stores
129 ;; them in HOME, so it needs to be writeable.
130 (add-before 'build 'set-HOME
131 (lambda _ (setenv "HOME" "/tmp") #t))
132 (replace 'build
133 (lambda* (#:key system outputs #:allow-other-keys)
134 (let ((out (assoc-ref outputs "out")))
135 (if (or (string-prefix? "x86_64" system)
136 (string-prefix? "i686" system))
137 (invoke "make" "compile-microcode")
138 (invoke "./etc/make-liarc.sh"
139 (string-append "--prefix=" out)))
140 #t)))
141 (add-after 'configure 'configure-doc
142 (lambda* (#:key outputs inputs #:allow-other-keys)
143 (with-directory-excursion "../doc"
144 (let* ((out (assoc-ref outputs "out"))
145 (bash (assoc-ref inputs "bash"))
146 (bin/sh (string-append bash "/bin/sh")))
147 (invoke bin/sh "./configure"
148 (string-append "--prefix=" out)
149 (string-append "SHELL=" bin/sh))
150 #t))))
151 (add-after 'build 'build-doc
152 (lambda* _
153 (with-directory-excursion "../doc"
154 (invoke "make"))
155 #t))
156 (add-after 'install 'install-doc
157 (lambda* (#:key outputs #:allow-other-keys)
158 (let* ((out (assoc-ref outputs "out"))
159 (doc (assoc-ref outputs "doc"))
160 (old-doc-dir (string-append out "/share/doc"))
161 (new-doc/mit-scheme-dir
162 (string-append doc "/share/doc/" ,name "-" ,version)))
163 (with-directory-excursion "../doc"
164 (for-each (lambda (target)
165 (invoke "make" target))
166 '("install-info-gz" "install-man"
167 "install-html" "install-pdf")))
168 (mkdir-p new-doc/mit-scheme-dir)
169 (copy-recursively
170 (string-append old-doc-dir "/" ,name)
171 new-doc/mit-scheme-dir)
172 (delete-file-recursively old-doc-dir)
173 #t))))))
174 (native-inputs
175 `(;; Autoconf, Automake, and Libtool are necessary for the FFI tests.
176 ("autoconf" ,autoconf)
177 ("automake" ,automake)
178 ("libtool" ,libtool)
179 ("texlive" ,(texlive-union (list texlive-tex-texinfo)))
180 ("texinfo" ,texinfo)
181 ("m4" ,m4)))
182 (inputs
183 `(("libx11" ,libx11)
184
185 ("source"
186
187 ;; MIT/GNU Scheme is not bootstrappable, so it's recommended to
188 ;; compile from the architecture-specific tarballs, which contain
189 ;; pre-built binaries. It leads to more efficient code than when
190 ;; building the tarball that contains generated C code instead of
191 ;; those binaries.
192 ,(origin
193 (method url-fetch)
194 (uri (string-append "mirror://gnu/mit-scheme/stable.pkg/"
195 version "/mit-scheme-"
196 (match (%current-system)
197 ("x86_64-linux"
198 (string-append version "-x86-64"))
199 ("i686-linux"
200 (string-append version "-i386"))
201 (_
202 (string-append "c-" version)))
203 ".tar.gz"))
204 (sha256
205 (match (%current-system)
206 ("x86_64-linux"
207 (base32
208 "03m7cc035w3avs91j2pcz9f15ssgvgp3rm045d1vbydqrkzfyw8k"))
209 ("i686-linux"
210 (base32
211 "05sjyz90xxfnmi87qv8x0yx0fcallnzl1dciygdafp317pn489is"))
212 (_
213 (base32
214 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))))))))
215
216 ;; Fails to build on MIPS, see <http://bugs.gnu.org/18221>.
217 ;; Also, the portable C version of MIT/GNU Scheme did not work in time for
218 ;; release in version 10.1.
219 (supported-systems '("x86_64-linux" "i686-linux"))
220
221 (home-page "https://www.gnu.org/software/mit-scheme/")
222 (synopsis "A Scheme implementation with integrated editor and debugger")
223 (description
224 "GNU/MIT Scheme is an implementation of the Scheme programming
225 language. It provides an interpreter, a compiler and a debugger. It also
226 features an integrated Emacs-like editor and a large runtime library.")
227 (license gpl2+)
228 (properties '((ftp-directory . "/gnu/mit-scheme/stable.pkg")))))
229
230 (define-public bigloo
231 ;; Upstream modifies source tarballs in place, making significant changes
232 ;; long after the initial publication: <https://bugs.gnu.org/33525>.
233 (let ((upstream-version "4.3f"))
234 (package
235 (name "bigloo")
236 (version "4.3f")
237 (source (origin
238 (method url-fetch)
239 (uri (string-append "ftp://ftp-sop.inria.fr/indes/fp/Bigloo/bigloo"
240 upstream-version ".tar.gz"))
241 (sha256
242 (base32
243 "09whj8z91qbihk59dw2yb2ccbx9nk1c4l65j62pfs1pz822cpyh9"))
244 ;; Remove bundled libraries.
245 (modules '((guix build utils)))
246 (snippet
247 '(begin
248 (for-each delete-file-recursively
249 '("gc" "gmp" "libuv"))
250 #t))))
251 (build-system gnu-build-system)
252 (arguments
253 `(#:test-target "test"
254 #:phases
255 (modify-phases %standard-phases
256 (replace 'configure
257 (lambda* (#:key inputs outputs #:allow-other-keys)
258
259 (substitute* "configure"
260 (("^shell=.*$")
261 (string-append "shell=" (which "bash") "\n"))
262 (("`date`") "0"))
263 (substitute* "autoconf/runtest.in"
264 ((", @DATE@") ""))
265 (substitute* "autoconf/osversion"
266 (("^version.*$") "version=\"\"\n"))
267 (substitute* "comptime/Makefile"
268 (("\\$\\(LDCOMPLIBS\\)")
269 "$(LDCOMPLIBS) $(LDFLAGS)"))
270
271 ;; The `configure' script doesn't understand options
272 ;; of those of Autoconf.
273 (let ((out (assoc-ref outputs "out")))
274 (invoke "./configure"
275 (string-append "--prefix=" out)
276 ; use system libraries
277 "--customgc=no"
278 "--customunistring=no"
279 "--customlibuv=no"
280 (string-append"--mv=" (which "mv"))
281 (string-append "--rm=" (which "rm"))
282 "--cflags=-fPIC"
283 (string-append "--ldflags=-Wl,-rpath="
284 (assoc-ref outputs "out")
285 "/lib/bigloo/" ,upstream-version)
286 (string-append "--lispdir=" out
287 "/share/emacs/site-lisp")
288 "--sharedbde=yes"
289 "--sharedcompiler=yes"
290 "--disable-patch"))))
291 (add-after 'install 'install-emacs-modes
292 (lambda* (#:key outputs #:allow-other-keys)
293 (let* ((out (assoc-ref outputs "out"))
294 (dir (string-append out "/share/emacs/site-lisp")))
295 (invoke "make" "-C" "bmacs" "all" "install"
296 (string-append "EMACSBRAND=emacs25")
297 (string-append "EMACSDIR=" dir))))))))
298 (inputs
299 `(("emacs" ,emacs) ;UDE needs the X version of Emacs
300 ("libgc" ,libgc)
301 ("libunistring" ,libunistring)
302 ("libuv" ,libuv)
303 ("openssl" ,openssl)
304 ("sqlite" ,sqlite)
305
306 ;; Optional APIs for which Bigloo has bindings.
307 ("avahi" ,avahi)
308 ("libphidget" ,libphidget)
309 ("pcre" ,pcre)))
310 (native-inputs
311 `(("pkg-config" ,pkg-config)))
312 (propagated-inputs
313 `(("gmp" ,gmp))) ; bigloo.h refers to gmp.h
314 (home-page "https://www-sop.inria.fr/indes/fp/Bigloo/")
315 (synopsis "Efficient Scheme compiler")
316 (description
317 "Bigloo is a Scheme implementation devoted to one goal: enabling Scheme
318 based programming style where C(++) is usually required. Bigloo attempts to
319 make Scheme practical by offering features usually presented by traditional
320 programming languages but not offered by Scheme and functional programming.
321 Bigloo compiles Scheme modules. It delivers small and fast stand alone binary
322 executables. Bigloo enables full connections between Scheme and C programs
323 and between Scheme and Java programs.")
324 (license gpl2+))))
325
326 (define-public hop
327 (package
328 (name "hop")
329 (version "3.2.0-pre1")
330 (source (origin
331 (method url-fetch)
332 (uri (string-append "ftp://ftp-sop.inria.fr/indes/fp/Hop/hop-"
333 version ".tar.gz"))
334 (sha256
335 (base32
336 "0jf418d0s9imv98s6qrpjxr1mdaxr37knh5qyfl5y4a9cc41mlg5"))))
337 (build-system gnu-build-system)
338 (arguments
339 `(#:test-target "test"
340 #:make-flags '("BIGLOO=bigloo")
341 #:parallel-build? #f
342 #:phases
343 (modify-phases %standard-phases
344 (replace 'configure
345 (lambda* (#:key inputs outputs #:allow-other-keys)
346 (let ((out (assoc-ref outputs "out")))
347 (substitute* '("tools/Makefile"
348 "test/hopjs/TEST.in")
349 (("/bin/rm") (which "rm")))
350 (invoke "./configure"
351 (string-append "--prefix=" out)
352 "--hostcc=gcc"
353 (string-append "--blflags="
354 ;; user flags completely override useful
355 ;; default flags, so repeat them here.
356 "-copt \\$(CPICFLAGS) "
357 "-L \\$(BUILDLIBDIR) "
358 "-ldopt -Wl,-rpath," out "/lib"))))))))
359 (inputs `(("avahi" ,avahi)
360 ("bigloo" ,bigloo)
361 ("libgc" ,libgc)
362 ("libunistring" ,libunistring)
363 ("libuv" ,libuv)
364 ("pcre" ,pcre)
365 ("sqlite" ,sqlite)
366 ("which" ,which)))
367 (home-page "http://hop.inria.fr/")
368 (synopsis "Multi-tier programming language for the Web 2.0")
369 (description
370 "HOP is a multi-tier programming language for the Web 2.0 and the
371 so-called diffuse Web. It is designed for programming interactive web
372 applications in many fields such as multimedia (web galleries, music players,
373 ...), ubiquitous and house automation (SmartPhones, personal appliance),
374 mashups, office (web agendas, mail clients, ...), etc.")
375 (license gpl2+)))
376
377 (define-public scheme48
378 (package
379 (name "scheme48")
380 (version "1.9.2")
381 (source (origin
382 (method url-fetch)
383 (uri (string-append "http://s48.org/" version
384 "/scheme48-" version ".tgz"))
385 (sha256
386 (base32
387 "1x4xfm3lyz2piqcw1h01vbs1iq89zq7wrsfjgh3fxnlm1slj2jcw"))
388 (patches (search-patches "scheme48-tests.patch"))))
389 (build-system gnu-build-system)
390 (home-page "http://s48.org/")
391 (synopsis "Scheme implementation using a bytecode interpreter")
392 (description
393 "Scheme 48 is an implementation of Scheme based on a byte-code
394 interpreter and is designed to be used as a testbed for experiments in
395 implementation techniques and as an expository tool.")
396
397 ;; Most files are BSD-3; see COPYING for the few exceptions.
398 (license bsd-3)))
399
400 (define-public racket
401 (package
402 (name "racket")
403 (version "8.0") ; note: remember to also update racket-minimal!
404 (source (origin
405 (method url-fetch)
406 (uri (list (string-append "https://mirror.racket-lang.org/installers/"
407 version "/racket-src.tgz")
408 ;; this mirror seems to have broken HTTPS:
409 (string-append
410 "http://mirror.informatik.uni-tuebingen.de/mirror/racket/"
411 version "/racket-src.tgz")))
412 (sha256
413 (base32
414 "047wpjblfzmf1msz7snrp2c2h0zxyzlmbsqr9bwsyvz3frcg0888"))
415 (patches (search-patches
416 "racket-sh-via-rktio.patch"
417 ;; TODO: If we're no longer patching Racket source
418 ;; files with store paths, we may also fix the
419 ;; issue that necessitated the following patch:
420 "racket-store-checksum-override.patch"))))
421 (build-system gnu-build-system)
422 (arguments
423 `(#:configure-flags
424 `(,(string-append "CPPFLAGS=-DGUIX_RKTIO_PATCH_BIN_SH="
425 (assoc-ref %build-inputs "sh")
426 "/bin/sh")
427 "--enable-libz"
428 "--enable-liblz4")
429 #:modules
430 ((guix build gnu-build-system)
431 (guix build utils)
432 (srfi srfi-1))
433 #:phases
434 (modify-phases %standard-phases
435 (add-after 'unpack 'patch-chez-configure
436 (lambda* (#:key inputs outputs #:allow-other-keys)
437 (substitute* "src/cs/c/Makefile.in"
438 (("/bin/sh") (which "sh")))
439 ;; TODO: Racket CS uses a fork of Chez Scheme.
440 ;; Most of this is copy-pasted from the "chez.scm",
441 ;; but maybe there's a way to reuse more directly.
442 (with-directory-excursion "src/ChezScheme"
443 (substitute* (find-files "mats" "Mf-.*")
444 (("^[[:space:]]+(cc ) *") "\tgcc "))
445 (substitute*
446 (find-files "." (string-append
447 "("
448 "Mf-[a-zA-Z0-9.]+"
449 "|Makefile[a-zA-Z0-9.]*"
450 "|checkin"
451 "|stex\\.stex"
452 "|newrelease"
453 "|workarea"
454 "|unix\\.ms"
455 "|^6\\.ms"
456 ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read
457 ")"))
458 (("/bin/rm") (which "rm"))
459 (("/bin/ln") (which "ln"))
460 (("/bin/cp") (which "cp"))
461 (("/bin/echo") (which "echo")))
462 (substitute* "makefiles/installsh"
463 (("/bin/true") (which "true"))))
464 #t))
465 (add-before 'configure 'pre-configure-minimal
466 (lambda* (#:key inputs #:allow-other-keys)
467 (chdir "src")
468 #t))
469 (add-after 'build 'patch-config.rktd-lib-search-dirs
470 (lambda* (#:key inputs outputs #:allow-other-keys)
471 ;; We do this between the `build` and `install` phases
472 ;; so that we have racket to read and write the hash table,
473 ;; but it comes before `raco setup`, when foreign libraries
474 ;; are needed to build the documentation.
475 (define out (assoc-ref outputs "out"))
476 (apply invoke
477 "./cs/c/racketcs"
478 "-e"
479 ,(format #f
480 "~s"
481 '(let* ((args
482 (vector->list
483 (current-command-line-arguments)))
484 (file (car args))
485 (extra-lib-search-dirs (cdr args)))
486 (write-to-file
487 (hash-update
488 (file->value file)
489 'lib-search-dirs
490 (lambda (dirs)
491 (append dirs extra-lib-search-dirs))
492 null)
493 #:exists 'truncate/replace
494 file)))
495 "--"
496 "../etc/config.rktd"
497 (filter-map (lambda (lib)
498 (cond
499 ((assoc-ref inputs lib)
500 => (lambda (pth)
501 (string-append pth "/lib")))
502 (else
503 #f)))
504 '("cairo"
505 "fontconfig"
506 "glib"
507 "glu"
508 "gmp"
509 "gtk+"
510 "libjpeg"
511 "libpng"
512 "libx11"
513 "mesa"
514 "mpfr"
515 "openssl"
516 "pango"
517 "sqlite"
518 "unixodbc"
519 "libedit")))
520 #t)))
521 ;; XXX: how to run them?
522 #:tests? #f))
523 (inputs
524 `(;; sqlite and libraries for `racket/draw' are needed to build the doc.
525 ("sh" ,bash-minimal)
526 ("zlib" ,zlib)
527 ("zlib:static" ,zlib "static")
528 ("lz4" ,lz4)
529 ("lz4:static" ,lz4 "static")
530 ("cairo" ,cairo)
531 ("fontconfig" ,fontconfig)
532 ("glib" ,glib)
533 ("glu" ,glu)
534 ("gmp" ,gmp)
535 ("gtk+" ,gtk+) ; propagates gdk-pixbuf+svg
536 ("libjpeg" ,libjpeg-turbo)
537 ("libpng" ,libpng)
538 ("libx11" ,libx11)
539 ("mesa" ,mesa)
540 ("mpfr" ,mpfr)
541 ("openssl" ,openssl)
542 ("pango" ,pango)
543 ("sqlite" ,sqlite)
544 ("unixodbc" ,unixodbc)
545 ("libedit" ,libedit)))
546 (home-page "https://racket-lang.org")
547 (synopsis "Implementation of Scheme and related languages")
548 (description
549 "Racket is a general-purpose programming language in the Scheme family,
550 with a large set of libraries and a compiler based on Chez Scheme. Racket is
551 also a platform for language-oriented programming, from small domain-specific
552 languages to complete language implementations.
553
554 The main Racket distribution comes with many bundled packages, including
555 the DrRacket IDE, libraries for GUI and web programming, and implementations
556 of languages such as Typed Racket, R5RS and R6RS Scheme, and Datalog.")
557 ;; https://download.racket-lang.org/license.html
558 (license (list lgpl3+ asl2.0 expat))))
559
560 (define-public racket-minimal
561 (package
562 (inherit racket)
563 (name "racket-minimal")
564 (version (package-version racket))
565 (source
566 (origin
567 (inherit (package-source racket))
568 (uri (list (string-append "https://mirror.racket-lang.org/installers/"
569 version "/racket-minimal-src.tgz")
570 ;; this mirror seems to have broken HTTPS:
571 (string-append
572 "http://mirror.informatik.uni-tuebingen.de/mirror/racket/"
573 version "/racket-minimal-src.tgz")))
574 (sha256 "0mwyffw4gcci8wmzxa3j28h03h0gsz55aard8qrk3lri8r2xyg21")))
575 (synopsis "Racket without bundled packages such as Dr. Racket")
576 (inputs
577 `(("openssl" ,openssl)
578 ("sqlite" ,sqlite)
579 ("sh" ,bash-minimal)
580 ("zlib" ,zlib)
581 ("zlib:static" ,zlib "static")
582 ("lz4" ,lz4)
583 ("lz4:static" ,lz4 "static")))
584 (description
585 "Racket is a general-purpose programming language in the Scheme family,
586 with a large set of libraries and a compiler based on Chez Scheme. Racket is
587 also a platform for language-oriented programming, from small domain-specific
588 languages to complete language implementations.
589
590 The ``minimal Racket'' distribution includes just enough of Racket for you to
591 use @command{raco pkg} to install more. Bundled packages, such as the
592 Dr. Racket IDE, are not included.")))
593
594 (define-public gambit-c
595 (package
596 (name "gambit-c")
597 (version "4.9.3")
598 (source
599 (origin
600 (method url-fetch)
601 (uri (string-append
602 "http://www.iro.umontreal.ca/~gambit/download/gambit/v"
603 (version-major+minor version) "/source/gambit-v"
604 (string-map (lambda (c) (if (char=? c #\.) #\_ c)) version)
605 ".tgz"))
606 (sha256
607 (base32 "1p6172vhcrlpjgia6hsks1w4fl8rdyjf9xjh14wxfkv7dnx8a5hk"))))
608 (build-system gnu-build-system)
609 (arguments
610 '(#:configure-flags
611 ;; According to the ./configure script, this makes the build slower and
612 ;; use >= 1 GB memory, but makes Gambit much faster.
613 '("--enable-single-host")))
614 (home-page "http://dynamo.iro.umontreal.ca/wiki/index.php/Main_Page")
615 (synopsis "Efficient Scheme interpreter and compiler")
616 (description
617 "Gambit consists of two main programs: gsi, the Gambit Scheme
618 interpreter, and gsc, the Gambit Scheme compiler. The interpreter contains
619 the complete execution and debugging environment. The compiler is the
620 interpreter extended with the capability of generating executable files. The
621 compiler can produce standalone executables or compiled modules which can be
622 loaded at run time. Interpreted code and compiled code can be freely
623 mixed.")
624 ;; Dual license.
625 (license (list lgpl2.1+ asl2.0))))
626
627 (define-public chibi-scheme
628 (package
629 (name "chibi-scheme")
630 (version "0.9")
631 (home-page "https://github.com/ashinn/chibi-scheme")
632 (source
633 (origin
634 (method git-fetch)
635 (uri (git-reference (url home-page) (commit version)))
636 (file-name (git-file-name name version))
637 (sha256
638 (base32
639 "1lnap41gl9vg82h557f4rlr69jgmd2gh0iqs6cxm77d39kv1scb8"))))
640 (build-system gnu-build-system)
641 (arguments
642 `(#:phases (modify-phases %standard-phases
643 (delete 'configure)
644 (add-before 'build 'set-cc
645 (lambda _
646 (setenv "CC" "gcc"))))
647 #:make-flags (let ((out (assoc-ref %outputs "out")))
648 (list (string-append "PREFIX=" out)
649 (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")))
650 #:test-target "test"))
651 (synopsis "Small embeddable Scheme implementation")
652 (description
653 "Chibi-Scheme is a very small library with no external dependencies
654 intended for use as an extension and scripting language in C programs. In
655 addition to support for lightweight VM-based threads, each VM itself runs in
656 an isolated heap allowing multiple VMs to run simultaneously in different OS
657 threads.")
658 (license bsd-3)))
659
660 (define-public sicp
661 (let ((commit "225c172f9b859902a64a3c5dd5e1f9ac1a7382de"))
662 (package
663 (name "sicp")
664 (version (string-append "20170703-1." (string-take commit 7)))
665 (source (origin
666 (method git-fetch)
667 (uri (git-reference
668 (url "https://github.com/sarabander/sicp")
669 (commit commit)))
670 (sha256
671 (base32
672 "0bhdrdc1mgdjdsg4jksq9z6x129f3346jbf3zir2a0dfmsj6m10n"))
673 (file-name (string-append name "-" version "-checkout"))))
674 (build-system trivial-build-system)
675 (native-inputs `(("gzip" ,gzip)
676 ("source" ,source)
677 ("texinfo" ,texinfo)))
678 (arguments
679 `(#:modules ((guix build utils))
680 #:builder
681 (begin
682 (use-modules (guix build utils)
683 (srfi srfi-26))
684 (let ((gzip (assoc-ref %build-inputs "gzip"))
685 (source (assoc-ref %build-inputs "source"))
686 (texinfo (assoc-ref %build-inputs "texinfo"))
687 (html-dir (string-append %output "/share/doc/" ,name "/html"))
688 (info-dir (string-append %output "/share/info")))
689 (copy-recursively (string-append source "/html") html-dir)
690 (setenv "PATH" (string-append gzip "/bin"
691 ":" texinfo "/bin"))
692 (mkdir-p info-dir)
693 (invoke "makeinfo" "--output"
694 (string-append info-dir "/sicp.info")
695 (string-append source "/sicp-pocket.texi"))
696 (for-each (cut invoke "gzip" "-9n" <>)
697 (find-files info-dir))
698 #t))))
699 (home-page "https://sarabander.github.io/sicp")
700 (synopsis "Structure and Interpretation of Computer Programs")
701 (description "Structure and Interpretation of Computer Programs (SICP) is
702 a textbook aiming to teach the principles of computer programming.
703
704 Using Scheme, a dialect of the Lisp programming language, the book explains
705 core computer science concepts such as abstraction in programming,
706 metalinguistic abstraction, recursion, interpreters, and modular programming.")
707 (license cc-by-sa4.0))))
708
709 (define-public scheme48-rx
710 (let* ((commit "dd9037f6f9ea01019390614f6b126b7dd293798d")
711 (revision "2"))
712 (package
713 (name "scheme48-rx")
714 (version (string-append "0.0.0-" revision "." (string-take commit 7)))
715 (source
716 (origin
717 (method git-fetch)
718 (uri (git-reference
719 (url "https://github.com/scheme/rx")
720 (commit commit)))
721 (sha256
722 (base32
723 "1bvriavxw5kf2izjbil3999vr983vkk2xplfpinafr86m40b2cci"))
724 (file-name (string-append name "-" version "-checkout"))))
725 (build-system trivial-build-system)
726 (arguments
727 `(#:modules ((guix build utils))
728 #:builder
729 (begin
730 (use-modules (guix build utils))
731 (let ((share (string-append %output
732 "/share/scheme48-"
733 ,(package-version scheme48)
734 "/rx")))
735 (chdir (assoc-ref %build-inputs "source"))
736 (mkdir-p share)
737 (copy-recursively "." share)
738 #t))))
739 (native-inputs
740 `(("source" ,source)
741 ("scheme48" ,scheme48)))
742 (home-page "https://github.com/scheme/rx/")
743 (synopsis "SRE String pattern-matching library for scheme48")
744 (description
745 "String pattern-matching library for scheme48 based on the SRE
746 regular-expression notation.")
747 (license bsd-3))))
748
749 (define-public slib
750 (package
751 (name "slib")
752 (version "3b5")
753 (source (origin
754 (method url-fetch)
755 (uri (string-append "http://groups.csail.mit.edu/mac/ftpdir/scm/slib-"
756 version ".zip"))
757 (sha256
758 (base32
759 "0q0p2d53p8qw2592yknzgy2y1p5a9k7ppjx0cfrbvk6242c4mdpq"))))
760 (build-system gnu-build-system)
761 (arguments
762 `(#:tests? #f ; There is no check target.
763 #:phases
764 (modify-phases %standard-phases
765 (add-after 'install 'remove-bin-share
766 (lambda* (#:key inputs outputs #:allow-other-keys)
767 (delete-file-recursively
768 (string-append (assoc-ref outputs "out") "/bin"))
769 #t))
770 (replace 'configure
771 (lambda* (#:key inputs outputs #:allow-other-keys)
772 (invoke "./configure"
773 (string-append "--prefix="
774 (assoc-ref outputs "out"))))))))
775 (native-inputs `(("unzip" ,unzip)
776 ("texinfo" ,texinfo)))
777 (home-page "https://people.csail.mit.edu/jaffer/SLIB.html")
778 (synopsis "Compatibility and utility library for Scheme")
779 (description "SLIB is a portable Scheme library providing compatibility and
780 utility functions for all standard Scheme implementations.")
781 (license (non-copyleft
782 "http://people.csail.mit.edu/jaffer/SLIB_COPYING.txt"
783 "Or see COPYING in the distribution."))))
784
785 (define-public scm
786 (package
787 (name "scm")
788 (version "5f3")
789 (source (origin
790 (method url-fetch)
791 (uri (string-append
792 "http://groups.csail.mit.edu/mac/ftpdir/scm/scm-"
793 version ".zip"))
794 (sha256
795 (base32
796 "1jxxlhmgal26mpcl97kz37djkn97rfy9h5pvw0hah6f3f6w49j97"))))
797 (build-system gnu-build-system)
798 (arguments
799 `(#:phases
800 (modify-phases %standard-phases
801 (replace 'configure
802 (lambda* (#:key inputs outputs #:allow-other-keys)
803 (invoke "./configure"
804 (string-append "--prefix="
805 (assoc-ref outputs "out")))))
806 (add-before 'build 'pre-build
807 (lambda* (#:key inputs #:allow-other-keys)
808 (substitute* "Makefile"
809 (("ginstall-info") "install-info"))
810 #t))
811 (replace 'build
812 (lambda* (#:key inputs outputs #:allow-other-keys)
813 (setenv "SCHEME_LIBRARY_PATH"
814 (string-append (assoc-ref inputs "slib")
815 "/lib/slib/"))
816 (invoke "make" "scmlit" "CC=gcc")
817 (invoke "make" "all")))
818 (add-after 'install 'post-install
819 (lambda* (#:key inputs outputs #:allow-other-keys)
820 (let* ((out (assoc-ref outputs "out"))
821 (req (string-append out "/lib/scm/require.scm")))
822 (delete-file req)
823 (format (open req (logior O_WRONLY O_CREAT))
824 "(define (library-vicinity) ~s)\n"
825 (string-append (assoc-ref inputs "slib")
826 "/lib/slib/"))
827
828 ;; We must generate the slibcat file.
829 (invoke (string-append out "/bin/scm")
830 "-br" "new-catalog")))))))
831 (inputs `(("slib" ,slib)))
832 (native-inputs `(("unzip" ,unzip)
833 ("texinfo" ,texinfo)))
834 (home-page "https://people.csail.mit.edu/jaffer/SCM")
835 (synopsis "Scheme implementation conforming to R5RS and IEEE P1178")
836 (description "GNU SCM is an implementation of Scheme. This
837 implementation includes Hobbit, a Scheme-to-C compiler, which can
838 generate C files whose binaries can be dynamically or statically
839 linked with a SCM executable.")
840 (license lgpl3+)))
841
842 (define-public tinyscheme
843 (package
844 (name "tinyscheme")
845 (version "1.42")
846 (source (origin
847 (method url-fetch)
848 (uri (string-append "mirror://sourceforge/" name "/" name "/"
849 name "-" version "/" name "-" version ".zip"))
850 (sha256
851 (base32
852 "0rik3qnxqd8wjlazx8rw996pfzkjjg60v6hcbpcqzi7rgml8q4n8"))))
853 (build-system gnu-build-system)
854 (native-inputs
855 `(("unzip" ,unzip)))
856 (arguments
857 `(#:phases
858 (modify-phases %standard-phases
859 (replace 'unpack
860 (lambda* (#:key source #:allow-other-keys)
861 (invoke "unzip" source)
862 (chdir (string-append ,name "-" ,version))
863 #t))
864 (add-after 'unpack 'set-scm-directory
865 ;; Hard-code ‘our’ init.scm instead of looking in the current
866 ;; working directory, so invoking ‘scheme’ just works.
867 (lambda* (#:key outputs #:allow-other-keys)
868 (let* ((out (assoc-ref outputs "out"))
869 (scm (string-append out "/share/" ,name)))
870 (substitute* "scheme.c"
871 (("init.scm" all)
872 (string-append scm "/" all)))
873 #t)))
874 (delete 'configure) ; no configure script
875 (replace 'install
876 ;; There's no ‘install’ target. Install files manually.
877 (lambda* (#:key outputs #:allow-other-keys)
878 (let* ((out (assoc-ref outputs "out"))
879 (bin (string-append out "/bin"))
880 (doc (string-append out "/share/doc/"
881 ,name "-" ,version))
882 (include (string-append out "/include"))
883 (lib (string-append out "/lib"))
884 (scm (string-append out "/share/" ,name)))
885 (install-file "scheme" bin)
886 (install-file "Manual.txt" doc)
887 (install-file "scheme.h" include)
888 (install-file "libtinyscheme.so" lib)
889 (install-file "init.scm" scm)
890 #t))))
891 #:tests? #f)) ; no tests
892 (home-page "http://tinyscheme.sourceforge.net/")
893 (synopsis "Light-weight interpreter for the Scheme programming language")
894 (description
895 "TinyScheme is a light-weight Scheme interpreter that implements as large a
896 subset of R5RS as was possible without getting very large and complicated.
897
898 It's meant to be used as an embedded scripting interpreter for other programs.
899 As such, it does not offer an Integrated Development Environment (@dfn{IDE}) or
900 extensive toolkits, although it does sport a small (and optional) top-level
901 loop.
902
903 As an embedded interpreter, it allows multiple interpreter states to coexist in
904 the same program, without any interference between them. Foreign functions in C
905 can be added and values can be defined in the Scheme environment. Being quite a
906 small program, it is easy to comprehend, get to grips with, and use.")
907 (license bsd-3))) ; there are no licence headers
908
909 (define-public stalin
910 (let ((commit "ed1c9e339c352b7a6fee40bb2a47607c3466f0be"))
911 ;; FIXME: The Stalin "source" contains C code generated by itself:
912 ;; 'stalin-AMD64.c', etc.
913 (package
914 (name "stalin")
915 (version "0.11")
916 (source (origin
917 ;; Use Pearlmutter's upstream branch with AMD64 patches
918 ;; applied. Saves us from including those 20M! patches
919 ;; in Guix. For more info, see:
920 ;; <ftp.ecn.purdue.edu/qobi/stalin-0.11-amd64-patches.tgz>
921 (method git-fetch)
922 (uri (git-reference
923 (url "https://github.com/barak/stalin")
924 (commit commit)))
925 (file-name (string-append name "-" version "-checkout"))
926 (sha256
927 (base32
928 "15a5gxj9v7jqlgkg0543gdflw0rbrir7fj5zgifnb33m074wiyhn"))
929 (modules '((guix build utils)))
930 (snippet
931 ;; remove gc libs from build, we have them as input
932 '(begin
933 (delete-file "gc6.8.tar.gz")
934 (delete-file-recursively "benchmarks")
935 (substitute* "build"
936 ((".*gc6.8.*") "")
937 ((" cd \\.\\.") "")
938 ((".*B include/libgc.a") "")
939 ((".*make.*") ""))
940 #t))))
941 (build-system gnu-build-system)
942 (arguments
943 `(#:make-flags (list "ARCH_OPTS=-freg-struct-return")
944 #:phases
945 (modify-phases %standard-phases
946 (replace 'configure
947 (lambda* (#:key outputs #:allow-other-keys)
948 (let* ((out (assoc-ref outputs "out"))
949 (include-out (string-append out "/include")))
950 (invoke "./build")
951 (for-each (lambda (fname)
952 (install-file fname include-out))
953 (find-files "include"))
954 (substitute* "makefile"
955 (("\\./include") include-out))
956 (substitute* "post-make"
957 (("`pwd`") out))
958 #t)))
959 (delete 'check)
960 (replace 'install
961 (lambda* (#:key outputs #:allow-other-keys)
962 (let ((out (assoc-ref outputs "out")))
963 (install-file "stalin.1"
964 (string-append out "/share/man/man1"))
965 (install-file "stalin"
966 (string-append out "/bin"))
967 #t))))))
968 (inputs
969 `(("libx11" ,libx11)))
970 (propagated-inputs
971 `(("libgc" ,libgc)))
972 (supported-systems '("x86_64-linux"))
973 (home-page "https://engineering.purdue.edu/~qobi/papers/fdlcc.pdf")
974 (synopsis "Brutally efficient Scheme compiler")
975 (description
976 "Stalin is an aggressively optimizing whole-program compiler
977 for Scheme that does polyvariant interprocedural flow analysis,
978 flow-directed interprocedural escape analysis, flow-directed
979 lightweight CPS conversion, flow-directed lightweight closure
980 conversion, flow-directed interprocedural lifetime analysis, automatic
981 in-lining, unboxing, and flow-directed program-specific and
982 program-point-specific low-level representation selection and code
983 generation.")
984 (license gpl2+))))
985
986 (define-public femtolisp
987 (let ((commit "ec7601076a976f845bc05ad6bd3ed5b8cde58a97")
988 (revision "2"))
989 (package
990 (name "femtolisp")
991 (version (string-append "0.0.0-" revision "." (string-take commit 7)))
992 (source (origin
993 (method git-fetch)
994 (uri (git-reference
995 (url "https://github.com/JeffBezanson/femtolisp")
996 (commit commit)))
997 (file-name (string-append name "-" version "-checkout"))
998 (sha256
999 (base32
1000 "1fcyiqlqn27nd4wxi27km8mhmlzpzzsxzpwsl1bxbmhraq468njw"))))
1001 ;; See "utils.h" for supported systems. Upstream bug:
1002 ;; https://github.com/JeffBezanson/femtolisp/issues/25
1003 (supported-systems
1004 (fold delete %supported-systems
1005 '("armhf-linux" "mips64el-linux" "aarch64-linux")))
1006 (build-system gnu-build-system)
1007 (arguments
1008 `(#:make-flags '("CC=gcc" "release")
1009 #:test-target "test"
1010 #:phases
1011 (modify-phases %standard-phases
1012 (delete 'bootstrap)
1013 (delete 'configure) ; No configure script
1014 (replace 'install ; Makefile has no 'install phase
1015 (lambda* (#:key outputs #:allow-other-keys)
1016 (let* ((out (assoc-ref outputs "out"))
1017 (bin (string-append out "/bin")))
1018 (install-file "flisp" bin)
1019 #t)))
1020 ;; The flisp binary is now available, run bootstrap to
1021 ;; generate flisp.boot and afterwards runs make test.
1022 (add-after 'install 'bootstrap-gen-and-test
1023 (lambda* (#:key outputs #:allow-other-keys)
1024 (let* ((out (assoc-ref outputs "out"))
1025 (bin (string-append out "/bin")))
1026 (invoke "./bootstrap.sh")
1027 (install-file "flisp.boot" bin)
1028 #t))))))
1029 (synopsis "Scheme-like lisp implementation")
1030 (description
1031 "@code{femtolisp} is a scheme-like lisp implementation with a
1032 simple, elegant Scheme dialect. It is a lisp-1 with lexical scope.
1033 The core is 12 builtin special forms and 33 builtin functions.")
1034 (home-page "https://github.com/JeffBezanson/femtolisp")
1035 (license bsd-3))))
1036
1037 (define-public gauche
1038 (package
1039 (name "gauche")
1040 (version "0.9.10")
1041 (home-page "https://practical-scheme.net/gauche/index.html")
1042 (source
1043 (origin
1044 (method url-fetch)
1045 (uri (string-append
1046 "mirror://sourceforge/gauche/Gauche/Gauche-"
1047 version ".tgz"))
1048 (sha256
1049 (base32 "0ci57ak5cp3lkmfy3nh50hifh8nbg58hh6r18asq0rn5mqfxyf8g"))
1050 (modules '((guix build utils)))
1051 (snippet '(begin
1052 ;; Remove libatomic-ops.
1053 (delete-file-recursively "gc/libatomic_ops")
1054 #t))))
1055 (build-system gnu-build-system)
1056 (inputs
1057 `(("libatomic-ops" ,libatomic-ops)
1058 ("slib" ,slib)
1059 ("zlib" ,zlib)))
1060 (native-inputs
1061 `(("texinfo" ,texinfo)
1062 ("openssl" ,openssl) ; needed for tests
1063 ("pkg-config" ,pkg-config))) ; needed to find external libatomic-ops
1064 (arguments
1065 `(#:configure-flags
1066 (list (string-append "--with-slib="
1067 (assoc-ref %build-inputs "slib")
1068 "/lib/slib"))
1069 #:phases
1070 (modify-phases %standard-phases
1071 (add-after 'unpack 'patch-/bin/sh
1072 ;; Needed only for tests.
1073 (lambda _
1074 (substitute* '("test/www.scm"
1075 "ext/tls/test.scm"
1076 "lib/gauche/package/util.scm"
1077 "libsrc/gauche/process.scm")
1078 (("/bin/sh") (which "sh")))
1079 #t))
1080 (add-after 'build 'build-doc
1081 (lambda _
1082 (with-directory-excursion "doc"
1083 (invoke "make" "info"))
1084 #t))
1085 (add-before 'check 'patch-network-tests
1086 ;; Remove net checks.
1087 (lambda _
1088 (delete-file "ext/net/test.scm")
1089 (invoke "touch" "ext/net/test.scm")
1090 #t))
1091 (add-after 'install 'install-docs
1092 (lambda _
1093 (with-directory-excursion "doc"
1094 (invoke "make" "install"))
1095 #t)))))
1096 (synopsis "Scheme scripting engine")
1097 (description "Gauche is a R7RS Scheme scripting engine aiming at being a
1098 handy tool that helps programmers and system administrators to write small to
1099 large scripts quickly. Quick startup, built-in system interface, native
1100 multilingual support are some of the goals. Gauche comes with a package
1101 manager/installer @code{gauche-package} which can download, compile, install
1102 and list gauche extension packages.")
1103 (license bsd-3)))
1104
1105 (define-public gerbil
1106 (package
1107 (name "gerbil")
1108 (version "0.16")
1109 (source
1110 (origin
1111 (method git-fetch)
1112 (uri (git-reference
1113 (url "https://github.com/vyzo/gerbil")
1114 (commit (string-append "v" version))))
1115 (file-name (git-file-name name version))
1116 (sha256
1117 (base32 "0vng0kxpnwsg8jbjdpyn4sdww36jz7zfpfbzayg9sdpz6bjxjy0f"))))
1118 (arguments
1119 `(#:phases
1120 (modify-phases %standard-phases
1121 (delete 'bootstrap)
1122 (add-before 'configure 'chdir
1123 (lambda _
1124 (chdir "src")
1125 #t))
1126 (replace 'configure
1127 (lambda* (#:key outputs inputs #:allow-other-keys)
1128 (invoke "chmod" "755" "-R" ".")
1129 ;; Otherwise fails when editing an r--r--r-- file.
1130 (invoke "gsi-script" "configure"
1131 "--prefix" (assoc-ref outputs "out")
1132 "--with-gambit" (assoc-ref inputs "gambit-c"))))
1133 (add-before 'patch-generated-file-shebangs 'fix-gxi-shebangs
1134 (lambda _
1135 ;; Some .ss files refer to gxi using /usr/bin/env gxi
1136 ;; and 'patch-generated-file-shebangs can't fix that
1137 ;; because gxi has not been compiled yet.
1138 ;; We know where gxi is going to end up so we
1139 ;; Doctor Who our fix here before the problem
1140 ;; happens towards the end of the build.sh script.
1141 (let ((abs-srcdir (getcwd)))
1142 (for-each
1143 (lambda (f)
1144 (substitute* f
1145 (("#!/usr/bin/env gxi")
1146 (string-append "#!" abs-srcdir "/../bin/gxi"))))
1147 '("./gerbil/gxc"
1148 "./lang/build.ss"
1149 "./misc/http-perf/build.ss"
1150 "./misc/rpc-perf/build.ss"
1151 "./misc/scripts/docsnarf.ss"
1152 "./misc/scripts/docstub.ss"
1153 "./misc/scripts/docsyms.ss"
1154 "./r7rs-large/build.ss"
1155 "./release.ss"
1156 "./std/build.ss"
1157 "./std/run-tests.ss"
1158 "./std/web/fastcgi-test.ss"
1159 "./std/web/rack-test.ss"
1160 "./tools/build.ss"
1161 "./tutorial/httpd/build.ss"
1162 "./tutorial/kvstore/build.ss"
1163 "./tutorial/lang/build.ss"
1164 "./tutorial/proxy/build-static.ss"
1165 "./tutorial/proxy/build.ss")))
1166 #t))
1167 (replace
1168 'build
1169 (lambda*
1170 (#:key inputs #:allow-other-keys)
1171 (setenv "HOME" (getcwd))
1172 (invoke
1173 ;; The build script needs a tty or it'll crash on an ioctl
1174 ;; trying to find the width of the terminal it's running on.
1175 ;; Calling in script prevents that.
1176 "script"
1177 "-qefc"
1178 "./build.sh")))
1179 (delete 'check)
1180 (replace 'install
1181 (lambda* (#:key outputs #:allow-other-keys)
1182 (let* ((out (assoc-ref outputs "out"))
1183 (bin (string-append out "/bin"))
1184 (lib (string-append out "/lib")))
1185 (mkdir-p bin)
1186 (mkdir-p lib)
1187 (copy-recursively "../bin" bin)
1188 (copy-recursively "../lib" lib)))))))
1189 (native-inputs
1190 `(("coreutils" ,coreutils)
1191 ("util-linux" ,util-linux)))
1192 (propagated-inputs
1193 `(("gambit-c" ,gambit-c)
1194 ("zlib" ,zlib)
1195 ("openssl" ,openssl)
1196 ("sqlite" ,sqlite)))
1197 (build-system gnu-build-system)
1198 (synopsis "Meta-dialect of Scheme with post-modern features")
1199 (description "Gerbil is an opinionated dialect of Scheme designed for Systems
1200 Programming, with a state of the art macro and module system on top of the Gambit
1201 runtime. The macro system is based on quote-syntax, and provides the full meta-syntactic
1202 tower with a native implementation of syntax-case. It also provides a full-blown module
1203 system, similar to PLT Scheme's (sorry, Racket) modules. The main difference from Racket
1204 is that Gerbil modules are single instantiation, supporting high performance ahead of
1205 time compilation and compiled macros.")
1206 (home-page "https://cons.io")
1207 (license `(,lgpl2.1 ,asl2.0))))