gnu: Add guile-minikanren.

* gnu/packages/guile.scm (guile-minikanren): New variable.
master
Christopher Allan Webber 2015-04-21 22:40:15 -05:00 committed by David Thompson
parent 7bde30e18d
commit 6bc2406315
2 changed files with 79 additions and 0 deletions

View File

@ -35,5 +35,6 @@ alphabetical order):
David Thompson <dthompson2@worcester.edu>
Paul van der Walt <paul@denknerd.org>
Mark H. Weaver <mhw@netris.org>
Christopher A. Webber <cwebber@dustycloud.org>
Andy Wingo <wingo@pobox.com>
Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Christopher Allan Webber <cwebber@dustycloud.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -36,7 +37,9 @@
#:use-module (gnu packages base)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (guix utils)
#:use-module (ice-9 match))
@ -358,4 +361,79 @@ http:://json.org specification. These are the main features:
- Allows JSON pretty printing.")
(license lgpl3+)))
(define-public guile-minikanren
(package
(name "guile-minikanren")
(version "20150424.e844d85")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ijp/minikanren.git")
(commit "e844d85512f8c055d3f96143ee506007389a25e3")))
(sha256
(base32
"0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
(build-system trivial-build-system)
(arguments
`(#:modules
((guix build utils)
(ice-9 match))
#:builder
(begin
(use-modules (guix build utils)
(ice-9 match))
(let* ((out (assoc-ref %outputs "out"))
(module-dir (string-append out "/share/guile/site/2.0"))
(source (assoc-ref %build-inputs "source"))
(doc (string-append out "/share/doc"))
(scm-files '("minikanren.scm"
"minikanren/mkextraforms.scm"
"minikanren/mkprelude.scm"
"minikanren/mk.scm"))
(guild (string-append (assoc-ref %build-inputs "guile")
"/bin/guild")))
;; Make installation directories.
(mkdir-p (string-append module-dir "/minikanren"))
(mkdir-p doc)
;; Compile .scm files and install.
(chdir source)
(setenv "GUILE_AUTO_COMPILE" "0")
(for-each (lambda (file)
(let* ((dest-file (string-append module-dir "/"
file ".scm"))
(go-file (match (string-split file #\.)
((base _)
(string-append module-dir "/"
base ".go")))))
;; Install source module.
(copy-file file dest-file)
;; Install compiled module.
(unless (zero? (system* guild "compile"
"-L" source
"-o" go-file
file))
(error (format #f "Failed to compile ~s to ~s!"
file go-file)))))
scm-files)
;; Also copy over the README.
(copy-file "README.org" (string-append doc "/README.org"))
#t))))
(inputs
`(("guile" ,guile-2.0)))
(home-page "https://github.com/ijp/minikanren")
(synopsis "miniKanren declarative logic system, packaged for Guile")
(description
"MiniKanren is a relational programming extension to the Scheme
programming Language, written as a smaller version of Kanren suitable for
pedagogical purposes. It is featured in the book, The Reasoned Schemer,
written by Dan Friedman, William Byrd, and Oleg Kiselyov.
This is Ian Price's r6rs packaged version of miniKranen, which deviates
slightly from miniKanren mainline.
See http://minikanren.org/ for more on miniKanren generally.")
(license expat)))
;;; guile.scm ends here