gnu: rust-slab-0.4: Don't hide package.
[jackhill/guix/guix.git] / gnu / packages / scheme.scm
CommitLineData
e117772d 1;;; GNU Guix --- Functional package management for GNU
150c38c2 2;;; Copyright © 2013, 2014, 2015, 2016, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
07f4aef0 3;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
549f9512 4;;; Copyright © 2015, 2016 Federico Beffa <beffa@fbengineering.ch>
d0d94110 5;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
7c028db5 6;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
b9b447be 7;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
47956fa0 8;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
07ef08a7 9;;; Copyright © 2017 John Darrington <jmd@gnu.org>
01d71f62 10;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
256f9b51 11;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
44fa8431 12;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
eac7ed19 13;;; Copyright © 2018 Gabriel Hondet <gabrielhondet@gmail.com>
e117772d
LC
14;;;
15;;; This file is part of GNU Guix.
16;;;
17;;; GNU Guix is free software; you can redistribute it and/or modify it
18;;; under the terms of the GNU General Public License as published by
19;;; the Free Software Foundation; either version 3 of the License, or (at
20;;; your option) any later version.
21;;;
22;;; GNU Guix is distributed in the hope that it will be useful, but
23;;; WITHOUT ANY WARRANTY; without even the implied warranty of
24;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25;;; GNU General Public License for more details.
26;;;
27;;; You should have received a copy of the GNU General Public License
28;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
29
1ffa7090 30(define-module (gnu packages scheme)
59a43334 31 #:use-module (gnu packages)
bc73a843 32 #:use-module ((guix licenses)
07ef08a7
JD
33 #:select (gpl2+ lgpl2.0+ lgpl2.1+ lgpl3+ asl2.0 bsd-3
34 cc-by-sa4.0 non-copyleft))
e117772d
LC
35 #:use-module (guix packages)
36 #:use-module (guix download)
b9b447be 37 #:use-module (guix git-download)
07f4aef0 38 #:use-module (guix utils)
e117772d 39 #:use-module (guix build-system gnu)
b9b447be 40 #:use-module (guix build-system trivial)
fbf7b7e9 41 #:use-module (gnu packages autotools)
5e3ea571 42 #:use-module (gnu packages bdw-gc)
549f9512 43 #:use-module (gnu packages compression)
cd0322a3 44 #:use-module (gnu packages databases)
5e3ea571
KK
45 #:use-module (gnu packages libevent)
46 #:use-module (gnu packages libunistring)
1ffa7090
LC
47 #:use-module (gnu packages m4)
48 #:use-module (gnu packages multiprecision)
549f9512 49 #:use-module (gnu packages ncurses)
5e3ea571 50 #:use-module (gnu packages pcre)
1ffa7090 51 #:use-module (gnu packages emacs)
549f9512
FB
52 #:use-module (gnu packages ghostscript)
53 #:use-module (gnu packages netpbm)
1ffa7090 54 #:use-module (gnu packages texinfo)
8f9ac901 55 #:use-module (gnu packages tex)
ce0614dd 56 #:use-module (gnu packages base)
b9b447be 57 #:use-module (gnu packages compression)
cf53ecf5
LC
58 #:use-module (gnu packages pkg-config)
59 #:use-module (gnu packages avahi)
60 #:use-module (gnu packages libphidget)
ffc13e75 61 #:use-module (gnu packages gcc)
30645251 62 #:use-module (gnu packages glib)
9d3c4dae 63 #:use-module (gnu packages gtk)
30645251 64 #:use-module (gnu packages libffi)
d3206af6 65 #:use-module (gnu packages fontutils)
e55354b8 66 #:use-module (gnu packages image)
bc11c72c 67 #:use-module (gnu packages xorg)
cd0322a3 68 #:use-module (gnu packages sqlite)
782170c4
SB
69 #:use-module (gnu packages tls)
70 #:use-module (gnu packages gl)
e0b49c78 71 #:use-module (gnu packages libedit)
e83c7d1a 72 #:use-module (srfi srfi-1)
e117772d
LC
73 #:use-module (ice-9 match))
74
a0efb39a 75(define (mit-scheme-source-directory system version)
ecb26c10
AE
76 (string-append "mit-scheme-"
77 (if (or (string-prefix? "x86_64" system)
a0efb39a 78 (string-prefix? "i686" system))
ecb26c10
AE
79 ""
80 "c-")
81 version))
82
e117772d
LC
83(define-public mit-scheme
84 (package
85 (name "mit-scheme")
d870cc5e 86 (version "10.1.3")
e117772d 87 (source #f) ; see below
f163c290 88 (outputs '("out" "doc"))
e117772d
LC
89 (build-system gnu-build-system)
90 (arguments
fbf7b7e9 91 `(#:modules ((guix build gnu-build-system)
f163c290
FB
92 (guix build utils)
93 (srfi srfi-1))
e117772d 94 #:phases
af00e633
FB
95 (modify-phases %standard-phases
96 (replace 'unpack
97 (lambda* (#:key inputs #:allow-other-keys)
e39631a9
TGR
98 (invoke "tar" "xzvf"
99 (assoc-ref inputs "source"))
100 (chdir ,(mit-scheme-source-directory (%current-system)
101 version))
102 ;; Delete these dangling symlinks since they break
103 ;; `patch-shebangs'.
104 (for-each delete-file
d870cc5e 105 (find-files "src/compiler" "^make\\."))
e39631a9
TGR
106 (chdir "src")
107 #t))
fbf7b7e9
KK
108 (add-after 'unpack 'patch-/bin/sh
109 (lambda _
110 (setenv "CONFIG_SHELL" (which "sh"))
111 (substitute* '("../tests/ffi/autogen.sh"
112 "../tests/ffi/autobuild.sh"
113 "../tests/ffi/test-ffi.sh"
114 "../tests/runtime/test-process.scm"
115 "runtime/unxprm.scm")
116 (("/bin/sh") (which "sh"))
117 (("\\./autogen\\.sh")
118 (string-append (which "sh") " autogen.sh"))
119 (("\\./configure")
120 (string-append (which "sh") " configure")))
121 #t))
9b02a79b
PN
122 ;; FIXME: the texlive-union insists on regenerating fonts. It stores
123 ;; them in HOME, so it needs to be writeable.
124 (add-before 'build 'set-HOME
125 (lambda _ (setenv "HOME" "/tmp") #t))
af00e633
FB
126 (replace 'build
127 (lambda* (#:key system outputs #:allow-other-keys)
128 (let ((out (assoc-ref outputs "out")))
129 (if (or (string-prefix? "x86_64" system)
130 (string-prefix? "i686" system))
e39631a9
TGR
131 (invoke "make" "compile-microcode")
132 (invoke "./etc/make-liarc.sh"
133 (string-append "--prefix=" out)))
134 #t)))
f163c290
FB
135 (add-after 'configure 'configure-doc
136 (lambda* (#:key outputs inputs #:allow-other-keys)
137 (with-directory-excursion "../doc"
138 (let* ((out (assoc-ref outputs "out"))
139 (bash (assoc-ref inputs "bash"))
140 (bin/sh (string-append bash "/bin/sh")))
e39631a9
TGR
141 (invoke bin/sh "./configure"
142 (string-append "--prefix=" out)
143 (string-append "SHELL=" bin/sh))
f163c290
FB
144 #t))))
145 (add-after 'build 'build-doc
146 (lambda* _
147 (with-directory-excursion "../doc"
e39631a9
TGR
148 (invoke "make"))
149 #t))
f163c290
FB
150 (add-after 'install 'install-doc
151 (lambda* (#:key outputs #:allow-other-keys)
152 (let* ((out (assoc-ref outputs "out"))
153 (doc (assoc-ref outputs "doc"))
154 (old-doc-dir (string-append out "/share/doc"))
155 (new-doc/mit-scheme-dir
156 (string-append doc "/share/doc/" ,name "-" ,version)))
157 (with-directory-excursion "../doc"
158 (for-each (lambda (target)
e39631a9 159 (invoke "make" target))
d870cc5e 160 '("install-info-gz" "install-man"
f163c290
FB
161 "install-html" "install-pdf")))
162 (mkdir-p new-doc/mit-scheme-dir)
163 (copy-recursively
d870cc5e 164 (string-append old-doc-dir "/" ,name)
f163c290
FB
165 new-doc/mit-scheme-dir)
166 (delete-file-recursively old-doc-dir)
167 #t))))))
168 (native-inputs
fbf7b7e9
KK
169 `(;; Autoconf, Automake, and Libtool are necessary for the FFI tests.
170 ("autoconf" ,autoconf)
171 ("automake" ,automake)
172 ("libtool" ,libtool)
173 ("texlive" ,(texlive-union (list texlive-tex-texinfo)))
f163c290
FB
174 ("texinfo" ,texinfo)
175 ("m4" ,m4)))
e117772d 176 (inputs
f163c290 177 `(("libx11" ,libx11)
e117772d
LC
178
179 ("source"
dd6b9a37
LC
180
181 ;; MIT/GNU Scheme is not bootstrappable, so it's recommended to
182 ;; compile from the architecture-specific tarballs, which contain
183 ;; pre-built binaries. It leads to more efficient code than when
184 ;; building the tarball that contains generated C code instead of
185 ;; those binaries.
186 ,(origin
187 (method url-fetch)
188 (uri (string-append "mirror://gnu/mit-scheme/stable.pkg/"
189 version "/mit-scheme-"
dd6b9a37 190 (match (%current-system)
ecb26c10
AE
191 ("x86_64-linux"
192 (string-append version "-x86-64"))
193 ("i686-linux"
966629a1
LC
194 (string-append version "-i386"))
195 (_
196 (string-append "c-" version)))
dd6b9a37
LC
197 ".tar.gz"))
198 (sha256
199 (match (%current-system)
200 ("x86_64-linux"
201 (base32
d870cc5e 202 "03m7cc035w3avs91j2pcz9f15ssgvgp3rm045d1vbydqrkzfyw8k"))
dd6b9a37
LC
203 ("i686-linux"
204 (base32
7d6cfa44
EF
205 "05sjyz90xxfnmi87qv8x0yx0fcallnzl1dciygdafp317pn489is"))
206 (_
2f1a01b7
LC
207 (base32
208 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))))))))
75af27f7
LC
209
210 ;; Fails to build on MIPS, see <http://bugs.gnu.org/18221>.
d870cc5e
KK
211 ;; Also, the portable C version of MIT/GNU Scheme did not work in time for
212 ;; release in version 10.1.
213 (supported-systems '("x86_64-linux" "i686-linux"))
75af27f7 214
6fd52309 215 (home-page "https://www.gnu.org/software/mit-scheme/")
a2b63d58 216 (synopsis "A Scheme implementation with integrated editor and debugger")
e117772d 217 (description
79c311b8 218 "GNU/MIT Scheme is an implementation of the Scheme programming
a22dc0c4
LC
219language. It provides an interpreter, a compiler and a debugger. It also
220features an integrated Emacs-like editor and a large runtime library.")
63e8bb12
LC
221 (license gpl2+)
222 (properties '((ftp-directory . "/gnu/mit-scheme/stable.pkg")))))
e117772d
LC
223
224(define-public bigloo
1fe1bb96 225 ;; Upstream modifies source tarballs in place, making significant changes
77d2e43c
TGR
226 ;; long after the initial publication: <https://bugs.gnu.org/33525>.
227 (let ((upstream-version "4.3f"))
1fe1bb96
LC
228 (package
229 (name "bigloo")
77d2e43c 230 (version "4.3f")
1fe1bb96
LC
231 (source (origin
232 (method url-fetch)
233 (uri (string-append "ftp://ftp-sop.inria.fr/indes/fp/Bigloo/bigloo"
234 upstream-version ".tar.gz"))
235 (sha256
236 (base32
77d2e43c 237 "09whj8z91qbihk59dw2yb2ccbx9nk1c4l65j62pfs1pz822cpyh9"))
1fe1bb96
LC
238 ;; Remove bundled libraries.
239 (modules '((guix build utils)))
240 (snippet
241 '(begin
242 (for-each delete-file-recursively
243 '("gc" "gmp" "libuv"))
244 #t))))
245 (build-system gnu-build-system)
246 (arguments
247 `(#:test-target "test"
248 #:phases
249 (modify-phases %standard-phases
250 (replace 'configure
251 (lambda* (#:key inputs outputs #:allow-other-keys)
e117772d 252
1fe1bb96
LC
253 (substitute* "configure"
254 (("^shell=.*$")
255 (string-append "shell=" (which "bash") "\n"))
256 (("`date`") "0"))
257 (substitute* "autoconf/runtest.in"
258 ((", @DATE@") ""))
259 (substitute* "autoconf/osversion"
260 (("^version.*$") "version=\"\"\n"))
261 (substitute* "comptime/Makefile"
262 (("\\$\\(LDCOMPLIBS\\)")
263 "$(LDCOMPLIBS) $(LDFLAGS)"))
e117772d 264
1fe1bb96
LC
265 ;; The `configure' script doesn't understand options
266 ;; of those of Autoconf.
267 (let ((out (assoc-ref outputs "out")))
268 (invoke "./configure"
269 (string-append "--prefix=" out)
270 ; use system libraries
271 "--customgc=no"
272 "--customunistring=no"
273 "--customlibuv=no"
274 (string-append"--mv=" (which "mv"))
275 (string-append "--rm=" (which "rm"))
276 "--cflags=-fPIC"
277 (string-append "--ldflags=-Wl,-rpath="
278 (assoc-ref outputs "out")
279 "/lib/bigloo/" ,upstream-version)
280 (string-append "--lispdir=" out
281 "/share/emacs/site-lisp")
282 "--sharedbde=yes"
283 "--sharedcompiler=yes"
284 "--disable-patch"))))
285 (add-after 'install 'install-emacs-modes
286 (lambda* (#:key outputs #:allow-other-keys)
287 (let* ((out (assoc-ref outputs "out"))
288 (dir (string-append out "/share/emacs/site-lisp")))
289 (invoke "make" "-C" "bmacs" "all" "install"
290 (string-append "EMACSBRAND=emacs25")
291 (string-append "EMACSDIR=" dir))))))))
292 (inputs
293 `(("emacs" ,emacs) ;UDE needs the X version of Emacs
294 ("libgc" ,libgc)
295 ("libunistring" ,libunistring)
296 ("libuv" ,libuv)
297 ("openssl" ,openssl)
298 ("sqlite" ,sqlite)
cf53ecf5 299
1fe1bb96
LC
300 ;; Optional APIs for which Bigloo has bindings.
301 ("avahi" ,avahi)
302 ("libphidget" ,libphidget)
303 ("pcre" ,pcre)))
304 (native-inputs
305 `(("pkg-config" ,pkg-config)))
306 (propagated-inputs
307 `(("gmp" ,gmp))) ; bigloo.h refers to gmp.h
a7c4dfab 308 (home-page "https://www-sop.inria.fr/indes/fp/Bigloo/")
1fe1bb96
LC
309 (synopsis "Efficient Scheme compiler")
310 (description
311 "Bigloo is a Scheme implementation devoted to one goal: enabling Scheme
312based programming style where C(++) is usually required. Bigloo attempts to
313make Scheme practical by offering features usually presented by traditional
314programming languages but not offered by Scheme and functional programming.
315Bigloo compiles Scheme modules. It delivers small and fast stand alone binary
316executables. Bigloo enables full connections between Scheme and C programs
317and between Scheme and Java programs.")
318 (license gpl2+))))
e6e82f62
LC
319
320(define-public hop
321 (package
322 (name "hop")
697b6ca3 323 (version "3.2.0-pre1")
e6e82f62
LC
324 (source (origin
325 (method url-fetch)
326 (uri (string-append "ftp://ftp-sop.inria.fr/indes/fp/Hop/hop-"
327 version ".tar.gz"))
328 (sha256
329 (base32
697b6ca3 330 "0jf418d0s9imv98s6qrpjxr1mdaxr37knh5qyfl5y4a9cc41mlg5"))))
e6e82f62
LC
331 (build-system gnu-build-system)
332 (arguments
082725b5
KK
333 `(#:test-target "test"
334 #:make-flags '("BIGLOO=bigloo")
335 #:parallel-build? #f
336 #:phases
04014de6
EF
337 (modify-phases %standard-phases
338 (replace 'configure
082725b5 339 (lambda* (#:key inputs outputs #:allow-other-keys)
04014de6 340 (let ((out (assoc-ref outputs "out")))
697b6ca3
KK
341 (substitute* '("tools/Makefile"
342 "test/hopjs/TEST.in")
343 (("/bin/rm") (which "rm")))
24674e61
TGR
344 (invoke "./configure"
345 (string-append "--prefix=" out)
697b6ca3 346 "--hostcc=gcc"
24674e61
TGR
347 (string-append "--blflags="
348 ;; user flags completely override useful
349 ;; default flags, so repeat them here.
350 "-copt \\$(CPICFLAGS) "
351 "-L \\$(BUILDLIBDIR) "
352 "-ldopt -Wl,-rpath," out "/lib"))))))))
a394c60a
AE
353 (inputs `(("avahi" ,avahi)
354 ("bigloo" ,bigloo)
082725b5
KK
355 ("libgc" ,libgc)
356 ("libunistring" ,libunistring)
357 ("libuv" ,libuv)
358 ("pcre" ,pcre)
359 ("sqlite" ,sqlite)
8a629613 360 ("which" ,which)))
e6e82f62 361 (home-page "http://hop.inria.fr/")
9e771e3b 362 (synopsis "Multi-tier programming language for the Web 2.0")
e6e82f62
LC
363 (description
364 "HOP is a multi-tier programming language for the Web 2.0 and the
365so-called diffuse Web. It is designed for programming interactive web
366applications in many fields such as multimedia (web galleries, music players,
367...), ubiquitous and house automation (SmartPhones, personal appliance),
368mashups, office (web agendas, mail clients, ...), etc.")
369 (license gpl2+)))
8cc9e7f9 370
f7ce90e7
LC
371(define-public scheme48
372 (package
373 (name "scheme48")
5c4d98ab 374 (version "1.9.2")
f7ce90e7
LC
375 (source (origin
376 (method url-fetch)
377 (uri (string-append "http://s48.org/" version
378 "/scheme48-" version ".tgz"))
379 (sha256
380 (base32
5c4d98ab 381 "1x4xfm3lyz2piqcw1h01vbs1iq89zq7wrsfjgh3fxnlm1slj2jcw"))
fc1adab1 382 (patches (search-patches "scheme48-tests.patch"))))
f7ce90e7 383 (build-system gnu-build-system)
f7ce90e7
LC
384 (home-page "http://s48.org/")
385 (synopsis "Scheme implementation using a bytecode interpreter")
386 (description
387 "Scheme 48 is an implementation of Scheme based on a byte-code
388interpreter and is designed to be used as a testbed for experiments in
389implementation techniques and as an expository tool.")
390
391 ;; Most files are BSD-3; see COPYING for the few exceptions.
392 (license bsd-3)))
30645251
LC
393
394(define-public racket
395 (package
396 (name "racket")
948ecc27 397 (version "7.3")
30645251 398 (source (origin
e0b49c78
KH
399 (method url-fetch)
400 (uri (list (string-append "http://mirror.racket-lang.org/installers/"
401 version "/racket-" version "-src.tgz")
402 (string-append
403 "http://mirror.informatik.uni-tuebingen.de/mirror/racket/"
404 version "/racket-" version "-src.tgz")))
405 (sha256
406 (base32
948ecc27 407 "0h6072njhb87rkz4arijvahxgjzn8r14s4wns0ijvxm89bg136yl"))
e0b49c78
KH
408 (patches (search-patches
409 "racket-store-checksum-override.patch"))))
30645251
LC
410 (build-system gnu-build-system)
411 (arguments
412 '(#:phases
dc1d3cde
KK
413 (modify-phases %standard-phases
414 (add-before 'configure 'pre-configure
415 (lambda* (#:key inputs #:allow-other-keys)
416 ;; Patch dynamically loaded libraries with their absolute paths.
417 (let* ((library-path (search-path-as-string->list
418 (getenv "LIBRARY_PATH")))
419 (find-so (lambda (soname)
420 (search-path
421 library-path
422 (format #f "~a.so" soname))))
423 (patch-ffi-libs (lambda (file libs)
424 (for-each
425 (lambda (lib)
426 (substitute* file
427 (((format #f "\"~a\"" lib))
428 (format #f "\"~a\"" (find-so lib)))))
429 libs))))
430 (substitute* "collects/db/private/sqlite3/ffi.rkt"
431 (("ffi-lib sqlite-so")
432 (format #f "ffi-lib \"~a\"" (find-so "libsqlite3"))))
433 (substitute* "collects/openssl/libssl.rkt"
434 (("ffi-lib libssl-so")
435 (format #f "ffi-lib \"~a\"" (find-so "libssl"))))
436 (substitute* "collects/openssl/libcrypto.rkt"
437 (("ffi-lib libcrypto-so")
438 (format #f "ffi-lib \"~a\"" (find-so "libcrypto"))))
439 (substitute* "share/pkgs/math-lib/math/private/bigfloat/gmp.rkt"
440 (("ffi-lib libgmp-so")
441 (format #f "ffi-lib \"~a\"" (find-so "libgmp"))))
442 (substitute* "share/pkgs/math-lib/math/private/bigfloat/mpfr.rkt"
443 (("ffi-lib libmpfr-so")
444 (format #f "ffi-lib \"~a\"" (find-so "libmpfr"))))
26700cae
SB
445 (substitute* "share/pkgs/readline-lib/readline/rktrl.rkt"
446 (("\\(getenv \"PLT_READLINE_LIB\"\\)")
447 (format #f "\"~a\"" (find-so "libedit"))))
dc1d3cde
KK
448 (for-each
449 (lambda (x) (apply patch-ffi-libs x))
450 '(("share/pkgs/draw-lib/racket/draw/unsafe/cairo-lib.rkt"
451 ("libfontconfig" "libcairo"))
452 ("share/pkgs/draw-lib/racket/draw/unsafe/glib.rkt"
453 ("libglib-2.0" "libgmodule-2.0" "libgobject-2.0"))
454 ("share/pkgs/draw-lib/racket/draw/unsafe/jpeg.rkt"
455 ("libjpeg"))
456 ("share/pkgs/draw-lib/racket/draw/unsafe/pango.rkt"
457 ("libpango-1.0" "libpangocairo-1.0"))
458 ("share/pkgs/draw-lib/racket/draw/unsafe/png.rkt"
459 ("libpng"))
460 ("share/pkgs/db-lib/db/private/odbc/ffi.rkt"
461 ("libodbc"))
462 ("share/pkgs/gui-lib/mred/private/wx/gtk/x11.rkt"
463 ("libX11"))
464 ("share/pkgs/gui-lib/mred/private/wx/gtk/gsettings.rkt"
465 ("libgio-2.0"))
466 ("share/pkgs/gui-lib/mred/private/wx/gtk/gtk3.rkt"
467 ("libgdk-3" "libgtk-3"))
468 ("share/pkgs/gui-lib/mred/private/wx/gtk/unique.rkt"
469 ("libunique-1.0"))
470 ("share/pkgs/gui-lib/mred/private/wx/gtk/utils.rkt"
471 ("libgdk-x11-2.0" "libgdk_pixbuf-2.0" "libgtk-x11-2.0"))
472 ("share/pkgs/gui-lib/mred/private/wx/gtk/gl-context.rkt"
473 ("libGL"))
474 ("share/pkgs/sgl/gl.rkt"
26700cae 475 ("libGL" "libGLU")))))
dc1d3cde
KK
476 (chdir "src")
477 #t))
478 (add-after 'unpack 'patch-/bin/sh
479 (lambda _
480 (substitute* "collects/racket/system.rkt"
481 (("/bin/sh") (which "sh")))
482 #t)))
e0b49c78 483 #:tests? #f ; XXX: how to run them?
30645251 484 ))
782170c4
SB
485 (inputs
486 `(("libffi" ,libffi)
487 ;; Hardcode dynamically loaded libraries for better functionality.
488 ;; sqlite and libraries for `racket/draw' are needed to build the doc.
489 ("cairo" ,cairo)
490 ("fontconfig" ,fontconfig)
491 ("glib" ,glib)
492 ("glu" ,glu)
493 ("gmp" ,gmp)
e0b49c78 494 ("gtk+" ,gtk+) ; propagates gdk-pixbuf+svg
782170c4
SB
495 ("libjpeg" ,libjpeg)
496 ("libpng" ,libpng)
497 ("libx11" ,libx11)
498 ("mesa" ,mesa)
499 ("mpfr" ,mpfr)
500 ("openssl" ,openssl)
501 ("pango" ,pango)
502 ("sqlite" ,sqlite)
e0b49c78
KH
503 ("unixodbc" ,unixodbc)
504 ("libedit" ,libedit)))
30645251
LC
505 (home-page "http://racket-lang.org")
506 (synopsis "Implementation of Scheme and related languages")
507 (description
508 "Racket is an implementation of the Scheme programming language (R5RS and
509R6RS) and related languages, such as Typed Racket. It features a compiler and
510a virtual machine with just-in-time native compilation, as well as a large set
511of libraries.")
39d0ce93 512 (license lgpl2.0+)))
07f4aef0
TUBK
513
514(define-public gambit-c
515 (package
516 (name "gambit-c")
256f9b51 517 (version "4.9.3")
07f4aef0
TUBK
518 (source
519 (origin
520 (method url-fetch)
521 (uri (string-append
522 "http://www.iro.umontreal.ca/~gambit/download/gambit/v"
9ba88890 523 (version-major+minor version) "/source/gambit-v"
07f4aef0
TUBK
524 (string-map (lambda (c) (if (char=? c #\.) #\_ c)) version)
525 ".tgz"))
526 (sha256
256f9b51 527 (base32 "1p6172vhcrlpjgia6hsks1w4fl8rdyjf9xjh14wxfkv7dnx8a5hk"))))
07f4aef0
TUBK
528 (build-system gnu-build-system)
529 (arguments
530 '(#:configure-flags
531 ;; According to the ./configure script, this makes the build slower and
532 ;; use >= 1 GB memory, but makes Gambit much faster.
4be83af4 533 '("--enable-single-host")))
cb3854cd 534 (home-page "http://dynamo.iro.umontreal.ca/wiki/index.php/Main_Page")
07f4aef0
TUBK
535 (synopsis "Efficient Scheme interpreter and compiler")
536 (description
537 "Gambit consists of two main programs: gsi, the Gambit Scheme
538interpreter, and gsc, the Gambit Scheme compiler. The interpreter contains
539the complete execution and debugging environment. The compiler is the
540interpreter extended with the capability of generating executable files. The
541compiler can produce standalone executables or compiled modules which can be
542loaded at run time. Interpreted code and compiled code can be freely
543mixed.")
544 ;; Dual license.
545 (license (list lgpl2.1+ asl2.0))))
3e92f4f9
TUBK
546
547(define-public chibi-scheme
548 (package
549 (name "chibi-scheme")
cf822f4d 550 (version "0.8")
c9b9ef0a 551 (home-page "https://github.com/ashinn/chibi-scheme")
3e92f4f9
TUBK
552 (source
553 (origin
c9b9ef0a
MB
554 (method git-fetch)
555 (uri (git-reference (url home-page) (commit version)))
556 (file-name (git-file-name name version))
3e92f4f9 557 (sha256
c9b9ef0a
MB
558 (base32
559 "0269d5fhaz7nqjb41vh7yz63mp5s4z08fn4sspwc06z32xksigw9"))))
3e92f4f9
TUBK
560 (build-system gnu-build-system)
561 (arguments
4a187c55
LC
562 `(#:phases (modify-phases %standard-phases
563 (delete 'configure)
564 (add-before 'build 'set-cc
565 (lambda _
566 (setenv "CC" "gcc"))))
3e92f4f9
TUBK
567 #:make-flags (let ((out (assoc-ref %outputs "out")))
568 (list (string-append "PREFIX=" out)
569 (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")))
570 #:test-target "test"))
3e92f4f9
TUBK
571 (synopsis "Small embeddable Scheme implementation")
572 (description
573 "Chibi-Scheme is a very small library with no external dependencies
574intended for use as an extension and scripting language in C programs. In
575addition to support for lightweight VM-based threads, each VM itself runs in
576an isolated heap allowing multiple VMs to run simultaneously in different OS
577threads.")
578 (license bsd-3)))
c093f9f6 579
b9b447be 580(define-public sicp
2705a97e 581 (let ((commit "225c172f9b859902a64a3c5dd5e1f9ac1a7382de"))
b9b447be
JN
582 (package
583 (name "sicp")
2705a97e 584 (version (string-append "20170703-1." (string-take commit 7)))
b9b447be
JN
585 (source (origin
586 (method git-fetch)
587 (uri (git-reference
588 (url "https://github.com/sarabander/sicp")
589 (commit commit)))
590 (sha256
591 (base32
2705a97e 592 "0bhdrdc1mgdjdsg4jksq9z6x129f3346jbf3zir2a0dfmsj6m10n"))
b9b447be
JN
593 (file-name (string-append name "-" version "-checkout"))))
594 (build-system trivial-build-system)
595 (native-inputs `(("gzip" ,gzip)
596 ("source" ,source)
597 ("texinfo" ,texinfo)))
598 (arguments
150c38c2 599 `(#:modules ((guix build utils))
b9b447be
JN
600 #:builder
601 (begin
602 (use-modules (guix build utils)
b9b447be
JN
603 (srfi srfi-26))
604 (let ((gzip (assoc-ref %build-inputs "gzip"))
605 (source (assoc-ref %build-inputs "source"))
606 (texinfo (assoc-ref %build-inputs "texinfo"))
01d71f62 607 (html-dir (string-append %output "/share/doc/" ,name "/html"))
b9b447be 608 (info-dir (string-append %output "/share/info")))
01d71f62 609 (copy-recursively (string-append source "/html") html-dir)
b9b447be
JN
610 (setenv "PATH" (string-append gzip "/bin"
611 ":" texinfo "/bin"))
612 (mkdir-p info-dir)
09b8c04e
MW
613 (invoke "makeinfo" "--output"
614 (string-append info-dir "/sicp.info")
615 (string-append source "/sicp-pocket.texi"))
616 (for-each (cut invoke "gzip" "-9n" <>)
617 (find-files info-dir))
618 #t))))
0e0015f2 619 (home-page "https://sarabander.github.io/sicp")
b9b447be
JN
620 (synopsis "Structure and Interpretation of Computer Programs")
621 (description "Structure and Interpretation of Computer Programs (SICP) is
622a textbook aiming to teach the principles of computer programming.
623
624Using Scheme, a dialect of the Lisp programming language, the book explains
625core computer science concepts such as abstraction in programming,
626metalinguistic abstraction, recursion, interpreters, and modular programming.")
627 (license cc-by-sa4.0))))
8a0c2552 628
629(define-public scheme48-rx
7108ad5b
TGR
630 (let* ((commit "dd9037f6f9ea01019390614f6b126b7dd293798d")
631 (revision "2"))
8a0c2552 632 (package
633 (name "scheme48-rx")
634 (version (string-append "0.0.0-" revision "." (string-take commit 7)))
635 (source
636 (origin
637 (method git-fetch)
638 (uri (git-reference
639 (url "https://github.com/scheme/rx")
640 (commit commit)))
641 (sha256
642 (base32
7108ad5b 643 "1bvriavxw5kf2izjbil3999vr983vkk2xplfpinafr86m40b2cci"))
8a0c2552 644 (file-name (string-append name "-" version "-checkout"))))
645 (build-system trivial-build-system)
646 (arguments
647 `(#:modules ((guix build utils))
648 #:builder
649 (begin
650 (use-modules (guix build utils))
651 (let ((share (string-append %output
652 "/share/scheme48-"
653 ,(package-version scheme48)
654 "/rx")))
655 (chdir (assoc-ref %build-inputs "source"))
656 (mkdir-p share)
e3cfef22
MW
657 (copy-recursively "." share)
658 #t))))
8a0c2552 659 (native-inputs
660 `(("source" ,source)
661 ("scheme48" ,scheme48)))
662 (home-page "https://github.com/scheme/rx/")
663 (synopsis "SRE String pattern-matching library for scheme48")
664 (description
665 "String pattern-matching library for scheme48 based on the SRE
666regular-expression notation.")
667 (license bsd-3))))
07ef08a7
JD
668
669(define-public slib
670 (package
671 (name "slib")
672 (version "3b5")
673 (source (origin
674 (method url-fetch)
675 (uri (string-append "http://groups.csail.mit.edu/mac/ftpdir/scm/slib-"
676 version ".zip"))
677 (sha256
678 (base32
679 "0q0p2d53p8qw2592yknzgy2y1p5a9k7ppjx0cfrbvk6242c4mdpq"))))
680 (build-system gnu-build-system)
681 (arguments
682 `(#:tests? #f ; There is no check target.
683 #:phases
684 (modify-phases %standard-phases
685 (add-after 'install 'remove-bin-share
686 (lambda* (#:key inputs outputs #:allow-other-keys)
687 (delete-file-recursively
2e14ca19
TGR
688 (string-append (assoc-ref outputs "out") "/bin"))
689 #t))
07ef08a7
JD
690 (replace 'configure
691 (lambda* (#:key inputs outputs #:allow-other-keys)
2e14ca19
TGR
692 (invoke "./configure"
693 (string-append "--prefix="
694 (assoc-ref outputs "out"))))))))
07ef08a7
JD
695 (native-inputs `(("unzip" ,unzip)
696 ("texinfo" ,texinfo)))
30fd958e 697 (home-page "http://people.csail.mit.edu/jaffer/SLIB.html")
07ef08a7
JD
698 (synopsis "Compatibility and utility library for Scheme")
699 (description "SLIB is a portable Scheme library providing compatibility and
700utility functions for all standard Scheme implementations.")
701 (license (non-copyleft
702 "http://people.csail.mit.edu/jaffer/SLIB_COPYING.txt"
703 "Or see COPYING in the distribution."))))
704
8c48d0eb
JD
705(define-public scm
706 (package
707 (name "scm")
708 (version "5f2")
709 (source (origin
710 (method url-fetch)
711 (uri (string-append
712 "http://groups.csail.mit.edu/mac/ftpdir/scm/scm-"
713 version ".zip"))
714 (sha256
715 (base32
716 "050ijb51jm1cij9g3r89zl9rawsrikhbb5y8zb7lspb7bsxq5w99"))))
717 (build-system gnu-build-system)
718 (arguments
719 `(#:phases
720 (modify-phases %standard-phases
721 (replace 'configure
722 (lambda* (#:key inputs outputs #:allow-other-keys)
b44b14cd
TGR
723 (invoke "./configure"
724 (string-append "--prefix="
725 (assoc-ref outputs "out")))))
8c48d0eb
JD
726 (add-before 'build 'pre-build
727 (lambda* (#:key inputs #:allow-other-keys)
728 (substitute* "Makefile"
b44b14cd
TGR
729 (("ginstall-info") "install-info"))
730 #t))
8c48d0eb
JD
731 (replace 'build
732 (lambda* (#:key inputs outputs #:allow-other-keys)
733 (setenv "SCHEME_LIBRARY_PATH"
734 (string-append (assoc-ref inputs "slib")
735 "/lib/slib/"))
b44b14cd
TGR
736 (invoke "make" "scmlit" "CC=gcc")
737 (invoke "make" "all")))
8c48d0eb
JD
738 (add-after 'install 'post-install
739 (lambda* (#:key inputs outputs #:allow-other-keys)
b44b14cd
TGR
740 (let* ((out (assoc-ref outputs "out"))
741 (req (string-append out "/lib/scm/require.scm")))
742 (delete-file req)
743 (format (open req (logior O_WRONLY O_CREAT))
744 "(define (library-vicinity) ~s)\n"
745 (string-append (assoc-ref inputs "slib")
746 "/lib/slib/"))
747
748 ;; We must generate the slibcat file.
749 (invoke (string-append out "/bin/scm")
750 "-br" "new-catalog")))))))
8c48d0eb
JD
751 (inputs `(("slib" ,slib)))
752 (native-inputs `(("unzip" ,unzip)
753 ("texinfo" ,texinfo)))
754 (home-page "http://people.csail.mit.edu/jaffer/SCM")
755 (synopsis "Scheme implementation conforming to R5RS and IEEE P1178")
756 (description "GNU SCM is an implementation of Scheme. This
757implementation includes Hobbit, a Scheme-to-C compiler, which can
758generate C files whose binaries can be dynamically or statically
759linked with a SCM executable.")
760 (license lgpl3+)))
e2f9847b
TGR
761
762(define-public tinyscheme
763 (package
764 (name "tinyscheme")
765 (version "1.41")
766 (source (origin
767 (method url-fetch)
768 (uri (string-append "mirror://sourceforge/" name "/" name "/"
769 name "-" version "/" name "-" version ".zip"))
770 (sha256
771 (base32
772 "0yqma4jrjgj95f3hf30h542x97n8ah234n19yklbqq0phfsa08wf"))))
773 (build-system gnu-build-system)
774 (native-inputs
775 `(("unzip" ,unzip)))
776 (arguments
777 `(#:phases
778 (modify-phases %standard-phases
779 (replace 'unpack
780 (lambda* (#:key source #:allow-other-keys)
781 (invoke "unzip" source)
782 (chdir (string-append ,name "-" ,version))
783 #t))
784 (add-after 'unpack 'set-scm-directory
785 ;; Hard-code ‘our’ init.scm instead of looking in the current
786 ;; working directory, so invoking ‘scheme’ just works.
787 (lambda* (#:key outputs #:allow-other-keys)
788 (let* ((out (assoc-ref outputs "out"))
789 (scm (string-append out "/share/" ,name)))
790 (substitute* "scheme.c"
791 (("init.scm" all)
792 (string-append scm "/" all)))
793 #t)))
794 (delete 'configure) ; no configure script
795 (replace 'install
796 ;; There's no ‘install’ target. Install files manually.
797 (lambda* (#:key outputs #:allow-other-keys)
798 (let* ((out (assoc-ref outputs "out"))
799 (bin (string-append out "/bin"))
800 (doc (string-append out "/share/doc/"
801 ,name "-" ,version))
802 (include (string-append out "/include"))
803 (lib (string-append out "/lib"))
804 (scm (string-append out "/share/" ,name)))
805 (install-file "scheme" bin)
806 (install-file "Manual.txt" doc)
807 (install-file "scheme.h" include)
808 (install-file "libtinyscheme.so" lib)
809 (install-file "init.scm" scm)
810 #t))))
811 #:tests? #f)) ; no tests
812 (home-page "http://tinyscheme.sourceforge.net/")
813 (synopsis "Light-weight interpreter for the Scheme programming language")
814 (description
815 "TinyScheme is a light-weight Scheme interpreter that implements as large a
816subset of R5RS as was possible without getting very large and complicated.
817
818It's meant to be used as an embedded scripting interpreter for other programs.
819As such, it does not offer an Integrated Development Environment (@dfn{IDE}) or
820extensive toolkits, although it does sport a small (and optional) top-level
821loop.
822
823As an embedded interpreter, it allows multiple interpreter states to coexist in
824the same program, without any interference between them. Foreign functions in C
825can be added and values can be defined in the Scheme environment. Being quite a
826small program, it is easy to comprehend, get to grips with, and use.")
827 (license bsd-3))) ; there are no licence headers
44fa8431
AM
828
829(define-public stalin
830 (let ((commit "ed1c9e339c352b7a6fee40bb2a47607c3466f0be"))
831 ;; FIXME: The Stalin "source" contains C code generated by itself:
832 ;; 'stalin-AMD64.c', etc.
833 (package
834 (name "stalin")
835 (version "0.11")
836 (source (origin
837 ;; Use Pearlmutter's upstream branch with AMD64 patches
838 ;; applied. Saves us from including those 20M! patches
839 ;; in Guix. For more info, see:
840 ;; <ftp.ecn.purdue.edu/qobi/stalin-0.11-amd64-patches.tgz>
841 (method git-fetch)
842 (uri (git-reference
843 (url "https://github.com/barak/stalin.git")
844 (commit commit)))
845 (file-name (string-append name "-" version "-checkout"))
846 (sha256
847 (base32
848 "15a5gxj9v7jqlgkg0543gdflw0rbrir7fj5zgifnb33m074wiyhn"))
849 (modules '((guix build utils)))
850 (snippet
851 ;; remove gc libs from build, we have them as input
852 '(begin
853 (delete-file "gc6.8.tar.gz")
854 (delete-file-recursively "benchmarks")
855 (substitute* "build"
856 ((".*gc6.8.*") "")
857 ((" cd \\.\\.") "")
858 ((".*B include/libgc.a") "")
859 ((".*make.*") ""))
860 #t))))
861 (build-system gnu-build-system)
862 (arguments
863 `(#:make-flags (list "ARCH_OPTS=-freg-struct-return")
864 #:phases
865 (modify-phases %standard-phases
866 (replace 'configure
867 (lambda* (#:key outputs #:allow-other-keys)
868 (let* ((out (assoc-ref outputs "out"))
869 (include-out (string-append out "/include")))
870 (invoke "./build")
871 (for-each (lambda (fname)
872 (install-file fname include-out))
873 (find-files "include"))
874 (substitute* "makefile"
875 (("\\./include") include-out))
876 (substitute* "post-make"
877 (("`pwd`") out))
878 #t)))
879 (delete 'check)
880 (replace 'install
881 (lambda* (#:key outputs #:allow-other-keys)
882 (let ((out (assoc-ref outputs "out")))
883 (install-file "stalin.1"
884 (string-append out "/share/man/man1"))
885 (install-file "stalin"
886 (string-append out "/bin"))
887 #t))))))
888 (inputs
889 `(("libx11" ,libx11)))
890 (propagated-inputs
891 `(("libgc" ,libgc)))
892 (supported-systems '("x86_64-linux"))
893 (home-page "https://engineering.purdue.edu/~qobi/papers/fdlcc.pdf")
894 (synopsis "Brutally efficient Scheme compiler")
895 (description
896 "Stalin is an aggressively optimizing whole-program compiler
897for Scheme that does polyvariant interprocedural flow analysis,
898flow-directed interprocedural escape analysis, flow-directed
899lightweight CPS conversion, flow-directed lightweight closure
900conversion, flow-directed interprocedural lifetime analysis, automatic
901in-lining, unboxing, and flow-directed program-specific and
902program-point-specific low-level representation selection and code
903generation.")
904 (license gpl2+))))
e83c7d1a
PN
905
906(define-public femtolisp
1074ec1d
BG
907 (let ((commit "ec7601076a976f845bc05ad6bd3ed5b8cde58a97")
908 (revision "2"))
e83c7d1a
PN
909 (package
910 (name "femtolisp")
911 (version (string-append "0.0.0-" revision "." (string-take commit 7)))
912 (source (origin
913 (method git-fetch)
914 (uri (git-reference
915 (url "https://github.com/JeffBezanson/femtolisp.git")
916 (commit commit)))
917 (file-name (string-append name "-" version "-checkout"))
918 (sha256
919 (base32
1074ec1d 920 "1fcyiqlqn27nd4wxi27km8mhmlzpzzsxzpwsl1bxbmhraq468njw"))))
e83c7d1a
PN
921 ;; See "utils.h" for supported systems. Upstream bug:
922 ;; https://github.com/JeffBezanson/femtolisp/issues/25
923 (supported-systems
924 (fold delete %supported-systems
925 '("armhf-linux" "mips64el-linux" "aarch64-linux")))
926 (build-system gnu-build-system)
927 (arguments
928 `(#:make-flags '("CC=gcc" "release")
929 #:test-target "test"
930 #:phases
931 (modify-phases %standard-phases
723f3325 932 (delete 'bootstrap)
e83c7d1a
PN
933 (delete 'configure) ; No configure script
934 (replace 'install ; Makefile has no 'install phase
935 (lambda* (#:key outputs #:allow-other-keys)
936 (let* ((out (assoc-ref outputs "out"))
937 (bin (string-append out "/bin")))
938 (install-file "flisp" bin)
939 #t)))
940 ;; The flisp binary is now available, run bootstrap to
941 ;; generate flisp.boot and afterwards runs make test.
942 (add-after 'install 'bootstrap-gen-and-test
943 (lambda* (#:key outputs #:allow-other-keys)
944 (let* ((out (assoc-ref outputs "out"))
945 (bin (string-append out "/bin")))
723f3325
RW
946 (invoke "./bootstrap.sh")
947 (install-file "flisp.boot" bin)
948 #t))))))
e83c7d1a
PN
949 (synopsis "Scheme-like lisp implementation")
950 (description
951 "@code{femtolisp} is a scheme-like lisp implementation with a
952simple, elegant Scheme dialect. It is a lisp-1 with lexical scope.
953The core is 12 builtin special forms and 33 builtin functions.")
954 (home-page "https://github.com/JeffBezanson/femtolisp")
955 (license bsd-3))))
eac7ed19
GH
956
957(define-public gauche
958 (package
959 (name "gauche")
3e886719 960 (version "0.9.9")
eac7ed19
GH
961 (home-page "http://practical-scheme.net/gauche/index.html")
962 (source
963 (origin
964 (method url-fetch)
965 (uri (string-append
966 "mirror://sourceforge/gauche/Gauche/Gauche-"
967 version ".tgz"))
968 (sha256
3e886719 969 (base32 "1yzpszhw52vkpr65r5d4khf3489mnnvnw58dd2wsvvx7499k5aac"))
eac7ed19
GH
970 (modules '((guix build utils)))
971 (snippet '(begin
3e886719 972 ;; Remove libatomic-ops.
eac7ed19
GH
973 (delete-file-recursively "gc/libatomic_ops")
974 #t))))
975 (build-system gnu-build-system)
976 (inputs
977 `(("libatomic-ops" ,libatomic-ops)
978 ("zlib" ,zlib)))
979 (native-inputs
980 `(("texinfo" ,texinfo)
3e886719
TGR
981 ("openssl" ,openssl) ; needed for tests
982 ("pkg-config" ,pkg-config))) ; needed to find external libatomic-ops
eac7ed19
GH
983 (arguments
984 `(#:phases
985 (modify-phases %standard-phases
986 (add-after 'unpack 'patch-/bin/sh
3e886719 987 ;; Needed only for tests.
eac7ed19
GH
988 (lambda _
989 (substitute* '("configure"
990 "test/www.scm"
991 "ext/tls/test.scm"
992 "gc/configure"
993 "lib/gauche/configure.scm"
994 "lib/gauche/package/util.scm"
995 "lib/gauche/process.scm")
996 (("/bin/sh") (which "sh")))
997 #t))
998 (add-after 'build 'build-doc
6c4a951a
GH
999 (lambda _
1000 (with-directory-excursion "doc"
1001 (invoke "make" "info"))
eac7ed19
GH
1002 #t))
1003 (add-before 'check 'patch-normalize-test
3e886719
TGR
1004 ;; Neutralize sys-normalize-pathname test as it relies on
1005 ;; the home directory; (setenv "HOME" xx) isn't enough).
eac7ed19
GH
1006 (lambda _
1007 (substitute* "test/system.scm"
1008 (("~/abc") "//abc"))
1009 #t))
1010 (add-before 'check 'patch-network-tests
3e886719 1011 ;; Remove net checks.
eac7ed19
GH
1012 (lambda _
1013 (substitute* "ext/Makefile"
1014 (("binary net termios") "binary termios"))
1015 #t))
1016 (add-after 'install 'install-docs
6c4a951a
GH
1017 (lambda _
1018 (with-directory-excursion "doc"
1019 (invoke "make" "install"))
eac7ed19
GH
1020 #t)))))
1021 (synopsis "Scheme scripting engine")
1022 (description "Gauche is a R7RS Scheme scripting engine aiming at being a
1023handy tool that helps programmers and system administrators to write small to
1024large scripts quickly. Quick startup, built-in system interface, native
1025multilingual support are some of the goals. Gauche comes with a package
1026manager/installer @code{gauche-package} which can download, compile, install
6c4a951a 1027and list gauche extension packages.")
eac7ed19 1028 (license bsd-3)))