[PATCH 0/4] Update Raku (Perl 6)

OpenSubmitted by Alexandru-Sergiu Marton.
Details
2 participants
  • Alexandru-Sergiu Marton
  • Ludovic Courtès
Owner
unassigned
Severity
normal
A
A
Alexandru-Sergiu Marton wrote on 6 Feb 2021 22:33
(address . guix-patches@gnu.org)(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)
20210206213332.11417-1-brown121407@posteo.ro
Hi,

These patches update Rakudo, the Raku language compiler (formerly known as
Perl 6), to a newer version. I don't consider the work complete, because of a
few reasons:

* I didn't check if the perl6-* are compatible with this change;
* I didn't change the description/synopsis of what I updated;

yet the packages build and seem to work just fine.

I wanted to start a discussion before I go all-in on this.

Since the official name of the language is now Raku [1], should we rename the
module file to raku.scm? Also, in synopsis/description like the one for
Rakudo, where it says "Perl 6 Compiler", should we make it "Raku compiler"
instead? The website for Rakudo says it is "The most mature, production-ready
implementation of the Raku language." [2].


Note that the rakudo package seems to be non-deterministic. The last version
was, and this new one is too.

Also note that I don't have any experience with Perl/Raku or Perl/Raku
tooling, so if I messed something up that should have been an obvious
Perl/Raku-related idiosyncrasy, please tell me.

Alexandru-Sergiu Marton (4):
gnu: Add dyncall.
gnu: moarvm: Update to 2020.12.
gnu: nqp: Update to 2020.12.
gnu: rakudo: Update to 2020.12.

gnu/packages/c.scm | 39 +++++++++++
gnu/packages/perl6.scm | 144 ++++++++++++++++++++---------------------
2 files changed, 109 insertions(+), 74 deletions(-)

--
2.30.0
A
A
Alexandru-Sergiu Marton wrote on 6 Feb 2021 22:35
[PATCH 1/4] gnu: Add dyncall.
(address . 46352@debbugs.gnu.org)(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)
20210206213511.11551-1-brown121407@posteo.ro
* gnu/packages/c.scm (dyncall): New variable.
---
gnu/packages/c.scm | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)

Toggle diff (56 lines)
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index d9e5e4d7de..db9938003f 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -614,3 +615,41 @@ event stream encoding, a binary format for bidirectional client-server
 communication.")
     (home-page "https://github.com/awslabs/aws-c-event-stream")
     (license license:asl2.0)))
+
+(define-public dyncall
+  (package
+    (name "dyncall")
+    (version "1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.dyncall.org/r" version
+                                  "/dyncall-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1mq832l2w17mvxd1sq50my8ykjfyzd52kizm0h3mc89l4k0590g8"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "CC=" ,(cc-for-target)))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((bash (string-append (assoc-ref inputs "bash")
+                                        "/bin/bash"))
+                   (out (assoc-ref outputs "out")))
+               (invoke bash "./configure"
+                       (string-append "--prefix=" out)))))
+         (replace 'check
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((make (string-append (assoc-ref inputs "make")
+                                        "/bin/make")))
+               (invoke make "tests"
+                       (string-append "CC=" ,(cc-for-target)))))))))
+    (synopsis "Library for calling C functions dynamically")
+    (description "The dyncall library encapsulates architecture-, OS- and
+compiler-specific function call semantics in a virtual bind argument
+parameters from left to right and then call interface allowing programmers to
+call C functions in a completely dynamic manner.")
+    (home-page "https://www.dyncall.org/")
+    (license license:isc)))
-- 
2.30.0
A
A
Alexandru-Sergiu Marton wrote on 6 Feb 2021 22:35
[PATCH 2/4] gnu: moarvm: Update to 2020.12.
(address . 46352@debbugs.gnu.org)(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)
20210206213511.11551-2-brown121407@posteo.ro
* gnu/packages/perl6.scm (moarvm): Update to 2020.12.
---
gnu/packages/perl6.scm | 57 ++++++++++++++++++++++++------------------
1 file changed, 32 insertions(+), 25 deletions(-)

