gnu: bluez: Install 'org.bluez.obex.service' and fix '97-hid2hci.rules'.
[jackhill/guix/guix.git] / gnu / packages / guile.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
d9f0788a 2;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
b515822d 3;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
6bc24063 4;;; Copyright © 2015 Christopher Allan Webber <cwebber@dustycloud.org>
44a2bdf8 5;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
daeb61f7 6;;; Copyright © 2016 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>
1722d680 9;;;
233e7676 10;;; This file is part of GNU Guix.
1722d680 11;;;
233e7676 12;;; GNU Guix is free software; you can redistribute it and/or modify it
1722d680
LC
13;;; under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 3 of the License, or (at
15;;; your option) any later version.
16;;;
233e7676 17;;; GNU Guix is distributed in the hope that it will be useful, but
1722d680
LC
18;;; WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
233e7676 23;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
1722d680 24
1ffa7090 25(define-module (gnu packages guile)
4a44e743 26 #:use-module (guix licenses)
59a43334 27 #:use-module (gnu packages)
9c782445 28 #:use-module (gnu packages bash)
1ffa7090
LC
29 #:use-module (gnu packages bdw-gc)
30 #:use-module (gnu packages gawk)
31 #:use-module (gnu packages gperf)
32 #:use-module (gnu packages libffi)
33 #:use-module (gnu packages autotools)
f906d30c 34 #:use-module (gnu packages flex)
1ffa7090 35 #:use-module (gnu packages libunistring)
7119cca8 36 #:use-module (gnu packages linux)
1ffa7090
LC
37 #:use-module (gnu packages m4)
38 #:use-module (gnu packages multiprecision)
39 #:use-module (gnu packages pkg-config)
40 #:use-module (gnu packages readline)
ef02e1e9 41 #:use-module (gnu packages ncurses)
87d836b2 42 #:use-module (gnu packages ed)
ce0614dd 43 #:use-module (gnu packages base)
f906d30c
CAW
44 #:use-module (gnu packages texinfo)
45 #:use-module (gnu packages gettext)
b416aadf 46 #:use-module (gnu packages databases)
9d373377 47 #:use-module (gnu packages python)
5649c8cd
DT
48 #:use-module (gnu packages gl)
49 #:use-module (gnu packages sdl)
50 #:use-module (gnu packages maths)
51 #:use-module (gnu packages image)
1722d680 52 #:use-module (guix packages)
87f5d366 53 #:use-module (guix download)
6bc24063 54 #:use-module (guix git-download)
32795fcf 55 #:use-module (guix build-system gnu)
6bc24063 56 #:use-module (guix build-system trivial)
32795fcf
LC
57 #:use-module (guix utils)
58 #:use-module (ice-9 match))
1722d680
LC
59
60;;; Commentary:
61;;;
c44899a2 62;;; GNU Guile, and modules and extensions.
1722d680
LC
63;;;
64;;; Code:
65
c44899a2
LC
66(define-public guile-1.8
67 (package
68 (name "guile")
69 (version "1.8.8")
70 (source (origin
87f5d366 71 (method url-fetch)
0db342a5 72 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
73 ".tar.gz"))
74 (sha256
75 (base32
01eafd38 76 "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
fc1adab1 77 (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
c44899a2
LC
78 (build-system gnu-build-system)
79 (arguments '(#:configure-flags '("--disable-error-on-warning")
c44899a2
LC
80
81 ;; Insert a phase before `configure' to patch things up.
82 #:phases (alist-cons-before
83 'configure
2f4fbe1c 84 'patch-stuff
c44899a2
LC
85 (lambda* (#:key outputs #:allow-other-keys)
86 ;; Add a call to `lt_dladdsearchdir' so that
87 ;; `libguile-readline.so' & co. are in the
88 ;; loader's search path.
89 (substitute* "libguile/dynl.c"
2f4fbe1c
LC
90 (("lt_dlinit.*$" match)
91 (format #f
92 " ~a~% lt_dladdsearchdir(\"~a/lib\");~%"
93 match
94 (assoc-ref outputs "out"))))
95
96 ;; The usual /bin/sh...
97 (substitute* "ice-9/popen.scm"
98 (("/bin/sh") (which "sh"))))
c44899a2 99 %standard-phases)))
01eafd38 100 (inputs `(("gawk" ,gawk)
c44899a2
LC
101 ("readline" ,readline)))
102
103 ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
104 ;; propagated.
105 (propagated-inputs `(("gmp" ,gmp)
be11b102 106 ("libltdl" ,libltdl)))
c44899a2
LC
107
108 ;; When cross-compiling, a native version of Guile itself is needed.
109 (self-native-input? #t)
110
9be8d7c8
LC
111 (native-search-paths
112 (list (search-path-specification
113 (variable "GUILE_LOAD_PATH")
af070955 114 (files '("share/guile/site")))))
9be8d7c8 115
f50d2669 116 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 117 (description
a22dc0c4
LC
118 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
119official extension language of the GNU system. It is an implementation of
120the Scheme language which can be easily embedded in other applications to
121provide a convenient means of extending the functionality of the application
122without requiring the source code to be rewritten.")
c44899a2 123 (home-page "http://www.gnu.org/software/guile/")
4a44e743 124 (license lgpl2.0+)))
c44899a2
LC
125
126(define-public guile-2.0
127 (package
128 (name "guile")
b1a01474 129 (version "2.0.11")
c44899a2 130 (source (origin
87f5d366 131 (method url-fetch)
0db342a5 132 (uri (string-append "mirror://gnu/guile/guile-" version
c44899a2
LC
133 ".tar.xz"))
134 (sha256
135 (base32
b515822d 136 "1qh3j7308qvsjgwf7h94yqgckpbgz2k3yqdkzsyhqcafvfka9l5f"))
fc1adab1 137 (patches (search-patches "guile-arm-fixes.patch"))))
c44899a2
LC
138 (build-system gnu-build-system)
139 (native-inputs `(("pkgconfig" ,pkg-config)))
140 (inputs `(("libffi" ,libffi)
9c782445 141 ("readline" ,readline)
cba95006 142 ("bash" ,bash)))
c44899a2
LC
143
144 (propagated-inputs
145 `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
146 ;; reads `-lltdl -lunistring', adding them here will add the needed
147 ;; `-L' flags. As for why the `.la' file lacks the `-L' flags, see
148 ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
149 ("libunistring" ,libunistring)
be11b102
LC
150
151 ;; Depend on LIBLTDL, not LIBTOOL. That way, we avoid some the extra
152 ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
153 ("libltdl" ,libltdl)
c44899a2
LC
154
155 ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
156 ;; must be propagated.
bda1bc6c 157 ("bdw-gc" ,libgc)
c44899a2
LC
158 ("gmp" ,gmp)))
159
160 (self-native-input? #t)
161
9bf62d9b
LC
162 (outputs '("out" "debug"))
163
8ffaa93b 164 (arguments
9c782445 165 `(#:phases (alist-cons-before
8ffaa93b
LC
166 'configure 'pre-configure
167 (lambda* (#:key inputs #:allow-other-keys)
58b4e8e8 168 ;; Tell (ice-9 popen) the file name of Bash.
8ffaa93b
LC
169 (let ((bash (assoc-ref inputs "bash")))
170 (substitute* "module/ice-9/popen.scm"
171 (("/bin/sh")
172 (string-append bash "/bin/bash")))))
db619089 173 %standard-phases)))
8ffaa93b 174
9be8d7c8
LC
175 (native-search-paths
176 (list (search-path-specification
177 (variable "GUILE_LOAD_PATH")
af070955 178 (files '("share/guile/site/2.0")))
9be8d7c8
LC
179 (search-path-specification
180 (variable "GUILE_LOAD_COMPILED_PATH")
05f1e956
LC
181 (files '("lib/guile/2.0/ccache"
182 "share/guile/site/2.0")))))
9be8d7c8 183
f50d2669 184 (synopsis "Scheme implementation intended especially for extensions")
c44899a2 185 (description
a22dc0c4
LC
186 "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
187official extension language of the GNU system. It is an implementation of
188the Scheme language which can be easily embedded in other applications to
189provide a convenient means of extending the functionality of the application
190without requiring the source code to be rewritten.")
c44899a2 191 (home-page "http://www.gnu.org/software/guile/")
4a44e743 192 (license lgpl3+)))
c44899a2 193
fa29b199
LC
194(define-public guile-2.0/fixed
195 ;; A package of Guile 2.0 that's rarely changed. It is the one used
196 ;; in the `base' module, and thus changing it entails a full rebuild.
bda1bc6c 197 guile-2.0)
fa29b199 198
be3feafe 199(define-public guile-next
f906d30c 200 (package (inherit guile-2.0)
be3feafe 201 (name "guile-next")
d9f0788a 202 (version "2.1.2")
4eae7980
LC
203 (source (origin
204 (method url-fetch)
205 (uri (string-append "ftp://alpha.gnu.org/gnu/guile/guile-"
206 version ".tar.xz"))
207 (sha256
208 (base32
d9f0788a
LC
209 "0p971k3v04jj5klnv145g4172cpcp90arf0wvxxj2aqkg16j9m9c"))
210 (modules '((guix build utils)))
211
212 ;; Remove the pre-built object files. Instead, build everything
213 ;; from source, at the expense of significantly longer build
214 ;; times (almost 3 hours on a 4-core Intel i5).
215 (snippet '(for-each delete-file
216 (find-files "prebuilt" "\\.go$")))))
dd90ed89
DT
217 (synopsis "Snapshot of what will become version 2.2 of GNU Guile")
218 (native-search-paths
219 (list (search-path-specification
220 (variable "GUILE_LOAD_PATH")
221 (files '("share/guile/site/2.2")))
222 (search-path-specification
223 (variable "GUILE_LOAD_COMPILED_PATH")
224 (files '("lib/guile/2.2/ccache"
225 "share/guile/site/2.2")))))))
4eae7980
LC
226
227(define-public guile-for-guile-emacs
228 (package (inherit guile-next)
229 (name "guile-for-guile-emacs")
230 (version "20150510.d8d9a8d")
f906d30c
CAW
231 (source (origin
232 (method git-fetch)
233 (uri (git-reference
4eae7980
LC
234 (url "git://git.hcoop.net/git/bpt/guile.git")
235 (commit "d8d9a8da05ec876acba81a559798eb5eeceb5a17")))
f906d30c
CAW
236 (sha256
237 (base32
4eae7980 238 "00sprsshy16y8pxjy126hr2adqcvvzzz96hjyjwgg8swva1qh6b0"))))
f906d30c
CAW
239 (arguments
240 (substitute-keyword-arguments `(;; Tests aren't passing for now.
241 ;; Obviously we should re-enable this!
242 #:tests? #f
4eae7980 243 ,@(package-arguments guile-next))
f906d30c
CAW
244 ((#:phases phases)
245 `(modify-phases ,phases
246 (add-after 'unpack 'autogen
247 (lambda _
248 (zero? (system* "sh" "autogen.sh"))))
249 (add-before 'autogen 'patch-/bin/sh
250 (lambda _
251 (substitute* "build-aux/git-version-gen"
252 (("#!/bin/sh") (string-append "#!" (which "sh"))))
253 #t))))))
254 (native-inputs
255 `(("autoconf" ,autoconf)
256 ("automake" ,automake)
257 ("libtool" ,libtool)
258 ("flex" ,flex)
259 ("texinfo" ,texinfo)
260 ("gettext" ,gnu-gettext)
daeb61f7
RW
261 ,@(package-native-inputs guile-next)))
262 ;; Same as in guile-2.0
263 (native-search-paths
264 (list (search-path-specification
265 (variable "GUILE_LOAD_PATH")
266 (files '("share/guile/site/2.0")))
267 (search-path-specification
268 (variable "GUILE_LOAD_COMPILED_PATH")
269 (files '("lib/guile/2.0/ccache"
270 "share/guile/site/2.0")))))))
be3feafe 271
c44899a2
LC
272\f
273;;;
274;;; Extensions.
275;;;
276
7119cca8
ML
277(define-public artanis
278 (package
279 (name "artanis")
c84ceace 280 (version "0.1.2")
7119cca8
ML
281 (source (origin
282 (method url-fetch)
283 (uri (string-append "ftp://alpha.gnu.org/gnu/artanis/artanis-"
284 version ".tar.gz"))
285 (sha256
286 (base32
c84ceace 287 "19m3ak12cqk8js9d2mdg11kh4fjsq8frfpd10qw75h0zpr5cywpp"))))
7119cca8
ML
288 (build-system gnu-build-system)
289 ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
290 (inputs `(("guile" ,guile-2.0)))
291 (native-inputs `(("bash" ,bash) ;for the `source' builtin
292 ("pkgconfig" ,pkg-config)
293 ("util-linux" ,util-linux))) ;for the `script' command
294 (arguments
295 '(#:make-flags
296 ;; TODO: The documentation must be built with the `docs' target.
297 (let* ((out (assoc-ref %outputs "out"))
298 (dir (string-append out "/share/guile/site/2.0")))
299 ;; Don't use (%site-dir) for site paths.
300 (list (string-append "MOD_PATH=" dir)
c84ceace
RW
301 (string-append "MOD_COMPILED_PATH=" dir)
302 (string-append "DESTDIR=" out)))
7119cca8
ML
303 #:test-target "test"
304 #:phases
305 (modify-phases %standard-phases
306 (add-before
307 'install 'substitute-root-dir
308 (lambda* (#:key outputs #:allow-other-keys)
309 (let ((out (assoc-ref outputs "out")))
310 (substitute* "Makefile" ;ignore the execution of bash.bashrc
311 ((" /etc/bash.bashrc") " /dev/null"))
312 (substitute* "Makefile" ;set the root of config files to OUT
313 ((" /etc") (string-append " " out "/etc")))
314 (mkdir-p (string-append out "/bin")) ;for the `art' executable
315 #t))))))
316 (synopsis "Web application framework written in Guile")
317 (description "GNU Artanis is a web application framework written in Guile
318Scheme. A web application framework (WAF) is a software framework that is
319designed to support the development of dynamic websites, web applications, web
320services and web resources. The framework aims to alleviate the overhead
321associated with common activities performed in web development. Artanis
322provides several tools for web development: database access, templating
323frameworks, session management, URL-remapping for RESTful, page caching, and
324more.")
325 (home-page "https://www.gnu.org/software/artanis/")
326 (license (list gpl3+ lgpl3+)))) ;dual license
327
d6d9f1f7 328(define-public guile-reader
1722d680 329 (package
d6d9f1f7 330 (name "guile-reader")
ad29c6f2 331 (version "0.6.1")
d6d9f1f7
LC
332 (source (origin
333 (method url-fetch)
334 (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
335 version ".tar.gz"))
336 (sha256
337 (base32
ad29c6f2 338 "020wz5w8z6g79nbqifg2n496wxwkcjzh8xizpv6mz0hczpl155ma"))))
d6d9f1f7
LC
339 (build-system gnu-build-system)
340 (native-inputs `(("pkgconfig" ,pkg-config)
341 ("gperf" ,gperf)))
342 (inputs `(("guile" ,guile-2.0)))
ad29c6f2 343 (arguments `(#:configure-flags
d6d9f1f7
LC
344 (let ((out (assoc-ref %outputs "out")))
345 (list (string-append "--with-guilemoduledir="
346 out "/share/guile/site/2.0")))))
347 (synopsis "Framework for building readers for GNU Guile")
348 (description
349 "Guile-Reader is a simple framework for building readers for GNU Guile.
1722d680
LC
350
351The idea is to make it easy to build procedures that extend Guile’s read
35b9e423 352procedure. Readers supporting various syntax variants can easily be written,
1722d680 353possibly by re-using existing “token readers” of a standard Scheme
35b9e423 354readers. For example, it is used to implement Skribilo’s R5RS-derived
1722d680
LC
355document syntax.
356
357Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
358hopefully more powerful and flexible (for instance, one may instantiate as
359many readers as needed).")
d6d9f1f7
LC
360 (home-page "http://www.nongnu.org/guile-reader/")
361 (license gpl3+)))
1722d680 362
ef02e1e9
LC
363(define-public guile-ncurses
364 (package
365 (name "guile-ncurses")
4176eb19 366 (version "1.7")
ef02e1e9
LC
367 (source (origin
368 (method url-fetch)
369 (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
370 version ".tar.gz"))
371 (sha256
372 (base32
4176eb19 373 "153vv75gb7l62sp3666rc97i63rnaqbx2rjar7d9b5w81fhwv4r5"))))
ef02e1e9
LC
374 (build-system gnu-build-system)
375 (inputs `(("ncurses" ,ncurses)
376 ("guile" ,guile-2.0)))
377 (arguments
2c6b7c7d
LC
378 '(#:configure-flags (list "--with-ncursesw" ; Unicode support
379 (string-append "--with-guilesitedir="
ef02e1e9 380 (assoc-ref %outputs "out")
3f69e393 381 "/share/guile/site/2.0"))
fa37f21b
EF
382 #:phases
383 (modify-phases %standard-phases
384 (add-after 'install 'post-install
385 (lambda* (#:key outputs #:allow-other-keys)
386 (let* ((out (assoc-ref outputs "out"))
387 (dir (string-append out "/share/guile/site/"))
388 (files (find-files dir ".scm")))
389 (substitute* files
390 (("\"libguile-ncurses\"")
391 (format #f "\"~a/lib/libguile-ncurses\""
392 out)))))))))
ef02e1e9 393 (home-page "http://www.gnu.org/software/guile-ncurses/")
f50d2669 394 (synopsis "Guile bindings to ncurses")
ef02e1e9 395 (description
12bcf94a 396 "guile-ncurses provides Guile language bindings for the ncurses
79c311b8 397library.")
ef02e1e9
LC
398 (license lgpl3+)))
399
87d836b2
LC
400(define-public mcron
401 (package
402 (name "mcron")
d12c626c 403 (version "1.0.8")
87d836b2
LC
404 (source (origin
405 (method url-fetch)
406 (uri (string-append "mirror://gnu/mcron/mcron-"
407 version ".tar.gz"))
408 (sha256
409 (base32
d12c626c 410 "0zparwgf01jgl1x53ik71ghabldq6zz18ha4dscps1i0qrzgap1b"))
fc1adab1 411 (patches (search-patches "mcron-install.patch"))))
87d836b2 412 (build-system gnu-build-system)
b6c18d6a
LC
413 (native-inputs `(("pkg-config" ,pkg-config)))
414 (inputs `(("ed" ,ed) ("which" ,which) ("guile" ,guile-2.0)))
87d836b2 415 (home-page "http://www.gnu.org/software/mcron/")
f50d2669 416 (synopsis "Run jobs at scheduled times")
87d836b2 417 (description
79c311b8 418 "GNU Mcron is a complete replacement for Vixie cron. It is used to run
a22dc0c4 419tasks on a schedule, such as every hour or every Monday. Mcron is written in
79c311b8
LC
420Guile, so its configuration can be written in Scheme; the original cron
421format is also supported.")
87d836b2
LC
422 (license gpl3+)))
423
3e9066fc
LC
424(define-public guile-lib
425 (package
426 (name "guile-lib")
427 (version "0.2.2")
428 (source (origin
429 (method url-fetch)
430 (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
431 version ".tar.gz"))
432 (sha256
433 (base32
434 "1f9n2b5b5r75lzjinyk6zp6g20g60msa0jpfrk5hhg4j8cy0ih4b"))))
435 (build-system gnu-build-system)
436 (arguments
437 '(#:phases (alist-cons-before
438 'configure 'patch-module-dir
439 (lambda _
440 (substitute* "src/Makefile.in"
441 (("^moddir[[:blank:]]*=[[:blank:]]*([[:graph:]]+)" _ rhs)
442 (string-append "moddir = " rhs "/2.0\n"))))
443 %standard-phases)))
444 (inputs `(("guile" ,guile-2.0)))
445 (home-page "http://www.nongnu.org/guile-lib/")
446 (synopsis "Collection of useful Guile Scheme modules")
447 (description
35b9e423 448 "Guile-Lib is intended as an accumulation place for pure-scheme Guile
3e9066fc
LC
449modules, allowing for people to cooperate integrating their generic Guile
450modules into a coherent library. Think \"a down-scaled, limited-scope CPAN
451for Guile\".")
452
453 ;; The whole is under GPLv3+, but some modules are under laxer
454 ;; distribution terms such as LGPL and public domain. See `COPYING' for
455 ;; details.
456 (license gpl3+)))
457
6050a1fb
CR
458(define-public guile-json
459 (package
460 (name "guile-json")
1644f0cd 461 (version "0.5.0")
6050a1fb
CR
462 (source (origin
463 (method url-fetch)
464 (uri (string-append "mirror://savannah/guile-json/guile-json-"
465 version ".tar.gz"))
466 (sha256
467 (base32
1644f0cd 468 "0l8a34l92nrdszy7ykycfvr8y0n0yi5qb3ccliycvpvf9mzk5n8d"))
bf6fcf54
LC
469 (modules '((guix build utils)))
470 (snippet
471 ;; Make sure everything goes under .../site/2.0, like Guile's
472 ;; search paths expects.
473 '(substitute* '("Makefile.in" "json/Makefile.in")
474 (("moddir =.*/share/guile/site" all)
475 (string-append all "/2.0"))))))
6050a1fb 476 (build-system gnu-build-system)
db5584dd 477 (native-inputs `(("guile" ,guile-2.0)))
6050a1fb
CR
478 (home-page "http://savannah.nongnu.org/projects/guile-json/")
479 (synopsis "JSON module for Guile")
480 (description
481 "Guile-json supports parsing and building JSON documents according to the
35b9e423 482http:://json.org specification. These are the main features:
6050a1fb
CR
483- Strictly complies to http://json.org specification.
484- Build JSON documents programmatically via macros.
485- Unicode support for strings.
486- Allows JSON pretty printing.")
487 (license lgpl3+)))
488
6bc24063
CAW
489(define-public guile-minikanren
490 (package
491 (name "guile-minikanren")
492 (version "20150424.e844d85")
493 (source (origin
494 (method git-fetch)
495 (uri (git-reference
496 (url "https://github.com/ijp/minikanren.git")
497 (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
821f4dc2 498 (file-name (string-append name "-" version "-checkout"))
6bc24063
CAW
499 (sha256
500 (base32
501 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
502 (build-system trivial-build-system)
503 (arguments
504 `(#:modules
505 ((guix build utils)
506 (ice-9 match))
507 #:builder
508 (begin
509 (use-modules (guix build utils)
510 (ice-9 match))
511 (let* ((out (assoc-ref %outputs "out"))
512 (module-dir (string-append out "/share/guile/site/2.0"))
513 (source (assoc-ref %build-inputs "source"))
f3d8cd79 514 (doc (string-append out "/share/doc/guile-minikanren"))
6bc24063
CAW
515 (scm-files '("minikanren.scm"
516 "minikanren/mkextraforms.scm"
517 "minikanren/mkprelude.scm"
518 "minikanren/mk.scm"))
519 (guild (string-append (assoc-ref %build-inputs "guile")
520 "/bin/guild")))
521 ;; Make installation directories.
522 (mkdir-p (string-append module-dir "/minikanren"))
523 (mkdir-p doc)
524
525 ;; Compile .scm files and install.
526 (chdir source)
527 (setenv "GUILE_AUTO_COMPILE" "0")
528 (for-each (lambda (file)
529 (let* ((dest-file (string-append module-dir "/"
76e6e663 530 file))
6bc24063
CAW
531 (go-file (match (string-split file #\.)
532 ((base _)
533 (string-append module-dir "/"
534 base ".go")))))
535 ;; Install source module.
536 (copy-file file dest-file)
537 ;; Install compiled module.
538 (unless (zero? (system* guild "compile"
539 "-L" source
540 "-o" go-file
541 file))
542 (error (format #f "Failed to compile ~s to ~s!"
543 file go-file)))))
544 scm-files)
545
546 ;; Also copy over the README.
96c46210 547 (install-file "README.org" doc)
6bc24063
CAW
548 #t))))
549 (inputs
550 `(("guile" ,guile-2.0)))
551 (home-page "https://github.com/ijp/minikanren")
e881752c 552 (synopsis "MiniKanren declarative logic system, packaged for Guile")
6bc24063
CAW
553 (description
554 "MiniKanren is a relational programming extension to the Scheme
555programming Language, written as a smaller version of Kanren suitable for
556pedagogical purposes. It is featured in the book, The Reasoned Schemer,
557written by Dan Friedman, William Byrd, and Oleg Kiselyov.
558
e881752c 559This is Ian Price's r6rs packaged version of miniKanren, which deviates
6bc24063
CAW
560slightly from miniKanren mainline.
561
562See http://minikanren.org/ for more on miniKanren generally.")
563 (license expat)))
564
32e14fc1
CAW
565(define-public guile-irregex
566 (package
567 (name "guile-irregex")
d03f9446 568 (version "0.9.4")
32e14fc1
CAW
569 (source (origin
570 (method url-fetch)
571 (uri (string-append
572 "http://synthcode.com/scheme/irregex/irregex-"
d03f9446 573 version ".tar.gz"))
32e14fc1
CAW
574 (sha256
575 (base32
d03f9446 576 "0cmaqvqvyarcnnsyrl2p6vwyv1r3k1q7qw8p9zrlnz1vpbj7vb90"))))
32e14fc1
CAW
577 (build-system gnu-build-system)
578 (arguments
579 `(#:modules ((guix build utils)
580 (ice-9 match)
581 (guix build gnu-build-system))
582 #:phases
583 (modify-phases %standard-phases
32e14fc1
CAW
584 (delete 'configure)
585 (delete 'build)
586 (delete 'check)
587 (replace 'install
588 (lambda* (#:key inputs outputs #:allow-other-keys)
589 (begin
590 (use-modules (guix build utils)
591 (ice-9 match))
592 (let* ((out (assoc-ref outputs "out"))
593 (module-dir (string-append out "/share/guile/site/2.0"))
594 (source (assoc-ref inputs "source"))
595 (doc (string-append out "/share/doc/guile-irregex/"))
596 (guild (string-append (assoc-ref %build-inputs "guile")
597 "/bin/guild")))
598 ;; Make installation directories.
599 (mkdir-p (string-append module-dir "/rx/source"))
600 (mkdir-p doc)
601
602 ;; Compile .scm files and install.
603 (setenv "GUILE_AUTO_COMPILE" "0")
604
605 (for-each (lambda (copy-info)
606 (match copy-info
607 ((src-file dest-file-basis)
608 (let* ((dest-file (string-append
609 module-dir dest-file-basis
610 ".scm"))
611 (go-file (string-append
612 module-dir dest-file-basis
613 ".go")))
614 ;; Install source module.
615 (copy-file src-file
616 dest-file)
617 ;; Install compiled module.
618 (unless (zero? (system* guild "compile"
619 "-L" (getcwd)
620 "-o" go-file
621 src-file))
622 (error (format #f "Failed to compile ~s to ~s!"
623 src-file dest-file)))))))
624 '(("irregex-guile.scm" "/rx/irregex")
625 ("irregex.scm" "/rx/source/irregex")
626 ;; Not really reachable via guile's packaging system,
627 ;; but nice to have around
628 ("irregex-utils.scm" "/rx/source/irregex-utils")))
629
630 ;; Also copy over the README.
631 (install-file "irregex.html" doc)
632 #t)))))))
633 (inputs
634 `(("guile" ,guile-2.0)))
635 (home-page "http://synthcode.com/scheme/irregex")
636 (synopsis "S-expression based regular expressions")
637 (description
638 "Irregex is an s-expression based alternative to your classic
639string-based regular expressions. It implements SRFI 115 and is deeply
640inspired by the SCSH regular expression system.")
641 (license bsd-3)))
93e7199b
CAW
642
643;; There are two guile-gdbm packages, one using the FFI and one with
644;; direct C bindings, hence the verbose name.
645
646(define-public guile-gdbm-ffi
647 (package
648 (name "guile-gdbm-ffi")
649 (version "20120209.fa1d5b6")
650 (source (origin
651 (method git-fetch)
652 (uri (git-reference
653 (url "https://github.com/ijp/guile-gdbm.git")
654 (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246")))
821f4dc2 655 (file-name (string-append name "-" version "-checkout"))
93e7199b
CAW
656 (sha256
657 (base32
658 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
659 (build-system trivial-build-system)
660 (arguments
661 `(#:modules
662 ((guix build utils))
663 #:builder
664 (begin
665 (use-modules (guix build utils)
666 (system base compile))
667
668 (let* ((out (assoc-ref %outputs "out"))
669 (module-dir (string-append out "/share/guile/site/2.0"))
670 (source (assoc-ref %build-inputs "source"))
671 (doc (string-append out "/share/doc"))
672 (guild (string-append (assoc-ref %build-inputs "guile")
673 "/bin/guild"))
674 (gdbm.scm-dest
675 (string-append module-dir "/gdbm.scm"))
676 (gdbm.go-dest
677 (string-append module-dir "/gdbm.go")))
678 ;; Make installation directories.
679 (mkdir-p module-dir)
680 (mkdir-p doc)
681
682 ;; Switch directory for compiling and installing
683 (chdir source)
684
685 ;; copy the source
686 (copy-file "gdbm.scm" gdbm.scm-dest)
687
688 ;; Patch the FFI
689 (substitute* gdbm.scm-dest
690 (("\\(dynamic-link \"libgdbm\"\\)")
691 (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
692 (assoc-ref %build-inputs "gdbm"))))
693
694 ;; compile to the destination
695 (compile-file gdbm.scm-dest
696 #:output-file gdbm.go-dest)))))
697 (inputs
698 `(("guile" ,guile-2.0)))
699 (propagated-inputs
700 `(("gdbm" ,gdbm)))
701 (home-page "https://github.com/ijp/guile-gdbm")
702 (synopsis "Guile bindings to the GDBM library via Guile's FFI")
703 (description
704 "Guile bindings to the GDBM key-value storage system, using
705Guile's foreign function interface.")
706 (license gpl3+)))
707
27f5e13e
DT
708(define-public haunt
709 (package
710 (name "haunt")
4960beaa 711 (version "0.2")
27f5e13e
DT
712 (source (origin
713 (method url-fetch)
4960beaa 714 (uri (string-append "https://files.dthompson.us/haunt/haunt-"
27f5e13e
DT
715 version ".tar.gz"))
716 (sha256
717 (base32
4960beaa 718 "1id83n8fs7jxys1d8jy70vylg8gzcvlw1y7hb41y3qxv5zi4671m"))))
27f5e13e 719 (build-system gnu-build-system)
4ecbf6d2
LC
720 (arguments
721 `(#:modules ((ice-9 match) (ice-9 ftw)
722 ,@%gnu-build-system-modules)
723
724 #:phases (modify-phases %standard-phases
725 (add-after 'install 'wrap-haunt
726 (lambda* (#:key outputs #:allow-other-keys)
727 ;; Wrap the 'haunt' command to refer to the right
728 ;; modules.
729 (let* ((out (assoc-ref outputs "out"))
730 (bin (string-append out "/bin"))
731 (site (string-append
732 out "/share/guile/site")))
733 (match (scandir site)
734 (("." ".." version)
735 (let ((modules (string-append site "/" version)))
736 (wrap-program (string-append bin "/haunt")
737 `("GUILE_LOAD_PATH" ":" prefix
738 (,modules))
739 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
740 (,modules)))
741 #t)))))))))
4960beaa
DT
742 (native-inputs
743 `(("pkg-config" ,pkg-config)
744 ("texinfo" ,texinfo)))
27f5e13e
DT
745 (inputs
746 `(("guile" ,guile-2.0)))
4960beaa
DT
747 (propagated-inputs
748 `(("guile-reader" ,guile-reader)))
27f5e13e
DT
749 (synopsis "Functional static site generator")
750 (description "Haunt is a static site generator written in Guile
751Scheme. Haunt features a functional build system and an extensible
752interface for reading articles in any format.")
753 (home-page "http://haunt.dthompson.us")
754 (license gpl3+)))
755
44a2bdf8
AS
756(define-public guile-config
757 (package
758 (name "guile-config")
3c98acb7 759 (version "0.1.1")
44a2bdf8
AS
760 (source (origin
761 (method url-fetch)
762 (uri (string-append
763 "http://alex.pompo.co/software/" name "-" version
764 ".tar.gz"))
765 (sha256
766 (base32
3c98acb7 767 "1b719bn192f9wg24rr0zx8jpmygsvyhfi35iy778pb5p392snrn8"))))
44a2bdf8
AS
768 (build-system gnu-build-system)
769 (inputs
770 `(("guile" ,guile-2.0)))
771 (synopsis "Guile application configuration parsing library")
772 (description
773 "Guile Config is a library providing a declarative approach to
774application configuration specification. The library provides clean
775configuration declaration forms, and processors that take care of:
776configuration file creation; configuration file parsing; command-line
777parameter parsing using getopt-long; basic GNU command-line parameter
778generation (--help, --usage, --version); automatic output generation for the
779above command-line parameters.")
780 (home-page "https://github.com/a-sassmannshausen/guile-config")
781 (license agpl3+)))
782
36548111
DT
783(define-public guile-redis
784 (package
785 (name "guile-redis")
786 (version "0.1.0")
787 (source (origin
788 (method url-fetch)
789 (uri (string-append "mirror://savannah/guile-redis/guile-redis-"
790 version ".tar.gz"))
791 (sha256
792 (base32
793 "0vx6if6b4r3kwx64vzbs6vpc0cpcr85x11w9vkzq27gw8n7isv56"))
794 (modules '((guix build utils)))
795 (snippet
796 ;; Make sure everything goes under .../site/2.0, like Guile's
797 ;; search paths expects.
798 '(substitute* '("Makefile.in"
799 "redis/Makefile.in"
800 "redis/commands/Makefile.in")
801 (("moddir =.*/share/guile/site" all)
802 (string-append all "/2.0"))))))
803 (build-system gnu-build-system)
804 (native-inputs
805 `(("guile" ,guile-2.0)))
806 (home-page "http://savannah.nongnu.org/projects/guile-redis/")
807 (synopsis "Redis client library for Guile")
808 (description "Guile-redis provides a Scheme interface to the Redis
809key-value cache and store.")
810 (license lgpl3+)))
811
9d373377
CAW
812(define-public guile-wisp
813 (package
814 (name "guile-wisp")
815 (version "0.9.0")
816 (source (origin
817 (method url-fetch)
818 (uri (string-append "https://bitbucket.org/ArneBab/"
819 "wisp/downloads/wisp-"
820 version ".tar.gz"))
821 (sha256
822 (base32
823 "0y5fxacalkgbv9s71h58vdvm2h2ln3rk024dd0vszwcf953as5fq"))))
824 (build-system gnu-build-system)
825 (arguments
826 `(#:modules ((system base compile)
827 ,@%gnu-build-system-modules)
828 #:phases
829 (modify-phases %standard-phases
830 (add-before
831 'configure 'substitute-before-config
832
833 (lambda* (#:key inputs #:allow-other-keys)
834 (let ((bash (assoc-ref inputs "bash")))
835 ;; configure checks for guile-2.0, but ours is just named "guile" :)
836 (substitute* "configure"
837 (("guile-2.0") "guile"))
838 ;; Puts together some test files with /bin/bash hardcoded
839 (substitute* "Makefile.in"
840 (("/bin/bash")
841 (string-append bash "/bin/bash") ))
842 #t)))
843
844 ;; auto compilation breaks, but if we set HOME to /tmp,
845 ;; that works ok
846 (add-before
847 'check 'auto-compile-hacky-workaround
848 (lambda _
849 (setenv "HOME" "/tmp")
850 #t))
851 (replace
852 'install
853 (lambda* (#:key outputs inputs #:allow-other-keys)
854 (let* ((out (assoc-ref outputs "out"))
855 (module-dir (string-append out "/share/guile/site/2.0"))
856 (language-dir
857 (string-append module-dir "/language/wisp"))
858 (guild (string-append (assoc-ref inputs "guile")
859 "/bin/guild")))
860 ;; Make installation directories.
861 (mkdir-p module-dir)
862 (mkdir-p language-dir)
863
864 ;; copy the source
865 (copy-file "wisp-scheme.scm"
866 (string-append module-dir "/wisp-scheme.scm"))
867 (copy-file "language/wisp/spec.scm"
868 (string-append language-dir "/spec.scm"))
869
870 ;; compile to the destination
871 (compile-file "wisp-scheme.scm"
872 #:output-file (string-append
873 module-dir "/wisp-scheme.go"))
874 (compile-file "language/wisp/spec.scm"
875 #:output-file (string-append
876 language-dir "/spec.go"))
877 #t))))))
878 (home-page "http://draketo.de/english/wisp")
879 (inputs
880 `(("guile" ,guile-2.0)
881 ("python" ,python)))
a124bbd2
SB
882 (synopsis "Whitespace to lisp syntax for Guile")
883 (description "Wisp is a syntax for Guile which provides a Python-like
9d373377
CAW
884whitespace-significant language. It may be easier on the eyes for some
885users and in some situations.")
886 (license gpl3+)))
887
5649c8cd
DT
888(define-public guile-sly
889 (package
890 (name "guile-sly")
891 (version "0.1")
892 (source (origin
893 (method url-fetch)
8d5e7ad2 894 (uri (string-append "https://files.dthompson.us/sly/sly-"
5649c8cd
DT
895 version ".tar.gz"))
896 (sha256
897 (base32
898 "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))))
899 (build-system gnu-build-system)
900 (arguments
901 '(#:configure-flags
902 (list (string-append "--with-libfreeimage-prefix="
903 (assoc-ref %build-inputs "freeimage"))
904 (string-append "--with-libgslcblas-prefix="
905 (assoc-ref %build-inputs "gsl")))))
906 (native-inputs
907 `(("pkg-config" ,pkg-config)))
908 (propagated-inputs
909 `(("guile" ,guile-2.0)
910 ("guile-sdl" ,guile-sdl)
911 ("guile-opengl" ,guile-opengl)))
912 (inputs
913 `(("gsl" ,gsl)
914 ("freeimage" ,freeimage)
915 ("mesa" ,mesa)))
916 (synopsis "2D/3D game engine for GNU Guile")
917 (description "Sly is a 2D/3D game engine written in Guile Scheme. Sly
918features a functional reactive programming interface and live coding
919capabilities.")
920 (home-page "http://dthompson.us/pages/software/sly.html")
921 (license gpl3+)))
922
dec1e2b3
AB
923(define-public g-wrap
924 (package
925 (name "g-wrap")
926 (version "1.9.15")
927 (source (origin
928 (method url-fetch)
929 (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
930 version ".tar.gz"))
931 (sha256
932 (base32
933 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
934 (build-system gnu-build-system)
935 (native-inputs
936 `(("pkg-config" ,pkg-config)))
937 (propagated-inputs
938 `(("guile" ,guile-2.0)
939 ("guile-lib" ,guile-lib)))
940 (inputs
941 `(("libffi" ,libffi)))
9e8599a3
PH
942 (arguments
943 `(#:phases
944 (modify-phases %standard-phases
945 (add-before 'configure 'pre-configure
946 (lambda* (#:key outputs #:allow-other-keys)
947 (let ((out (assoc-ref outputs "out")))
948 (substitute* (find-files "." "^Makefile.in$")
949 (("guilemoduledir =.*guile/site" all)
950 (string-append all "/2.0")))
951 #t))))))
dec1e2b3
AB
952 (synopsis "Generate C bindings for Guile")
953 (description "G-Wrap is a tool and Guile library for generating function
954wrappers for inter-language calls. It currently only supports generating Guile
955wrappers for C functions. Given a definition of the types and prototypes for
956a given C interface, G-Wrap will automatically generate the C code that
957provides access to that interface and its types from the Scheme level.")
958 (home-page "http://www.nongnu.org/g-wrap/index.html")
959 (license lgpl2.1+)))
960
1722d680 961;;; guile.scm ends here