GNU bug report logs - #34831
[PATCH 00/25] Add perl6

Previous Next

Package: guix-patches;

Reported by: Efraim Flashner <efraim <at> flashner.co.il>

Date: Tue, 12 Mar 2019 20:17:01 UTC

Severity: normal

Tags: patch

Done: Efraim Flashner <efraim <at> flashner.co.il>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 34831 in the body.
You can then email your comments to 34831 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:17:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Efraim Flashner <efraim <at> flashner.co.il>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Tue, 12 Mar 2019 20:17:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: guix-patches <at> gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 00/25] Add perl6
Date: Tue, 12 Mar 2019 22:16:08 +0200
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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:03 GMT) Full text and rfc822 format available.

Message #8 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 01/25] gnu: Add moarvm.
Date: Tue, 12 Mar 2019 22:19:50 +0200
* 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 <at> elephly.net>
 # Copyright © 2016 Ben Woodcroft <donttrustben <at> gmail.com>
 # Copyright © 2016, 2017, 2018, 2019 Alex Vong <alexvong1995 <at> gmail.com>
-# Copyright © 2016, 2017 Efraim Flashner <efraim <at> flashner.co.il>
+# Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim <at> flashner.co.il>
 # Copyright © 2016, 2017 Jan Nieuwenhuizen <janneke <at> gnu.org>
 # Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me <at> tobias.gr>
 # Copyright © 2017, 2018 Clément Lassieur <clement <at> 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 <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:03 GMT) Full text and rfc822 format available.

Message #11 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 02/25] gnu: Add nqp.
Date: Tue, 12 Mar 2019 22:19:51 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:04 GMT) Full text and rfc822 format available.

Message #14 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 03/25] gnu: Add rakudo.
Date: Tue, 12 Mar 2019 22:19:52 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:04 GMT) Full text and rfc822 format available.

Message #17 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 04/25] build: Add rakudo-build-system.
Date: Tue, 12 Mar 2019 22:19:53 +0200
* 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 <at> lepiller.eu>
 # Copyright © 2018 Oleg Pykhalov <go.wigust <at> gmail.com>
 # Copyright © 2018 Alex Vong <alexvong1995 <at> gmail.com>
+# Copyright © 2019 Efraim Flashner <efraim <at> 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 <at> 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 <at> 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:05 GMT) Full text and rfc822 format available.

Message #20 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 05/25] gnu: Add perl6-tap-harness.
Date: Tue, 12 Mar 2019 22:19:54 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:05 GMT) Full text and rfc822 format available.

Message #23 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 08/25] gnu: Add perl6-json-fast.
Date: Tue, 12 Mar 2019 22:19:57 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:06 GMT) Full text and rfc822 format available.

Message #26 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 06/25] gnu: Add perl6-zef.
Date: Tue, 12 Mar 2019 22:19:55 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:06 GMT) Full text and rfc822 format available.

Message #29 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 09/25] gnu: Add perl6-json-name.
Date: Tue, 12 Mar 2019 22:19:58 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:07 GMT) Full text and rfc822 format available.

Message #32 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 07/25] gnu: Add perl6-uri.
Date: Tue, 12 Mar 2019 22:19:56 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:07 GMT) Full text and rfc822 format available.

Message #35 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 10/25] gnu: Add perl6-json-unmarshal.
Date: Tue, 12 Mar 2019 22:19:59 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:08 GMT) Full text and rfc822 format available.

Message #38 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 11/25] gnu: Add perl6-json-marshal.
Date: Tue, 12 Mar 2019 22:20:00 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:08 GMT) Full text and rfc822 format available.

Message #41 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 12/25] gnu: Add perl6-json-class.
Date: Tue, 12 Mar 2019 22:20:01 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:09 GMT) Full text and rfc822 format available.

Message #44 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 13/25] gnu: Add perl6-meta6.
Date: Tue, 12 Mar 2019 22:20:02 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:09 GMT) Full text and rfc822 format available.

Message #47 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 14/25] gnu: Add perl6-license-spdx.
Date: Tue, 12 Mar 2019 22:20:03 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:10 GMT) Full text and rfc822 format available.

Message #50 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 15/25] gnu: Add perl6-test-meta.
Date: Tue, 12 Mar 2019 22:20:04 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:10 GMT) Full text and rfc822 format available.

Message #53 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 16/25] gnu: Add perl6-xml-writer.
Date: Tue, 12 Mar 2019 22:20:05 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:13 GMT) Full text and rfc822 format available.

Message #56 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 19/25] gnu: Add perl6-terminal-ansicolor.
Date: Tue, 12 Mar 2019 22:20:08 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:13 GMT) Full text and rfc822 format available.

Message #59 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 17/25] gnu: Add perl6-svg.
Date: Tue, 12 Mar 2019 22:20:06 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:14 GMT) Full text and rfc822 format available.

Message #62 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 20/25] gnu: Add perl6-oo-monitors.
Date: Tue, 12 Mar 2019 22:20:09 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:14 GMT) Full text and rfc822 format available.

