Commit | Line | Data |
---|---|---|
abc12b0d EF |
1 | ;;; GNU Guix --- Functional package management for GNU |
2 | ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il> | |
3 | ;;; | |
4 | ;;; This file is part of GNU Guix. | |
5 | ;;; | |
6 | ;;; GNU Guix is free software; you can redistribute it and/or modify it | |
7 | ;;; under the terms of the GNU General Public License as published by | |
8 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
9 | ;;; your option) any later version. | |
10 | ;;; | |
11 | ;;; GNU Guix is distributed in the hope that it will be useful, but | |
12 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | ;;; GNU General Public License for more details. | |
15 | ;;; | |
16 | ;;; You should have received a copy of the GNU General Public License | |
17 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. | |
18 | ||
19 | (define-module (gnu packages perl6) | |
20 | #:use-module ((guix licenses) #:prefix license:) | |
21 | #:use-module (guix download) | |
d6170877 | 22 | #:use-module (guix git-download) |
abc12b0d EF |
23 | #:use-module (guix packages) |
24 | #:use-module (guix build-system perl) | |
d6170877 | 25 | #:use-module (guix build-system rakudo) |
abc12b0d EF |
26 | #:use-module (gnu packages bdw-gc) |
27 | #:use-module (gnu packages libevent) | |
28 | #:use-module (gnu packages libffi) | |
29 | #:use-module (gnu packages multiprecision) | |
f7f8e767 EF |
30 | #:use-module (gnu packages pkg-config) |
31 | #:use-module (gnu packages tls)) | |
abc12b0d EF |
32 | |
33 | (define-public moarvm | |
34 | (package | |
35 | (name "moarvm") | |
36 | (version "2019.03") | |
37 | (source | |
38 | (origin | |
39 | (method url-fetch) | |
40 | (uri (string-append "https://moarvm.org/releases/MoarVM-" | |
41 | version ".tar.gz")) | |
42 | (sha256 | |
43 | (base32 | |
44 | "017w1zvr6yl0cgjfc1b3ddlc6vjw9q8p7alw1vvsckw95190xc14")) | |
45 | (modules '((guix build utils))) | |
46 | (snippet | |
47 | '(begin | |
48 | ;(delete-file-recursively "3rdparty/dynasm") ; JIT | |
49 | (delete-file-recursively "3rdparty/dyncall") | |
50 | (delete-file-recursively "3rdparty/freebsd") | |
51 | (delete-file-recursively "3rdparty/libatomicops") | |
52 | (delete-file-recursively "3rdparty/libuv") | |
53 | (delete-file-recursively "3rdparty/libtommath") | |
54 | (delete-file-recursively "3rdparty/msinttypes") | |
55 | #t)))) | |
56 | (build-system perl-build-system) | |
57 | (arguments | |
58 | '(#:phases | |
59 | (modify-phases %standard-phases | |
60 | (replace 'configure | |
61 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
62 | (let ((out (assoc-ref outputs "out")) | |
63 | (pkg-config (assoc-ref inputs "pkg-config"))) | |
64 | (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib")) | |
65 | (invoke "perl" "Configure.pl" | |
66 | "--prefix" out | |
67 | "--pkgconfig" (string-append pkg-config "/bin/pkg-config") | |
68 | "--has-libtommath" | |
69 | "--has-libatomic_ops" | |
70 | "--has-libffi" | |
71 | "--has-libuv"))))))) | |
72 | (home-page "https://moarvm.org/") | |
73 | ;; These should be inputs but moar.h can't find them when building rakudo | |
74 | (propagated-inputs | |
75 | `(("libatomic-ops" ,libatomic-ops) | |
76 | ("libtommath" ,libtommath-1.0) | |
77 | ("libuv" ,libuv))) | |
78 | (inputs | |
79 | `(("libffi" ,libffi))) | |
80 | (native-inputs | |
81 | `(("pkg-config" ,pkg-config))) | |
82 | (synopsis "VM for NQP And Rakudo Perl 6") | |
83 | (description | |
84 | "Short for \"Metamodel On A Runtime\", MoarVM is a modern virtual machine | |
85 | built for the Rakudo Perl 6 compiler and the NQP Compiler Toolchain. Highlights | |
86 | include: | |
87 | ||
88 | @itemize | |
89 | @item Great Unicode support, with strings represented at grapheme level | |
90 | @item Dynamic analysis of running code to identify hot functions and loops, and | |
91 | perform a range of optimizations, including type specialization and inlining | |
92 | @item Support for threads, a range of concurrency control constructs, and | |
93 | asynchronous sockets, timers, processes, and more | |
94 | @item Generational, parallel, garbage collection | |
95 | @item Support for numerous language features, including first class functions, | |
96 | exceptions, continuations, runtime loading of code, big integers and interfacing | |
97 | with native libraries. | |
98 | @end itemize") | |
99 | (license license:artistic2.0))) | |
af2dec5b EF |
100 | |
101 | (define-public nqp | |
102 | (package | |
103 | (name "nqp") | |
104 | (version "2019.03") | |
105 | (source | |
106 | (origin | |
107 | (method url-fetch) | |
108 | (uri (string-append "https://rakudo.perl6.org/downloads/nqp/nqp-" | |
109 | version ".tar.gz")) | |
110 | (sha256 | |
111 | (base32 | |
112 | "183zhll13fx416s3hkg4bkvib77kyr857h0nydgrl643fpacxp83")) | |
113 | (modules '((guix build utils))) | |
114 | (snippet | |
115 | '(begin | |
116 | (delete-file-recursively "3rdparty") #t)))) | |
117 | (build-system perl-build-system) | |
118 | (arguments | |
119 | '(#:phases | |
120 | (modify-phases %standard-phases | |
121 | (add-after 'patch-source-shebangs 'patch-more-shebangs | |
122 | (lambda _ | |
123 | (substitute* '("tools/build/install-jvm-runner.pl.in" | |
124 | "tools/build/gen-js-cross-runner.pl" | |
125 | "tools/build/gen-js-runner.pl" | |
126 | "tools/build/install-js-runner.pl" | |
127 | "tools/build/install-moar-runner.pl" | |
128 | "tools/build/gen-moar-runner.pl" | |
129 | "t/nqp/111-spawnprocasync.t" | |
130 | "t/nqp/113-run-command.t") | |
131 | (("/bin/sh") (which "sh"))) | |
132 | #t)) | |
133 | (add-after 'unpack 'patch-source-date | |
134 | (lambda _ | |
135 | (substitute* "tools/build/gen-version.pl" | |
136 | (("gmtime") "gmtime(0)")) | |
137 | #t)) | |
138 | (add-after 'unpack 'remove-failing-test | |
139 | ;; One subtest fails for unknown reasons | |
140 | (lambda _ | |
141 | (delete-file "t/nqp/019-file-ops.t") | |
142 | #t)) | |
143 | (replace 'configure | |
144 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
145 | (let ((out (assoc-ref outputs "out")) | |
146 | (moar (assoc-ref inputs "moarvm"))) | |
147 | (invoke "perl" "Configure.pl" | |
148 | "--backends=moar" | |
149 | "--with-moar" (string-append moar "/bin/moar") | |
150 | "--prefix" out))))))) | |
151 | (inputs | |
152 | `(("moarvm" ,moarvm))) | |
153 | (home-page "https://github.com/perl6/nqp") | |
154 | (synopsis "Not Quite Perl") | |
155 | (description "This is \"Not Quite Perl\" -- a lightweight Perl 6-like | |
156 | environment for virtual machines. The key feature of NQP is that it's designed | |
157 | to be a very small environment (as compared with, say, perl6 or Rakudo) and is | |
158 | focused on being a high-level way to create compilers and libraries for virtual | |
159 | machines like MoarVM, the JVM, and others. | |
160 | ||
161 | Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a | |
162 | runtime footprint as it can, while still providing a Perl 6 object model and | |
163 | regular expression engine for the virtual machine.") | |
164 | (license license:artistic2.0))) | |
f7f8e767 EF |
165 | |
166 | (define-public rakudo | |
167 | (package | |
168 | (name "rakudo") | |
169 | (version "2019.03.1") | |
170 | (source | |
171 | (origin | |
172 | (method url-fetch) | |
173 | (uri (string-append "https://rakudo.perl6.org/downloads/rakudo/rakudo-" | |
174 | version ".tar.gz")) | |
175 | (sha256 | |
176 | (base32 | |
177 | "1nllf69v8xr6v3kkj7pmryg11n5m3ajfkr7j72pvhrgnjy8lv3r1")))) | |
178 | (build-system perl-build-system) | |
179 | (arguments | |
180 | '(#:phases | |
181 | (modify-phases %standard-phases | |
182 | (add-after 'unpack 'patch-source-date | |
183 | (lambda _ | |
184 | (substitute* "tools/build/gen-version.pl" | |
185 | (("gmtime") "gmtime(0)")) | |
186 | #t)) | |
187 | (add-after 'patch-source-shebangs 'patch-more-shebangs | |
188 | (lambda _ | |
189 | (substitute* '("tools/build/create-js-runner.pl" | |
190 | "tools/build/create-moar-runner.p6" | |
191 | "tools/build/create-jvm-runner.pl" | |
192 | "src/core/Proc.pm6") | |
193 | (("/bin/sh") (which "sh"))) | |
194 | #t)) | |
195 | (replace 'configure | |
196 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
197 | (let ((out (assoc-ref outputs "out")) | |
198 | (nqp (assoc-ref inputs "nqp"))) | |
199 | (invoke "perl" "./Configure.pl" | |
200 | "--backend=moar" | |
201 | "--with-nqp" (string-append nqp "/bin/nqp") | |
202 | "--prefix" out)))) | |
203 | ;; This is the recommended tool for distro maintainers to install perl6 | |
204 | ;; modules systemwide. See: https://github.com/ugexe/zef/issues/117 | |
205 | (add-after 'install 'install-dist-tool | |
206 | (lambda* (#:key outputs #:allow-other-keys) | |
207 | (let* ((out (assoc-ref outputs "out")) | |
208 | (dest (string-append out "/share/perl6/tools"))) | |
209 | (install-file "tools/install-dist.p6" dest) | |
210 | (substitute* (string-append dest "/install-dist.p6") | |
211 | (("/usr/bin/env perl6") | |
212 | (string-append out "/bin/perl6")))) | |
213 | #t))))) | |
214 | (inputs | |
215 | `(("moarvm" ,moarvm) | |
216 | ("nqp" ,nqp) | |
217 | ("openssl" ,openssl))) | |
218 | (home-page "https://rakudo.org/") | |
219 | (native-search-paths | |
220 | (list (search-path-specification | |
221 | (variable "PERL6LIB") | |
222 | (separator ",") | |
223 | (files '("share/perl6/lib" | |
224 | "share/perl6/site/lib" | |
225 | "share/perl6/vendor/lib"))))) | |
226 | (synopsis "Perl 6 Compiler") | |
227 | (description "Rakudo Perl is a compiler that implements the Perl 6 | |
228 | specification and runs on top of several virtual machines.") | |
229 | (license license:artistic2.0))) | |
d6170877 EF |
230 | |
231 | (define-public perl6-tap-harness | |
232 | (package | |
233 | (name "perl6-tap-harness") | |
234 | (version "0.0.7") | |
235 | (source | |
236 | (origin | |
237 | (method git-fetch) | |
238 | (uri (git-reference | |
239 | (url "https://github.com/perl6/tap-harness6.git") | |
240 | (commit (string-append "v" version)))) | |
241 | (file-name (git-file-name name version)) | |
242 | (sha256 | |
243 | (base32 | |
244 | "1lig8i0my3fgqvlay9532xslbf3iis2d7wz89gniwvwqffi2kh6r")))) | |
245 | (build-system rakudo-build-system) | |
246 | (arguments | |
247 | '(#:with-zef? #f | |
248 | #:with-prove6? #f | |
249 | #:phases | |
250 | (modify-phases %standard-phases | |
251 | (replace 'check | |
252 | (lambda _ | |
253 | (invoke "perl6" "-Ilib" "bin/prove6" "-l" "t")))))) | |
254 | (home-page "https://github.com/perl6/tap-harness6/") | |
255 | (synopsis "TAP harness for perl6") | |
256 | (description "This module provides the @command{prove6} command which runs a | |
257 | TAP based test suite and prints a report. The @command{prove6} command is a | |
258 | minimal wrapper around an instance of this module.") | |
259 | (license license:artistic2.0))) |