#| 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 . |# (define-module (mcgoron guix foment) #:use-module (guix packages) #:use-module (guix licenses) #:use-module (guix git-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 foment-build-system (let ((lower* (build-system-lower copy-build-system))) (build-system (name 'foment-scheme) (description "Build system for copying Scheme libraries to Foment module directory") (lower (lambda args (apply lower* (if (memq #:install-plan args) args (append args (list #:install-plan `'(("." ,(string-append foment-lib-dir "/")))))))))))) (define-public foment-lib-dir "share/foment") (define-public foment (package (name "foment") (version "6089c3c") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/leftmike/foment") (commit "6089c3c9e762875f619ef382d27943819bbe002b"))) (sha256 (base32 "1a6q8qfd6ggc6fl9lf1d8m20q8k498jrswc4qcn3bb7rkq4w258a")))) (build-system gnu-build-system) (native-search-paths (list (search-path-specification (variable "FOMENT_LIBPATH") (files (list foment-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.")))