Message #65 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 18/25] gnu: Add perl6-svg-plot.
Date: Tue, 12 Mar 2019 22:20:07 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:15 GMT) Full text and rfc822 format available.

Message #68 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 21/25] gnu: Add perl6-test-mock.
Date: Tue, 12 Mar 2019 22:20:10 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:15 GMT) Full text and rfc822 format available.

Message #71 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 22/25] gnu: Add perl6-grammar-profiler-simple.
Date: Tue, 12 Mar 2019 22:20:11 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:16 GMT) Full text and rfc822 format available.

Message #74 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 23/25] gnu: Add perl6-grammar-debugger.
Date: Tue, 12 Mar 2019 22:20:12 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:16 GMT) Full text and rfc822 format available.

Message #77 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 24/25] gnu: Add perl6-mime-base64.
Date: Tue, 12 Mar 2019 22:20:13 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 12 Mar 2019 20:21:17 GMT) Full text and rfc822 format available.

Message #80 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH 25/25] gnu: Add perl6-json.
Date: Tue, 12 Mar 2019 22:20:14 +0200
* 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





Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 19 Mar 2019 10:03:01 GMT) Full text and rfc822 format available.

Message #83 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Subject: Re: [PATCH 02/25] gnu: Add nqp.
Date: Tue, 19 Mar 2019 12:02:15 +0200
[Message part 1 (text/plain, inline)]
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 <at> 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
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 19 Mar 2019 10:05:02 GMT) Full text and rfc822 format available.

Message #86 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Subject: Re: [PATCH 03/25] gnu: Add rakudo.
Date: Tue, 19 Mar 2019 12:04:13 +0200
[Message part 1 (text/plain, inline)]
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 <at> 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
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 19 Mar 2019 10:06:02 GMT) Full text and rfc822 format available.

Message #89 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Subject: Re: [PATCH 01/25] gnu: Add moarvm.
Date: Tue, 19 Mar 2019 12:05:42 +0200
[Message part 1 (text/plain, inline)]
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 <at> elephly.net>
>  # Copyright © 2016 Ben Woodcroft <donttrustben <at> gmail.com>
>  # Copyright © 2016, 2017, 2018, 2019 Alex Vong <alexvong1995 <at> gmail.com>
> -# Copyright © 2016, 2017 Efraim Flashner <efraim <at> flashner.co.il>
> +# Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim <at> flashner.co.il>
>  # Copyright © 2016, 2017 Jan Nieuwenhuizen <janneke <at> gnu.org>
>  # Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me <at> tobias.gr>
>  # Copyright © 2017, 2018 Clément Lassieur <clement <at> 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 <at> 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 <at> 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
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 19 Mar 2019 10:15:02 GMT) Full text and rfc822 format available.

Message #92 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Subject: Re: [PATCH 04/25] build: Add rakudo-build-system.
Date: Tue, 19 Mar 2019 12:13:56 +0200
[Message part 1 (text/plain, inline)]
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 <at> lepiller.eu>
>  # Copyright © 2018 Oleg Pykhalov <go.wigust <at> gmail.com>
>  # Copyright © 2018 Alex Vong <alexvong1995 <at> gmail.com>
> +# Copyright © 2019 Efraim Flashner <efraim <at> 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 <at> 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 <at> 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 <at> 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
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#34831; Package guix-patches. (Tue, 19 Mar 2019 10:17:02 GMT) Full text and rfc822 format available.

Message #95 received at 34831 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831 <at> debbugs.gnu.org
Subject: Re: [PATCH 04/25] build: Add rakudo-build-system.
Date: Tue, 19 Mar 2019 12:15:49 +0200
[Message part 1 (text/plain, inline)]
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 <at> lepiller.eu>
>  # Copyright © 2018 Oleg Pykhalov <go.wigust <at> gmail.com>
>  # Copyright © 2018 Alex Vong <alexvong1995 <at> gmail.com>
> +# Copyright © 2019 Efraim Flashner <efraim <at> 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 <at> 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 <at> 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 <at> 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
[signature.asc (application/pgp-signature, inline)]

Reply sent to Efraim Flashner <efraim <at> flashner.co.il>:
You have taken responsibility. (Sun, 24 Mar 2019 14:33:02 GMT) Full text and rfc822 format available.

Notification sent to Efraim Flashner <efraim <at> flashner.co.il>:
bug acknowledged by developer. (Sun, 24 Mar 2019 14:33:02 GMT) Full text and rfc822 format available.

Message #100 received at 34831-done <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: 34831-done <at> debbugs.gnu.org
Subject: Re: [PATCH 00/25] Add perl6
Date: Sun, 24 Mar 2019 16:31:59 +0200
[Message part 1 (text/plain, inline)]
Patches pushed


-- 
Efraim Flashner   <efraim <at> 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
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 22 Apr 2019 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 5 years and 5 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.