1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
;;; ravanan --- High-reproducibility CWL runner powered by Guix
;;; Copyright © 2024, 2025 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of ravanan.
;;;
;;; ravanan 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.
;;;
;;; ravanan 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 ravanan. If not, see <https://www.gnu.org/licenses/>.
(define-module (ravanan-package)
#:use-module ((gnu packages bioinformatics) #:select (ravanan) #:prefix guix:)
#:use-module ((gnu packages guile) #:select (guile-3.0))
#:use-module ((gnu packages scheme) #:select (chibi-scheme))
#:use-module (guix build-system gnu)
#:use-module (guix build-system guile)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix utils))
(define-public guile-chibi-match
(package
(name "guile-chibi-match")
(version (package-version chibi-scheme))
(source (package-source chibi-scheme))
(build-system guile-build-system)
(arguments
(list #:modules '((guix build guile-build-system)
(guix build utils)
(ice-9 ftw))
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'rearrange-files
(lambda _
;; Delete and rearrange files so that (chibi match)
;; is in the expected directory hierarchy.
(chdir "lib/chibi")
(rename-file "match" "chibi")
(for-each (lambda (file)
(unless (member file (list "." ".." "chibi"))
(delete-file-recursively file)))
(scandir "."))
(substitute* "chibi/match.scm"
((";; 2006/12/01[^\n]*" line)
(string-append line
"\n(define-module (chibi match)
#:export (match match-lambda match-lambda* match-let match-letrec match-let*))"))))))))
(inputs
(list guile-3.0))
(home-page "https://synthcode.com/scheme/chibi/lib/chibi/match.html")
(synopsis "Portable hygienic pattern matcher")
(description "@code{guile-chibi-match} is a portable hygienic
pattern matcher for Scheme. This is a full superset of the popular
match package by Andrew Wright, written in fully portable syntax-rules
and thus preserving hygiene. The most notable extensions are the
ability to use non-linear patterns---patterns in which the same
identifier occurs multiple times, tail patterns after ellipsis, and
the experimental tree patterns.")
(license (package-license chibi-scheme))))
(define-public run64
(let ((commit "79976781fd609409cd5ac543b3ecfa4d2531dd6a")
(revision "0"))
(package
(name "run64")
(version (git-version "0.1.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://git.systemreboot.net/run64")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"1fxz5463hv609hqmqn3rph3z9fd4viqxfxxx2js1y75zqqyb1ab9"))))
(build-system gnu-build-system)
(arguments
(list #:make-flags #~(list (string-append "prefix=" #$output))
#:modules `(((guix build guile-build-system)
#:select (target-guile-effective-version))
,@%default-gnu-imported-modules)
#:phases
(with-imported-modules `((guix build guile-build-system)
,@%default-gnu-imported-modules)
#~(modify-phases %standard-phases
(delete 'configure)
(add-after 'install 'wrap
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
(effective-version (target-guile-effective-version)))
(wrap-program (string-append out "/bin/guile-run64")
`("GUILE_LOAD_PATH" prefix
(,(string-append out "/share/guile/site/" effective-version)
,(getenv "GUILE_LOAD_PATH")))
`("GUILE_LOAD_COMPILED_PATH" prefix
(,(string-append out "/lib/guile/"
effective-version "/site-ccache")
,(getenv "GUILE_LOAD_COMPILED_PATH")))))))))))
(inputs
(list guile-3.0
guile-chibi-match))
(home-page "https://run64.systemreboot.net")
(synopsis "SRFI-64 test runner for Scheme")
(description "run64 is a SRFI-64 test runner for Scheme.")
(license license:gpl3+))))
(define-public ravanan
(package
(inherit guix:ravanan)
(source (local-file ".."
"ravanan-checkout"
#:recursive? #t
#:select? (lambda (file stat)
;; If .guix is included, changes to other
;; files under .guix—such as the CWL
;; conformance tests—unnecessarily trigger a
;; rebuild of ravanan. This could be a
;; nuisance when hacking on the CWL
;; conformance test scripts.
(and (not (string-contains file "/.guix/"))
(not (string-contains file "/e2e-tests/"))
((or (git-predicate (dirname (current-source-directory)))
(const #t))
file stat)))))
(native-inputs
(modify-inputs (package-native-inputs guix:ravanan)
(prepend run64)))))
ravanan
|