gnu: maxima: Ensure binutils are available at runtime.
[jackhill/guix/guix.git] / gnu / packages / guile.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
a614ce38 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
b515822d 3;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
c5793e7e 4;;; Copyright © 2015, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
44a2bdf8 5;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
71311e4e 6;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
76e6e663 7;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
4176eb19 8;;; Copyright © 2016 Eraim Flashner <efraim@flashner.co.il>
5245399f 9;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
8a666bc5 10;;; Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
3b5783fc 11;;; Copyright © 2016 Amirouche <amirouche@hypermove.net>
c5793e7e 12;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
aaf1bdc3 13;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
f252d6df 14;;; Copyright © 2017 David Thompson <davet@gnu.org>
b3542d77 15;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
61583094 16;;; Copyright © 2017 Theodoros Foradis <theodoros.for@openmailbox.org>
1722d680 17;;;
233e7676 18;;; This file is part of GNU Guix.
1722d680 19;;;
233e7676 20;;; GNU Guix is free software; you can redistribute it and/or modify it
1722d680
LC
21;;; under the terms of the GNU General Public License as published by
22;;; the Free Software Foundation; either version 3 of the License, or (at
23;;; your option) any later version.
24;;;
233e7676 25;;; GNU Guix is distributed in the hope that it will be useful, but
1722d680
LC
26;;; WITHOUT ANY WARRANTY; without even the implied warranty of
27;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28;;; GNU General Public License for more details.
29;;;
30;;; You should have received a copy of the GNU General Public License
233e7676 31;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
1722d680 32
1ffa7090 33(define-module (gnu packages guile)
71e0f217 34 #:use-module ((guix licenses) #:prefix license:)
59a43334 35 #:use-module (gnu packages)
28a1041f 36 #:use-module (gnu packages admin) ;;for tree
472fc855 37 #:use-module (gnu packages aspell)
9c782445 38 #:use-module (gnu packages bash)
1ffa7090 39 #:use-module (gnu packages bdw-gc)
148585c2 40 #:use-module (gnu packages compression)
1ffa7090
LC
41 #:use-module (gnu packages gawk)
42 #:use-module (gnu packages gperf)
43 #:use-module (gnu packages libffi)
44 #:use-module (gnu packages autotools)
f906d30c 45 #:use-module (gnu packages flex)
1ffa7090 46 #:use-module (gnu packages libunistring)
7119cca8 47 #:use-module (gnu packages linux)
1ffa7090
LC
48 #:use-module (gnu packages m4)
49 #:use-module (gnu packages multiprecision)
50 #:use-module (gnu packages pkg-config)
51 #:use-module (gnu packages readline)
ef02e1e9 52 #:use-module (gnu packages ncurses)
87d836b2 53 #:use-module (gnu packages ed)
ce0614dd 54 #:use-module (gnu packages base)
f906d30c 55 #:use-module (gnu packages texinfo)
01497dfe 56 #:use-module (gnu packages man)
f906d30c 57 #:use-module (gnu packages gettext)
b416aadf 58 #:use-module (gnu packages databases)
9d373377 59 #:use-module (gnu packages python)
5649c8cd
DT
60 #:use-module (gnu packages gl)
61 #:use-module (gnu packages sdl)
62 #:use-module (gnu packages maths)
63 #:use-module (gnu packages image)
bd233722 64 #:use-module (gnu packages version-control)
bd9af610
AK
65 #:use-module (gnu packages xdisorg)
66 #:use-module (gnu packages xorg)
1722d680 67 #:use-module (guix packages)
87f5d366 68 #:use-module (guix download)
6bc24063 69 #:use-module (guix git-download)
32795fcf 70 #:use-module (guix build-system gnu)
6bc24063 71 #:use-module (guix build-system trivial)
32795fcf
LC
72 #:use-module (guix utils)
73 #:use-module (ice-9 match))
1722d680
LC
74
75;;; Commentary:
76;;;
c44899a2 77;;; GNU Guile, and modules and extensions.
1722d680
LC
78;;;
79;;; Code:
80
c44899a2
LC
81(define-public guile-1.8
82 (package
83 (name "guile")
84 (version "1.8.8")
85 (source (origin
87f5d366 86 (method url-fetch)
0db342a5 87 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
88 ".tar.gz"))
89 (sha256
90 (base32
01eafd38 91 "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
fc1adab1 92 (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
c44899a2
LC
93 (build-system gnu-build-system)
94 (arguments '(#:configure-flags '("--disable-error-on-warning")
c44899a2
LC
95
96 ;; Insert a phase before `configure' to patch things up.
97 #:phases (alist-cons-before
98 'configure
2f4fbe1c 99 'patch-stuff
c44899a2
LC
100 (lambda* (#:key outputs #:allow-other-keys)
101 ;; Add a call to `lt_dladdsearchdir' so that
102 ;; `libguile-readline.so' & co. are in the
103 ;; loader's search path.
104 (substitute* "libguile/dynl.c"
2f4fbe1c
LC
105 (("lt_dlinit.*$" match)
106 (format #f
107 " ~a~% lt_dladdsearchdir(\"~a/lib\");~%"
108 match
109 (assoc-ref outputs "out"))))
110
111 ;; The usual /bin/sh...
112 (substitute* "ice-9/popen.scm"
113 (("/bin/sh") (which "sh"))))
c44899a2 114 %standard-phases)))
01eafd38 115 (inputs `(("gawk" ,gawk)
c44899a2
LC
116 ("readline" ,readline)))
117
118 ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
119 ;; propagated.
120 (propagated-inputs `(("gmp" ,gmp)
be11b102 121 ("libltdl" ,libltdl)))
c44899a2
LC
122
123 ;; When cross-compiling, a native version of Guile itself is needed.
124 (self-native-input? #t)
125
9be8d7c8
LC
126 (native-search-paths
127 (list (search-path-specification
128 (variable "GUILE_LOAD_PATH")
af070955 129 (files '("share/guile/site")))))
9be8d7c8 130
f50d2669 131 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 132 (description
a22dc0c4
LC
133 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
134official extension language of the GNU system. It is an implementation of
135the Scheme language which can be easily embedded in other applications to
136provide a convenient means of extending the functionality of the application
137without requiring the source code to be rewritten.")
6fd52309 138 (home-page "https://www.gnu.org/software/guile/")
71e0f217 139 (license license:lgpl2.0+)))
c44899a2
LC
140
141(define-public guile-2.0
142 (package
143 (name "guile")
b5efd14a 144 (version "2.0.14")
c44899a2 145 (source (origin
87f5d366 146 (method url-fetch)
0db342a5 147 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
148 ".tar.xz"))
149 (sha256
150 (base32
b5efd14a 151 "10lxc6l5alf3lzbs3ihnbfy6dfcrsyf8667wa57f26vf4mk2ai78"))))
c44899a2
LC
152 (build-system gnu-build-system)
153 (native-inputs `(("pkgconfig" ,pkg-config)))
154 (inputs `(("libffi" ,libffi)
9c782445 155 ("readline" ,readline)
88da729f
JN
156 ,@(libiconv-if-needed)
157 ,@(if (target-mingw?) '() `(("bash" ,bash)))))
c44899a2
LC
158 (propagated-inputs
159 `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
160 ;; reads `-lltdl -lunistring', adding them here will add the needed
161 ;; `-L' flags. As for why the `.la' file lacks the `-L' flags, see
162 ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
163 ("libunistring" ,libunistring)
be11b102
LC
164
165 ;; Depend on LIBLTDL, not LIBTOOL. That way, we avoid some the extra
166 ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
167 ("libltdl" ,libltdl)
c44899a2
LC
168
169 ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
170 ;; must be propagated.
bda1bc6c 171 ("bdw-gc" ,libgc)
c44899a2
LC
172 ("gmp" ,gmp)))
173
174 (self-native-input? #t)
175
9bf62d9b
LC
176 (outputs '("out" "debug"))
177
8ffaa93b 178 (arguments
b5e0c870
LC
179 `(#:configure-flags '("--disable-static") ;saves 3MiB
180 #:phases (alist-cons-before
8ffaa93b
LC
181 'configure 'pre-configure
182 (lambda* (#:key inputs #:allow-other-keys)
58b4e8e8 183 ;; Tell (ice-9 popen) the file name of Bash.
8ffaa93b
LC
184 (let ((bash (assoc-ref inputs "bash")))
185 (substitute* "module/ice-9/popen.scm"
88da729f
JN
186 ;; If bash is #f allow fallback for user to provide
187 ;; "bash" in PATH. This happens when cross-building to
188 ;; MinGW for which we do not have Bash yet.
8ffaa93b 189 (("/bin/sh")
88da729f
JN
190 ,@(if (target-mingw?)
191 '((if bash
192 (string-append bash "/bin/bash")
193 "bash"))
194 '((string-append bash "/bin/bash")))))))
db619089 195 %standard-phases)))
8ffaa93b 196
9be8d7c8
LC
197 (native-search-paths
198 (list (search-path-specification
199 (variable "GUILE_LOAD_PATH")
af070955 200 (files '("share/guile/site/2.0")))
9be8d7c8
LC
201 (search-path-specification
202 (variable "GUILE_LOAD_COMPILED_PATH")
ca408580 203 (files '("lib/guile/2.0/site-ccache"
05f1e956 204 "share/guile/site/2.0")))))
9be8d7c8 205
f50d2669 206 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 207 (description
a22dc0c4
LC
208 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
209official extension language of the GNU system. It is an implementation of
210the Scheme language which can be easily embedded in other applications to
211provide a convenient means of extending the functionality of the application
212without requiring the source code to be rewritten.")
6fd52309 213 (home-page "https://www.gnu.org/software/guile/")
71e0f217 214 (license license:lgpl3+)))
c44899a2 215
fa29b199
LC
216(define-public guile-2.0/fixed
217 ;; A package of Guile 2.0 that's rarely changed. It is the one used
218 ;; in the `base' module, and thus changing it entails a full rebuild.
c62a31ca
LC
219 (package
220 (inherit guile-2.0)
d5ec5ed7 221 (properties '((hidden? . #t))))) ;people should install 'guile-2.0'
c62a31ca 222
f6396d86 223(define-public guile-2.2
f906d30c 224 (package (inherit guile-2.0)
f6396d86 225 (name "guile")
031e6087 226 (version "2.2.2")
4eae7980
LC
227 (source (origin
228 (method url-fetch)
80a72572
AW
229 (uri (string-append "mirror://gnu/guile/guile-" version
230 ".tar.lz"))
4eae7980
LC
231 (sha256
232 (base32
031e6087 233 "1dnh75h4rkx1zflpsngznkwcd6afn6zrc5x3xq7n946pm5bnx5bq"))
d9f0788a
LC
234 (modules '((guix build utils)))
235
236 ;; Remove the pre-built object files. Instead, build everything
237 ;; from source, at the expense of significantly longer build
238 ;; times (almost 3 hours on a 4-core Intel i5).
239 (snippet '(for-each delete-file
240 (find-files "prebuilt" "\\.go$")))))
4fbd0f4f 241 (properties '((timeout . 72000) ;20 hours
16b0f205 242 (max-silent-time . 36000))) ;10 hours (needed on ARM
1577a658 243 ; when heavily loaded)
dd90ed89
DT
244 (native-search-paths
245 (list (search-path-specification
246 (variable "GUILE_LOAD_PATH")
247 (files '("share/guile/site/2.2")))
248 (search-path-specification
249 (variable "GUILE_LOAD_COMPILED_PATH")
31769b9f 250 (files '("lib/guile/2.2/site-ccache"
dd90ed89 251 "share/guile/site/2.2")))))))
4eae7980 252
5cd074ea
LC
253(define-public guile-next
254 (deprecated-package "guile-next" guile-2.2))
255
8f4acad7
LC
256(define (guile-variant-package-name prefix)
257 (lambda (name)
258 "Return NAME with PREFIX instead of \"guile-\", when applicable."
259 (if (string-prefix? "guile-" name)
260 (string-append prefix "-"
261 (string-drop name
262 (string-length "guile-")))
263 name)))
947a5d47
LC
264
265(define package-for-guile-2.2
266 ;; A procedure that rewrites the dependency tree of the given package to use
f6396d86
LC
267 ;; GUILE-2.2 instead of GUILE-2.0.
268 (package-input-rewriting `((,guile-2.0 . ,guile-2.2))
8f4acad7
LC
269 (guile-variant-package-name "guile2.2")))
270
271(define package-for-guile-2.0
272 ;; Likewise, but the other way around. :-)
273 (package-input-rewriting `((,guile-2.2 . ,guile-2.0))
274 (guile-variant-package-name "guile2.0")))
947a5d47 275
4eae7980 276(define-public guile-for-guile-emacs
f6396d86 277 (package (inherit guile-2.2)
4eae7980
LC
278 (name "guile-for-guile-emacs")
279 (version "20150510.d8d9a8d")
f906d30c
CAW
280 (source (origin
281 (method git-fetch)
282 (uri (git-reference
4eae7980
LC
283 (url "git://git.hcoop.net/git/bpt/guile.git")
284 (commit "d8d9a8da05ec876acba81a559798eb5eeceb5a17")))
f906d30c
CAW
285 (sha256
286 (base32
4eae7980 287 "00sprsshy16y8pxjy126hr2adqcvvzzz96hjyjwgg8swva1qh6b0"))))
f906d30c
CAW
288 (arguments
289 (substitute-keyword-arguments `(;; Tests aren't passing for now.
290 ;; Obviously we should re-enable this!
291 #:tests? #f
f6396d86 292 ,@(package-arguments guile-2.2))
f906d30c
CAW
293 ((#:phases phases)
294 `(modify-phases ,phases
295 (add-after 'unpack 'autogen
296 (lambda _
297 (zero? (system* "sh" "autogen.sh"))))
298 (add-before 'autogen 'patch-/bin/sh
299 (lambda _
300 (substitute* "build-aux/git-version-gen"
301 (("#!/bin/sh") (string-append "#!" (which "sh"))))
302 #t))))))
303 (native-inputs
304 `(("autoconf" ,autoconf)
305 ("automake" ,automake)
306 ("libtool" ,libtool)
307 ("flex" ,flex)
308 ("texinfo" ,texinfo)
b94a6ca0 309 ("gettext" ,gettext-minimal)
f6396d86 310 ,@(package-native-inputs guile-2.2)))
daeb61f7
RW
311 ;; Same as in guile-2.0
312 (native-search-paths
313 (list (search-path-specification
314 (variable "GUILE_LOAD_PATH")
315 (files '("share/guile/site/2.0")))
316 (search-path-specification
317 (variable "GUILE_LOAD_COMPILED_PATH")
31769b9f 318 (files '("lib/guile/2.0/site-ccache"
daeb61f7 319 "share/guile/site/2.0")))))))
be3feafe 320
71311e4e
RW
321;; There has not been any release yet.
322(define-public guildhall
323 (let ((commit "2fe2cc539f4b811bbcd69e58738db03eb5a2b778")
324 (revision "1"))
325 (package
326 (name "guildhall")
327 (version (string-append "0-" revision "." (string-take commit 9)))
328 (source (origin
329 (method git-fetch)
330 (uri (git-reference
331 (url "https://github.com/ijp/guildhall.git")
332 (commit commit)))
333 (file-name (string-append name "-" version "-checkout"))
334 (sha256
335 (base32
336 "115bym7bg66h3gs399yb2vkzc2ygriaqsn4zbrg8f054mgy8wzn1"))))
337 (build-system gnu-build-system)
338 (arguments
339 `(#:phases
340 (modify-phases %standard-phases
341 ;; Tests fail without this fix because they try to load the bash
342 ;; executable as a Scheme file. See bug report at
343 ;; https://github.com/ijp/guildhall/issues/22
344 (add-after 'unpack 'fix-bug-22
345 (lambda _
346 (substitute* "Makefile.am"
347 (("TESTS_ENVIRONMENT=.*")
348 "AM_TESTS_ENVIRONMENT=srcdir=$(abs_top_srcdir)/tests/
349TEST_EXTENSIONS = .scm
350SCM_LOG_COMPILER= $(top_builddir)/env $(GUILE)
351AM_SCM_LOG_FLAGS = --no-auto-compile -s")
352 ;; FIXME: one of the database tests fails for unknown
353 ;; reasons. It does not fail when run outside of Guix.
354 (("tests/database.scm") ""))
355 #t))
356 (add-before 'configure 'autogen
357 (lambda _
358 (zero? (system* "sh" "autogen.sh")))))))
359 (inputs
360 `(("guile" ,guile-2.0)))
361 (native-inputs
362 `(("zip" ,zip) ; for tests
363 ("autoconf" ,autoconf)
364 ("automake" ,automake)
365 ("texinfo" ,texinfo)))
366 (synopsis "Package manager for Guile")
367 (description
368 "Guildhall is a package manager written for Guile Scheme. A guild is
369an association of independent craftspeople. A guildhall is where they meet.
370This Guildhall aims to make a virtual space for Guile wizards and journeyfolk
371to share code.
372
373On a practical level, Guildhall lets you share Scheme modules and programs
374over the internet, and install code that has been shared by others. Guildhall
375can handle dependencies, so when a program requires several libraries, and
376each of those has further dependencies, all of the prerequisites for the
377program can be installed in one go.")
378 (home-page "https://github.com/ijp/guildhall")
379 (license license:gpl3+))))
380
c44899a2
LC
381\f
382;;;
383;;; Extensions.
384;;;
385
7119cca8
ML
386(define-public artanis
387 (package
388 (name "artanis")
dfcd02c0 389 (version "0.2.1")
7119cca8
ML
390 (source (origin
391 (method url-fetch)
ad01c7aa 392 (uri (string-append "mirror://gnu/artanis/artanis-"
7119cca8
ML
393 version ".tar.gz"))
394 (sha256
395 (base32
dfcd02c0 396 "041ajcg2pz918kd9iqcj4inpzddc3impvz3r2nhlpbv8zrz011hn"))))
7119cca8
ML
397 (build-system gnu-build-system)
398 ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
dfcd02c0 399 (inputs `(("guile" ,guile-2.2)))
7119cca8
ML
400 (native-inputs `(("bash" ,bash) ;for the `source' builtin
401 ("pkgconfig" ,pkg-config)
402 ("util-linux" ,util-linux))) ;for the `script' command
403 (arguments
404 '(#:make-flags
405 ;; TODO: The documentation must be built with the `docs' target.
406 (let* ((out (assoc-ref %outputs "out"))
dfcd02c0
LC
407 (scm (string-append out "/share/guile/site/2.2"))
408 (go (string-append out "/lib/guile/2.2/site-ccache")))
7119cca8 409 ;; Don't use (%site-dir) for site paths.
dfcd02c0
LC
410 (list (string-append "MOD_PATH=" scm)
411 (string-append "MOD_COMPILED_PATH=" go)))
7119cca8
ML
412 #:test-target "test"
413 #:phases
414 (modify-phases %standard-phases
dfcd02c0 415 (add-before 'install 'substitute-root-dir
7119cca8
ML
416 (lambda* (#:key outputs #:allow-other-keys)
417 (let ((out (assoc-ref outputs "out")))
418 (substitute* "Makefile" ;ignore the execution of bash.bashrc
419 ((" /etc/bash.bashrc") " /dev/null"))
420 (substitute* "Makefile" ;set the root of config files to OUT
421 ((" /etc") (string-append " " out "/etc")))
422 (mkdir-p (string-append out "/bin")) ;for the `art' executable
dfcd02c0
LC
423 #t)))
424 (add-after 'install 'wrap-art
425 (lambda* (#:key outputs #:allow-other-keys)
426 (let* ((out (assoc-ref outputs "out"))
427 (bin (string-append out "/bin"))
428 (scm (string-append out "/share/guile/site/2.2"))
429 (go (string-append out "/lib/guile/2.2/site-ccache")))
430 (wrap-program (string-append bin "/art")
431 `("GUILE_LOAD_PATH" ":" prefix (,scm))
432 `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,go)))
433 #t))))))
7119cca8
ML
434 (synopsis "Web application framework written in Guile")
435 (description "GNU Artanis is a web application framework written in Guile
436Scheme. A web application framework (WAF) is a software framework that is
437designed to support the development of dynamic websites, web applications, web
438services and web resources. The framework aims to alleviate the overhead
439associated with common activities performed in web development. Artanis
440provides several tools for web development: database access, templating
441frameworks, session management, URL-remapping for RESTful, page caching, and
442more.")
443 (home-page "https://www.gnu.org/software/artanis/")
71e0f217 444 (license (list license:gpl3+ license:lgpl3+)))) ;dual license
7119cca8 445
d6d9f1f7 446(define-public guile-reader
1722d680 447 (package
d6d9f1f7 448 (name "guile-reader")
77aa0887 449 (version "0.6.2")
d6d9f1f7
LC
450 (source (origin
451 (method url-fetch)
452 (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
453 version ".tar.gz"))
454 (sha256
455 (base32
77aa0887 456 "0592s2s8ampqmqwilc4fvcild6rb9gy79di6vxv5kcdmv23abkgx"))))
d6d9f1f7
LC
457 (build-system gnu-build-system)
458 (native-inputs `(("pkgconfig" ,pkg-config)
2fa077f3 459 ("gperf" ,gperf-3.0)))
bdf1022d 460 (inputs `(("guile" ,guile-2.2)))
d6d9f1f7
LC
461 (synopsis "Framework for building readers for GNU Guile")
462 (description
463 "Guile-Reader is a simple framework for building readers for GNU Guile.
1722d680
LC
464
465The idea is to make it easy to build procedures that extend Guile’s read
35b9e423 466procedure. Readers supporting various syntax variants can easily be written,
1722d680 467possibly by re-using existing “token readers” of a standard Scheme
35b9e423 468readers. For example, it is used to implement Skribilo’s R5RS-derived
1722d680
LC
469document syntax.
470
471Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
472hopefully more powerful and flexible (for instance, one may instantiate as
473many readers as needed).")
d6d9f1f7 474 (home-page "http://www.nongnu.org/guile-reader/")
71e0f217 475 (license license:gpl3+)))
1722d680 476
bdf1022d
LC
477(define-public guile2.0-reader
478 (package-for-guile-2.0 guile-reader))
517fce63 479(define-public guile2.2-reader
bdf1022d 480 (deprecated-package "guile2.2-reader" guile-reader))
517fce63 481
ef02e1e9
LC
482(define-public guile-ncurses
483 (package
484 (name "guile-ncurses")
958d357a 485 (version "2.2")
ef02e1e9
LC
486 (source (origin
487 (method url-fetch)
488 (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
489 version ".tar.gz"))
490 (sha256
491 (base32
958d357a 492 "1wvggbr4xv8idh1hzd8caj4xfp4pln78a7w1wqzd4zgzwmnzxr2f"))))
ef02e1e9
LC
493 (build-system gnu-build-system)
494 (inputs `(("ncurses" ,ncurses)
81eaa3f8 495 ("guile" ,guile-2.2)))
0881b616 496 (native-inputs `(("pkg-config" ,pkg-config)))
ef02e1e9 497 (arguments
2c6b7c7d 498 '(#:configure-flags (list "--with-ncursesw" ; Unicode support
0881b616 499 "--with-gnu-filesystem-hierarchy")
fa37f21b
EF
500 #:phases
501 (modify-phases %standard-phases
8c4e99cc 502 (add-before 'build 'fix-libguile-ncurses-file-name
fa37f21b 503 (lambda* (#:key outputs #:allow-other-keys)
8c4e99cc
JD
504 (and (zero? (system* "make" "install"
505 "-C" "src/ncurses"
506 "-j" (number->string
507 (parallel-job-count))))
508 (let* ((out (assoc-ref outputs "out"))
509 (dir "src/ncurses")
510 (files (find-files dir ".scm")))
511 (substitute* files
512 (("\"libguile-ncurses\"")
81eaa3f8 513 (format #f "\"~a/lib/guile/2.2/libguile-ncurses\""
8c4e99cc
JD
514 out)))
515 #t)))))))
d81850d4 516 (home-page "https://www.gnu.org/software/guile-ncurses/")
f50d2669 517 (synopsis "Guile bindings to ncurses")
ef02e1e9 518 (description
12bcf94a 519 "guile-ncurses provides Guile language bindings for the ncurses
79c311b8 520library.")
71e0f217 521 (license license:lgpl3+)))
ef02e1e9 522
4d02e9ff
DM
523(define-public guile-ncurses/gpm
524 (package
525 (inherit guile-ncurses)
526 (name "guile-ncurses-with-gpm")
527 (inputs `(("ncurses" ,ncurses/gpm)
528 ("guile" ,guile-2.2)))))
529
87d836b2
LC
530(define-public mcron
531 (package
532 (name "mcron")
d12c626c 533 (version "1.0.8")
87d836b2
LC
534 (source (origin
535 (method url-fetch)
536 (uri (string-append "mirror://gnu/mcron/mcron-"
537 version ".tar.gz"))
538 (sha256
539 (base32
d12c626c 540 "0zparwgf01jgl1x53ik71ghabldq6zz18ha4dscps1i0qrzgap1b"))
fc1adab1 541 (patches (search-patches "mcron-install.patch"))))
87d836b2 542 (build-system gnu-build-system)
b6c18d6a
LC
543 (native-inputs `(("pkg-config" ,pkg-config)))
544 (inputs `(("ed" ,ed) ("which" ,which) ("guile" ,guile-2.0)))
6fd52309 545 (home-page "https://www.gnu.org/software/mcron/")
f50d2669 546 (synopsis "Run jobs at scheduled times")
87d836b2 547 (description
79c311b8 548 "GNU Mcron is a complete replacement for Vixie cron. It is used to run
a22dc0c4 549tasks on a schedule, such as every hour or every Monday. Mcron is written in
79c311b8
LC
550Guile, so its configuration can be written in Scheme; the original cron
551format is also supported.")
71e0f217 552 (license license:gpl3+)))
87d836b2 553
01497dfe
LC
554(define-public mcron2
555 ;; This is mthl's mcron development branch, not yet merged in mcron.
556 (let ((commit "31baff1a5187d8ddc89324cbe42dbeffc309c962"))
557 (package
558 (inherit mcron)
559 (name "mcron2")
560 (version (string-append (package-version mcron) "-0."
561 (string-take commit 7)))
562 (source (origin
563 (method git-fetch)
564 (uri (git-reference
565 (url "https://notabug.org/mthl/mcron/")
566 (commit commit)))
567 (sha256
568 (base32
569 "1h5wxy997hxi718hpx419c23q09939kbxrjbbq54lv0cgw1bb63z"))
570 (file-name (string-append name "-" version "-checkout"))))
571 (native-inputs
572 `(("autoconf" ,autoconf)
573 ("automake" ,automake)
574 ("pkg-config" ,pkg-config)
575 ("texinfo" ,texinfo)
576 ("help2man" ,help2man)))
577 (arguments
578 `(#:modules ((ice-9 match) (ice-9 ftw)
579 ,@%gnu-build-system-modules)
580
581 #:phases (modify-phases %standard-phases
582 (add-after 'unpack 'bootstrap
583 (lambda _
584 (zero? (system* "autoreconf" "-vfi"))))
585 (add-after 'install 'wrap-mcron
586 (lambda* (#:key outputs #:allow-other-keys)
587 ;; Wrap the 'mcron' command to refer to the right
588 ;; modules.
589 (let* ((out (assoc-ref outputs "out"))
590 (bin (string-append out "/bin"))
591 (site (string-append
592 out "/share/guile/site")))
593 (match (scandir site)
594 (("." ".." version)
595 (let ((modules (string-append site "/" version)))
596 (wrap-program (string-append bin "/mcron")
597 `("GUILE_LOAD_PATH" ":" prefix
598 (,modules))
599 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
600 (,modules)))
601 #t))))))))))))
602
814b18e5
AS
603(define-public guile-ics
604 (package
605 (name "guile-ics")
606 (version "0.1.1")
607 (source (origin
608 (method git-fetch)
609 (uri (git-reference
610 (url "https://github.com/artyom-poptsov/guile-ics")
611 (commit "v0.1.1")))
612 (file-name (string-append name "-" version "-checkout"))
613 (sha256
614 (base32
615 "1pvg6j48inpbq47hq00yh5hhl2qd2srvrx5yjl7w7ky1jsjadp86"))))
616 (build-system gnu-build-system)
617 (arguments
618 '(#:phases (modify-phases %standard-phases
619 (add-before 'configure 'autoreconf
620 (lambda _
621 ;; Repository comes with a broken symlink
622 (delete-file "README")
623 (symlink "README.org" "README")
624 (zero? (system* "autoreconf" "-fi")))))))
625 (native-inputs
626 `(("autoconf" ,(autoconf-wrapper))
627 ("automake" ,automake)
628 ("texinfo" ,texinfo)
629 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
630 ("gettext" ,gettext-minimal)
631 ("pkg-config" ,pkg-config)))
632 (inputs `(("guile" ,guile-2.0) ("which" ,which)))
1b0f266e 633 (propagated-inputs `(("guile-lib" ,guile2.0-lib)))
814b18e5
AS
634 (home-page "https://github.com/artyom-poptsov/guile-ics")
635 (synopsis "Guile parser library for the iCalendar format")
636 (description
637 "Guile-ICS is an iCalendar (RFC5545) format parser library written in
638pure Scheme. The library can be used to read and write iCalendar data.
639
640The library is shipped with documentation in Info format and usage examples.")
71e0f217 641 (license license:gpl3+)))
814b18e5 642
3e9066fc
LC
643(define-public guile-lib
644 (package
645 (name "guile-lib")
30f17d73 646 (version "0.2.5.1")
3e9066fc 647 (source (origin
af126875
MC
648 (method url-fetch)
649 (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
650 version ".tar.gz"))
651 (sha256
652 (base32
30f17d73 653 "19q420i3is3d4jmkdqs5y7ir7ipp4s795saflqgwf6617cx2zpj4"))))
3e9066fc
LC
654 (build-system gnu-build-system)
655 (arguments
af126875
MC
656 '(#:make-flags
657 '("GUILE_AUTO_COMPILE=0") ;to prevent guild errors
658 #:phases
659 (modify-phases %standard-phases
660 (add-before 'configure 'patch-module-dir
661 (lambda _
662 (substitute* "src/Makefile.in"
663 (("^moddir = ([[:graph:]]+)")
664 "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
665 (("^godir = ([[:graph:]]+)")
666 "godir = \
bf62b8ff 667$(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n"))
af126875 668 #t)))))
bf62b8ff 669 (native-inputs `(("pkg-config" ,pkg-config)))
1b0f266e 670 (inputs `(("guile" ,guile-2.2)))
3e9066fc
LC
671 (home-page "http://www.nongnu.org/guile-lib/")
672 (synopsis "Collection of useful Guile Scheme modules")
673 (description
35b9e423 674 "Guile-Lib is intended as an accumulation place for pure-scheme Guile
3e9066fc
LC
675modules, allowing for people to cooperate integrating their generic Guile
676modules into a coherent library. Think \"a down-scaled, limited-scope CPAN
677for Guile\".")
678
679 ;; The whole is under GPLv3+, but some modules are under laxer
680 ;; distribution terms such as LGPL and public domain. See `COPYING' for
681 ;; details.
71e0f217 682 (license license:gpl3+)))
3e9066fc 683
1b0f266e
LC
684(define-public guile2.0-lib
685 (package-for-guile-2.0 guile-lib))
686
12773de3 687(define-public guile2.2-lib
1b0f266e 688 (deprecated-package "guile2.2-lib" guile-lib))
12773de3 689
6050a1fb
CR
690(define-public guile-json
691 (package
692 (name "guile-json")
1f4f2360 693 (version "0.6.0")
6050a1fb 694 (source (origin
ffc72ec6
LC
695 (method url-fetch)
696 (uri (string-append "mirror://savannah/guile-json/guile-json-"
697 version ".tar.gz"))
698 (sha256
699 (base32
1f4f2360 700 "1qmjg7lbgciw95fkdzvlp9f68vv17kdjky42ywfzd4ffzwww0lgc"))
ffc72ec6
LC
701 (modules '((guix build utils)))
702 (snippet
703 ;; Make sure everything goes under .../site/X.Y, like Guile's
704 ;; search paths expects.
705 '(begin
706 (substitute* "configure"
707 (("ac_subst_vars='")
708 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
709 (substitute* '("Makefile.in" "json/Makefile.in")
710 (("moddir =.*/share/guile/site" all)
711 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
6050a1fb 712 (build-system gnu-build-system)
2252f087 713 (native-inputs `(("guile" ,guile-2.2)))
6050a1fb
CR
714 (home-page "http://savannah.nongnu.org/projects/guile-json/")
715 (synopsis "JSON module for Guile")
716 (description
0f31d4f0
LC
717 "Guile-JSON supports parsing and building JSON documents according to the
718specification. These are the main features:
719
720@itemize
721@item Strictly complies to @uref{http://json.org, specification}.
722@item Build JSON documents programmatically via macros.
723@item Unicode support for strings.
724@item Allows JSON pretty printing.
725@end itemize\n")
71e0f217 726 (license license:lgpl3+)))
6050a1fb 727
947a5d47 728(define-public guile2.2-json
2252f087
LC
729 (deprecated-package "guile2.2-json" guile-json))
730
731(define-public guile2.0-json
732 (package-for-guile-2.0 guile-json))
947a5d47 733
6bc24063
CAW
734(define-public guile-minikanren
735 (package
736 (name "guile-minikanren")
737 (version "20150424.e844d85")
738 (source (origin
739 (method git-fetch)
740 (uri (git-reference
741 (url "https://github.com/ijp/minikanren.git")
742 (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
821f4dc2 743 (file-name (string-append name "-" version "-checkout"))
6bc24063
CAW
744 (sha256
745 (base32
746 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
747 (build-system trivial-build-system)
748 (arguments
4b74a29d 749 `(#:modules ((guix build utils))
6bc24063
CAW
750 #:builder
751 (begin
752 (use-modules (guix build utils)
4b74a29d
LC
753 (ice-9 match)
754 (ice-9 popen)
755 (ice-9 rdelim))
756
6bc24063 757 (let* ((out (assoc-ref %outputs "out"))
4b74a29d
LC
758 (guile (assoc-ref %build-inputs "guile"))
759 (effective (read-line
760 (open-pipe* OPEN_READ
761 (string-append guile "/bin/guile")
762 "-c" "(display (effective-version))")))
763 (module-dir (string-append out "/share/guile/site/"
764 effective))
6bc24063 765 (source (assoc-ref %build-inputs "source"))
f3d8cd79 766 (doc (string-append out "/share/doc/guile-minikanren"))
6bc24063
CAW
767 (scm-files '("minikanren.scm"
768 "minikanren/mkextraforms.scm"
769 "minikanren/mkprelude.scm"
770 "minikanren/mk.scm"))
771 (guild (string-append (assoc-ref %build-inputs "guile")
772 "/bin/guild")))
773 ;; Make installation directories.
774 (mkdir-p (string-append module-dir "/minikanren"))
775 (mkdir-p doc)
776
777 ;; Compile .scm files and install.
778 (chdir source)
779 (setenv "GUILE_AUTO_COMPILE" "0")
780 (for-each (lambda (file)
781 (let* ((dest-file (string-append module-dir "/"
76e6e663 782 file))
6bc24063
CAW
783 (go-file (match (string-split file #\.)
784 ((base _)
785 (string-append module-dir "/"
786 base ".go")))))
787 ;; Install source module.
788 (copy-file file dest-file)
789 ;; Install compiled module.
790 (unless (zero? (system* guild "compile"
791 "-L" source
792 "-o" go-file
793 file))
794 (error (format #f "Failed to compile ~s to ~s!"
795 file go-file)))))
796 scm-files)
797
798 ;; Also copy over the README.
96c46210 799 (install-file "README.org" doc)
6bc24063
CAW
800 #t))))
801 (inputs
802 `(("guile" ,guile-2.0)))
803 (home-page "https://github.com/ijp/minikanren")
e881752c 804 (synopsis "MiniKanren declarative logic system, packaged for Guile")
6bc24063
CAW
805 (description
806 "MiniKanren is a relational programming extension to the Scheme
807programming Language, written as a smaller version of Kanren suitable for
808pedagogical purposes. It is featured in the book, The Reasoned Schemer,
809written by Dan Friedman, William Byrd, and Oleg Kiselyov.
810
e881752c 811This is Ian Price's r6rs packaged version of miniKanren, which deviates
6bc24063
CAW
812slightly from miniKanren mainline.
813
814See http://minikanren.org/ for more on miniKanren generally.")
71e0f217 815 (license license:expat)))
6bc24063 816
947a5d47
LC
817(define-public guile2.2-minikanren
818 (package-for-guile-2.2 guile-minikanren))
819
28a1041f
AP
820(define-public guile-miniadapton
821 (let ((commit "1b5749422304567c96ac5367f2221dda9eff5880")
822 (revision "1"))
823 (package
824 (name "guile-miniadapton")
825 (version (string-append "0-" revision "." (string-take commit 9)))
826 (source (origin
827 (method git-fetch)
828 (uri (git-reference
829 (url "https://github.com/fisherdj/miniAdapton.git")
830 (commit commit)))
831 (file-name (string-append name "-" version "-checkout"))
832 (sha256
833 (base32
834 "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
835 (build-system gnu-build-system)
836 (arguments
837 `(#:modules ((guix build utils)
838 (ice-9 popen)
839 (ice-9 rdelim)
840 (srfi srfi-1)
841 (guix build gnu-build-system))
842 #:tests? #f ; there is no test target
843 #:phases
844 (modify-phases %standard-phases
845 (delete 'configure)
846 (delete 'build)
847 (replace 'install
848 (lambda* (#:key outputs #:allow-other-keys)
849 (let* ((cwd (getcwd))
850 (scm-files (find-files "." "\\.scm$"))
851 (effective (read-line
852 (open-pipe* OPEN_READ
853 "guile" "-c"
854 "(display (effective-version))")))
855 (module-dir (string-append (assoc-ref outputs "out")
856 "/share/guile/site/"
857 effective)))
858
859 ;; Make installation directories.
860 (mkdir-p module-dir)
861
862 (setenv "GUILE_AUTO_COMPILE" "0")
863
864 ;; Compile .scm files and install.
865 (every (lambda (file)
866 (let ((go-file (string-append module-dir "/"
867 (basename file ".scm") ".go")))
868 ;; Install source module.
869 (install-file file module-dir)
870 ;; Compile and install module.
871 (zero? (system* "guild" "compile" "-L" cwd
872 "-o" go-file file))))
873 scm-files)))))))
874 (inputs
875 `(("guile" ,guile-2.2)))
876 (home-page "https://github.com/fisherdj/miniAdapton")
877 (synopsis "Minimal implementation of incremental computation in Guile
878Scheme")
879 (description "This package provides a complete Scheme implementation of
880miniAdapton, which implements the core functionality of the Adapton system for
881incremental computation (also known as self-adjusting computation). Like
882Adapton, miniAdapton allows programmers to safely combine mutation and
883memoization. miniAdapton is built on top of an even simpler system,
884microAdapton. Both miniAdapton and microAdapton are designed to be easy to
885understand, extend, and port to host languages other than Scheme.")
886 (license license:expat))))
887
32e14fc1
CAW
888(define-public guile-irregex
889 (package
890 (name "guile-irregex")
fb73f07a 891 (version "0.9.6")
32e14fc1
CAW
892 (source (origin
893 (method url-fetch)
894 (uri (string-append
895 "http://synthcode.com/scheme/irregex/irregex-"
d03f9446 896 version ".tar.gz"))
32e14fc1
CAW
897 (sha256
898 (base32
fb73f07a 899 "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq"))))
32e14fc1
CAW
900 (build-system gnu-build-system)
901 (arguments
902 `(#:modules ((guix build utils)
903 (ice-9 match)
fe447664
LC
904 (ice-9 rdelim)
905 (ice-9 popen)
32e14fc1
CAW
906 (guix build gnu-build-system))
907 #:phases
908 (modify-phases %standard-phases
32e14fc1
CAW
909 (delete 'configure)
910 (delete 'build)
911 (delete 'check)
912 (replace 'install
913 (lambda* (#:key inputs outputs #:allow-other-keys)
fe447664
LC
914 (let* ((out (assoc-ref outputs "out"))
915 (effective (read-line
916 (open-pipe* OPEN_READ
917 "guile" "-c"
918 "(display (effective-version))")))
919 (module-dir (string-append out "/share/guile/site/"
920 effective))
921 (source (assoc-ref inputs "source"))
922 (doc (string-append out "/share/doc/guile-irregex/"))
923 (guild (string-append (assoc-ref %build-inputs "guile")
924 "/bin/guild")))
925 ;; Make installation directories.
926 (mkdir-p (string-append module-dir "/rx/source"))
927 (mkdir-p doc)
928
929 ;; Compile .scm files and install.
930 (setenv "GUILE_AUTO_COMPILE" "0")
931
932 (for-each (lambda (copy-info)
933 (match copy-info
934 ((src-file dest-file-basis)
935 (let* ((dest-file (string-append
32e14fc1 936 module-dir dest-file-basis
fe447664
LC
937 ".scm"))
938 (go-file (string-append
939 module-dir dest-file-basis
940 ".go")))
941 ;; Install source module.
942 (copy-file src-file
943 dest-file)
944 ;; Install compiled module.
945 (unless (zero? (system* guild "compile"
946 "-L" (getcwd)
947 "-o" go-file
948 src-file))
949 (error (format #f "Failed to compile ~s to ~s!"
950 src-file dest-file)))))))
951 '(("irregex-guile.scm" "/rx/irregex")
952 ("irregex.scm" "/rx/source/irregex")
953 ;; Not really reachable via guile's packaging system,
954 ;; but nice to have around
955 ("irregex-utils.scm" "/rx/source/irregex-utils")))
956
957 ;; Also copy over the README.
958 (install-file "irregex.html" doc)
959 #t))))))
32e14fc1
CAW
960 (inputs
961 `(("guile" ,guile-2.0)))
962 (home-page "http://synthcode.com/scheme/irregex")
963 (synopsis "S-expression based regular expressions")
964 (description
965 "Irregex is an s-expression based alternative to your classic
966string-based regular expressions. It implements SRFI 115 and is deeply
967inspired by the SCSH regular expression system.")
71e0f217 968 (license license:bsd-3)))
93e7199b 969
947a5d47
LC
970(define-public guile2.2-irregex
971 (package-for-guile-2.2 guile-irregex))
972
93e7199b
CAW
973;; There are two guile-gdbm packages, one using the FFI and one with
974;; direct C bindings, hence the verbose name.
975
976(define-public guile-gdbm-ffi
977 (package
978 (name "guile-gdbm-ffi")
979 (version "20120209.fa1d5b6")
980 (source (origin
981 (method git-fetch)
982 (uri (git-reference
983 (url "https://github.com/ijp/guile-gdbm.git")
984 (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246")))
821f4dc2 985 (file-name (string-append name "-" version "-checkout"))
93e7199b
CAW
986 (sha256
987 (base32
988 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
989 (build-system trivial-build-system)
990 (arguments
991 `(#:modules
992 ((guix build utils))
993 #:builder
994 (begin
995 (use-modules (guix build utils)
a5bd6a5e
CAW
996 (ice-9 rdelim)
997 (ice-9 popen))
998
999 ;; Avoid warnings we can safely ignore
1000 (setenv "GUILE_AUTO_COMPILE" "0")
93e7199b
CAW
1001
1002 (let* ((out (assoc-ref %outputs "out"))
a5bd6a5e
CAW
1003 (effective-version
1004 (read-line
1005 (open-pipe* OPEN_READ
1006 (string-append
1007 (assoc-ref %build-inputs "guile")
1008 "/bin/guile")
1009 "-c" "(display (effective-version))")))
1010 (module-dir (string-append out "/share/guile/site/"
1011 effective-version))
93e7199b
CAW
1012 (source (assoc-ref %build-inputs "source"))
1013 (doc (string-append out "/share/doc"))
1014 (guild (string-append (assoc-ref %build-inputs "guile")
1015 "/bin/guild"))
1016 (gdbm.scm-dest
1017 (string-append module-dir "/gdbm.scm"))
1018 (gdbm.go-dest
a5bd6a5e
CAW
1019 (string-append module-dir "/gdbm.go"))
1020 (compile-file
1021 (lambda (in-file out-file)
1022 (system* guild "compile" "-o" out-file in-file))))
93e7199b
CAW
1023 ;; Make installation directories.
1024 (mkdir-p module-dir)
1025 (mkdir-p doc)
1026
1027 ;; Switch directory for compiling and installing
1028 (chdir source)
1029
1030 ;; copy the source
1031 (copy-file "gdbm.scm" gdbm.scm-dest)
1032
1033 ;; Patch the FFI
1034 (substitute* gdbm.scm-dest
1035 (("\\(dynamic-link \"libgdbm\"\\)")
1036 (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
1037 (assoc-ref %build-inputs "gdbm"))))
1038
1039 ;; compile to the destination
a5bd6a5e 1040 (compile-file gdbm.scm-dest gdbm.go-dest)))))
93e7199b
CAW
1041 (inputs
1042 `(("guile" ,guile-2.0)))
1043 (propagated-inputs
1044 `(("gdbm" ,gdbm)))
1045 (home-page "https://github.com/ijp/guile-gdbm")
1046 (synopsis "Guile bindings to the GDBM library via Guile's FFI")
1047 (description
1048 "Guile bindings to the GDBM key-value storage system, using
1049Guile's foreign function interface.")
71e0f217 1050 (license license:gpl3+)))
93e7199b 1051
2737bcff
CAW
1052(define-public guile2.2-gdbm-ffi
1053 (package-for-guile-2.2 guile-gdbm-ffi))
93e7199b 1054
e8ac1f8f
LC
1055(define-public guile-sqlite3
1056 (let ((commit "607721fe1174a299e45d457acacf94eefb964071"))
1057 (package
1058 (name "guile-sqlite3")
99bde93b 1059 (version (string-append "0.0-1." (string-take commit 7)))
e8ac1f8f 1060
ae21519f
LC
1061 ;; XXX: This used to be available read-only at
1062 ;; <https://www.gitorious.org/guile-sqlite3/guile-sqlite3.git/> but it
1063 ;; eventually disappeared, so we have our own copy here.
1064 (home-page "https://notabug.org/civodul/guile-sqlite3.git")
e8ac1f8f
LC
1065 (source (origin
1066 (method git-fetch)
1067 (uri (git-reference
1068 (url home-page)
1069 (commit commit)))
1070 (sha256
1071 (base32
1072 "09gaffhh5rawz5kdmqx2ahvj1ngvxddp469r18bmjz3sz8p0slj2"))
1073 (file-name (string-append name "-" version "-checkout"))
1074 (modules '((guix build utils)))
1075 (snippet
1076 ;; Upgrade 'Makefile.am' to the current way of doing things.
1077 '(substitute* "Makefile.am"
1078 (("TESTS_ENVIRONMENT")
1079 "TEST_LOG_COMPILER")))))
1080
1081 (build-system gnu-build-system)
1082 (native-inputs
1083 `(("autoconf" ,autoconf)
1084 ("automake" ,automake)
1085 ("pkg-config" ,pkg-config)))
1086 (inputs
99bde93b 1087 `(("guile" ,guile-2.2)
e8ac1f8f
LC
1088 ("sqlite" ,sqlite)))
1089 (arguments
1090 '(#:phases (modify-phases %standard-phases
1091 (add-before 'configure 'autoreconf
1092 (lambda _
1093 (zero? (system* "autoreconf" "-vfi"))))
1094 (add-before 'build 'set-sqlite3-file-name
1095 (lambda* (#:key inputs #:allow-other-keys)
1096 (substitute* "sqlite3.scm"
1097 (("\"libsqlite3\"")
1098 (string-append "\"" (assoc-ref inputs "sqlite")
1099 "/lib/libsqlite3\"")))
1100 #t)))))
1101 (synopsis "Access SQLite databases from Guile")
1102 (description
1103 "This package provides Guile bindings to the SQLite database system.")
71e0f217 1104 (license license:gpl3+))))
e8ac1f8f 1105
27f5e13e
DT
1106(define-public haunt
1107 (package
1108 (name "haunt")
9b1a497e 1109 (version "0.2.1")
27f5e13e
DT
1110 (source (origin
1111 (method url-fetch)
4960beaa 1112 (uri (string-append "https://files.dthompson.us/haunt/haunt-"
27f5e13e
DT
1113 version ".tar.gz"))
1114 (sha256
1115 (base32
9b1a497e 1116 "1fpaf1vm6s7j13fs35barjh5yajcc2rc3pi8r7278wpgp4i2vs3w"))))
27f5e13e 1117 (build-system gnu-build-system)
4ecbf6d2
LC
1118 (arguments
1119 `(#:modules ((ice-9 match) (ice-9 ftw)
1120 ,@%gnu-build-system-modules)
1e406301 1121 #:tests? #f ; test suite is non-deterministic :(
4ecbf6d2
LC
1122 #:phases (modify-phases %standard-phases
1123 (add-after 'install 'wrap-haunt
1124 (lambda* (#:key outputs #:allow-other-keys)
1125 ;; Wrap the 'haunt' command to refer to the right
1126 ;; modules.
1127 (let* ((out (assoc-ref outputs "out"))
1128 (bin (string-append out "/bin"))
1129 (site (string-append
1130 out "/share/guile/site")))
1131 (match (scandir site)
1132 (("." ".." version)
1133 (let ((modules (string-append site "/" version)))
1134 (wrap-program (string-append bin "/haunt")
1135 `("GUILE_LOAD_PATH" ":" prefix
1136 (,modules))
1137 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
1138 (,modules)))
1139 #t)))))))))
4960beaa
DT
1140 (native-inputs
1141 `(("pkg-config" ,pkg-config)
1142 ("texinfo" ,texinfo)))
27f5e13e 1143 (inputs
bd19f65a 1144 `(("guile" ,guile-2.2)))
4960beaa 1145 (propagated-inputs
9b1a497e
AP
1146 `(("guile-reader" ,guile-reader)
1147 ("guile-commonmark" ,guile-commonmark)))
27f5e13e
DT
1148 (synopsis "Functional static site generator")
1149 (description "Haunt is a static site generator written in Guile
1150Scheme. Haunt features a functional build system and an extensible
1151interface for reading articles in any format.")
1152 (home-page "http://haunt.dthompson.us")
71e0f217 1153 (license license:gpl3+)))
27f5e13e 1154
bd19f65a
LC
1155(define-public guile2.0-haunt
1156 (package-for-guile-2.0
1157 (package (inherit haunt) (name "guile2.0-haunt"))))
64f34aef 1158(define-public guile2.2-haunt
bd19f65a 1159 (deprecated-package "guile2.2-haunt" haunt))
64f34aef 1160
44a2bdf8
AS
1161(define-public guile-config
1162 (package
1163 (name "guile-config")
3c98acb7 1164 (version "0.1.1")
44a2bdf8
AS
1165 (source (origin
1166 (method url-fetch)
1167 (uri (string-append
1168 "http://alex.pompo.co/software/" name "-" version
1169 ".tar.gz"))
1170 (sha256
1171 (base32
3c98acb7 1172 "1b719bn192f9wg24rr0zx8jpmygsvyhfi35iy778pb5p392snrn8"))))
44a2bdf8
AS
1173 (build-system gnu-build-system)
1174 (inputs
1175 `(("guile" ,guile-2.0)))
1176 (synopsis "Guile application configuration parsing library")
1177 (description
1178 "Guile Config is a library providing a declarative approach to
1179application configuration specification. The library provides clean
1180configuration declaration forms, and processors that take care of:
1181configuration file creation; configuration file parsing; command-line
1182parameter parsing using getopt-long; basic GNU command-line parameter
1183generation (--help, --usage, --version); automatic output generation for the
1184above command-line parameters.")
1185 (home-page "https://github.com/a-sassmannshausen/guile-config")
71e0f217 1186 (license license:agpl3+)))
44a2bdf8 1187
36548111
DT
1188(define-public guile-redis
1189 (package
1190 (name "guile-redis")
1191 (version "0.1.0")
1192 (source (origin
1193 (method url-fetch)
1194 (uri (string-append "mirror://savannah/guile-redis/guile-redis-"
1195 version ".tar.gz"))
1196 (sha256
1197 (base32
1198 "0vx6if6b4r3kwx64vzbs6vpc0cpcr85x11w9vkzq27gw8n7isv56"))
1199 (modules '((guix build utils)))
1200 (snippet
ea833d30 1201 ;; Make sure everything goes under .../site/X.Y, like Guile's
36548111 1202 ;; search paths expects.
ea833d30
RW
1203 '(begin
1204 (substitute* "configure"
1205 (("ac_subst_vars='")
1206 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1207 (substitute* '("Makefile.in"
1208 "redis/Makefile.in"
1209 "redis/commands/Makefile.in")
1210 (("moddir =.*/share/guile/site" all)
1211 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
36548111
DT
1212 (build-system gnu-build-system)
1213 (native-inputs
1214 `(("guile" ,guile-2.0)))
1215 (home-page "http://savannah.nongnu.org/projects/guile-redis/")
1216 (synopsis "Redis client library for Guile")
1217 (description "Guile-redis provides a Scheme interface to the Redis
1218key-value cache and store.")
71e0f217 1219 (license license:lgpl3+)))
36548111 1220
85313be8
RW
1221(define-public guile2.2-redis
1222 (package-for-guile-2.2 guile-redis))
1223
9d373377
CAW
1224(define-public guile-wisp
1225 (package
1226 (name "guile-wisp")
1227 (version "0.9.0")
1228 (source (origin
1229 (method url-fetch)
1230 (uri (string-append "https://bitbucket.org/ArneBab/"
1231 "wisp/downloads/wisp-"
1232 version ".tar.gz"))
1233 (sha256
1234 (base32
1235 "0y5fxacalkgbv9s71h58vdvm2h2ln3rk024dd0vszwcf953as5fq"))))
1236 (build-system gnu-build-system)
1237 (arguments
1238 `(#:modules ((system base compile)
1239 ,@%gnu-build-system-modules)
1240 #:phases
1241 (modify-phases %standard-phases
1242 (add-before
1243 'configure 'substitute-before-config
1244
1245 (lambda* (#:key inputs #:allow-other-keys)
1246 (let ((bash (assoc-ref inputs "bash")))
1247 ;; configure checks for guile-2.0, but ours is just named "guile" :)
1248 (substitute* "configure"
1249 (("guile-2.0") "guile"))
1250 ;; Puts together some test files with /bin/bash hardcoded
1251 (substitute* "Makefile.in"
1252 (("/bin/bash")
1253 (string-append bash "/bin/bash") ))
1254 #t)))
1255
1256 ;; auto compilation breaks, but if we set HOME to /tmp,
1257 ;; that works ok
1258 (add-before
1259 'check 'auto-compile-hacky-workaround
1260 (lambda _
1261 (setenv "HOME" "/tmp")
1262 #t))
1263 (replace
1264 'install
1265 (lambda* (#:key outputs inputs #:allow-other-keys)
1266 (let* ((out (assoc-ref outputs "out"))
1267 (module-dir (string-append out "/share/guile/site/2.0"))
1268 (language-dir
1269 (string-append module-dir "/language/wisp"))
1270 (guild (string-append (assoc-ref inputs "guile")
1271 "/bin/guild")))
1272 ;; Make installation directories.
1273 (mkdir-p module-dir)
1274 (mkdir-p language-dir)
1275
1276 ;; copy the source
1277 (copy-file "wisp-scheme.scm"
1278 (string-append module-dir "/wisp-scheme.scm"))
1279 (copy-file "language/wisp/spec.scm"
1280 (string-append language-dir "/spec.scm"))
1281
1282 ;; compile to the destination
1283 (compile-file "wisp-scheme.scm"
1284 #:output-file (string-append
1285 module-dir "/wisp-scheme.go"))
1286 (compile-file "language/wisp/spec.scm"
1287 #:output-file (string-append
1288 language-dir "/spec.go"))
1289 #t))))))
1290 (home-page "http://draketo.de/english/wisp")
1291 (inputs
1292 `(("guile" ,guile-2.0)
1293 ("python" ,python)))
a124bbd2
SB
1294 (synopsis "Whitespace to lisp syntax for Guile")
1295 (description "Wisp is a syntax for Guile which provides a Python-like
9d373377
CAW
1296whitespace-significant language. It may be easier on the eyes for some
1297users and in some situations.")
71e0f217 1298 (license license:gpl3+)))
9d373377 1299
5649c8cd
DT
1300(define-public guile-sly
1301 (package
1302 (name "guile-sly")
1303 (version "0.1")
1304 (source (origin
1305 (method url-fetch)
8d5e7ad2 1306 (uri (string-append "https://files.dthompson.us/sly/sly-"
5649c8cd
DT
1307 version ".tar.gz"))
1308 (sha256
1309 (base32
1310 "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))))
1311 (build-system gnu-build-system)
1312 (arguments
1313 '(#:configure-flags
1314 (list (string-append "--with-libfreeimage-prefix="
1315 (assoc-ref %build-inputs "freeimage"))
1316 (string-append "--with-libgslcblas-prefix="
1317 (assoc-ref %build-inputs "gsl")))))
1318 (native-inputs
1319 `(("pkg-config" ,pkg-config)))
1320 (propagated-inputs
1321 `(("guile" ,guile-2.0)
1322 ("guile-sdl" ,guile-sdl)
1323 ("guile-opengl" ,guile-opengl)))
1324 (inputs
1325 `(("gsl" ,gsl)
1326 ("freeimage" ,freeimage)
1327 ("mesa" ,mesa)))
1328 (synopsis "2D/3D game engine for GNU Guile")
1329 (description "Sly is a 2D/3D game engine written in Guile Scheme. Sly
1330features a functional reactive programming interface and live coding
1331capabilities.")
1332 (home-page "http://dthompson.us/pages/software/sly.html")
71e0f217 1333 (license license:gpl3+)))
5649c8cd 1334
dec1e2b3
AB
1335(define-public g-wrap
1336 (package
1337 (name "g-wrap")
1338 (version "1.9.15")
1339 (source (origin
1340 (method url-fetch)
1341 (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
1342 version ".tar.gz"))
1343 (sha256
1344 (base32
1345 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
1346 (build-system gnu-build-system)
1347 (native-inputs
1348 `(("pkg-config" ,pkg-config)))
1349 (propagated-inputs
61583094 1350 `(("guile" ,guile-2.2)
dec1e2b3
AB
1351 ("guile-lib" ,guile-lib)))
1352 (inputs
1353 `(("libffi" ,libffi)))
9e8599a3 1354 (arguments
61583094
TF
1355 `(#:configure-flags '("--disable-Werror")
1356 #:phases
1357 (modify-phases %standard-phases
1358 (add-before 'configure 'pre-configure
1359 (lambda* (#:key outputs #:allow-other-keys)
1360 (let ((out (assoc-ref outputs "out")))
1361 (substitute* (find-files "." "^Makefile.in$")
1362 (("guilemoduledir =.*guile/site" all)
1363 (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
1364 #t))))))
dec1e2b3
AB
1365 (synopsis "Generate C bindings for Guile")
1366 (description "G-Wrap is a tool and Guile library for generating function
1367wrappers for inter-language calls. It currently only supports generating Guile
1368wrappers for C functions. Given a definition of the types and prototypes for
1369a given C interface, G-Wrap will automatically generate the C code that
1370provides access to that interface and its types from the Scheme level.")
1371 (home-page "http://www.nongnu.org/g-wrap/index.html")
71e0f217 1372 (license license:lgpl2.1+)))
dec1e2b3 1373
01497dfe
LC
1374(define-public guile-dbi
1375 (package
1376 (name "guile-dbi")
1377 (version "2.1.6")
1378 (source (origin
1379 (method url-fetch)
1380 (uri (string-append
1381 "http://download.gna.org/guile-dbi/guile-dbi-"
1382 version ".tar.gz"))
1383 (sha256
1384 (base32
1385 "116njrprhgrsv1qm904sp3b02rq01fx639r433d657gyhw3x159n"))))
1386 (build-system gnu-build-system)
1387 (arguments
1388 '(#:configure-flags
1389 (list (string-append
1390 "--with-guile-site-dir=" %output "/share/guile/site/2.0"))
1391 #:phases
1392 (modify-phases %standard-phases
1393 (add-after 'install 'patch-extension-path
1394 (lambda* (#:key outputs #:allow-other-keys)
1395 (let* ((out (assoc-ref outputs "out"))
1396 (dbi.scm (string-append
1397 out "/share/guile/site/2.0/dbi/dbi.scm"))
1398 (ext (string-append out "/lib/libguile-dbi")))
1399 (substitute* dbi.scm (("libguile-dbi") ext))
1400 #t))))))
1401 (propagated-inputs
1402 `(("guile" ,guile-2.0)))
1403 (synopsis "Guile database abstraction layer")
1404 (home-page "http://home.gna.org/guile-dbi/guile-dbi.html")
1405 (description
1406 "guile-dbi is a library for Guile that provides a convenient interface to
1407SQL databases. Database programming with guile-dbi is generic in that the same
1408programming interface is presented regardless of which database system is used.
1409It currently supports MySQL, Postgres and SQLite3.")
71e0f217 1410 (license license:gpl2+)))
01497dfe
LC
1411
1412(define-public guile-dbd-sqlite3
1413 (package
1414 (name "guile-dbd-sqlite3")
1415 (version "2.1.6")
1416 (source (origin
1417 (method url-fetch)
1418 (uri (string-append
1419 "http://download.gna.org/guile-dbi/guile-dbd-sqlite3-"
1420 version ".tar.gz"))
1421 (sha256
1422 (base32
1423 "0rg71jchxd2y8x496s8zmfmikr5g8zxi8zv2ar3f7a23pph92iw2"))))
1424 (build-system gnu-build-system)
1425 (native-inputs
1426 `(("pkg-config" ,pkg-config)))
1427 (inputs
1428 `(("sqlite" ,sqlite)
1429 ("zlib" ,(@ (gnu packages compression) zlib))))
1430 (propagated-inputs
1431 `(("guile-dbi" ,guile-dbi)))
1432 (synopsis "Guile DBI driver for SQLite")
1433 (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
1434 (description
1435 "guile-dbi is a library for Guile that provides a convenient interface to
1436SQL databases. This package implements the interface for SQLite.")
71e0f217 1437 (license license:gpl2+)))
01497dfe 1438
bd9af610
AK
1439(define-public guile-xosd
1440 (package
1441 (name "guile-xosd")
4b2b7135 1442 (version "0.2.1")
bd9af610
AK
1443 (source (origin
1444 (method url-fetch)
1445 (uri (string-append "https://github.com/alezost/" name
1446 "/releases/download/v" version
1447 "/" name "-" version ".tar.gz"))
1448 (sha256
1449 (base32
4b2b7135 1450 "1ri5065c16kmgrf2pysn2ymxjqi5302lhpb07wkl1jr75ym8fn8p"))))
bd9af610
AK
1451 (build-system gnu-build-system)
1452 (native-inputs
1453 `(("pkg-config" ,pkg-config)))
1454 (inputs
c6726a5f 1455 `(("guile" ,guile-2.2)
bd9af610
AK
1456 ("libx11" ,libx11)
1457 ("libxext" ,libxext)
1458 ("libxinerama" ,libxinerama)
1459 ("xosd" ,xosd)))
1460 (home-page "https://github.com/alezost/guile-xosd")
1461 (synopsis "XOSD bindings for Guile")
1462 (description
1463 "Guile-XOSD provides Guile bindings for @code{libxosd},
1464@uref{http://sourceforge.net/projects/libxosd/, the X On Screen Display
1465library}.")
71e0f217 1466 (license license:gpl3+)))
bd9af610 1467
07f7cc03
AK
1468(define-public guile-daemon
1469 (package
1470 (name "guile-daemon")
5245399f 1471 (version "0.1.2")
07f7cc03
AK
1472 (source (origin
1473 (method url-fetch)
1474 (uri (string-append "https://github.com/alezost/" name
1475 "/releases/download/v" version
1476 "/" name "-" version ".tar.gz"))
1477 (sha256
1478 (base32
5245399f 1479 "0hh6gq6b6phpxm0b1dkxyzj3f4sxdf7dji63609lzypa5v1ad2gv"))))
07f7cc03
AK
1480 (build-system gnu-build-system)
1481 (native-inputs
1482 `(("pkg-config" ,pkg-config)))
1483 (inputs
c6726a5f 1484 `(("guile" ,guile-2.2)))
07f7cc03
AK
1485 (home-page "https://github.com/alezost/guile-daemon")
1486 (synopsis "Evaluate code in a running Guile process")
1487 (description
1488 "Guile-Daemon is a small Guile program that loads your initial
1489configuration file, and then reads and evaluates Guile expressions that
1490you send to a FIFO file.")
71e0f217 1491 (license license:gpl3+)))
07f7cc03 1492
e28e74a5
EE
1493(define-public guile-commonmark
1494 (package
1495 (name "guile-commonmark")
1496 (version "0.1")
1497 (source (origin
1498 (method url-fetch)
1499 (uri (string-append "https://github.com/OrangeShark/" name
1500 "/releases/download/v" version
1501 "/" name "-" version ".tar.gz"))
1502 (sha256
1503 (base32
757ce0f9
LC
1504 "12cb5fqvvgc87f5xp0ih5az305wnjia89l5jba83d0r2p8bfy0b0"))
1505 (modules '((guix build utils)))
1506 (snippet
1507 ;; Use the real effective version of Guile in directory names
1508 ;; instead of a hard-coded "/2.0".
1509 '(begin
1510 (substitute* "configure"
1511 (("ac_subst_vars='")
1512 "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
1513 (substitute* "Makefile.in"
1514 (("/site/2.0")
1515 "/site/@GUILE_EFFECTIVE_VERSION@"))))))
e28e74a5
EE
1516 (build-system gnu-build-system)
1517 (inputs
7c86c031 1518 `(("guile" ,guile-2.2)))
e28e74a5
EE
1519 (synopsis "CommonMark parser for Guile")
1520 (description
1521 "guile-commonmark is a library for parsing CommonMark, a fully specified
1522variant of Markdown. The library is written in Guile Scheme and is designed
1523to transform a CommonMark document to SXML. guile-commonmark tries to closely
1524follow the @uref{http://commonmark.org/, CommonMark spec}, the main difference
1525is no support for parsing block and inline level HTML.")
1526 (home-page "https://github.com/OrangeShark/guile-commonmark")
71e0f217 1527 (license license:lgpl3+)))
e28e74a5 1528
7c86c031
LC
1529(define-public guile2.0-commonmark
1530 (package-for-guile-2.0 guile-commonmark))
947a5d47 1531(define-public guile2.2-commonmark
7c86c031 1532 (deprecated-package "guile2.2-commonmark" guile-commonmark))
947a5d47 1533
3b5783fc
AB
1534(define-public guile-bytestructures
1535 (package
1536 (name "guile-bytestructures")
946742e3 1537 (version "20170402.91d042e")
3b5783fc
AB
1538 (source (origin
1539 (method git-fetch)
1540 (uri (git-reference
1541 (url "https://github.com/TaylanUB/scheme-bytestructures")
946742e3 1542 (commit "91d042e3427e1d7740b604b6296c616cf2eec13d")))
3b5783fc
AB
1543 (file-name (string-append name "-" version "-checkout"))
1544 (sha256
1545 (base32
946742e3 1546 "04lgh0nk6ddnwgh20hnz4pyhczaik0xbd50kikjsxcwcl46shavb"))))
3b5783fc
AB
1547 (build-system trivial-build-system)
1548 (arguments
1549 `(#:modules ((guix build utils))
1550 #:builder
1551 (begin
1552 (use-modules (guix build utils)
1553 (ice-9 match)
1554 (ice-9 popen)
1555 (ice-9 rdelim))
1556 (let* ((out (assoc-ref %outputs "out"))
1557 (guile (assoc-ref %build-inputs "guile"))
1558 (effective (read-line
1559 (open-pipe* OPEN_READ
1560 (string-append guile "/bin/guile")
1561 "-c" "(display (effective-version))")))
1562 (module-dir (string-append out "/share/guile/site/"
1563 effective))
1564 (source (assoc-ref %build-inputs "source"))
1565 (doc (string-append out "/share/doc/scheme-bytestructures"))
e8e1ace0
MO
1566 (sld-files (with-directory-excursion source
1567 (find-files "bytestructures/r7" "\\.exports.sld$")))
3b5783fc
AB
1568 (scm-files (filter (lambda (path)
1569 (not (string-prefix? "bytestructures/r7" path)))
1570 (with-directory-excursion source
1571 (find-files "bytestructures" "\\.scm$"))))
1572 (guild (string-append (assoc-ref %build-inputs "guile")
1573 "/bin/guild")))
1574 ;; Make installation directories.
1575 (mkdir-p doc)
1576
1577 ;; Compile .scm files and install.
1578 (chdir source)
1579 (setenv "GUILE_AUTO_COMPILE" "0")
1580 (for-each (lambda (file)
1581 (let* ((dest-file (string-append module-dir "/"
1582 file))
1583 (go-file (string-append module-dir "/"
1584 (substring file 0
1585 (string-rindex file #\.))
1586 ".go")))
1587 ;; Install source module.
1588 (mkdir-p (dirname dest-file))
1589 (copy-file file dest-file)
1590
1591 ;; Install compiled module.
1592 (mkdir-p (dirname go-file))
1593 (unless (zero? (system* guild "compile"
1594 "-L" source
1595 "-o" go-file
1596 file))
1597 (error (format #f "Failed to compile ~s to ~s!"
1598 file go-file)))))
e8e1ace0 1599 (append sld-files scm-files))
3b5783fc
AB
1600
1601 ;; Also copy over the README.
1602 (install-file "README.md" doc)
1603 #t))))
1604 (inputs
aabece2e 1605 `(("guile" ,guile-2.2)))
3b5783fc
AB
1606 (home-page "https://github.com/TaylanUB/scheme-bytestructures")
1607 (synopsis "Structured access to bytevector contents for Guile")
1608 (description
1609 "Guile bytestructures offers a system imitating the type system
1610of the C programming language, to be used on bytevectors. C's type
1611system works on raw memory, and Guile works on bytevectors which are
1612an abstraction over raw memory. It's also more powerful than the C
1613type system, elevating types to first-class status.")
71e0f217 1614 (license license:gpl3+)))
3b5783fc 1615
472fc855
LC
1616(define-public guile-aspell
1617 (package
1618 (name "guile-aspell")
234ea3d6 1619 (version "0.4")
472fc855
LC
1620 (source (origin
1621 (method url-fetch)
1622 (uri (string-append
1623 "http://lonelycactus.com/tarball/guile_aspell-"
1624 version ".tar.gz"))
1625 (sha256
1626 (base32
234ea3d6 1627 "0vpk5xj9m9qc702z3khmkwhgpb949qbsyz8kw2qycda6qnxk0077"))))
472fc855
LC
1628 (build-system gnu-build-system)
1629 (arguments
7295087e
LC
1630 '(#:phases (modify-phases %standard-phases
1631 (add-before 'configure 'set-guilesitedir
1632 (lambda _
1633 (substitute* "Makefile.in"
1634 (("^guilesitedir =.*$")
1635 "guilesitedir = \
1636$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
1637 #t))
472fc855
LC
1638 (add-before 'build 'set-libaspell-file-name
1639 (lambda* (#:key inputs #:allow-other-keys)
1640 (let ((aspell (assoc-ref inputs "aspell")))
234ea3d6 1641 (substitute* "aspell.scm"
472fc855
LC
1642 (("\"libaspell\\.so\"")
1643 (string-append "\"" aspell
1644 "/lib/libaspell\"")))
1645 #t))))))
1646 (native-inputs `(("pkg-config" ,pkg-config)))
cb5be6df 1647 (inputs `(("guile" ,guile-2.2)
472fc855
LC
1648 ("aspell" ,aspell)))
1649 (home-page "https://github.com/spk121/guile-aspell")
1650 (synopsis "Spell-checking from Guile")
1651 (description
1652 "guile-aspell is a Guile Scheme library for comparing a string against a
1653dictionary and suggesting spelling corrections.")
71e0f217 1654 (license license:gpl3+)))
472fc855 1655
a614ce38
LC
1656(define-public guile-bash
1657 ;; This project is currently retired. It was initially announced here:
1658 ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
1659 (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
1660 (revision "0"))
1661 (package
1662 (name "guile-bash")
1663 (version (string-append "0.1.6-" revision "." (string-take commit 7)))
1664 (home-page
1665 "https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git")
1666 (source (origin
1667 (method git-fetch)
1668 (uri (git-reference
1669 (commit commit)
1670 (url home-page)))
1671 (sha256
1672 (base32
1673 "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
1674 (file-name (string-append name "-" version "-checkout"))))
1675 (build-system gnu-build-system)
1676 (arguments
1677 '(#:phases (modify-phases %standard-phases
1678 (add-after 'unpack 'bootstrap
1679 (lambda _
1680 (zero? (system* "sh" "bootstrap")))))
1681
1682 #:configure-flags
1683 ;; Add -I to match 'bash.pc' of Bash 4.4.
1684 (list (string-append "CPPFLAGS=-I"
1685 (assoc-ref %build-inputs "bash:include")
1686 "/include/bash/include")
1687
1688 ;; The '.a' file is useless.
1689 "--disable-static"
1690
1691 ;; Install 'lib/bash' as Bash 4.4 expects.
1692 (string-append "--libdir=" (assoc-ref %outputs "out")
1693 "/lib/bash"))))
1694 (native-inputs `(("pkg-config" ,pkg-config)
1695 ("autoconf" ,(autoconf-wrapper))
1696 ("automake" ,automake)
1697 ("libtool" ,libtool)
1698 ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
1699 ("gettext" ,gettext-minimal)))
1700 (inputs `(("guile" ,guile-2.0)
1701 ("bash:include" ,bash "include")))
1702 (synopsis "Extend Bash using Guile")
1703 (description
1704 "Guile-Bash provides a shared library and set of Guile modules,
1705allowing you to extend Bash in Scheme. Scheme interfaces allow you to access
1706the following aspects of Bash:
1707
1708@itemize
1709@item aliases;
1710@item setting and getting Bash variables;
1711@item creating dynamic variables;
1712@item creating Bash functions with a Scheme implementation;
1713@item reader macro for output capturing;
1714@item reader macro for evaluating raw Bash commands.
1715@end itemize
1716
1717To enable it, run:
1718
1719@example
1720enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
1721@end example
1722
1723and then run @command{scm example.scm}.")
71e0f217 1724 (license license:gpl3+))))
a614ce38 1725
c5793e7e
CAW
1726(define-public guile-8sync
1727 (package
1728 (name "guile-8sync")
525acb6e 1729 (version "0.4.2")
c5793e7e
CAW
1730 (source (origin
1731 (method url-fetch)
1732 (uri (string-append "mirror://gnu/8sync/8sync-" version
1733 ".tar.gz"))
1734 (sha256
1735 (base32
525acb6e 1736 "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
c5793e7e
CAW
1737 (build-system gnu-build-system)
1738 (native-inputs `(("autoconf" ,autoconf)
1739 ("automake" ,automake)
f6396d86 1740 ("guile" ,guile-2.2)
c5793e7e
CAW
1741 ("pkg-config" ,pkg-config)
1742 ("texinfo" ,texinfo)))
1743 (arguments
1744 `(#:phases (modify-phases %standard-phases
1745 (add-before 'configure 'setenv
1746 (lambda _
1747 ;; quiet warnings
ab4a1731
CAW
1748 (setenv "GUILE_AUTO_COMPILE" "0")
1749 #t)))))
c5793e7e
CAW
1750 (home-page "https://gnu.org/s/8sync/")
1751 (synopsis "Asynchronous actor model library for Guile")
1752 (description
1753 "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
1754library for GNU Guile based on the actor model.
1755
f6396d86 1756Note that 8sync is only available for Guile 2.2.")
71e0f217 1757 (license license:lgpl3+)))
c5793e7e 1758
aaf1bdc3
CAW
1759(define-public guile-fibers
1760 (package
1761 (name "guile-fibers")
1762 (version "1.0.0")
1763 (source (origin
1764 (method url-fetch)
1765 (uri (string-append "https://wingolog.org/pub/fibers/fibers-"
1766 version ".tar.gz"))
1767 (sha256
1768 (base32
1769 "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0"))))
1770 (build-system gnu-build-system)
1771 (native-inputs
1772 `(("texinfo" ,texinfo)
1773 ("pkg-config" ,pkg-config)))
1774 (inputs
f6396d86 1775 `(("guile" ,guile-2.2)))
aaf1bdc3
CAW
1776 (synopsis "Lightweight concurrency facility for Guile")
1777 (description
1778 "Fibers is a Guile library that implements a a lightweight concurrency
1779facility, inspired by systems like Concurrent ML, Go, and Erlang. A fiber is
1780like a \"goroutine\" from the Go language: a lightweight thread-like
1781abstraction. Systems built with Fibers can scale up to millions of concurrent
1782fibers, tens of thousands of concurrent socket connections, and many parallel
1783cores. The Fibers library also provides Concurrent ML-like channels for
1784communication between fibers.
1785
1786Note that Fibers makes use of some Guile 2.1/2.2-specific features and
1787is not available for Guile 2.0.")
1788 (home-page "https://github.com/wingo/fibers")
1789 (license license:lgpl3+)))
1790
bd233722 1791(define-public guile-git
b3542d77
MO
1792 (let ((revision "2")
1793 (commit "06f9fc3d9ac95798d4a51e6310f7b594ce5597e0"))
bd233722
LC
1794 (package
1795 (name "guile-git")
1796 (version (string-append "0.0-" revision "." (string-take commit 7)))
dc03f32d 1797 (home-page "https://gitlab.com/guile-git/guile-git.git")
bd233722
LC
1798 (source (origin
1799 (method git-fetch)
1800 (uri (git-reference (url home-page) (commit commit)))
1801 (sha256
1802 (base32
b3542d77 1803 "0rcq0f8dhl89ia7336bq8y279q5ada0b1kabcqw9zl3125k3cp4v"))
bd233722
LC
1804 (file-name (git-file-name name version))))
1805 (build-system gnu-build-system)
1806 (arguments
1807 '(#:phases (modify-phases %standard-phases
1808 (add-after 'unpack 'bootstrap
1809 (lambda _
e93f8d98 1810 (zero? (system* "autoreconf" "-vfi")))))))
bd233722
LC
1811 (native-inputs
1812 `(("autoconf" ,autoconf)
1813 ("automake" ,automake)
1814 ("pkg-config" ,pkg-config)))
1815 (inputs
aabece2e 1816 `(("guile" ,guile-2.2)
bd233722
LC
1817 ("libgit2" ,libgit2)))
1818 (propagated-inputs
1819 `(("guile-bytestructures" ,guile-bytestructures)))
1820 (synopsis "Guile bindings for libgit2")
1821 (description
1822 "This package provides Guile bindings to libgit2, a library to
1823manipulate repositories of the Git version control system.")
1824 (license license:gpl3+))))
c5793e7e 1825
f252d6df
DT
1826(define-public guile-syntax-highlight
1827 (let ((commit "a047675e66861b647426372aa2ba7820f749616d")
1828 (revision "0"))
1829 (package
1830 (name "guile-syntax-highlight")
1831 (version (string-append "0.0." revision "."
1832 (string-take commit 7)))
1833 (source (origin
1834 (method git-fetch)
1835 (uri (git-reference
1836 (url "git://dthompson.us/guile-syntax-highlight.git")
1837 (commit commit)))
1838 (sha256
1839 (base32
1840 "1zjr6sg3n7xbdsliy45i39dqanxvcms58ayx36wxrz72zpq58vq3"))))
1841 (build-system gnu-build-system)
1842 (arguments
1843 '(#:phases (modify-phases %standard-phases
1844 (add-after 'unpack 'bootstrap
1845 (lambda _
1846 (zero? (system* "sh" "bootstrap")))))))
1847 (native-inputs
1848 `(("autoconf" ,autoconf)
1849 ("automake" ,automake)
1850 ("pkg-config" ,pkg-config)))
1851 (inputs
1852 `(("guile" ,guile-2.2)))
1853 (synopsis "General-purpose syntax highlighter for GNU Guile")
1854 (description "Guile-syntax-highlight is a general-purpose syntax
1855highlighting library for GNU Guile. It can parse code written in various
1856programming languages into a simple s-expression that can be converted to
1857HTML (via SXML) or any other format for rendering.")
1858 (home-page "http://dthompson.us/software/guile-syntax-highlight")
1859 (license license:lgpl3+))))
1860
d26ae96c
CAW
1861(define-public guile-sjson
1862 (package
1863 (name "guile-sjson")
a62a16a4 1864 (version "0.2.1")
d26ae96c
CAW
1865 (source (origin
1866 (method url-fetch)
1867 (uri (string-append "https://dustycloud.org/misc/sjson-" version
1868 ".tar.gz"))
1869 (sha256
1870 (base32
a62a16a4 1871 "1mzmapln79vv10qxaggz9qwcdbag3jnrj19xx8bgkmxss8h03sv3"))))
d26ae96c
CAW
1872 (build-system gnu-build-system)
1873 (arguments
1874 '(#:phases
1875 (modify-phases %standard-phases
1876 (add-after 'unpack 'bootstrap
1877 (lambda _ (zero? (system* "sh" "bootstrap.sh")))))))
1878 (native-inputs
1879 `(("autoconf" ,autoconf)
1880 ("automake" ,automake)
1881 ("pkg-config" ,pkg-config)))
1882 (inputs
1883 `(("guile" ,guile-2.2)))
1884 (home-page "https://gitlab.com/dustyweb/guile-sjson")
1885 (synopsis "S-expression based json reader/writer for Guile")
1886 (description "guile-sjson is a json reader/writer for Guile.
1887It has a nice, simple s-expression based syntax.")
1888 (license license:lgpl3+)))
1889
1722d680 1890;;; guile.scm ends here