gnu: Add perl6-uri.
[jackhill/guix/guix.git] / gnu / packages / perl6.scm
CommitLineData
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
85built for the Rakudo Perl 6 compiler and the NQP Compiler Toolchain. Highlights
86include:
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
91perform a range of optimizations, including type specialization and inlining
92@item Support for threads, a range of concurrency control constructs, and
93asynchronous sockets, timers, processes, and more
94@item Generational, parallel, garbage collection
95@item Support for numerous language features, including first class functions,
96exceptions, continuations, runtime loading of code, big integers and interfacing
97with 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
156environment for virtual machines. The key feature of NQP is that it's designed
157to be a very small environment (as compared with, say, perl6 or Rakudo) and is
158focused on being a high-level way to create compilers and libraries for virtual
159machines like MoarVM, the JVM, and others.
160
161Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a
162runtime footprint as it can, while still providing a Perl 6 object model and
163regular 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
228specification 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
257TAP based test suite and prints a report. The @command{prove6} command is a
258minimal wrapper around an instance of this module.")
259 (license license:artistic2.0)))
74809e9e 260
60945c67
EF
261(define-public perl6-uri
262 (package
263 (name "perl6-uri")
264 (version "0.1.5")
265 (source
266 (origin
267 (method git-fetch)
268 (uri (git-reference
269 (url "https://github.com/perl6-community-modules/uri.git")
270 (commit version)))
271 (file-name (git-file-name name version))
272 (sha256
273 (base32
274 "0h318g75jqn2ckw051g35iqyfxz1mps0jyg5z6pd857y3kacbkpl"))))
275 (build-system rakudo-build-system)
276 (arguments '(#:with-zef? #f))
277 (home-page "https://github.com/perl6-community-modules/uri")
278 (synopsis "URI implementation using Perl 6")
279 (description "A URI implementation using Perl 6 grammars to implement RFC
2803986 BNF. Currently only implements parsing. Includes @code{URI::Escape} to
281(un?)escape characters that aren't otherwise allowed in a URI with % and a hex
282character numbering.")
283 (license license:artistic2.0)))
284
74809e9e
EF
285(define-public perl6-zef
286 (package
287 (name "perl6-zef")
288 (version "0.6.7")
289 (source
290 (origin
291 (method git-fetch)
292 (uri (git-reference
293 (url "https://github.com/ugexe/zef.git")
294 (commit (string-append "v" version))))
295 (file-name (git-file-name name version))
296 (sha256
297 (base32
298 "07n7g1xw2c4g860rs890gx85vyhdq0ysgwbrnzw6q905jph2bkv7"))))
299 (build-system rakudo-build-system)
300 (arguments
301 '(#:with-zef? #f
302 #:phases
303 (modify-phases %standard-phases
304 (replace 'check
305 (lambda _
306 (setenv "HOME" "/tmp")
307 (invoke "perl6" "-I." "bin/zef" "--debug"
308 "--tap-harness" "test" "."))))))
309 (home-page "https://github.com/ugexe/zef")
310 (synopsis "Perl6 Module Management")
311 (description "Zef is a Perl 6 package (module) manager. It can be used to
312download and install Perl 6 modules in your home directory or as a system-wide
313module.")
314 (license license:artistic2.0)))