From a40c2f8da528b4d1010cdf9d1ce96059ec084078 Mon Sep 17 00:00:00 2001 From: Amirouche Date: Sun, 9 Oct 2016 12:31:20 +0200 Subject: [PATCH] gnu: Add guile-bytestructures * gnu/packages/guile.scm (guile-bytestructures): New variable. --- gnu/packages/guile.scm | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index 43071e6..2325a25 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2016 Eraim Flashner ;;; Copyright © 2016 Alex Kost ;;; Copyright © 2016 Adonay "adfeno" Felipe Nogueira +;;; Copyright © 2016 Amirouche ;;; ;;; This file is part of GNU Guix. ;;; @@ -1267,4 +1268,84 @@ is no support for parsing block and inline level HTML.") (define-public guile2.2-commonmark (package-for-guile-2.2 guile-commonmark)) +(define-public guile-bytestructures + (package + (name "guile-bytestructures") + (version "20160726.53127f6") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/TaylanUB/scheme-bytestructures") + (commit "53127f608caf64b34fa41c389b2743b546fbe9da"))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0l4nx1vp9fkrgrgwjiycj7nx6wfjfd39rqamv4pmq7issi8mrywq")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match) + (ice-9 popen) + (ice-9 rdelim)) + (let* ((out (assoc-ref %outputs "out")) + (guile (assoc-ref %build-inputs "guile")) + (effective (read-line + (open-pipe* OPEN_READ + (string-append guile "/bin/guile") + "-c" "(display (effective-version))"))) + (module-dir (string-append out "/share/guile/site/" + effective)) + (source (assoc-ref %build-inputs "source")) + (doc (string-append out "/share/doc/scheme-bytestructures")) + (scm-files (filter (lambda (path) + (not (string-prefix? "bytestructures/r7" path))) + (with-directory-excursion source + (find-files "bytestructures" "\\.scm$")))) + (guild (string-append (assoc-ref %build-inputs "guile") + "/bin/guild"))) + ;; Make installation directories. + (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)) + (go-file (string-append module-dir "/" + (substring file 0 + (string-rindex file #\.)) + ".go"))) + ;; Install source module. + (mkdir-p (dirname dest-file)) + (copy-file file dest-file) + + ;; Install compiled module. + (mkdir-p (dirname go-file)) + (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. + (install-file "README.md" doc) + #t)))) + (inputs + `(("guile" ,guile-2.0))) + (home-page "https://github.com/TaylanUB/scheme-bytestructures") + (synopsis "Structured access to bytevector contents for Guile") + (description + "Guile bytestructures offers a system imitating the type system +of the C programming language, to be used on bytevectors. C's type +system works on raw memory, and Guile works on bytevectors which are +an abstraction over raw memory. It's also more powerful than the C +type system, elevating types to first-class status.") + (license gpl3+))) + ;;; guile.scm ends here -- 2.10.0