Toggle diff (107 lines)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index e02dd757e5..96d76dd417 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,7 @@
   #:use-module (guix build-system perl)
   #:use-module (guix build-system rakudo)
   #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages c)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages multiprecision)
@@ -34,26 +36,26 @@
 (define-public moarvm
   (package
     (name "moarvm")
-    (version "2019.03")
+    (version "2020.12")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://moarvm.org/releases/MoarVM-"
-                            version ".tar.gz"))
-        (sha256
-         (base32
-          "017w1zvr6yl0cgjfc1b3ddlc6vjw9q8p7alw1vvsckw95190xc14"))
-        (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")
-            (delete-file-recursively "3rdparty/msinttypes")
-            #t))))
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://moarvm.org/releases/MoarVM-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "18iys1bdb92asggrsz7sg1hh76j7kq63c3fgg33fnla18qf4z488"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Delete libraries which we can provide through Guix.
+           (delete-file-recursively "3rdparty/dyncall")
+           (delete-file-recursively "3rdparty/libatomicops")
+           (delete-file-recursively "3rdparty/libuv")
+           (delete-file-recursively "3rdparty/libtommath")
+           ;; Useful only for Microsoft Visual Studio.
+           (delete-file-recursively "3rdparty/msinttypes")
+           #t))))
     (build-system perl-build-system)
     (arguments
      '(#:phases
@@ -64,19 +66,22 @@
                    (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")
+                       (string-append "--prefix=" out)
+                       (string-append "--pkgconfig=" pkg-config
+                                      "/bin/pkg-config")
                        "--has-libtommath"
                        "--has-libatomic_ops"
                        "--has-libffi"
-                       "--has-libuv")))))))
+                       "--has-libuv"
+                       "--has-dyncall")))))))
     (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)
        ("libffi" ,libffi)
-       ("libtommath" ,libtommath-1.0)
-       ("libuv" ,libuv)))
+       ("libtommath" ,libtommath)
+       ("libuv" ,libuv)
+       ("dyncall" ,dyncall)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (synopsis "VM for NQP And Rakudo Perl 6")
@@ -96,7 +101,9 @@ asynchronous sockets, timers, processes, and more
 exceptions, continuations, runtime loading of code, big integers and interfacing
 with native libraries.
 @end itemize")
-    (license license:artistic2.0)))
+    (license (list license:artistic2.0       ; For MoarVM itself
+                   license:expat             ; 3rdparty/freebsd,tinymt,cmp
+                   license:public-domain)))) ; 3rdparty/sha1
 
 (define-public nqp
   (package
-- 
2.30.0
A
A
Alexandru-Sergiu Marton wrote on 6 Feb 2021 22:35
[PATCH 4/4] gnu: rakudo: Update to 2020.12.
(address . 46352@debbugs.gnu.org)(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)
20210206213511.11551-4-brown121407@posteo.ro
* gnu/packages/perl6.scm (rakudo): Update to 2020.12.
---
gnu/packages/perl6.scm | 42 ++++++++++++++++++++----------------------
1 file changed, 20 insertions(+), 22 deletions(-)

Toggle diff (79 lines)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 3395d3a2ec..181b41a95b 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -164,39 +164,37 @@ regular expression engine for the virtual machine.")
 (define-public rakudo
   (package
     (name "rakudo")
-    (version "2019.03.1")
+    (version "2020.12")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://rakudo.perl6.org/downloads/rakudo/rakudo-"
-                            version ".tar.gz"))
-        (sha256
-         (base32
-          "1nllf69v8xr6v3kkj7pmryg11n5m3ajfkr7j72pvhrgnjy8lv3r1"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://rakudo.org/dl/rakudo/rakudo-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1g3ciwhlac85d6l2kqslw8pm4bjjd1z79m1c5ll0fxmr6awgpk67"))))
     (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")
+                            "src/core.c/Proc.pm6")
                (("/bin/sh") (which "sh")))
              #t))
+         (add-after 'unpack 'remove-failing-test
+           ;; One subtest fails for unknown reasons
+           (lambda _
+             (delete-file "t/09-moar/01-profilers.t")
+             #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")
+                       (string-append "--with-nqp=" nqp "/bin/nqp")
                        "--prefix" out))))
          ;; This is the recommended tool for distro maintainers to install perl6
          ;; modules systemwide.  See: https://github.com/ugexe/zef/issues/117
@@ -215,12 +213,12 @@ regular expression engine for the virtual machine.")
        ("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")))))
