aboutsummaryrefslogtreecommitdiffstats
path: root/mcgoron/guix/scheme-packages.scm
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-08-12 18:05:48 -0400
committerGravatar Peter McGoron 2025-08-12 18:05:48 -0400
commit27b3c30fa6238fd306fe989060657afa259bd9c4 (patch)
tree6d65c50ade76c4034d50b51fc6c85712f51ecc64 /mcgoron/guix/scheme-packages.scm
parentgauche (diff)
patch foment to respect new envar R7RS_LIBRARY_PATH
Diffstat (limited to 'mcgoron/guix/scheme-packages.scm')
-rw-r--r--mcgoron/guix/scheme-packages.scm138
1 files changed, 138 insertions, 0 deletions
diff --git a/mcgoron/guix/scheme-packages.scm b/mcgoron/guix/scheme-packages.scm
new file mode 100644
index 0000000..bbec95b
--- /dev/null
+++ b/mcgoron/guix/scheme-packages.scm
@@ -0,0 +1,138 @@
+#| Copyright (C) 2025 Peter McGoron
+ |
+ | This program is free software: you can redistribute it and/or modify it
+ | under the terms of the GNU General Public License as published by the
+ | Free Software Foundation, either version 3 of the License, or (at your
+ | option) any later version.
+ |
+ | This program is distributed in the hope that it will be useful, but
+ | WITHOUT ANY WARRANTY; without even the implied warranty of
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ | General Public License for more details.
+ |
+ | You should have received a copy of the GNU General Public License along
+ | with this program. If not, see <https://www.gnu.org/licenses/>.
+ |#
+
+(define-module (mcgoron guix scheme-packages)
+ #:use-module (guix packages)
+ #:use-module (gnu packages)
+ #:use-module (guix licenses)
+ #:use-module (guix git-download)
+ #:use-module (guix download)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages bash)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system)
+ #:use-module (guix build-system copy)
+ #:use-module (guix gexp))
+
+(define-public r7rs-lib-dir "share/scheme/r7rs")
+(define-public r6rs-lib-dir "share/scheme/r6rs")
+
+(define-public (default-copying-build-system name desc dir)
+ (let ((lower* (build-system-lower copy-build-system)))
+ (build-system
+ (name name)
+ (description desc)
+ (lower
+ (lambda args
+ (apply lower*
+ (if (memq #:install-plan args)
+ args
+ (append
+ args
+ (list
+ #:install-plan
+ `'(("." ,(string-append dir "/"))))))))))))
+
+(define-public portable-r7rs-build-system
+ (default-copying-build-system 'r7rs
+ "Copy Scheme libraries into R7RS directory"
+ r7rs-lib-dir))
+
+(define-public hello-world-r7rs
+ (package
+ (name "hello-world-r7rs")
+ (version "1.0.0")
+ (synopsis "Prints hello world")
+ (description "A test library for packages that respect R7RS_LIBRARY_PATH")
+ (license public-domain)
+ (home-page "https://example.com")
+ (build-system portable-r7rs-build-system)
+ (source
+ (origin
+ (method url-fetch)
+ (uri "https://florida.moe/ftp/hello-world-r7rs/1.0.0.tar.gz")
+ (sha256 (base32 "1cx9p2mz3cmn02imp137vqmq8aw3mh5s23ybprgkc8pshgmaf8jn"))))))
+
+(define-public foment-lib-dir "share/foment")
+(define-public foment-build-system
+ (default-copying-build-system 'foment-scheme
+ "Copy Scheme libraries into Foment Scheme directory"
+ foment-lib-dir))
+
+(define-public foment
+ (package
+ (name "foment")
+ (version "0.4.1-1.6089c3c")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference (url "https://github.com/leftmike/foment")
+ (commit "6089c3c9e762875f619ef382d27943819bbe002b")))
+ (sha256 (base32 "1a6q8qfd6ggc6fl9lf1d8m20q8k498jrswc4qcn3bb7rkq4w258a"))
+ (patches (search-patches "mcgoron/guix/patches/foment-0.4.1-library-path.patch"))))
+ (build-system gnu-build-system)
+ (native-search-paths (list
+ (search-path-specification
+ (variable "FOMENT_LIBPATH")
+ (files (list foment-lib-dir)))
+ (search-path-specification
+ (variable "R7RS_LIBRARY_PATH")
+ (files (list r7rs-lib-dir)))))
+
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (add-before 'build 'patch-makefile
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "unix/makefile"
+ (("sudo *") "")
+ (("git rev-parse --abbrev-ref HEAD") "echo \"master\"")
+ (("git rev-parse --short HEAD") "echo 6089c3c"))
+;; Replace hardcoded path /bin/sh with the current interpreter.
+;; This follows what racket does:
+;; https://issues.guix.gnu.org/47180
+ (substitute* "src/base.scm"
+ (("\"/bin/sh\"")
+ (let ((sh (which "sh")))
+ (string-append "(if (file-exists? \"" sh "\")\n"
+ " \"" sh "\"\n"
+ " \"/bin/sh\")"))))))
+ (replace 'build
+ (lambda _
+ (with-directory-excursion "unix"
+ (invoke "make"))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (with-directory-excursion "unix"
+ (invoke "make" "test")
+ (invoke "make" "stress-test")))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((bin (string-append (assoc-ref outputs "out")
+ "/bin")))
+ (install-file "unix/release/foment" bin)
+ (copy-recursively "unix/debug/foment"
+ (string-append bin "/foment-debug"))))))))
+ (home-page "https://github.com/leftmike/foment")
+ (synopsis "Foment is an implementation of R7RS Scheme.")
+ (license expat)
+ (inputs '())
+ (native-inputs (list bash))
+ (description "Foment is an implementation of Scheme.")))
+