* [bug#34831] [PATCH 00/25] Add perl6
@ 2019-03-12 20:16 Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 01/25] gnu: Add moarvm Efraim Flashner
` (25 more replies)
0 siblings, 26 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:16 UTC (permalink / raw)
To: 34831
I think my perl6 patches are more or less ready. There's a few rough
edges but I'm pretty sure it works well enough. I could use some help
with the build-system code, two of my flags aren't being transfered
correctly and right now I'm working around it. For a list of packages
for testing I took the list from rakudo-star and started at the top.
The first 3 are to build rakudo itself. The next one is the build
system. perl6-tap-harness gives us the 'prove6' binary which is useful
for testing. perl6-zef gives us the 'zef' binary which is to perl6 what
'pip' is to perl5. The rest are a bunch of packages I packaged to test
everything.
To make it easier to review I've also pushed it as 'wip-perl6' to
savannah.
Efraim Flashner (25):
gnu: Add moarvm.
gnu: Add nqp.
gnu: Add rakudo.
build: Add rakudo-build-system.
gnu: Add perl6-tap-harness.
gnu: Add perl6-zef.
gnu: Add perl6-uri.
gnu: Add perl6-json-fast.
gnu: Add perl6-json-name.
gnu: Add perl6-json-unmarshal.
gnu: Add perl6-json-marshal.
gnu: Add perl6-json-class.
gnu: Add perl6-meta6.
gnu: Add perl6-license-spdx.
gnu: Add perl6-test-meta.
gnu: Add perl6-xml-writer.
gnu: Add perl6-svg.
gnu: Add perl6-svg-plot.
gnu: Add perl6-terminal-ansicolor.
gnu: Add perl6-oo-monitors.
gnu: Add perl6-test-mock.
gnu: Add perl6-grammar-profiler-simple.
gnu: Add perl6-grammar-debugger.
gnu: Add perl6-mime-base64.
gnu: Add perl6-json.
Makefile.am | 3 +
doc/guix.texi | 20 +-
gnu/local.mk | 3 +-
gnu/packages/perl6.scm | 788 +++++++++++++++++++++++++++++
guix/build-system/rakudo.scm | 155 ++++++
guix/build/rakudo-build-system.scm | 140 +++++
6 files changed, 1107 insertions(+), 2 deletions(-)
create mode 100644 gnu/packages/perl6.scm
create mode 100644 guix/build-system/rakudo.scm
create mode 100644 guix/build/rakudo-build-system.scm
--
2.21.0
^ permalink raw reply [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 01/25] gnu: Add moarvm.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-19 10:05 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 02/25] gnu: Add nqp Efraim Flashner
` (24 subsequent siblings)
25 siblings, 1 reply; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (moarvm): New variable.
---
gnu/local.mk | 3 +-
gnu/packages/perl6.scm | 93 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 95 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/perl6.scm
diff --git a/gnu/local.mk b/gnu/local.mk
index af2bf87273..79b93d5966 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -10,7 +10,7 @@
# Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
# Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
# Copyright © 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
-# Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+# Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
# Copyright © 2016, 2017 Jan Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
# Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
@@ -364,6 +364,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/perl-check.scm \
%D%/packages/perl-compression.scm \
%D%/packages/perl-web.scm \
+ %D%/packages/perl6.scm \
%D%/packages/photo.scm \
%D%/packages/phabricator.scm \
%D%/packages/php.scm \
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
new file mode 100644
index 0000000000..7e92c865aa
--- /dev/null
+++ b/gnu/packages/perl6.scm
@@ -0,0 +1,93 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;;
+;;; 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 perl6)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module (guix build-system perl)
+ #:use-module (gnu packages bdw-gc)
+ #:use-module (gnu packages libevent)
+ #:use-module (gnu packages libffi)
+ #:use-module (gnu packages pkg-config))
+
+(define-public moarvm
+ (package
+ (name "moarvm")
+ (version "2018.12")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://moarvm.org/releases/MoarVM-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0fv98712k1gk56a612388db1azjsyabsbygav1pa3z2kd6js4cz4"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;(delete-file-recursively "3rdparty/dynasm") ; JIT
+ (delete-file-recursively "3rdparty/dyncall")
+ (delete-file-recursively "3rdparty/freebsd")
+ (delete-file-recursively "3rdparty/libatomicops")
+ (delete-file-recursively "3rdparty/libuv")
+ ;(delete-file-recursively "3rdparty/libtommath") v1.0
+ (delete-file-recursively "3rdparty/msinttypes")
+ #t))))
+ (build-system perl-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (pkg-config (assoc-ref inputs "pkg-config")))
+ (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib"))
+ (invoke "perl" "Configure.pl"
+ "--prefix" out
+ "--pkgconfig" (string-append pkg-config "/bin/pkg-config")
+ "--has-libatomic_ops"
+ "--has-libffi"
+ "--has-libuv")))))))
+ (home-page "https://moarvm.org/")
+ ;; These should be inputs but moar.h can't find them when building rakudo
+ (propagated-inputs
+ `(("libatomic-ops" ,libatomic-ops)
+ ("libuv" ,libuv)))
+ (inputs
+ `(("libffi" ,libffi)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (synopsis "VM for NQP And Rakudo Perl 6")
+ (description
+ "Short for \"Metamodel On A Runtime\", MoarVM is a modern virtual machine
+built for the Rakudo Perl 6 compiler and the NQP Compiler Toolchain. Highlights
+include:
+
+@itemize
+@item Great Unicode support, with strings represented at grapheme level
+@item Dynamic analysis of running code to identify hot functions and loops, and
+perform a range of optimizations, including type specialization and inlining
+@item Support for threads, a range of concurrency control constructs, and
+asynchronous sockets, timers, processes, and more
+@item Generational, parallel, garbage collection
+@item Support for numerous language features, including first class functions,
+exceptions, continuations, runtime loading of code, big integers and interfacing
+with native libraries.
+@end itemize")
+ (license license:artistic2.0)))
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 02/25] gnu: Add nqp.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 01/25] gnu: Add moarvm Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-19 10:02 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 03/25] gnu: Add rakudo Efraim Flashner
` (23 subsequent siblings)
25 siblings, 1 reply; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (nqp): New variable.
---
gnu/packages/perl6.scm | 68 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 7e92c865aa..344bb4efda 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -19,6 +19,7 @@
(define-module (gnu packages perl6)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix download)
+ #:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix build-system perl)
#:use-module (gnu packages bdw-gc)
@@ -91,3 +92,70 @@ exceptions, continuations, runtime loading of code, big integers and interfacing
with native libraries.
@end itemize")
(license license:artistic2.0)))
+
+(define-public nqp
+ (package
+ (name "nqp")
+ (version "2018.12")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/perl6/nqp.git")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1bwvyfyhirqi46p0j5m1ri98rxbfks8wc5amiaqwqyqq7x1l25xd"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ (delete-file-recursively "3rdparty") #t))))
+ (build-system perl-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (add-after 'patch-source-shebangs 'patch-more-shebangs
+ (lambda _
+ (substitute* '("tools/build/install-jvm-runner.pl.in"
+ "tools/build/gen-js-cross-runner.pl"
+ "tools/build/gen-js-runner.pl"
+ "tools/build/install-js-runner.pl"
+ "tools/build/install-moar-runner.pl"
+ "tools/build/gen-moar-runner.pl"
+ "t/nqp/111-spawnprocasync.t"
+ "t/nqp/113-run-command.t")
+ (("/bin/sh") (which "sh")))
+ #t))
+ (add-after 'unpack 'patch-source-date
+ (lambda _
+ (substitute* "tools/build/gen-version.pl"
+ (("gmtime") "gmtime(0)"))
+ #t))
+ (add-after 'unpack 'remove-failing-test
+ ;; One subtest fails for unknown reasons
+ (lambda _
+ (delete-file "t/nqp/019-file-ops.t")
+ #t))
+ (replace 'configure
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (moar (assoc-ref inputs "moarvm")))
+ (invoke "perl" "Configure.pl"
+ "--backends=moar"
+ "--with-moar" (string-append moar "/bin/moar")
+ "--prefix" out)))))))
+ (inputs
+ `(("moarvm" ,moarvm)))
+ (home-page "https://github.com/perl6/nqp")
+ (synopsis "Not Quite Perl")
+ (description "This is \"Not Quite Perl\" -- a lightweight Perl 6-like
+environment for virtual machines. The key feature of NQP is that it's designed
+to be a very small environment (as compared with, say, perl6 or Rakudo) and is
+focused on being a high-level way to create compilers and libraries for virtual
+machines like MoarVM, the JVM, and others.
+
+Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a
+runtime footprint as it can, while still providing a Perl 6 object model and
+regular expression engine for the virtual machine.")
+ (license license:artistic2.0)))
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 03/25] gnu: Add rakudo.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 01/25] gnu: Add moarvm Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 02/25] gnu: Add nqp Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-19 10:04 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 04/25] build: Add rakudo-build-system Efraim Flashner
` (22 subsequent siblings)
25 siblings, 1 reply; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (rakudo): New variable.
---
gnu/packages/perl6.scm | 70 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 344bb4efda..9659361309 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -25,7 +25,8 @@
#:use-module (gnu packages bdw-gc)
#:use-module (gnu packages libevent)
#:use-module (gnu packages libffi)
- #:use-module (gnu packages pkg-config))
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages tls))
(define-public moarvm
(package
@@ -159,3 +160,70 @@ Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a
runtime footprint as it can, while still providing a Perl 6 object model and
regular expression engine for the virtual machine.")
(license license:artistic2.0)))
+
+(define-public rakudo
+ (package
+ (name "rakudo")
+ (version "2018.12")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/rakudo/rakudo.git")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1g8n1vmpi3g6qd0bj59lwgmcqdwlyg3nciyxbdnq7bw7qp12k0p4"))))
+ (build-system perl-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-source-date
+ (lambda _
+ (substitute* "tools/build/gen-version.pl"
+ (("gmtime") "gmtime(0)"))
+ #t))
+ (add-after 'patch-source-shebangs 'patch-more-shebangs
+ (lambda _
+ (substitute* '("tools/build/create-js-runner.pl"
+ "tools/build/create-moar-runner.p6"
+ "tools/build/create-jvm-runner.pl"
+ "src/core/Proc.pm6")
+ (("/bin/sh") (which "sh")))
+ #t))
+ (replace 'configure
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (nqp (assoc-ref inputs "nqp")))
+ (invoke "perl" "./Configure.pl"
+ "--backend=moar"
+ "--with-nqp" (string-append nqp "/bin/nqp")
+ "--prefix" out))))
+ ;; This is the recommended tool to use for installing perl6 modules as
+ ;; a distribution. See: https://github.com/ugexe/zef/issues/117
+ (add-after 'install 'install-dist-tool
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (dest (string-append out "/share/perl6/tools")))
+ (install-file "tools/install-dist.p6" dest)
+ (substitute* (string-append dest "/install-dist.p6")
+ (("/usr/bin/env perl6")
+ (string-append out "/bin/perl6"))))
+ #t)))))
+ (inputs
+ `(("moarvm" ,moarvm)
+ ("nqp" ,nqp)
+ ("openssl" ,openssl)))
+ (home-page "https://rakudo.org/")
+ (native-search-paths
+ (list (search-path-specification
+ (variable "PERL6LIB")
+ (separator ",")
+ (files '("share/perl6/lib"
+ "share/perl6/site/lib"
+ "share/perl6/vendor/lib")))))
+ (synopsis "Perl 6 Compiler")
+ (description "Rakudo Perl is a compiler that implements the Perl 6
+specification and runs on top of several virtual machines.")
+ (license license:artistic2.0)))
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 04/25] build: Add rakudo-build-system.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (2 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 03/25] gnu: Add rakudo Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-19 10:13 ` Efraim Flashner
2019-03-19 10:15 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 05/25] gnu: Add perl6-tap-harness Efraim Flashner
` (21 subsequent siblings)
25 siblings, 2 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* guix/build-system/rakudo.scm,
guix/build/rakudo-build-system.scm: New files.
* Makefile.am (MODULES): Add them.
* doc/guix.texi (Build System): Document it.
---
Makefile.am | 3 +
doc/guix.texi | 20 +++-
guix/build-system/rakudo.scm | 155 +++++++++++++++++++++++++++++
guix/build/rakudo-build-system.scm | 140 ++++++++++++++++++++++++++
4 files changed, 317 insertions(+), 1 deletion(-)
create mode 100644 guix/build-system/rakudo.scm
create mode 100644 guix/build/rakudo-build-system.scm
diff --git a/Makefile.am b/Makefile.am
index cf35770ba7..c3d2525af3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -13,6 +13,7 @@
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
# Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
# Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
+# Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
#
# This file is part of GNU Guix.
#
@@ -124,6 +125,7 @@ MODULES = \
guix/build-system/ocaml.scm \
guix/build-system/waf.scm \
guix/build-system/r.scm \
+ guix/build-system/rakudo.scm \
guix/build-system/ruby.scm \
guix/build-system/scons.scm \
guix/build-system/texlive.scm \
@@ -164,6 +166,7 @@ MODULES = \
guix/build/python-build-system.scm \
guix/build/ocaml-build-system.scm \
guix/build/r-build-system.scm \
+ guix/build/rakudo-build-system.scm \
guix/build/ruby-build-system.scm \
guix/build/scons-build-system.scm \
guix/build/texlive-build-system.scm \
diff --git a/doc/guix.texi b/doc/guix.texi
index 82cf2babb2..5937c86dad 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -28,7 +28,7 @@ Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus@*
Copyright @copyright{} 2016 Ben Woodcroft@*
Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
-Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@*
+Copyright @copyright{} 2016, 2017, 2018, 2019 Efraim Flashner@*
Copyright @copyright{} 2016 John Darrington@*
Copyright @copyright{} 2016, 2017 Nils Gillmann@*
Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@*
@@ -5893,6 +5893,24 @@ are run after installation using the R function
@code{tools::testInstalledPackage}.
@end defvr
+@defvr {Scheme Variable} rakudo-build-system
+This variable is exported by @code{(guix build-system rakudo)} It
+implements the build procedure used by @uref{https://rakudo.org/,
+Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the
+package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and
+installs the binaries, library files and the resources, as well as wrap
+the files under the @code{bin/} directory. Tests can be skipped by
+passing @code{#f} to the @code{tests?} parameter.
+
+Which rakudo package is used can be specified with @code{rakudo}.
+Which perl6-tap-harness package used for the tests can be specified with
+@code{#:prove6} or removed by passing @code{#f} to the
+@code{with-prove6?} parameter.
+Which perl6-zef package used for tests and installing can be specified
+with @code{#:zef} or removed by passing @code{#f} to the
+@code{with-zef?} parameter.
+@end defvr
+
@defvr {Scheme Variable} texlive-build-system
This variable is exported by @code{(guix build-system texlive)}. It is
used to build TeX packages in batch mode with a specified engine. The
diff --git a/guix/build-system/rakudo.scm b/guix/build-system/rakudo.scm
new file mode 100644
index 0000000000..fd469f0bb5
--- /dev/null
+++ b/guix/build-system/rakudo.scm
@@ -0,0 +1,155 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;;
+;;; 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 (guix build-system rakudo)
+ #:use-module (guix store)
+ #:use-module (guix utils)
+ #:use-module (guix derivations)
+ #:use-module (guix search-paths)
+ #:use-module (guix build-system)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix packages)
+ #:use-module (ice-9 match)
+ #:export (%rakudo-build-system-modules
+ rakudo-build
+ rakudo-build-system))
+
+;; Commentary:
+;;
+;; Standard build and install procedure for packages using the Rakudo
+;; build system to be installed as system libraries. This is
+;; implemented as an extension of `gnu-build-system'.
+;;
+;; Code:
+
+(define %rakudo-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build rakudo-build-system)
+ ,@%gnu-build-system-modules))
+
+(define (default-rakudo)
+ "Return the default Rakudo package."
+
+ ;; Do not use `@' to avoid introducing circular dependencies.
+ (let ((module (resolve-interface '(gnu packages perl6))))
+ (module-ref module 'rakudo)))
+
+(define (default-prove6)
+ "Return the default perl6-tap-harness package for tests."
+ (let ((module (resolve-interface '(gnu packages perl6))))
+ (module-ref module 'perl6-tap-harness)))
+
+(define (default-zef)
+ "Return the default perl6-zef package."
+ (let ((module (resolve-interface '(gnu packages perl6))))
+ (module-ref module 'perl6-zef)))
+
+(define* (lower name
+ #:key source inputs native-inputs outputs
+ system target
+ (rakudo (default-rakudo))
+ (prove6 (default-prove6))
+ (zef (default-zef))
+ (with-prove6? #t)
+ (with-zef? #t)
+ #:allow-other-keys
+ #:rest arguments)
+ "Return a bag for NAME."
+ (define private-keywords
+ '(#:source #:target #:rakudo #:prove6 #:zef #:inputs #:native-inputs))
+
+ (and (not target) ;XXX: no cross-compilation
+ (bag
+ (name name)
+ (system system)
+ (host-inputs `(,@(if source
+ `(("source" ,source))
+ '())
+ ,@inputs
+
+ ;; Keep the standard inputs of 'gnu-build-system'.
+ ,@(standard-packages)))
+ (build-inputs `(("rakudo" ,rakudo)
+ ,@(if with-prove6?
+ `(("perl6-tap-harness" ,prove6))
+ '())
+ ,@(if with-zef?
+ `(("perl6-zef" ,zef))
+ '())
+ ,@native-inputs))
+ (outputs outputs)
+ (build rakudo-build)
+ (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (rakudo-build store name inputs
+ #:key
+ (search-paths '())
+ (tests? #t)
+ (phases '(@ (guix build rakudo-build-system)
+ %standard-phases))
+ (outputs '("out"))
+ (system (%current-system))
+ (guile #f)
+ (with-zef? #t)
+ (with-prove6? #t)
+ (imported-modules %rakudo-build-system-modules)
+ (modules '((guix build rakudo-build-system)
+ (guix build utils))))
+ "Build SOURCE using PERL6, and with INPUTS."
+ (define builder
+ `(begin
+ (use-modules ,@modules)
+ (rakudo-build #:name ,name
+ #:source ,(match (assoc-ref inputs "source")
+ (((? derivation? source))
+ (derivation->output-path source))
+ ((source)
+ source)
+ (source
+ source))
+ #:search-paths ',(map search-path-specification->sexp
+ search-paths)
+ #:phases ,phases
+ #:system ,system
+ #:tests? ,tests?
+ #:outputs %outputs
+ #:inputs %build-inputs)))
+
+ (define guile-for-build
+ (match guile
+ ((? package?)
+ (package-derivation store guile system #:graft? #f))
+ (#f ; the default
+ (let* ((distro (resolve-interface '(gnu packages commencement)))
+ (guile (module-ref distro 'guile-final)))
+ (package-derivation store guile system #:graft? #f)))))
+
+ (build-expression->derivation store name builder
+ #:system system
+ #:inputs inputs
+ #:modules imported-modules
+ #:outputs outputs
+ #:guile-for-build guile-for-build))
+
+(define rakudo-build-system
+ (build-system
+ (name 'rakudo)
+ (description "The standard Rakudo build system")
+ (lower lower)))
+
+;;; rakudo.scm ends here
diff --git a/guix/build/rakudo-build-system.scm b/guix/build/rakudo-build-system.scm
new file mode 100644
index 0000000000..bfdefa3c4e
--- /dev/null
+++ b/guix/build/rakudo-build-system.scm
@@ -0,0 +1,140 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;;
+;;; 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 (guix build rakudo-build-system)
+ #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+ #:use-module (guix build utils)
+ #:use-module (ice-9 ftw)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:export (%standard-phases
+ rakudo-build))
+
+;; Commentary:
+;;
+;; Builder-side code of the standard Rakudo package build procedure.
+;;
+;; Code:
+
+(define* (check #:key tests? inputs with-prove6? #:allow-other-keys)
+ (if (and tests? (assoc-ref inputs "perl6-tap-harness"))
+ ;(if (and tests? with-prove6?)
+ (invoke "prove6" "-I=lib" "t/")
+ (format #t "test suite not run~%"))
+ #t)
+
+(define* (install #:key inputs outputs with-zef? #:allow-other-keys)
+ "Install a given Perl6 package."
+ (let* ((out (assoc-ref outputs "out"))
+ (perl6 (string-append out "/share/perl6")))
+ (if (assoc-ref inputs "perl6-zef")
+ ;(if with-zef?
+ (begin
+ (let ((zef (string-append (assoc-ref inputs "perl6-zef")
+ "/bin/zef")))
+ (setenv "HOME" (getcwd))
+ (mkdir-p perl6)
+ (invoke zef "install" "--verbose" "."
+ ;; Don't install any of the following:
+ "--/depends" "--/build-depends" "--/test-depends"
+ (string-append "--install-to=" perl6))
+ (delete-file (string-append perl6 "/repo.lock")))
+ #t)
+ (begin
+ (let ((inst (string-append (assoc-ref inputs "rakudo")
+ "/share/perl6/tools/install-dist.p6")))
+ (setenv "RAKUDO_RERESOLVE_DEPENDENCIES" "0")
+ (setenv "RAKUDO_MODULE_DEBUG" "1") ; be verbose while building
+ (invoke inst (string-append "--to=" perl6) "--for=site"))))))
+
+(define* (install-libs #:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (lock "lib/.precomp/.lock"))
+ (when (file-exists? lock)
+ (delete-file "lib/.precomp/.lock"))
+ (copy-recursively "lib" (string-append out "/share/perl6/lib"))
+ #t))
+
+(define* (install-bins #:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (when (file-exists? "bin")
+ (for-each (lambda (file)
+ (install-file file (string-append out "/bin"))
+ (chmod (string-append out "/" file) #o555))
+ (find-files "bin" ".*")))
+ #t))
+
+(define* (install-resources #:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (when (file-exists? "resources")
+ (copy-recursively "resources"
+ (string-append out "/share/perl6/resources")))
+ #t))
+
+(define* (wrap #:key inputs outputs #:allow-other-keys)
+ (define (list-of-files dir)
+ (map (cut string-append dir "/" <>)
+ (or (scandir dir (lambda (f)
+ (let ((s (stat (string-append dir "/" f))))
+ (eq? 'regular (stat:type s)))))
+ '())))
+
+ (define bindirs
+ (append-map (match-lambda
+ ((_ . dir)
+ (list (string-append dir "/bin")
+ (string-append dir "/sbin"))))
+ outputs))
+
+ (let* ((out (assoc-ref outputs "out"))
+ (var `("PERL6LIB" "," prefix
+ ,(cons (string-append out "/share/perl6/lib,"
+ out "/share/perl6/site/lib,"
+ out "/share/perl6/vendor/lib")
+ (search-path-as-string->list
+ (or (getenv "PERL6LIB") "") #\,)))))
+ (for-each (lambda (dir)
+ (let ((files (list-of-files dir)))
+ (for-each (cut wrap-program <> var)
+ files)))
+ bindirs)
+ #t))
+
+(define %standard-phases
+ ;; No need for 'bootstrap, 'configure or 'build.
+ (modify-phases gnu:%standard-phases
+ (delete 'bootstrap)
+ (delete 'configure)
+ (delete 'build)
+ (replace 'check check)
+ (replace 'install install)
+ (add-before 'install 'install-lib-dir install-libs)
+ (add-after 'install-lib-dir 'install-resources install-resources)
+ (add-after 'install-resources 'install-binaries install-bins)
+ ;; needs to be after 'install-binaries and all 'install phases
+ (add-after 'install 'wrap wrap)))
+
+(define* (rakudo-build #:key inputs (phases %standard-phases)
+ #:allow-other-keys #:rest args)
+ "Build the given Perl6 package, applying all of PHASES in order."
+ (apply gnu:gnu-build
+ #:inputs inputs #:phases phases
+ args))
+
+;;; rakudo-build-system.scm ends here
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 05/25] gnu: Add perl6-tap-harness.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (3 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 04/25] build: Add rakudo-build-system Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 06/25] gnu: Add perl6-zef Efraim Flashner
` (20 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-tap-harness): New variable.
---
gnu/packages/perl6.scm | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 9659361309..1bcd99faff 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -22,6 +22,7 @@
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix build-system perl)
+ #:use-module (guix build-system rakudo)
#:use-module (gnu packages bdw-gc)
#:use-module (gnu packages libevent)
#:use-module (gnu packages libffi)
@@ -227,3 +228,33 @@ regular expression engine for the virtual machine.")
(description "Rakudo Perl is a compiler that implements the Perl 6
specification and runs on top of several virtual machines.")
(license license:artistic2.0)))
+
+(define-public perl6-tap-harness
+ (package
+ (name "perl6-tap-harness")
+ (version "0.0.7")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/perl6/tap-harness6.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1lig8i0my3fgqvlay9532xslbf3iis2d7wz89gniwvwqffi2kh6r"))))
+ (build-system rakudo-build-system)
+ (arguments
+ '(#:with-zef? #f
+ #:with-prove6? #f
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "perl6" "-Ilib" "bin/prove6" "-l" "t"))))))
+ (home-page "https://github.com/perl6/tap-harness6/")
+ (synopsis "TAP harness for perl6")
+ (description "This module provides the @command{prove6} command which runs a
+TAP based test suite and prints a report. The @command{prove6} command is a
+minimal wrapper around an instance of this module.")
+ (license license:artistic2.0)))
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 06/25] gnu: Add perl6-zef.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (4 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 05/25] gnu: Add perl6-tap-harness Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 07/25] gnu: Add perl6-uri Efraim Flashner
` (19 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-zef): New variable.
---
gnu/packages/perl6.scm | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 1bcd99faff..1f5af42d04 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -258,3 +258,34 @@ specification and runs on top of several virtual machines.")
TAP based test suite and prints a report. The @command{prove6} command is a
minimal wrapper around an instance of this module.")
(license license:artistic2.0)))
+
+(define-public perl6-zef
+ (package
+ (name "perl6-zef")
+ (version "0.6.7")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ugexe/zef.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "07n7g1xw2c4g860rs890gx85vyhdq0ysgwbrnzw6q905jph2bkv7"))))
+ (build-system rakudo-build-system)
+ (arguments
+ '(#:with-zef? #f
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (setenv "HOME" "/tmp")
+ (invoke "perl6" "-I." "bin/zef" "--debug"
+ "--tap-harness" "test" "."))))))
+ (home-page "https://github.com/ugexe/zef")
+ (synopsis "Perl6 Module Management")
+ (description "Zef is a Perl 6 package (module) manager. It can be used to
+download and install Perl 6 modules in your home directory or as a system-wide
+module.")
+ (license license:artistic2.0)))
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 07/25] gnu: Add perl6-uri.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (5 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 06/25] gnu: Add perl6-zef Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 08/25] gnu: Add perl6-json-fast Efraim Flashner
` (18 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-uri): New variable.
---
gnu/packages/perl6.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 1f5af42d04..0ab441cf82 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -259,6 +259,30 @@ TAP based test suite and prints a report. The @command{prove6} command is a
minimal wrapper around an instance of this module.")
(license license:artistic2.0)))
+(define-public perl6-uri
+ (package
+ (name "perl6-uri")
+ (version "0.1.5")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/perl6-community-modules/uri.git")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0h318g75jqn2ckw051g35iqyfxz1mps0jyg5z6pd857y3kacbkpl"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/perl6-community-modules/uri")
+ (synopsis "URI implementation using Perl 6")
+ (description "A URI implementation using Perl 6 grammars to implement RFC
+3986 BNF. Currently only implements parsing. Includes @code{URI::Escape} to
+(un?)escape characters that aren't otherwise allowed in a URI with % and a hex
+character numbering.")
+ (license license:artistic2.0)))
+
(define-public perl6-zef
(package
(name "perl6-zef")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 08/25] gnu: Add perl6-json-fast.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (6 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 07/25] gnu: Add perl6-uri Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 09/25] gnu: Add perl6-json-name Efraim Flashner
` (17 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-json-fast): New variable.
---
gnu/packages/perl6.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 0ab441cf82..0cd1f02621 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -229,6 +229,30 @@ regular expression engine for the virtual machine.")
specification and runs on top of several virtual machines.")
(license license:artistic2.0)))
+(define-public perl6-json-fast
+ (package
+ (name "perl6-json-fast")
+ (version "0.8")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/timo/json_fast.git")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1fif081gdxdnja14vkj523p9dyzdcdj81lmjv9fvfazvpagb6dg2"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/timo/json_fast")
+ (synopsis "Perl6 json parser")
+ (description "A naive imperative json parser in pure perl6 (but with direct
+access to @code{nqp::} ops), to evaluate performance against @code{JSON::Tiny}.
+It is a drop-in replacement for @code{JSON::Tiny}'s from-json and to-json subs,
+but it offers a few extra features.")
+ (license license:artistic2.0)))
+
(define-public perl6-tap-harness
(package
(name "perl6-tap-harness")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 09/25] gnu: Add perl6-json-name.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (7 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 08/25] gnu: Add perl6-json-fast Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 10/25] gnu: Add perl6-json-unmarshal Efraim Flashner
` (16 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-json-name): New variable.
---
gnu/packages/perl6.scm | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 0cd1f02621..1090809b5c 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -253,6 +253,32 @@ It is a drop-in replacement for @code{JSON::Tiny}'s from-json and to-json subs,
but it offers a few extra features.")
(license license:artistic2.0)))
+(define-public perl6-json-name
+ (package
+ (name "perl6-json-name")
+ (version "0.0.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jonathanstowe/JSON-Name.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "130qwdpbj5qdlsdz05y0rksd79lzbq79scy47n6lnf21b0hz1qjc"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/jonathanstowe/JSON-Name")
+ (synopsis "Provides a trait to store an alternative JSON Name")
+ (description "This is released as a dependency of @code{JSON::Marshal} and
+@code{JSON::Unmarshal} in order to save duplication, it is intended to store a
+separate JSON name for an attribute where the name of the JSON attribute might be
+changed, either for aesthetic reasons or the name is not a valid Perl identifier.
+It will of course also be needed in classes thar are going to use
+@code{JSON::Marshal} or @code{JSON::Unmarshal} for serialisation/de-serialisation.")
+ (license license:artistic2.0)))
+
(define-public perl6-tap-harness
(package
(name "perl6-tap-harness")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 10/25] gnu: Add perl6-json-unmarshal.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (8 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 09/25] gnu: Add perl6-json-name Efraim Flashner
@ 2019-03-12 20:19 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 11/25] gnu: Add perl6-json-marshal Efraim Flashner
` (15 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:19 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-json-unmarshal): New variable.
---
gnu/packages/perl6.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 1090809b5c..39b9a6fd13 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -279,6 +279,33 @@ It will of course also be needed in classes thar are going to use
@code{JSON::Marshal} or @code{JSON::Unmarshal} for serialisation/de-serialisation.")
(license license:artistic2.0)))
+(define-public perl6-json-unmarshal
+ ;; Last commit was May 2017
+ (let ((commit "e1b6288c5f3165058f36c0f4e171cdf2dfd640da")
+ (revision "1"))
+ (package
+ (name "perl6-json-unmarshal")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/tadzik/JSON-Unmarshal.git")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "14azsmzmwdn8k0gqcpvballharcvzylmlyrx2wmv4kpqfnz29fjc"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-json-fast" ,perl6-json-fast)
+ ("perl6-json-name" ,perl6-json-name)))
+ (home-page "https://github.com/tadzik/JSON-Unmarshal")
+ (synopsis "Make JSON from an Object")
+ (description "This library provides a single exported subroutine to
+create an object from a JSON representation of an object.")
+ (license license:expat))))
+
(define-public perl6-tap-harness
(package
(name "perl6-tap-harness")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 11/25] gnu: Add perl6-json-marshal.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (9 preceding siblings ...)
2019-03-12 20:19 ` [bug#34831] [PATCH 10/25] gnu: Add perl6-json-unmarshal Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 12/25] gnu: Add perl6-json-class Efraim Flashner
` (14 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-json-marshal): New variable.
---
gnu/packages/perl6.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 39b9a6fd13..da399a45a6 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -253,6 +253,33 @@ It is a drop-in replacement for @code{JSON::Tiny}'s from-json and to-json subs,
but it offers a few extra features.")
(license license:artistic2.0)))
+(define-public perl6-json-marshal
+ (package
+ (name "perl6-json-marshal")
+ (version "0.0.16")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jonathanstowe/JSON-Marshal.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0qy7j83h6gjzyyv74ncd92cd9h45rv8diaz3vldiv3b6fqwz4c6i"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-json-fast" ,perl6-json-fast)
+ ("perl6-json-name" ,perl6-json-name)))
+ (native-inputs
+ `(("perl6-json-fast" ,perl6-json-fast)))
+ (home-page "https://github.com/jonathanstowe/JSON-Marshal")
+ (synopsis "Simple serialisation of objects to JSON")
+ (description "This library provides a single exported subroutine to create
+a JSON representation of an object. It should round trip back into an object
+of the same class using @code{JSON::Unmarshal}.")
+ (license license:artistic2.0)))
+
(define-public perl6-json-name
(package
(name "perl6-json-name")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 12/25] gnu: Add perl6-json-class.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (10 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 11/25] gnu: Add perl6-json-marshal Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 13/25] gnu: Add perl6-meta6 Efraim Flashner
` (13 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-json-class): New variable.
---
gnu/packages/perl6.scm | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index da399a45a6..845cfae3f2 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -229,6 +229,37 @@ regular expression engine for the virtual machine.")
specification and runs on top of several virtual machines.")
(license license:artistic2.0)))
+(define-public perl6-json-class
+ (package
+ (name "perl6-json-class")
+ (version "0.0.12")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jonathanstowe/JSON-Class.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1zyzajc57j3m8q0nr72h9pw4w2nx92rafywlvysgphc5q9sb8np2"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-json-marshal" ,perl6-json-marshal)
+ ("perl6-json-unmarshal" ,perl6-json-unmarshal)))
+ (native-inputs
+ `(("perl6-json-fast" ,perl6-json-fast)))
+ (home-page "https://github.com/jonathanstowe/JSON-Class")
+ (synopsis "Provide simple serialisation/deserialisation of objects to/from JSON")
+ (description "This is a simple role that provides methods to instantiate a
+class from a JSON string that (hopefully,) represents it, and to serialise an
+object of the class to a JSON string. The JSON created from an instance should
+round trip to a new instance with the same values for the @quot{public
+attributes}. @quot{Private} attributes (that is ones without accessors,) will
+be ignored for both serialisation and de-serialisation. The exact behaviour
+depends on that of @code{JSON::Marshal} and @code{JSON::Unmarshal} respectively.")
+ (license license:artistic2.0)))
+
(define-public perl6-json-fast
(package
(name "perl6-json-fast")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 13/25] gnu: Add perl6-meta6.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (11 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 12/25] gnu: Add perl6-json-class Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 14/25] gnu: Add perl6-license-spdx Efraim Flashner
` (12 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-meta6): New variable.
---
gnu/packages/perl6.scm | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 845cfae3f2..3fdae92842 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -364,6 +364,40 @@ It will of course also be needed in classes thar are going to use
create an object from a JSON representation of an object.")
(license license:expat))))
+(define-public perl6-meta6
+ (package
+ (name "perl6-meta6")
+ (version "0.0.23")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jonathanstowe/META6.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1xnlaamfbdlfb2zidim3bbc4mawsrg6qxhxi6gbld46z1cyry1cw"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-json-class" ,perl6-json-class)))
+ (native-inputs
+ `(("perl6-json-fast" ,perl6-json-fast)))
+ (home-page "https://github.com/jonathanstowe/META6")
+ (synopsis "Do things with Perl 6 [META files]")
+ (description "This provides a representation of the Perl 6 META files
+specification - the META file data can be read, created, parsed and written in a
+manner that is conformant with the specification.
+
+Where they are known about it also makes allowance for @quot{customary} usage in
+existing software (such as installers and so forth.)
+
+The intent of this is allow the generation and testing of META files for module
+authors, so it can provide meta-information whether the attributes are mandatory
+as per the spec and where known the places that @quot{customary} attributes are
+used.")
+ (license license:artistic2.0)))
+
(define-public perl6-tap-harness
(package
(name "perl6-tap-harness")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 14/25] gnu: Add perl6-license-spdx.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (12 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 13/25] gnu: Add perl6-meta6 Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 15/25] gnu: Add perl6-test-meta Efraim Flashner
` (11 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-license-spdx): New variable.
---
gnu/packages/perl6.scm | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 3fdae92842..f3a10e00c6 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -364,6 +364,31 @@ It will of course also be needed in classes thar are going to use
create an object from a JSON representation of an object.")
(license license:expat))))
+(define-public perl6-license-spdx
+ (package
+ (name "perl6-license-spdx")
+ (version "3.4.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jonathanstowe/License-SPDX")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0dl263c3fbxk001gm5fisrzqz1dx182ipaa0x2qva2gxvl075xm8"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-json-class" ,perl6-json-class)))
+ (home-page "https://github.com/jonathanstowe/License-SPDX")
+ (synopsis "Abstraction over the SPDX License List")
+ (description "This provides an abstraction over the SPDX License List as
+provided in JSON format. Its primary raison d'être is to help the licence
+checking of @code{Test::META} and to allow for the warning about deprecated
+licences therein.")
+ (license license:artistic2.0)))
+
(define-public perl6-meta6
(package
(name "perl6-meta6")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 15/25] gnu: Add perl6-test-meta.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (13 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 14/25] gnu: Add perl6-license-spdx Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 16/25] gnu: Add perl6-xml-writer Efraim Flashner
` (10 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-test-meta): New variable.
---
gnu/packages/perl6.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index f3a10e00c6..08f5f86665 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -453,6 +453,30 @@ TAP based test suite and prints a report. The @command{prove6} command is a
minimal wrapper around an instance of this module.")
(license license:artistic2.0)))
+(define-public perl6-test-meta
+ (package
+ (name "perl6-test-meta")
+ (version "0.0.14")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jonathanstowe/Test-META")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1mzrglb7lbiy5h9dlc7dyhvv9gppxmdmpmrv6nzbd695jzr38bri"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-meta6" ,perl6-meta6)
+ ("perl6-uri" ,perl6-uri)))
+ (home-page "https://github.com/jonathanstowe/Test-META")
+ (synopsis "Test a distributions META file")
+ (description "This provides a simple mechanism for module authors to have
+some confidence that they have a working distribution META description file.")
+ (license license:artistic2.0)))
+
(define-public perl6-uri
(package
(name "perl6-uri")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 16/25] gnu: Add perl6-xml-writer.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (14 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 15/25] gnu: Add perl6-test-meta Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 17/25] gnu: Add perl6-svg Efraim Flashner
` (9 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-xml-writer): New variable.
---
gnu/packages/perl6.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 08f5f86665..04e0419135 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -501,6 +501,30 @@ some confidence that they have a working distribution META description file.")
character numbering.")
(license license:artistic2.0)))
+(define-public perl6-xml-writer
+ ;; Last commit was May 2017
+ (let ((commit "4d30a9d8e06033ca97387971b653817becd5a759")
+ (revision "1"))
+ (package
+ (name "perl6-xml-writer")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/masak/xml-writer")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1kwrf7akp70kyzw1b90khp71a6hpilihwndy2jsjpffcd4hd4m4z"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/masak/xml-writer")
+ (synopsis "Perl 6 module to generate XML")
+ (description "@code{XML::Writer} is a module for creating XML in Perl 6.")
+ (license license:artistic2.0))))
+
(define-public perl6-zef
(package
(name "perl6-zef")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 17/25] gnu: Add perl6-svg.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (15 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 16/25] gnu: Add perl6-xml-writer Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 18/25] gnu: Add perl6-svg-plot Efraim Flashner
` (8 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-svg): New variable.
---
gnu/packages/perl6.scm | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 04e0419135..96d4a670fa 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -423,6 +423,34 @@ as per the spec and where known the places that @quot{customary} attributes are
used.")
(license license:artistic2.0)))
+(define-public perl6-svg
+ ;; Latest commit, basically unchanged since August 2015
+ (let ((commit "07190c0602aa276e5319f06aa0012452dbff3582")
+ (revision "1"))
+ (package
+ (name "perl6-svg")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/moritz/svg")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0mkjdhg7ajksdn61n8fqhyzfd7ly9myazsvpsm02a5c2q73hdygg"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-xml-writer" ,perl6-xml-writer)))
+ (home-page "https://github.com/moritz/svg")
+ (synopsis "Perl 6 module to generate SVG")
+ (description "This is a Perl 6 module that makes it easy to write
+@dfn{Scalable Vector Graphic files} (SVG). Right now it is a shallow wrapper
+around @code{XML::Writer}, adding only the xmlns attributes that identifies an
+XML file as SVG.")
+ (license license:artistic2.0))))
+
(define-public perl6-tap-harness
(package
(name "perl6-tap-harness")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 18/25] gnu: Add perl6-svg-plot.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (16 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 17/25] gnu: Add perl6-svg Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 19/25] gnu: Add perl6-terminal-ansicolor Efraim Flashner
` (7 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-svg-plot): New variable.
---
gnu/packages/perl6.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 96d4a670fa..af43dd3b60 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -451,6 +451,33 @@ around @code{XML::Writer}, adding only the xmlns attributes that identifies an
XML file as SVG.")
(license license:artistic2.0))))
+(define-public perl6-svg-plot
+ ;; Latest commit
+ (let ((commit "062570a78fd38c3c6baba29dfe2fbb8ca014f4de")
+ (revision "1"))
+ (package
+ (name "perl6-svg-plot")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/moritz/svg-plot")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "095ga5hbg92jnmczxvhk1hjz14yr334zyf8cph4w5w5frcza44my"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-svg" ,perl6-svg)))
+ (home-page "https://github.com/moritz/svg-plot")
+ (synopsis "Perl 6 charting and plotting library that produces SVG output")
+ (description "@code{SVG::Plot} is a simple 2D chart plotter for Perl 6.
+It currently supports bars, stacked bars, lines and points (both equally spaced
+with optional labels, or xy plots).")
+ (license license:artistic2.0))))
+
(define-public perl6-tap-harness
(package
(name "perl6-tap-harness")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 19/25] gnu: Add perl6-terminal-ansicolor.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (17 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 18/25] gnu: Add perl6-svg-plot Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 20/25] gnu: Add perl6-oo-monitors Efraim Flashner
` (6 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-terminal-ansicolor): New variable.
---
gnu/packages/perl6.scm | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index af43dd3b60..30d1f4cfdd 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -508,6 +508,28 @@ TAP based test suite and prints a report. The @command{prove6} command is a
minimal wrapper around an instance of this module.")
(license license:artistic2.0)))
+(define-public perl6-terminal-ansicolor
+ (package
+ (name "perl6-terminal-ansicolor")
+ (version "0.5")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/tadzik/Terminal-ANSIColor.git")
+ ;; The commit where 0.5 was "tagged"
+ (commit "edded4a7116ce11cbc9fb5a83669c7ba119d0212")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1apm999azkyg5s35gid12wq019aqnvzrkz7qjmipd74mdxgr00x7"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/tadzik/Terminal-ANSIColor")
+ (synopsis "Colorize terminal output")
+ (description "This is a @code{Terminal::ANSIColor} module for Perl 6.")
+ (license license:expat)))
+
(define-public perl6-test-meta
(package
(name "perl6-test-meta")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 20/25] gnu: Add perl6-oo-monitors.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (18 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 19/25] gnu: Add perl6-terminal-ansicolor Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 21/25] gnu: Add perl6-test-mock Efraim Flashner
` (5 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-oo-monitors): New variable.
---
gnu/packages/perl6.scm | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 30d1f4cfdd..1d47562c13 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -423,6 +423,32 @@ as per the spec and where known the places that @quot{customary} attributes are
used.")
(license license:artistic2.0)))
+(define-public perl6-oo-monitors
+ (package
+ (name "perl6-oo-monitors")
+ (version "1.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jnthn/oo-monitors")
+ ;; The commit where 1.1 was "tagged"
+ (commit "494db3a3852854f30a80c9bd1489a7d5e429e7c5")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1sbw2x54wwjjanghjnc7ipmplaw1srvbrphsdv4ym6cipnbmbj9x"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/jnthn/oo-monitors")
+ (synopsis "Monitors with condition variables for Perl 6")
+ (description "A monitor provides per-instance mutual exclusion for objects.
+This means that for a given object instance, only one thread can ever be inside
+its methods at a time. This is achieved by a lock being associated with each
+object. The lock is acquired automatically at the entry to each method in the
+monitor. Condition variables are also supported.")
+ (license license:artistic2.0)))
+
(define-public perl6-svg
;; Latest commit, basically unchanged since August 2015
(let ((commit "07190c0602aa276e5319f06aa0012452dbff3582")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 21/25] gnu: Add perl6-test-mock.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (19 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 20/25] gnu: Add perl6-oo-monitors Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 22/25] gnu: Add perl6-grammar-profiler-simple Efraim Flashner
` (4 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-test-mock): New variable.
---
gnu/packages/perl6.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 1d47562c13..b1e2f10ac9 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -580,6 +580,33 @@ minimal wrapper around an instance of this module.")
some confidence that they have a working distribution META description file.")
(license license:artistic2.0)))
+(define-public perl6-test-mock
+ (package
+ (name "perl6-test-mock")
+ (version "1.5")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jnthn/test-mock")
+ ;; The commit where 1.5 was "tagged"
+ (commit "6eddb42f73f40b9ac29c14badb41ce4a04d876f2")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "07yr3qimc8fl29p23562ayj2j9h53madcnf9sgqvgf2kcprh0zd2"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-oo-monitors" ,perl6-oo-monitors)))
+ (home-page "https://github.com/jnthn/test-mock")
+ (synopsis "Module for simply generating and checking mock objects")
+ (description "@code{Test::Mock} is a module that works alongside the
+standard Test module to help you write tests when you want to verify what
+methods are called on an object, while still having calls to undefined methods
+die. You get started just as normal with the test file, but also add a use
+statement for @code{Test::Mock}.")
+ (license license:artistic2.0)))
+
(define-public perl6-uri
(package
(name "perl6-uri")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 22/25] gnu: Add perl6-grammar-profiler-simple.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (20 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 21/25] gnu: Add perl6-test-mock Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 23/25] gnu: Add perl6-grammar-debugger Efraim Flashner
` (3 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-grammar-profiler-simple): New variable.
---
gnu/packages/perl6.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index b1e2f10ac9..2b224aba64 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -229,6 +229,33 @@ regular expression engine for the virtual machine.")
specification and runs on top of several virtual machines.")
(license license:artistic2.0)))
+(define-public perl6-grammar-profiler-simple
+ ;; Last commit was June 2017
+ (let ((commit "c0aca5fab323b2974821dabd6b89330c609e0b7d")
+ (revision "1"))
+ (package
+ (name "perl6-grammar-profiler-simple")
+ (version (git-version "0.02" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/perlpilot/Grammar-Profiler-Simple.git")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1qcsa4lmcilp3vp0jng0hrgzyzxin9ayg2wjvkcd0k6h7djx9dff"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/perlpilot/Grammar-Profiler-Simple")
+ (synopsis "Simple rule profiling for Perl 6 grammars")
+ (description "This module provides a simple profiler for Perl 6 grammars.
+To enable profiling simply add use @code{Grammar::Profiler::Simple;} to your
+code. Any grammar in the lexical scope of the use statement will automatically
+have profiling information collected when the grammar is used.")
+ (license license:artistic2.0))))
+
(define-public perl6-json-class
(package
(name "perl6-json-class")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 23/25] gnu: Add perl6-grammar-debugger.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (21 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 22/25] gnu: Add perl6-grammar-profiler-simple Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 24/25] gnu: Add perl6-mime-base64 Efraim Flashner
` (2 subsequent siblings)
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-grammar-debugger): New variable.
---
gnu/packages/perl6.scm | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 2b224aba64..dff6e0d41f 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -229,6 +229,35 @@ regular expression engine for the virtual machine.")
specification and runs on top of several virtual machines.")
(license license:artistic2.0)))
+(define-public perl6-grammar-debugger
+ ;; Last commit was September 2017
+ (let ((commit "0375008027c8caa216bd869476ce59ae09b2a702")
+ (revision "1"))
+ (package
+ (name "perl6-grammar-debugger")
+ (version (git-version "1.0.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jnthn/grammar-debugger")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0y826z3m276n7ia810hgcb3div67nxmx125m2fzlc16994zd5vm5"))))
+ (build-system rakudo-build-system)
+ (propagated-inputs
+ `(("perl6-terminal-ansicolor" ,perl6-terminal-ansicolor)))
+ (home-page "https://github.com/jnthn/grammar-debugger")
+ (synopsis "Simple tracing and debugging support for Perl 6 grammars")
+ (description "This module provides a simple debugger for grammars. Just
+@code{use} it: use @code{Grammar::Debugger;} and any grammar in the lexical
+scope of the use statement will automatically have debugging enabled. The
+debugger will break execution when you first enter the grammar, and provide a
+prompt.")
+ (license license:artistic2.0))))
+
(define-public perl6-grammar-profiler-simple
;; Last commit was June 2017
(let ((commit "c0aca5fab323b2974821dabd6b89330c609e0b7d")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 24/25] gnu: Add perl6-mime-base64.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (22 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 23/25] gnu: Add perl6-grammar-debugger Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 25/25] gnu: Add perl6-json Efraim Flashner
2019-03-24 14:31 ` bug#34831: [PATCH 00/25] Add perl6 Efraim Flashner
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-mime-base64): New variable.
---
gnu/packages/perl6.scm | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index dff6e0d41f..162989b3d5 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -479,6 +479,28 @@ as per the spec and where known the places that @quot{customary} attributes are
used.")
(license license:artistic2.0)))
+(define-public perl6-mime-base64
+ (package
+ (name "perl6-mime-base64")
+ (version "1.2.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/perl6/Perl6-MIME-Base64")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0l67m8mvz3gxml425sd1ggfnhzh4lf754k7w8fngfr453s6lsza1"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/perl6/Perl6-MIME-Base64")
+ (synopsis "Encoding and decoding Base64 ASCII strings")
+ (description "This Perl 6 module implements encoding and decoding to and
+from base64.")
+ (license license:artistic2.0)))
+
(define-public perl6-oo-monitors
(package
(name "perl6-oo-monitors")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 25/25] gnu: Add perl6-json.
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (23 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 24/25] gnu: Add perl6-mime-base64 Efraim Flashner
@ 2019-03-12 20:20 ` Efraim Flashner
2019-03-24 14:31 ` bug#34831: [PATCH 00/25] Add perl6 Efraim Flashner
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-12 20:20 UTC (permalink / raw)
To: 34831
* gnu/packages/perl6.scm (perl6-json): New variable.
---
gnu/packages/perl6.scm | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 162989b3d5..3cdfefc17d 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -285,6 +285,29 @@ code. Any grammar in the lexical scope of the use statement will automatically
have profiling information collected when the grammar is used.")
(license license:artistic2.0))))
+(define-public perl6-json
+ (package
+ (name "perl6-json")
+ (version "1.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/moritz/json")
+ ;; The commit where 1.0 was "tagged"
+ (commit "a5ef8c179350dae44ce7fb1abb684fc62c1c2b99")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1kzryxkqyr129rcckd4jh0dfxdgzv71qx8dpkpm1divbfjyknlay"))))
+ (build-system rakudo-build-system)
+ (arguments '(#:with-zef? #f))
+ (home-page "https://github.com/moritz/json")
+ (synopsis "A minimal JSON (de)serializer")
+ (description "This module is a simple Perl 6 module for serializing and
+deserializing JSON.")
+ (license license:artistic2.0)))
+
(define-public perl6-json-class
(package
(name "perl6-json-class")
--
2.21.0
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 02/25] gnu: Add nqp.
2019-03-12 20:19 ` [bug#34831] [PATCH 02/25] gnu: Add nqp Efraim Flashner
@ 2019-03-19 10:02 ` Efraim Flashner
0 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-19 10:02 UTC (permalink / raw)
To: 34831
[-- Attachment #1: Type: text/plain, Size: 4293 bytes --]
On Tue, Mar 12, 2019 at 10:19:51PM +0200, Efraim Flashner wrote:
> * gnu/packages/perl6.scm (nqp): New variable.
> ---
> gnu/packages/perl6.scm | 68 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 68 insertions(+)
>
> diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
> index 7e92c865aa..344bb4efda 100644
> --- a/gnu/packages/perl6.scm
> +++ b/gnu/packages/perl6.scm
> @@ -19,6 +19,7 @@
> (define-module (gnu packages perl6)
> #:use-module ((guix licenses) #:prefix license:)
> #:use-module (guix download)
> + #:use-module (guix git-download)
> #:use-module (guix packages)
> #:use-module (guix build-system perl)
> #:use-module (gnu packages bdw-gc)
> @@ -91,3 +92,70 @@ exceptions, continuations, runtime loading of code, big integers and interfacing
> with native libraries.
> @end itemize")
> (license license:artistic2.0)))
> +
> +(define-public nqp
> + (package
> + (name "nqp")
> + (version "2018.12")
> + (source
> + (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://github.com/perl6/nqp.git")
> + (commit version)))
> + (file-name (git-file-name name version))
This should be downloaded from here: https://rakudo.perl6.org/downloads/nqp/
> + (sha256
> + (base32
> + "1bwvyfyhirqi46p0j5m1ri98rxbfks8wc5amiaqwqyqq7x1l25xd"))
> + (modules '((guix build utils)))
> + (snippet
> + '(begin
> + (delete-file-recursively "3rdparty") #t))))
> + (build-system perl-build-system)
> + (arguments
> + '(#:phases
> + (modify-phases %standard-phases
> + (add-after 'patch-source-shebangs 'patch-more-shebangs
> + (lambda _
> + (substitute* '("tools/build/install-jvm-runner.pl.in"
> + "tools/build/gen-js-cross-runner.pl"
> + "tools/build/gen-js-runner.pl"
> + "tools/build/install-js-runner.pl"
> + "tools/build/install-moar-runner.pl"
> + "tools/build/gen-moar-runner.pl"
> + "t/nqp/111-spawnprocasync.t"
> + "t/nqp/113-run-command.t")
> + (("/bin/sh") (which "sh")))
> + #t))
> + (add-after 'unpack 'patch-source-date
> + (lambda _
> + (substitute* "tools/build/gen-version.pl"
> + (("gmtime") "gmtime(0)"))
> + #t))
> + (add-after 'unpack 'remove-failing-test
> + ;; One subtest fails for unknown reasons
can we delete/skip just the one subtest?
> + (lambda _
> + (delete-file "t/nqp/019-file-ops.t")
> + #t))
> + (replace 'configure
> + (lambda* (#:key inputs outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out"))
> + (moar (assoc-ref inputs "moarvm")))
> + (invoke "perl" "Configure.pl"
> + "--backends=moar"
> + "--with-moar" (string-append moar "/bin/moar")
> + "--prefix" out)))))))
> + (inputs
> + `(("moarvm" ,moarvm)))
> + (home-page "https://github.com/perl6/nqp")
> + (synopsis "Not Quite Perl")
> + (description "This is \"Not Quite Perl\" -- a lightweight Perl 6-like
> +environment for virtual machines. The key feature of NQP is that it's designed
> +to be a very small environment (as compared with, say, perl6 or Rakudo) and is
> +focused on being a high-level way to create compilers and libraries for virtual
> +machines like MoarVM, the JVM, and others.
> +
> +Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a
> +runtime footprint as it can, while still providing a Perl 6 object model and
> +regular expression engine for the virtual machine.")
> + (license license:artistic2.0)))
> --
> 2.21.0
>
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 03/25] gnu: Add rakudo.
2019-03-12 20:19 ` [bug#34831] [PATCH 03/25] gnu: Add rakudo Efraim Flashner
@ 2019-03-19 10:04 ` Efraim Flashner
0 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-19 10:04 UTC (permalink / raw)
To: 34831
[-- Attachment #1: Type: text/plain, Size: 4500 bytes --]
On Tue, Mar 12, 2019 at 10:19:52PM +0200, Efraim Flashner wrote:
> * gnu/packages/perl6.scm (rakudo): New variable.
> ---
> gnu/packages/perl6.scm | 70 +++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 69 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
> index 344bb4efda..9659361309 100644
> --- a/gnu/packages/perl6.scm
> +++ b/gnu/packages/perl6.scm
> @@ -25,7 +25,8 @@
> #:use-module (gnu packages bdw-gc)
> #:use-module (gnu packages libevent)
> #:use-module (gnu packages libffi)
> - #:use-module (gnu packages pkg-config))
> + #:use-module (gnu packages pkg-config)
> + #:use-module (gnu packages tls))
>
> (define-public moarvm
> (package
> @@ -159,3 +160,70 @@ Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a
> runtime footprint as it can, while still providing a Perl 6 object model and
> regular expression engine for the virtual machine.")
> (license license:artistic2.0)))
> +
> +(define-public rakudo
> + (package
> + (name "rakudo")
> + (version "2018.12")
> + (source
> + (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://github.com/rakudo/rakudo.git")
> + (commit version)))
> + (file-name (git-file-name name version))
This can also be downloaded from https://rakudo.perl6.org/downloads/rakudo/
> + (sha256
> + (base32
> + "1g8n1vmpi3g6qd0bj59lwgmcqdwlyg3nciyxbdnq7bw7qp12k0p4"))))
> + (build-system perl-build-system)
> + (arguments
> + '(#:phases
> + (modify-phases %standard-phases
> + (add-after 'unpack 'patch-source-date
> + (lambda _
> + (substitute* "tools/build/gen-version.pl"
> + (("gmtime") "gmtime(0)"))
> + #t))
> + (add-after 'patch-source-shebangs 'patch-more-shebangs
> + (lambda _
> + (substitute* '("tools/build/create-js-runner.pl"
> + "tools/build/create-moar-runner.p6"
> + "tools/build/create-jvm-runner.pl"
> + "src/core/Proc.pm6")
> + (("/bin/sh") (which "sh")))
> + #t))
> + (replace 'configure
> + (lambda* (#:key inputs outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out"))
> + (nqp (assoc-ref inputs "nqp")))
> + (invoke "perl" "./Configure.pl"
> + "--backend=moar"
> + "--with-nqp" (string-append nqp "/bin/nqp")
> + "--prefix" out))))
> + ;; This is the recommended tool to use for installing perl6 modules as
> + ;; a distribution. See: https://github.com/ugexe/zef/issues/117
"This is the recommended tool for distro maintainers to install perl6
modules systemwide"
> + (add-after 'install 'install-dist-tool
> + (lambda* (#:key outputs #:allow-other-keys)
> + (let* ((out (assoc-ref outputs "out"))
> + (dest (string-append out "/share/perl6/tools")))
> + (install-file "tools/install-dist.p6" dest)
> + (substitute* (string-append dest "/install-dist.p6")
> + (("/usr/bin/env perl6")
> + (string-append out "/bin/perl6"))))
Should we install the rest of the 'dist' folder and the 'resources'
folder?
> + #t)))))
> + (inputs
> + `(("moarvm" ,moarvm)
> + ("nqp" ,nqp)
> + ("openssl" ,openssl)))
> + (home-page "https://rakudo.org/")
> + (native-search-paths
> + (list (search-path-specification
> + (variable "PERL6LIB")
> + (separator ",")
> + (files '("share/perl6/lib"
> + "share/perl6/site/lib"
> + "share/perl6/vendor/lib")))))
> + (synopsis "Perl 6 Compiler")
> + (description "Rakudo Perl is a compiler that implements the Perl 6
> +specification and runs on top of several virtual machines.")
Can this be lengthened?
> + (license license:artistic2.0)))
> --
> 2.21.0
>
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 01/25] gnu: Add moarvm.
2019-03-12 20:19 ` [bug#34831] [PATCH 01/25] gnu: Add moarvm Efraim Flashner
@ 2019-03-19 10:05 ` Efraim Flashner
0 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-19 10:05 UTC (permalink / raw)
To: 34831
[-- Attachment #1: Type: text/plain, Size: 6241 bytes --]
On Tue, Mar 12, 2019 at 10:19:50PM +0200, Efraim Flashner wrote:
> * gnu/packages/perl6.scm (moarvm): New variable.
> ---
> gnu/local.mk | 3 +-
> gnu/packages/perl6.scm | 93 ++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 95 insertions(+), 1 deletion(-)
> create mode 100644 gnu/packages/perl6.scm
>
> diff --git a/gnu/local.mk b/gnu/local.mk
> index af2bf87273..79b93d5966 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -10,7 +10,7 @@
> # Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
> # Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
> # Copyright © 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
> -# Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
> +# Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
> # Copyright © 2016, 2017 Jan Nieuwenhuizen <janneke@gnu.org>
> # Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
> # Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
> @@ -364,6 +364,7 @@ GNU_SYSTEM_MODULES = \
> %D%/packages/perl-check.scm \
> %D%/packages/perl-compression.scm \
> %D%/packages/perl-web.scm \
> + %D%/packages/perl6.scm \
> %D%/packages/photo.scm \
> %D%/packages/phabricator.scm \
> %D%/packages/php.scm \
> diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
> new file mode 100644
> index 0000000000..7e92c865aa
> --- /dev/null
> +++ b/gnu/packages/perl6.scm
> @@ -0,0 +1,93 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> +;;;
> +;;; 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 perl6)
> + #:use-module ((guix licenses) #:prefix license:)
> + #:use-module (guix download)
> + #:use-module (guix packages)
> + #:use-module (guix build-system perl)
> + #:use-module (gnu packages bdw-gc)
> + #:use-module (gnu packages libevent)
> + #:use-module (gnu packages libffi)
> + #:use-module (gnu packages pkg-config))
> +
> +(define-public moarvm
> + (package
> + (name "moarvm")
> + (version "2018.12")
Can this be upgraded to 2019.03? I saw rakudo has a 2019.03.1 release
which might fix issues discovered previously when using 2019.03
> + (source
> + (origin
> + (method url-fetch)
> + (uri (string-append "https://moarvm.org/releases/MoarVM-"
> + version ".tar.gz"))
> + (sha256
> + (base32
> + "0fv98712k1gk56a612388db1azjsyabsbygav1pa3z2kd6js4cz4"))
> + (modules '((guix build utils)))
> + (snippet
> + '(begin
> + ;(delete-file-recursively "3rdparty/dynasm") ; JIT
> + (delete-file-recursively "3rdparty/dyncall")
> + (delete-file-recursively "3rdparty/freebsd")
> + (delete-file-recursively "3rdparty/libatomicops")
> + (delete-file-recursively "3rdparty/libuv")
> + ;(delete-file-recursively "3rdparty/libtommath") v1.0
Perhaps libtommath-1.0 should be packaged also and used
> + (delete-file-recursively "3rdparty/msinttypes")
> + #t))))
> + (build-system perl-build-system)
> + (arguments
> + '(#:phases
> + (modify-phases %standard-phases
> + (replace 'configure
> + (lambda* (#:key inputs outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out"))
> + (pkg-config (assoc-ref inputs "pkg-config")))
> + (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib"))
> + (invoke "perl" "Configure.pl"
> + "--prefix" out
> + "--pkgconfig" (string-append pkg-config "/bin/pkg-config")
> + "--has-libatomic_ops"
> + "--has-libffi"
> + "--has-libuv")))))))
> + (home-page "https://moarvm.org/")
> + ;; These should be inputs but moar.h can't find them when building rakudo
> + (propagated-inputs
> + `(("libatomic-ops" ,libatomic-ops)
> + ("libuv" ,libuv)))
> + (inputs
> + `(("libffi" ,libffi)))
> + (native-inputs
> + `(("pkg-config" ,pkg-config)))
> + (synopsis "VM for NQP And Rakudo Perl 6")
> + (description
> + "Short for \"Metamodel On A Runtime\", MoarVM is a modern virtual machine
> +built for the Rakudo Perl 6 compiler and the NQP Compiler Toolchain. Highlights
> +include:
> +
> +@itemize
> +@item Great Unicode support, with strings represented at grapheme level
> +@item Dynamic analysis of running code to identify hot functions and loops, and
> +perform a range of optimizations, including type specialization and inlining
> +@item Support for threads, a range of concurrency control constructs, and
> +asynchronous sockets, timers, processes, and more
> +@item Generational, parallel, garbage collection
> +@item Support for numerous language features, including first class functions,
> +exceptions, continuations, runtime loading of code, big integers and interfacing
> +with native libraries.
> +@end itemize")
> + (license license:artistic2.0)))
> --
> 2.21.0
>
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 04/25] build: Add rakudo-build-system.
2019-03-12 20:19 ` [bug#34831] [PATCH 04/25] build: Add rakudo-build-system Efraim Flashner
@ 2019-03-19 10:13 ` Efraim Flashner
2019-03-19 10:15 ` Efraim Flashner
1 sibling, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-19 10:13 UTC (permalink / raw)
To: 34831
[-- Attachment #1: Type: text/plain, Size: 17394 bytes --]
On Tue, Mar 12, 2019 at 10:19:53PM +0200, Efraim Flashner wrote:
> * guix/build-system/rakudo.scm,
> guix/build/rakudo-build-system.scm: New files.
> * Makefile.am (MODULES): Add them.
> * doc/guix.texi (Build System): Document it.
> ---
> Makefile.am | 3 +
> doc/guix.texi | 20 +++-
> guix/build-system/rakudo.scm | 155 +++++++++++++++++++++++++++++
> guix/build/rakudo-build-system.scm | 140 ++++++++++++++++++++++++++
> 4 files changed, 317 insertions(+), 1 deletion(-)
> create mode 100644 guix/build-system/rakudo.scm
> create mode 100644 guix/build/rakudo-build-system.scm
>
> diff --git a/Makefile.am b/Makefile.am
> index cf35770ba7..c3d2525af3 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -13,6 +13,7 @@
> # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
> # Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
> # Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
> +# Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> #
> # This file is part of GNU Guix.
> #
> @@ -124,6 +125,7 @@ MODULES = \
> guix/build-system/ocaml.scm \
> guix/build-system/waf.scm \
> guix/build-system/r.scm \
> + guix/build-system/rakudo.scm \
> guix/build-system/ruby.scm \
> guix/build-system/scons.scm \
> guix/build-system/texlive.scm \
> @@ -164,6 +166,7 @@ MODULES = \
> guix/build/python-build-system.scm \
> guix/build/ocaml-build-system.scm \
> guix/build/r-build-system.scm \
> + guix/build/rakudo-build-system.scm \
> guix/build/ruby-build-system.scm \
> guix/build/scons-build-system.scm \
> guix/build/texlive-build-system.scm \
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 82cf2babb2..5937c86dad 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -28,7 +28,7 @@ Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
> Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus@*
> Copyright @copyright{} 2016 Ben Woodcroft@*
> Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
> -Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@*
> +Copyright @copyright{} 2016, 2017, 2018, 2019 Efraim Flashner@*
> Copyright @copyright{} 2016 John Darrington@*
> Copyright @copyright{} 2016, 2017 Nils Gillmann@*
> Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@*
> @@ -5893,6 +5893,24 @@ are run after installation using the R function
> @code{tools::testInstalledPackage}.
> @end defvr
>
> +@defvr {Scheme Variable} rakudo-build-system
> +This variable is exported by @code{(guix build-system rakudo)} It
> +implements the build procedure used by @uref{https://rakudo.org/,
> +Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the
> +package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and
> +installs the binaries, library files and the resources, as well as wrap
> +the files under the @code{bin/} directory. Tests can be skipped by
extra space here ---^
> +passing @code{#f} to the @code{tests?} parameter.
> +
> +Which rakudo package is used can be specified with @code{rakudo}.
> +Which perl6-tap-harness package used for the tests can be specified with
> +@code{#:prove6} or removed by passing @code{#f} to the
> +@code{with-prove6?} parameter.
> +Which perl6-zef package used for tests and installing can be specified
> +with @code{#:zef} or removed by passing @code{#f} to the
> +@code{with-zef?} parameter.
> +@end defvr
> +
> @defvr {Scheme Variable} texlive-build-system
> This variable is exported by @code{(guix build-system texlive)}. It is
> used to build TeX packages in batch mode with a specified engine. The
> diff --git a/guix/build-system/rakudo.scm b/guix/build-system/rakudo.scm
> new file mode 100644
> index 0000000000..fd469f0bb5
> --- /dev/null
> +++ b/guix/build-system/rakudo.scm
> @@ -0,0 +1,155 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> +;;;
> +;;; 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 (guix build-system rakudo)
> + #:use-module (guix store)
> + #:use-module (guix utils)
> + #:use-module (guix derivations)
> + #:use-module (guix search-paths)
> + #:use-module (guix build-system)
> + #:use-module (guix build-system gnu)
> + #:use-module (guix packages)
> + #:use-module (ice-9 match)
> + #:export (%rakudo-build-system-modules
> + rakudo-build
> + rakudo-build-system))
> +
> +;; Commentary:
> +;;
> +;; Standard build and install procedure for packages using the Rakudo
> +;; build system to be installed as system libraries. This is
> +;; implemented as an extension of `gnu-build-system'.
> +;;
> +;; Code:
> +
> +(define %rakudo-build-system-modules
> + ;; Build-side modules imported by default.
> + `((guix build rakudo-build-system)
> + ,@%gnu-build-system-modules))
> +
> +(define (default-rakudo)
> + "Return the default Rakudo package."
> +
> + ;; Do not use `@' to avoid introducing circular dependencies.
> + (let ((module (resolve-interface '(gnu packages perl6))))
> + (module-ref module 'rakudo)))
> +
> +(define (default-prove6)
> + "Return the default perl6-tap-harness package for tests."
> + (let ((module (resolve-interface '(gnu packages perl6))))
> + (module-ref module 'perl6-tap-harness)))
> +
> +(define (default-zef)
> + "Return the default perl6-zef package."
> + (let ((module (resolve-interface '(gnu packages perl6))))
> + (module-ref module 'perl6-zef)))
> +
> +(define* (lower name
> + #:key source inputs native-inputs outputs
> + system target
> + (rakudo (default-rakudo))
> + (prove6 (default-prove6))
> + (zef (default-zef))
> + (with-prove6? #t)
> + (with-zef? #t)
> + #:allow-other-keys
> + #:rest arguments)
> + "Return a bag for NAME."
> + (define private-keywords
> + '(#:source #:target #:rakudo #:prove6 #:zef #:inputs #:native-inputs))
> +
> + (and (not target) ;XXX: no cross-compilation
> + (bag
> + (name name)
> + (system system)
> + (host-inputs `(,@(if source
> + `(("source" ,source))
> + '())
> + ,@inputs
> +
> + ;; Keep the standard inputs of 'gnu-build-system'.
> + ,@(standard-packages)))
> + (build-inputs `(("rakudo" ,rakudo)
> + ,@(if with-prove6?
> + `(("perl6-tap-harness" ,prove6))
> + '())
> + ,@(if with-zef?
> + `(("perl6-zef" ,zef))
> + '())
perl6-zef depends on perl6-tap-harness, so this check could be wrapped
inside the 'with-prove6?' check
> + ,@native-inputs))
> + (outputs outputs)
> + (build rakudo-build)
> + (arguments (strip-keyword-arguments private-keywords arguments)))))
> +
> +(define* (rakudo-build store name inputs
> + #:key
> + (search-paths '())
> + (tests? #t)
> + (phases '(@ (guix build rakudo-build-system)
> + %standard-phases))
> + (outputs '("out"))
> + (system (%current-system))
> + (guile #f)
> + (with-zef? #t)
> + (with-prove6? #t)
> + (imported-modules %rakudo-build-system-modules)
> + (modules '((guix build rakudo-build-system)
> + (guix build utils))))
> + "Build SOURCE using PERL6, and with INPUTS."
> + (define builder
> + `(begin
> + (use-modules ,@modules)
> + (rakudo-build #:name ,name
> + #:source ,(match (assoc-ref inputs "source")
> + (((? derivation? source))
> + (derivation->output-path source))
> + ((source)
> + source)
> + (source
> + source))
> + #:search-paths ',(map search-path-specification->sexp
> + search-paths)
> + #:phases ,phases
> + #:system ,system
> + #:tests? ,tests?
> + #:outputs %outputs
> + #:inputs %build-inputs)))
> +
> + (define guile-for-build
> + (match guile
> + ((? package?)
> + (package-derivation store guile system #:graft? #f))
> + (#f ; the default
> + (let* ((distro (resolve-interface '(gnu packages commencement)))
> + (guile (module-ref distro 'guile-final)))
> + (package-derivation store guile system #:graft? #f)))))
> +
> + (build-expression->derivation store name builder
> + #:system system
> + #:inputs inputs
> + #:modules imported-modules
> + #:outputs outputs
> + #:guile-for-build guile-for-build))
> +
> +(define rakudo-build-system
> + (build-system
> + (name 'rakudo)
> + (description "The standard Rakudo build system")
> + (lower lower)))
> +
> +;;; rakudo.scm ends here
> diff --git a/guix/build/rakudo-build-system.scm b/guix/build/rakudo-build-system.scm
> new file mode 100644
> index 0000000000..bfdefa3c4e
> --- /dev/null
> +++ b/guix/build/rakudo-build-system.scm
> @@ -0,0 +1,140 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> +;;;
> +;;; 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 (guix build rakudo-build-system)
> + #:use-module ((guix build gnu-build-system) #:prefix gnu:)
> + #:use-module (guix build utils)
> + #:use-module (ice-9 ftw)
> + #:use-module (ice-9 match)
> + #:use-module (srfi srfi-1)
> + #:use-module (srfi srfi-26)
> + #:export (%standard-phases
> + rakudo-build))
> +
> +;; Commentary:
> +;;
> +;; Builder-side code of the standard Rakudo package build procedure.
> +;;
> +;; Code:
> +
> +(define* (check #:key tests? inputs with-prove6? #:allow-other-keys)
> + (if (and tests? (assoc-ref inputs "perl6-tap-harness"))
> + ;(if (and tests? with-prove6?)
This might work the same in practice, but it should be fixed IMO
> + (invoke "prove6" "-I=lib" "t/")
> + (format #t "test suite not run~%"))
> + #t)
> +
> +(define* (install #:key inputs outputs with-zef? #:allow-other-keys)
> + "Install a given Perl6 package."
> + (let* ((out (assoc-ref outputs "out"))
> + (perl6 (string-append out "/share/perl6")))
> + (if (assoc-ref inputs "perl6-zef")
> + ;(if with-zef?
same as above
> + (begin
> + (let ((zef (string-append (assoc-ref inputs "perl6-zef")
> + "/bin/zef")))
> + (setenv "HOME" (getcwd))
> + (mkdir-p perl6)
> + (invoke zef "install" "--verbose" "."
> + ;; Don't install any of the following:
> + "--/depends" "--/build-depends" "--/test-depends"
> + (string-append "--install-to=" perl6))
> + (delete-file (string-append perl6 "/repo.lock")))
> + #t)
> + (begin
> + (let ((inst (string-append (assoc-ref inputs "rakudo")
> + "/share/perl6/tools/install-dist.p6")))
> + (setenv "RAKUDO_RERESOLVE_DEPENDENCIES" "0")
> + (setenv "RAKUDO_MODULE_DEBUG" "1") ; be verbose while building
> + (invoke inst (string-append "--to=" perl6) "--for=site"))))))
> +
> +(define* (install-libs #:key outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out"))
> + (lock "lib/.precomp/.lock"))
> + (when (file-exists? lock)
> + (delete-file "lib/.precomp/.lock"))
> + (copy-recursively "lib" (string-append out "/share/perl6/lib"))
> + #t))
> +
> +(define* (install-bins #:key outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out")))
> + (when (file-exists? "bin")
> + (for-each (lambda (file)
> + (install-file file (string-append out "/bin"))
> + (chmod (string-append out "/" file) #o555))
> + (find-files "bin" ".*")))
> + #t))
Both 'bin' and 'sbin' are wrapped in the 'wrap phase (see below) but
only the bin directory is installed. IMO both should be done.
> +
> +(define* (install-resources #:key outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out")))
> + (when (file-exists? "resources")
> + (copy-recursively "resources"
> + (string-append out "/share/perl6/resources")))
> + #t))
> +
> +(define* (wrap #:key inputs outputs #:allow-other-keys)
> + (define (list-of-files dir)
> + (map (cut string-append dir "/" <>)
> + (or (scandir dir (lambda (f)
> + (let ((s (stat (string-append dir "/" f))))
> + (eq? 'regular (stat:type s)))))
> + '())))
> +
> + (define bindirs
> + (append-map (match-lambda
> + ((_ . dir)
> + (list (string-append dir "/bin")
> + (string-append dir "/sbin"))))
> + outputs))
> +
> + (let* ((out (assoc-ref outputs "out"))
> + (var `("PERL6LIB" "," prefix
> + ,(cons (string-append out "/share/perl6/lib,"
> + out "/share/perl6/site/lib,"
> + out "/share/perl6/vendor/lib")
> + (search-path-as-string->list
> + (or (getenv "PERL6LIB") "") #\,)))))
> + (for-each (lambda (dir)
> + (let ((files (list-of-files dir)))
> + (for-each (cut wrap-program <> var)
> + files)))
> + bindirs)
> + #t))
> +
> +(define %standard-phases
> + ;; No need for 'bootstrap, 'configure or 'build.
> + (modify-phases gnu:%standard-phases
> + (delete 'bootstrap)
> + (delete 'configure)
> + (delete 'build)
> + (replace 'check check)
> + (replace 'install install)
> + (add-before 'install 'install-lib-dir install-libs)
> + (add-after 'install-lib-dir 'install-resources install-resources)
> + (add-after 'install-resources 'install-binaries install-bins)
> + ;; needs to be after 'install-binaries and all 'install phases
> + (add-after 'install 'wrap wrap)))
> +
> +(define* (rakudo-build #:key inputs (phases %standard-phases)
> + #:allow-other-keys #:rest args)
> + "Build the given Perl6 package, applying all of PHASES in order."
> + (apply gnu:gnu-build
> + #:inputs inputs #:phases phases
> + args))
> +
> +;;; rakudo-build-system.scm ends here
> --
> 2.21.0
>
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* [bug#34831] [PATCH 04/25] build: Add rakudo-build-system.
2019-03-12 20:19 ` [bug#34831] [PATCH 04/25] build: Add rakudo-build-system Efraim Flashner
2019-03-19 10:13 ` Efraim Flashner
@ 2019-03-19 10:15 ` Efraim Flashner
1 sibling, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-19 10:15 UTC (permalink / raw)
To: 34831
[-- Attachment #1: Type: text/plain, Size: 17080 bytes --]
On Tue, Mar 12, 2019 at 10:19:53PM +0200, Efraim Flashner wrote:
> * guix/build-system/rakudo.scm,
> guix/build/rakudo-build-system.scm: New files.
> * Makefile.am (MODULES): Add them.
> * doc/guix.texi (Build System): Document it.
> ---
> Makefile.am | 3 +
> doc/guix.texi | 20 +++-
> guix/build-system/rakudo.scm | 155 +++++++++++++++++++++++++++++
> guix/build/rakudo-build-system.scm | 140 ++++++++++++++++++++++++++
> 4 files changed, 317 insertions(+), 1 deletion(-)
> create mode 100644 guix/build-system/rakudo.scm
> create mode 100644 guix/build/rakudo-build-system.scm
>
> diff --git a/Makefile.am b/Makefile.am
> index cf35770ba7..c3d2525af3 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -13,6 +13,7 @@
> # Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
> # Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
> # Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
> +# Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> #
> # This file is part of GNU Guix.
> #
> @@ -124,6 +125,7 @@ MODULES = \
> guix/build-system/ocaml.scm \
> guix/build-system/waf.scm \
> guix/build-system/r.scm \
> + guix/build-system/rakudo.scm \
> guix/build-system/ruby.scm \
> guix/build-system/scons.scm \
> guix/build-system/texlive.scm \
> @@ -164,6 +166,7 @@ MODULES = \
> guix/build/python-build-system.scm \
> guix/build/ocaml-build-system.scm \
> guix/build/r-build-system.scm \
> + guix/build/rakudo-build-system.scm \
> guix/build/ruby-build-system.scm \
> guix/build/scons-build-system.scm \
> guix/build/texlive-build-system.scm \
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 82cf2babb2..5937c86dad 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -28,7 +28,7 @@ Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
> Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus@*
> Copyright @copyright{} 2016 Ben Woodcroft@*
> Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
> -Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@*
> +Copyright @copyright{} 2016, 2017, 2018, 2019 Efraim Flashner@*
> Copyright @copyright{} 2016 John Darrington@*
> Copyright @copyright{} 2016, 2017 Nils Gillmann@*
> Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@*
> @@ -5893,6 +5893,24 @@ are run after installation using the R function
> @code{tools::testInstalledPackage}.
> @end defvr
>
> +@defvr {Scheme Variable} rakudo-build-system
> +This variable is exported by @code{(guix build-system rakudo)} It
> +implements the build procedure used by @uref{https://rakudo.org/,
> +Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the
> +package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and
> +installs the binaries, library files and the resources, as well as wrap
> +the files under the @code{bin/} directory. Tests can be skipped by
> +passing @code{#f} to the @code{tests?} parameter.
> +
> +Which rakudo package is used can be specified with @code{rakudo}.
> +Which perl6-tap-harness package used for the tests can be specified with
> +@code{#:prove6} or removed by passing @code{#f} to the
> +@code{with-prove6?} parameter.
> +Which perl6-zef package used for tests and installing can be specified
> +with @code{#:zef} or removed by passing @code{#f} to the
> +@code{with-zef?} parameter.
> +@end defvr
> +
> @defvr {Scheme Variable} texlive-build-system
> This variable is exported by @code{(guix build-system texlive)}. It is
> used to build TeX packages in batch mode with a specified engine. The
> diff --git a/guix/build-system/rakudo.scm b/guix/build-system/rakudo.scm
> new file mode 100644
> index 0000000000..fd469f0bb5
> --- /dev/null
> +++ b/guix/build-system/rakudo.scm
> @@ -0,0 +1,155 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> +;;;
> +;;; 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 (guix build-system rakudo)
> + #:use-module (guix store)
> + #:use-module (guix utils)
> + #:use-module (guix derivations)
> + #:use-module (guix search-paths)
> + #:use-module (guix build-system)
> + #:use-module (guix build-system gnu)
> + #:use-module (guix packages)
> + #:use-module (ice-9 match)
> + #:export (%rakudo-build-system-modules
> + rakudo-build
> + rakudo-build-system))
> +
> +;; Commentary:
> +;;
> +;; Standard build and install procedure for packages using the Rakudo
> +;; build system to be installed as system libraries. This is
> +;; implemented as an extension of `gnu-build-system'.
> +;;
> +;; Code:
> +
> +(define %rakudo-build-system-modules
> + ;; Build-side modules imported by default.
> + `((guix build rakudo-build-system)
> + ,@%gnu-build-system-modules))
> +
> +(define (default-rakudo)
> + "Return the default Rakudo package."
> +
> + ;; Do not use `@' to avoid introducing circular dependencies.
> + (let ((module (resolve-interface '(gnu packages perl6))))
> + (module-ref module 'rakudo)))
> +
> +(define (default-prove6)
> + "Return the default perl6-tap-harness package for tests."
> + (let ((module (resolve-interface '(gnu packages perl6))))
> + (module-ref module 'perl6-tap-harness)))
> +
> +(define (default-zef)
> + "Return the default perl6-zef package."
> + (let ((module (resolve-interface '(gnu packages perl6))))
> + (module-ref module 'perl6-zef)))
> +
> +(define* (lower name
> + #:key source inputs native-inputs outputs
> + system target
> + (rakudo (default-rakudo))
> + (prove6 (default-prove6))
> + (zef (default-zef))
> + (with-prove6? #t)
> + (with-zef? #t)
> + #:allow-other-keys
> + #:rest arguments)
> + "Return a bag for NAME."
> + (define private-keywords
> + '(#:source #:target #:rakudo #:prove6 #:zef #:inputs #:native-inputs))
> +
> + (and (not target) ;XXX: no cross-compilation
> + (bag
> + (name name)
> + (system system)
> + (host-inputs `(,@(if source
> + `(("source" ,source))
> + '())
> + ,@inputs
> +
> + ;; Keep the standard inputs of 'gnu-build-system'.
> + ,@(standard-packages)))
> + (build-inputs `(("rakudo" ,rakudo)
> + ,@(if with-prove6?
> + `(("perl6-tap-harness" ,prove6))
> + '())
> + ,@(if with-zef?
> + `(("perl6-zef" ,zef))
> + '())
> + ,@native-inputs))
> + (outputs outputs)
> + (build rakudo-build)
> + (arguments (strip-keyword-arguments private-keywords arguments)))))
> +
> +(define* (rakudo-build store name inputs
> + #:key
> + (search-paths '())
> + (tests? #t)
> + (phases '(@ (guix build rakudo-build-system)
> + %standard-phases))
> + (outputs '("out"))
> + (system (%current-system))
> + (guile #f)
> + (with-zef? #t)
> + (with-prove6? #t)
> + (imported-modules %rakudo-build-system-modules)
> + (modules '((guix build rakudo-build-system)
> + (guix build utils))))
> + "Build SOURCE using PERL6, and with INPUTS."
> + (define builder
> + `(begin
> + (use-modules ,@modules)
> + (rakudo-build #:name ,name
> + #:source ,(match (assoc-ref inputs "source")
> + (((? derivation? source))
> + (derivation->output-path source))
> + ((source)
> + source)
> + (source
> + source))
> + #:search-paths ',(map search-path-specification->sexp
> + search-paths)
> + #:phases ,phases
> + #:system ,system
> + #:tests? ,tests?
> + #:outputs %outputs
> + #:inputs %build-inputs)))
> +
> + (define guile-for-build
> + (match guile
> + ((? package?)
> + (package-derivation store guile system #:graft? #f))
> + (#f ; the default
> + (let* ((distro (resolve-interface '(gnu packages commencement)))
> + (guile (module-ref distro 'guile-final)))
> + (package-derivation store guile system #:graft? #f)))))
> +
> + (build-expression->derivation store name builder
> + #:system system
> + #:inputs inputs
> + #:modules imported-modules
> + #:outputs outputs
> + #:guile-for-build guile-for-build))
> +
> +(define rakudo-build-system
> + (build-system
> + (name 'rakudo)
> + (description "The standard Rakudo build system")
> + (lower lower)))
> +
> +;;; rakudo.scm ends here
> diff --git a/guix/build/rakudo-build-system.scm b/guix/build/rakudo-build-system.scm
> new file mode 100644
> index 0000000000..bfdefa3c4e
> --- /dev/null
> +++ b/guix/build/rakudo-build-system.scm
> @@ -0,0 +1,140 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> +;;;
> +;;; 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 (guix build rakudo-build-system)
> + #:use-module ((guix build gnu-build-system) #:prefix gnu:)
> + #:use-module (guix build utils)
> + #:use-module (ice-9 ftw)
> + #:use-module (ice-9 match)
> + #:use-module (srfi srfi-1)
> + #:use-module (srfi srfi-26)
> + #:export (%standard-phases
> + rakudo-build))
> +
> +;; Commentary:
> +;;
> +;; Builder-side code of the standard Rakudo package build procedure.
> +;;
> +;; Code:
> +
> +(define* (check #:key tests? inputs with-prove6? #:allow-other-keys)
> + (if (and tests? (assoc-ref inputs "perl6-tap-harness"))
> + ;(if (and tests? with-prove6?)
> + (invoke "prove6" "-I=lib" "t/")
Can we have a default set of tests even if perl6-tap-harness isn't
available?
> + (format #t "test suite not run~%"))
> + #t)
> +
> +(define* (install #:key inputs outputs with-zef? #:allow-other-keys)
> + "Install a given Perl6 package."
> + (let* ((out (assoc-ref outputs "out"))
> + (perl6 (string-append out "/share/perl6")))
> + (if (assoc-ref inputs "perl6-zef")
> + ;(if with-zef?
> + (begin
> + (let ((zef (string-append (assoc-ref inputs "perl6-zef")
> + "/bin/zef")))
> + (setenv "HOME" (getcwd))
> + (mkdir-p perl6)
> + (invoke zef "install" "--verbose" "."
> + ;; Don't install any of the following:
> + "--/depends" "--/build-depends" "--/test-depends"
> + (string-append "--install-to=" perl6))
> + (delete-file (string-append perl6 "/repo.lock")))
> + #t)
> + (begin
> + (let ((inst (string-append (assoc-ref inputs "rakudo")
> + "/share/perl6/tools/install-dist.p6")))
> + (setenv "RAKUDO_RERESOLVE_DEPENDENCIES" "0")
> + (setenv "RAKUDO_MODULE_DEBUG" "1") ; be verbose while building
> + (invoke inst (string-append "--to=" perl6) "--for=site"))))))
> +
> +(define* (install-libs #:key outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out"))
> + (lock "lib/.precomp/.lock"))
> + (when (file-exists? lock)
> + (delete-file "lib/.precomp/.lock"))
> + (copy-recursively "lib" (string-append out "/share/perl6/lib"))
> + #t))
> +
> +(define* (install-bins #:key outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out")))
> + (when (file-exists? "bin")
> + (for-each (lambda (file)
> + (install-file file (string-append out "/bin"))
> + (chmod (string-append out "/" file) #o555))
> + (find-files "bin" ".*")))
> + #t))
> +
> +(define* (install-resources #:key outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out")))
> + (when (file-exists? "resources")
> + (copy-recursively "resources"
> + (string-append out "/share/perl6/resources")))
> + #t))
> +
> +(define* (wrap #:key inputs outputs #:allow-other-keys)
> + (define (list-of-files dir)
> + (map (cut string-append dir "/" <>)
> + (or (scandir dir (lambda (f)
> + (let ((s (stat (string-append dir "/" f))))
> + (eq? 'regular (stat:type s)))))
> + '())))
> +
> + (define bindirs
> + (append-map (match-lambda
> + ((_ . dir)
> + (list (string-append dir "/bin")
> + (string-append dir "/sbin"))))
> + outputs))
> +
> + (let* ((out (assoc-ref outputs "out"))
> + (var `("PERL6LIB" "," prefix
> + ,(cons (string-append out "/share/perl6/lib,"
> + out "/share/perl6/site/lib,"
> + out "/share/perl6/vendor/lib")
> + (search-path-as-string->list
> + (or (getenv "PERL6LIB") "") #\,)))))
> + (for-each (lambda (dir)
> + (let ((files (list-of-files dir)))
> + (for-each (cut wrap-program <> var)
> + files)))
> + bindirs)
> + #t))
> +
> +(define %standard-phases
> + ;; No need for 'bootstrap, 'configure or 'build.
> + (modify-phases gnu:%standard-phases
> + (delete 'bootstrap)
> + (delete 'configure)
> + (delete 'build)
> + (replace 'check check)
> + (replace 'install install)
> + (add-before 'install 'install-lib-dir install-libs)
> + (add-after 'install-lib-dir 'install-resources install-resources)
> + (add-after 'install-resources 'install-binaries install-bins)
> + ;; needs to be after 'install-binaries and all 'install phases
> + (add-after 'install 'wrap wrap)))
> +
> +(define* (rakudo-build #:key inputs (phases %standard-phases)
> + #:allow-other-keys #:rest args)
> + "Build the given Perl6 package, applying all of PHASES in order."
> + (apply gnu:gnu-build
> + #:inputs inputs #:phases phases
> + args))
> +
> +;;; rakudo-build-system.scm ends here
> --
> 2.21.0
>
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34831: [PATCH 00/25] Add perl6
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
` (24 preceding siblings ...)
2019-03-12 20:20 ` [bug#34831] [PATCH 25/25] gnu: Add perl6-json Efraim Flashner
@ 2019-03-24 14:31 ` Efraim Flashner
25 siblings, 0 replies; 32+ messages in thread
From: Efraim Flashner @ 2019-03-24 14:31 UTC (permalink / raw)
To: 34831-done
[-- Attachment #1: Type: text/plain, Size: 231 bytes --]
Patches pushed
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2019-03-24 14:33 UTC | newest]
Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-12 20:16 [bug#34831] [PATCH 00/25] Add perl6 Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 01/25] gnu: Add moarvm Efraim Flashner
2019-03-19 10:05 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 02/25] gnu: Add nqp Efraim Flashner
2019-03-19 10:02 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 03/25] gnu: Add rakudo Efraim Flashner
2019-03-19 10:04 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 04/25] build: Add rakudo-build-system Efraim Flashner
2019-03-19 10:13 ` Efraim Flashner
2019-03-19 10:15 ` Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 05/25] gnu: Add perl6-tap-harness Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 06/25] gnu: Add perl6-zef Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 07/25] gnu: Add perl6-uri Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 08/25] gnu: Add perl6-json-fast Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 09/25] gnu: Add perl6-json-name Efraim Flashner
2019-03-12 20:19 ` [bug#34831] [PATCH 10/25] gnu: Add perl6-json-unmarshal Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 11/25] gnu: Add perl6-json-marshal Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 12/25] gnu: Add perl6-json-class Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 13/25] gnu: Add perl6-meta6 Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 14/25] gnu: Add perl6-license-spdx Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 15/25] gnu: Add perl6-test-meta Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 16/25] gnu: Add perl6-xml-writer Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 17/25] gnu: Add perl6-svg Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 18/25] gnu: Add perl6-svg-plot Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 19/25] gnu: Add perl6-terminal-ansicolor Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 20/25] gnu: Add perl6-oo-monitors Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 21/25] gnu: Add perl6-test-mock Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 22/25] gnu: Add perl6-grammar-profiler-simple Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 23/25] gnu: Add perl6-grammar-debugger Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 24/25] gnu: Add perl6-mime-base64 Efraim Flashner
2019-03-12 20:20 ` [bug#34831] [PATCH 25/25] gnu: Add perl6-json Efraim Flashner
2019-03-24 14:31 ` bug#34831: [PATCH 00/25] Add perl6 Efraim Flashner
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).