+     (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.")
-- 
2.30.0
A
A
Alexandru-Sergiu Marton wrote on 6 Feb 2021 22:35
[PATCH 3/4] gnu: nqp: Update to 2020.12.
(address . 46352@debbugs.gnu.org)(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)
20210206213511.11551-3-brown121407@posteo.ro
* gnu/packages/perl6.scm (nqp): Update to 2020.12.
---
gnu/packages/perl6.scm | 45 +++++++++++++++++-------------------------
1 file changed, 18 insertions(+), 27 deletions(-)

Toggle diff (78 lines)
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index 96d76dd417..3395d3a2ec 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -108,19 +108,22 @@ with native libraries.
 (define-public nqp
   (package
     (name "nqp")
-    (version "2019.03")
+    (version "2020.12")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://rakudo.perl6.org/downloads/nqp/nqp-"
-                            version ".tar.gz"))
-        (sha256
-         (base32
-          "183zhll13fx416s3hkg4bkvib77kyr857h0nydgrl643fpacxp83"))
-        (modules '((guix build utils)))
-        (snippet
-         '(begin
-            (delete-file-recursively "3rdparty") #t))))
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/Raku/nqp/releases/download/" version
+                           "/nqp-" version ".tar.gz"))
+       (sha256
+        (base32
+         "13h64d41fwggc3lg4bpllg4jrp64clm7nmnw4g2jyjl47cy5ni7x"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "3rdparty/asm")
+           (delete-file-recursively "3rdparty/jline")
+           (delete-file-recursively "3rdparty/jna")
+           #t))))
     (build-system perl-build-system)
     (arguments
      '(#:phases
@@ -131,33 +134,21 @@ with native libraries.
                             "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)))))))
+                       (string-append "--with-moar=" moar "/bin/moar")
+                       (string-append "--prefix=" out))))))))
     (inputs
      `(("moarvm" ,moarvm)))
-    (home-page "https://github.com/perl6/nqp")
+    (home-page "https://github.com/Raku/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
-- 
2.30.0
L
L
Ludovic Courtès wrote on 20 Mar 2021 22:03
Re: bug#46352: [PATCH 0/4] Update Raku (Perl 6)
(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)(address . 46352@debbugs.gnu.org)
87tup54jwz.fsf_-_@gnu.org
Hi,

Alexandru-Sergiu Marton <brown121407@posteo.ro> skribis:

Toggle quote (2 lines)
> * gnu/packages/c.scm (dyncall): New variable.

LGTM, except that it only builds static libraries.

Could we arrange to instead only build shared libraries, as we usually do?

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote on 20 Mar 2021 22:07
(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)(address . 46352@debbugs.gnu.org)
87k0q14jqe.fsf_-_@gnu.org
Hi,

Alexandru-Sergiu Marton <brown121407@posteo.ro> skribis:

Toggle quote (2 lines)
> * gnu/packages/perl6.scm (moarvm): Update to 2020.12.

[...]

Toggle quote (4 lines)
> - ;(delete-file-recursively "3rdparty/dynasm") ; JIT
> - (delete-file-recursively "3rdparty/dyncall")
> - (delete-file-recursively "3rdparty/freebsd")

Apparently the 1st and 3rd line here are removed.

Is 3rdparty/freebsd being used now? If there an opportunity for
unbundling? If not, that’s OK.

Regarding dynasm, I think it’s best to keep the line commented out as a
reminder of what’s left to unbundle, if that’s still applicable.

Nitpick: could you mention in the commit log the modified fields:
‘inputs’, ‘arguments’, and ‘source’. That often helps fellow reviewers
read the diff. :-)

BTW, said reviewers have been so slow that there’s apparently a newer
version available now. Apologies!

Thanks in advance,
Ludo’.
L
L
Ludovic Courtès wrote on 20 Mar 2021 22:08
(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)(address . 46352@debbugs.gnu.org)
87ft0p4jor.fsf_-_@gnu.org
Alexandru-Sergiu Marton <brown121407@posteo.ro> skribis:

Toggle quote (2 lines)
> * gnu/packages/perl6.scm (rakudo): Update to 2020.12.

LGTM! (I’ll wait for updates to the previous patches before applying
it.)

As mentioned before, please mention the new/remove phases in the commit
log.

Ludo’.
L
L
Ludovic Courtès wrote on 20 Mar 2021 22:10
(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)(address . 46352@debbugs.gnu.org)
87blbd4jm4.fsf_-_@gnu.org
Alexandru-Sergiu Marton <brown121407@posteo.ro> skribis:

Toggle quote (2 lines)
> * gnu/packages/perl6.scm (nqp): Update to 2020.12.

[...]

Toggle quote (3 lines)
> - '(begin
> - (delete-file-recursively "3rdparty") #t))))

[...]

Toggle quote (5 lines)
> + '(begin
> + (delete-file-recursively "3rdparty/asm")
> + (delete-file-recursively "3rdparty/jline")
> + (delete-file-recursively "3rdparty/jna")

This suggests we’re now using some of the bundled libraries. Could you
explain and at least add a comment mentioning what’s still bundled?

Please also mention the phase changes in the commit log.

Thanks in advance!

Ludo’.
A
A
Alexandru-Sergiu Marton wrote on 22 Mar 2021 10:04
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 46352@debbugs.gnu.org)
87y2efh84e.fsf@posteo.ro
Ludovic Courtès writes:

Toggle quote (3 lines)
> Is 3rdparty/freebsd being used now? If there an opportunity for
> unbundling? If not, that’s OK.

Don't really remember what was the deal with that, I'll investigate.

Toggle quote (3 lines)
> Regarding dynasm, I think it’s best to keep the line commented out as a
> reminder of what’s left to unbundle, if that’s still applicable.

Will do.

Toggle quote (4 lines)
> Nitpick: could you mention in the commit log the modified fields:
> ‘inputs’, ‘arguments’, and ‘source’. That often helps fellow reviewers
> read the diff. :-)

Sure.

Toggle quote (3 lines)
> BTW, said reviewers have been so slow that there’s apparently a newer
> version available now. Apologies!

No problem. I have some test recipes for the latest version on my
them into Guix proper and check the dependent packages when I have the
time the following weeks.

Cheers.

--
Alexandru-Sergiu Marton
L
L
Ludovic Courtès wrote on 23 Mar 2021 11:32
(name . Alexandru-Sergiu Marton)(address . brown121407@posteo.ro)(address . 46352@debbugs.gnu.org)
87blbanoss.fsf@gnu.org
Hi,

Alexandru-Sergiu Marton <brown121407@posteo.ro> skribis:

Toggle quote (5 lines)
> No problem. I have some test recipes for the latest version on my
> channel, https://git.sr.ht/~brown121407/guix-channel , I'll try to put
> them into Guix proper and check the dependent packages when I have the
> time the following weeks.

Excellent. Thanks and again apologies for the delay!

Ludo’.
?