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
| | ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 B. Wilson <elaexuotee@wilsonb.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix 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.
;;;
;;; GNU Guix 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 GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages k-lang)
#:use-module (gnu packages readline)
#:use-module (guix build-system gnu)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix utils))
(define-public ngn-k
(let ((commit "cb36213657b6c5b2fe3bb1c88c4de7fe975f84ed")
(revision "1"))
(package
(name "ngn-k")
(version (git-version "0.0.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://codeberg.org/ngn/k.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "1140avqsqaa1pyh937rcd04snbkcgngmkg3dkmsbj6kw0jnrgf1z"))))
(build-system gnu-build-system)
(inputs (list rlwrap))
(arguments
`(#:make-flags (list (string-append "CC=" ,(cc-for-target)))
#:test-target "t"
#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(k (string-append out "/k")))
(substitute* "repl.k"
(("^#!k") (string-append "#!" k "\n"))))))
(replace 'build
(lambda* (#:key make-flags #:allow-other-keys)
(let ((build-target "k"))
(apply invoke "make" `(,@make-flags ,build-target)))))
(replace 'install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(k (string-append bin "/k"))
(rlwrap (string-append
(assoc-ref inputs "rlwrap")
"/bin/rlwrap")))
(define* (rlwrap-prog prog #:key rlwrap (sh (which "bash")))
(let* ((real-prog (string-append (dirname prog) "/."
(basename prog) "-real"))
(prog-tmp (string-append real-prog "-tmp")))
(link prog real-prog)
(call-with-output-file prog-tmp
(lambda (port)
(format port
"#!~a~%exec -a \"$0\" \"~a\" \"~a\" \"$@\"~%"
sh rlwrap (canonicalize-path real-prog))))
(chmod prog-tmp #o755)
(rename-file prog-tmp prog)))
(mkdir-p bin)
(copy-file "repl.k" (string-append bin "/krepl"))
(copy-file "k" k)
(rlwrap-prog k #:rlwrap rlwrap)))))))
(home-page "https://codeberg.org/ngn/k")
(synopsis "Implementation of the K6 vector programming language")
(description "ngn/k is a simple fast vector programming language, an
implementation of the K6 dialect of K.")
(license license:agpl3))))
|