Subject: [PATCH] gnu: Add tr7.

From: "Artyom V. Poptsov" <[email-masked]>
Date: Sat, 6 Apr 2024 09:32:09 +0300

* gnu/packages/scheme.scm (tr7): New variable.

Change-Id: I60e34f0f918ea7c9b36cea02358d69ab7bfad24b
---
 gnu/packages/scheme.scm | 67 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 66 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index 070696d6ba..926deaeade 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -24,6 +24,7 @@
 ;;; Copyright © 2023 Juliana Sims <[email-masked]>
 ;;; Copyright © 2023 Maxim Cournoyer <[email-masked]>
 ;;; Copyright © 2024 Skylar Hill <[email-masked]>
+;;; Copyright © 2024 Artyom V. Poptsov <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,7 +45,8 @@ (define-module (gnu packages scheme)
   #:use-module (gnu packages)
   #:use-module ((guix licenses)
                 #:select (gpl2 gpl2+ lgpl2.0+ lgpl2.1 lgpl2.1+ lgpl3+ asl2.0
-                          bsd-3 cc-by-sa4.0 non-copyleft expat public-domain))
+                          bsd-0 bsd-3 cc-by-sa4.0 non-copyleft expat
+                          public-domain))
   #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -855,6 +857,69 @@ (define-public tinyscheme
 small program, it is easy to comprehend, get to grips with, and use.")
     (license bsd-3)))                   ; there are no licence headers
 
+(define-public tr7
+  (package
+    (name "tr7")
+    (version "1.0.10")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/jobol/tr7")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "0n77fkm5kcv2pmwbw5fl8r00aarw8da8gkd9d1ki5fn9kbl4fyk2"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (replace 'configure
+                     (lambda _
+                       (substitute* "Makefile"
+                         (("PREFIX = /usr/local")
+                          (string-append "PREFIX="
+                                         #$output))
+                         (("ALL = \\$\\(LIBSTA\\) \\$\\(TR7I\\) tags")
+                          "ALL = $(LIBSTA) $(TR7I)"))))
+                   (replace 'build
+                     (lambda _
+                       (setenv "CC"
+                               #$(cc-for-target))
+                       (invoke "make")))
+                   (replace 'check
+                     (lambda* (#:key tests? #:allow-other-keys)
+                       (when tests?
+                         (invoke "make" "test"))))
+                   (replace 'install
+                     (lambda _
+                       (let* ((share (string-append #$output "/share"))
+                              (doc (string-append #$output:doc "/share/doc/"))
+                              (bin (string-append #$output "/bin"))
+                              (lib (string-append #$output "/lib/"))
+                              (tr7 (string-append share "/tr7"))
+                              (libs (string-append tr7 "/libs")))
+                         (for-each mkdir-p
+                                   (list tr7 libs bin lib doc))
+                         (copy-file "tr7i"
+                                    (string-append bin "/tr7i"))
+                         (copy-file "libtr7.a"
+                                    (string-append lib "/libtr7.a"))
+                         (copy-file "r7rs.pdf"
+                                    (string-append doc "/r7rs.pdf"))
+                         (copy-recursively "tr7libs" libs)))))))
+    (home-page "https://gitlab.com/jobol/tr7")
+    (synopsis "Embedded R7RS small Scheme interpreter")
+    (description
+     "@code{TR7} is a lightweight Scheme interpreter that implements the revision
+R7RS small of scheme programming language.
+
+It is meant to be used as an embedded scripting interpreter for other programs.  A
+lot of functionality in TR7 is included conditionally, to allow developers freedom in
+balancing features and footprint.")
+    (license bsd-0)))
+
 (define-public stalin
   (let ((commit "ed1c9e339c352b7a6fee40bb2a47607c3466f0be"))
     ;; FIXME: The Stalin "source" contains C code generated by itself:

base-commit: bfc614397b5f146056bda4b5a8e3a67bd1ca7b23
-- 
2.41.0