GNU bug report logs - #75330
[PATCH v2] gnu: nim: Update to 2.2.2

Previous Next

Package: guix-patches;

Reported by: ashish.is <at> lostca.se

Date: Fri, 3 Jan 2025 23:41:02 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

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 75330 in the body.
You can then email your comments to 75330 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#75330; Package guix-patches. (Fri, 03 Jan 2025 23:41:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to ashish.is <at> lostca.se:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 03 Jan 2025 23:41:03 GMT) Full text and rfc822 format available.

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

From: ashish.is <at> lostca.se
To: guix-patches <at> gnu.org
Cc: Ashish SHUKLA <ashish.is <at> lostca.se>
Subject: [PATCH] gnu: nim: Update to 2.2.0.
Date: Fri,  3 Jan 2025 23:40:24 +0000
From: Ashish SHUKLA <ashish.is <at> lostca.se>

* gnu/packages/nim.scm (%atlas-commit, %sat-commit, atlas, sat): New
variables.
(nim): Update to 2.2.0. [arguments]: Use G-expressions. <#:phases>:
Add phase "copy-deps". Update phases "patch-installer",
"patch-dynamic-libraries", and "patch-more-shebangs".

Change-Id: Ibd8fdaf7f033755ada3e4638a9f3a9295cd5e3b2
---
 gnu/packages/nim.scm | 275 ++++++++++++++++++++++++++++---------------
 1 file changed, 180 insertions(+), 95 deletions(-)

diff --git a/gnu/packages/nim.scm b/gnu/packages/nim.scm
index ebcff26c7b..af2b8234a2 100644
--- a/gnu/packages/nim.scm
+++ b/gnu/packages/nim.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2022 (unmatched parenthesis <paren <at> disroot.org>
 ;;; Copyright © 2022 Trevor Richards <trev <at> trevdev.ca>
 ;;; Copyright © 2023 Gruruya <greytest <at> disroot.org>
+;;; Copyright © 2025 Ashish SHUKLA <ashish.is <at> lostca.se>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,8 @@
 (define-module (gnu packages nim)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (gnu packages bdw-gc)
@@ -34,119 +37,201 @@ (define-module (gnu packages nim)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls))
 
+;; referenced in koch.nim
+(define %atlas-commit "5faec3e9a33afe99a7d22377dd1b45a5391f5504")
+(define %sat-commit "faf1617f44d7632ee9601ebc13887644925dcc01")
+
+(define atlas
+  (origin
+    (method git-fetch)
+    (uri
+      (git-reference
+        (url "https://github.com/nim-lang/atlas.git")
+        (commit %atlas-commit)))
+    (sha256 (base32 "1yd3pcg46blkxfkpcvymfln44wgryq9v1mcxblqjhgfi0rvdjm0v"))))
+
+(define sat
+  (origin
+    (method git-fetch)
+    (uri
+      (git-reference
+        (url "https://github.com/nim-lang/sat.git")
+        (commit %sat-commit)))
+    (sha256 (base32 "1dxbc41wbvkpdp6q3qz1r38lpn32447qkkgyh2s12ym6bx4ynni4"))))
+
 (define-public nim
   (package
     (name "nim")
-    (version "1.6.12")
+    (version "2.2.0")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://nim-lang.org/download/"
                           name "-" version ".tar.xz"))
       (sha256
-       (base32 "1hjd9dxhqzn2ifr988li8q7v6kxpxlcqbdllfd6lsq3knw50pvxc"))))
+       (base32 "0g498iv2bbkjghf401g6zb548a0ggkgxl76xxj3y8q4pkj24566f"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f          ; TODO: Investigate tests failures.
        #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)          ; no configure script
-           (add-after 'unpack 'patch-installer
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (substitute* "install.sh"
-                  (("/usr/local") out)
-                  (("/lib/nim") "/lib")
-                  (("/opt/nimble") (string-append out "/share/nimble"))
-                  (("configdir=/etc/nim")
-                   (string-append "configdir=" out "/etc/nim"))))))
-           (add-after 'unpack 'patch-dynamic-libraries
-             (lambda* (#:key inputs native-inputs #:allow-other-keys)
-               ;(substitute* "compiler/nodejs.nim"
-               ;  (("nodejs")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/bin/nodejs"))
-               ;  (("node")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/bin/node")))
-               (substitute* "lib/system.nim"
-                 (("libgc\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libgc.so")))
-               ;(substitute* "lib/wrappers/mysql.nim"
-               ;  (("\(libmysqlclient|libmariadbclient\)\\.so")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/lib/libmariadbclient.so")))
-               (substitute* "lib/wrappers/openssl.nim"
-                 (("libssl\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libssl.so"))
-                 (("libcrypto\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libcrypto.so")))
-               (substitute* "lib/wrappers/pcre.nim"
-                 (("libpcre\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libpcre.so")))
-               ;(substitute* "lib/wrappers/postgres.nim"
-               ;  (("libpg\\.so")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/lib/libpg.so")))
-               (substitute* "lib/wrappers/sqlite3.nim"
-                 (("libsqlite3\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libsqlite3.so")))))
-           (add-after 'patch-source-shebangs 'patch-more-shebangs
-             (lambda _
-               (let ((sh (which "sh")))
+       ,#~(modify-phases %standard-phases
+             (delete 'configure)          ; no configure script
+             (add-after 'unpack 'copy-deps:www
+               (lambda _
+                 (copy-recursively #$atlas "dist/atlas"
+                                   #:keep-permissions? #f)
+                 (copy-recursively #$sat "dist/atlas/dist/sat"
+                                   #:keep-permissions? #f)))
+             (add-after 'unpack 'patch-installer
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (substitute* "install.sh"
+                    (("/usr/local") out)
+                    (("/lib/nim") "/lib")
+                    (("/opt/nimble") (string-append out "/share/nimble"))
+                    (("configdir=\"/etc/nim\"")
+                     (string-append "configdir=\"" out "/etc/nim\""))))))
+             (add-after 'unpack 'patch-dynamic-libraries
+               (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                 (substitute* "lib/system.nim"
+                   (("libgc\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libgc.so")))
+                 (substitute* "lib/wrappers/openssl.nim"
+                   (("libssl\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libssl.so"))
+                   (("libcrypto\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libcrypto.so")))
+                 (substitute* "lib/wrappers/pcre.nim"
+                   (("libpcre\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libpcre.so")))))
+             (add-after 'patch-source-shebangs 'patch-more-shebangs
+               (lambda _
+                 (use-modules (ice-9 rdelim))
+                 (use-modules (ice-9 regex))
+
+                 (define sh (which "sh"))
+                 (define sh-len (string-length sh))
+
+                 (define rx1 (make-regexp "^(.*NIM_CHAR data\\[)7(\\+1\\];.*)$" regexp/extended))
+                 ;; } TM__HZdw8BhppcTQo8DIK46LSg_5 = { 7 | NIM_STRLIT_FLAG, "/bin/sh" };
+                 (define rx2 (make-regexp
+                               (string-append "^(\\} )"
+                                               "([^[:space:]]+)"
+                                               "( = \\{ )"
+                                               "7"
+                                               "( [|] NIM_STRLIT_FLAG, )"
+                                               "\"/bin/sh\""
+                                               "(.*)$")
+                               regexp/extended))
+
+                 (define (fixup-1 matches out)
+                   (format out "~a~a~a\n"
+                           (match:substring matches 1)
+                           sh-len
+                           (match:substring matches 2))
+                   #f)
+
+                 (define (fixup-2 matches out)
+                   (format out "~a~a~a~a~a~s~a\n"
+                           (match:substring matches 1)
+                           (match:substring matches 2)
+                           (match:substring matches 3)
+                           sh-len
+                           (match:substring matches 4)
+                           sh
+                           (match:substring matches 5))
+                   (match:substring matches 2))
+
+                 (define fixups
+                   (list (cons rx1 fixup-1)
+                         (cons rx2 fixup-2)))
+
+                 (define (rx-match rx line in out)
+                   (if (null? rx)
+                       (begin
+                         (format out "~a\n" line)
+                         #f)
+
+                       (let ((matches (regexp-exec (caar rx) line)))
+                         (if (regexp-match? matches)
+                             ((cdar rx) matches out)
+                             (rx-match (cdr rx) line in out)))))
+
+                 (define (fixup-bin-sh-references in out)
+                   (let loop ((line (read-line in))
+                              (flagged #f))
+                     (let* ((pat (and (string? flagged)
+                                      (format #f "{7, (NimStrPayload*)&~a};" flagged)))
+                            (pat-len (if (string? pat) (string-length pat) 0)))
+                       (unless (eof-object? line)
+                         (if (and (string? pat) (string-suffix? pat line))
+                             (begin
+                               (format out
+                                       "~a{~a, (NimStrPayload*)&~a};\n"
+                                       (substring line 0
+                                                  (- (string-length line) pat-len))
+                                       sh-len
+                                       flagged)
+                               (loop (read-line in) flagged))
+
+                             (loop (read-line in)
+                                   (rx-match fixups line in out)))))))
+
                  (substitute* '("tests/stdlib/tosprocterminate.nim"
                                 "tests/stdlib/tstrscans.nim"
                                 "lib/pure/osproc.nim"
                                 "lib/pure/strscans.nim")
                    (("/bin/sh") sh))
-                 (substitute* (find-files "c_code" "@m\\.\\.@slib <at> spure <at> sosproc\\.nim\\.c")
-                   (("\"/bin/sh\", 7") (format #f "~s, ~s" sh (string-length sh)))))))
-           (replace 'build
-             (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
-               (setenv "XDG_CACHE_HOME" "./cache-home")
-               (setenv "HOME" "./cache-home")
-               (mkdir-p "./cache-home")
-               (invoke "sh" "build.sh"
-                       "--parallel"
-                       (if parallel-build?
-                         (number->string (parallel-job-count))
-                         "1"))
-               (sleep 5)        ; Wait for the parallel builds to finish.
-               (invoke "./bin/nim" "c" "-d:release" "koch")
-               (invoke "./koch" "boot" "-d:release")
-               (invoke "./koch" "tools")))
-           (replace 'check
-             (lambda* (#:key tests? #:allow-other-keys)
-               (when tests?
-                 (invoke "./koch" "tests"))))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-                 (mkdir-p bin)
-                 (invoke "./install.sh" bin)
-                 (for-each (lambda (file)
-                             (install-file file bin))
-                           (delete "testament" (find-files "bin"))))))
-           (add-after 'install 'install-completions
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((share (string-append (assoc-ref outputs "out") "/share"))
-                      (bash  (string-append share "/bash-completion/completions"))
-                      (zsh   (string-append share "/zsh/vendor_completions")))
-                 (mkdir-p bash)
-                 (mkdir-p zsh)
-                 (copy-file "tools/nim.bash-completion"
-                            (string-append bash "/nim"))
-                 (copy-file "dist/nimble/nimble.bash-completion"
-                            (string-append bash "/nimble"))
-                 (copy-file "tools/nim.zsh-completion"
-                            (string-append zsh "/_nim"))
-                 (copy-file "dist/nimble/nimble.bash-completion"
-                            (string-append zsh "/_nimble"))))))))
+
+                 (for-each (lambda (f)
+                             (with-atomic-file-replacement f fixup-bin-sh-references))
+                           (find-files "c_code" "@m\\.\\.@slib <at> spure <at> sosproc\\.nim\\.c"))))
+             (replace 'build
+               (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
+                 (setenv "XDG_CACHE_HOME" "./cache-home")
+                 (setenv "HOME" "./cache-home")
+                 (setenv "SHELL" (which "sh"))
+                 (mkdir-p "./cache-home")
+                 (invoke "sh" "build.sh"
+                         "--parallel"
+                         (if parallel-build?
+                           (number->string (parallel-job-count))
+                           "1"))
+                 (sleep 5)        ; Wait for the parallel builds to finish.
+                 (invoke "./bin/nim" "c" "-d:release" "koch")
+                 (invoke "./koch" "boot" "-d:release")
+                 (invoke "./koch" "tools")))
+             (replace 'check
+               (lambda* (#:key tests? #:allow-other-keys)
+                 (when tests?
+                   (invoke "./koch" "tests"))))
+             (replace 'install
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                   (mkdir-p bin)
+                   (invoke "./install.sh" bin)
+                   (for-each (lambda (file)
+                               (install-file file bin))
+                             (delete "testament" (find-files "bin"))))))
+             (add-after 'install 'install-completions
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
+                        (bash  (string-append share "/bash-completion/completions"))
+                        (zsh   (string-append share "/zsh/vendor_completions")))
+                   (mkdir-p bash)
+                   (mkdir-p zsh)
+                   (copy-file "tools/nim.bash-completion"
+                              (string-append bash "/nim"))
+                   (copy-file "dist/nimble/nimble.bash-completion"
+                              (string-append bash "/nimble"))
+                   (copy-file "tools/nim.zsh-completion"
+                              (string-append zsh "/_nim"))
+                   (copy-file "dist/nimble/nimble.bash-completion"
+                              (string-append zsh "/_nimble"))))))))
     (inputs (list libgc openssl pcre sqlite))
     (native-inputs (list nss-certs parallel))
     (home-page "https://nim-lang.org")

base-commit: 851c550290ee39ea8beeded60730f2da82b32e1c
-- 
2.47.1





Information forwarded to guix-patches <at> gnu.org:
bug#75330; Package guix-patches. (Sun, 23 Feb 2025 22:59:01 GMT) Full text and rfc822 format available.

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

From: Ludovic Courtès <ludo <at> gnu.org>
To: ashish.is <at> lostca.se
Cc: 75330 <at> debbugs.gnu.org
Subject: Re: [bug#75330] [PATCH] gnu: nim: Update to 2.2.0.
Date: Sun, 23 Feb 2025 23:58:00 +0100
Hi,

ashish.is <at> lostca.se skribis:

> From: Ashish SHUKLA <ashish.is <at> lostca.se>
>
> * gnu/packages/nim.scm (%atlas-commit, %sat-commit, atlas, sat): New
> variables.
> (nim): Update to 2.2.0. [arguments]: Use G-expressions. <#:phases>:
> Add phase "copy-deps". Update phases "patch-installer",
> "patch-dynamic-libraries", and "patch-more-shebangs".
>
> Change-Id: Ibd8fdaf7f033755ada3e4638a9f3a9295cd5e3b2

[...]

> +;; referenced in koch.nim
> +(define %atlas-commit "5faec3e9a33afe99a7d22377dd1b45a5391f5504")
> +(define %sat-commit "faf1617f44d7632ee9601ebc13887644925dcc01")

Since there’s only one reference to each of these variables, I think the
commit ID can go directly in the ‘commit’ field, without defining these
variables.

> +             (add-after 'unpack 'copy-deps:www
> +               (lambda _
> +                 (copy-recursively #$atlas "dist/atlas"
> +                                   #:keep-permissions? #f)
> +                 (copy-recursively #$sat "dist/atlas/dist/sat"
> +                                   #:keep-permissions? #f)))

Could you add a ‘file-name to ‘atlas’ and ‘sat’, add the both to
‘inputs’ of this package, and then refer to them in this phase like so:

  (copy-recursively #$(this-package-input "atlas-checkout") "dist/atlas"
                    #:keep-permissions? #f)

… where “atlas-checkout” must match the ‘file-name’ field of ‘atlas’.

That way, those inputs are visible to code the traverses the package
graph.

> +             (add-after 'patch-source-shebangs 'patch-more-shebangs
> +               (lambda _
> +                 (use-modules (ice-9 rdelim))
> +                 (use-modules (ice-9 regex))

Please use the #:modules parameters instead of ‘use-modules’ in the
middle of the phase.

> +                 (define sh (which "sh"))
> +                 (define sh-len (string-length sh))
> +
> +                 (define rx1 (make-regexp "^(.*NIM_CHAR data\\[)7(\\+1\\];.*)$" regexp/extended))
> +                 ;; } TM__HZdw8BhppcTQo8DIK46LSg_5 = { 7 | NIM_STRLIT_FLAG, "/bin/sh" };
> +                 (define rx2 (make-regexp
> +                               (string-append "^(\\} )"
> +                                               "([^[:space:]]+)"
> +                                               "( = \\{ )"
> +                                               "7"
> +                                               "( [|] NIM_STRLIT_FLAG, )"
> +                                               "\"/bin/sh\""
> +                                               "(.*)$")
> +                               regexp/extended))
> +
> +                 (define (fixup-1 matches out)
> +                   (format out "~a~a~a\n"
> +                           (match:substring matches 1)
> +                           sh-len
> +                           (match:substring matches 2))
> +                   #f)
> +
> +                 (define (fixup-2 matches out)
> +                   (format out "~a~a~a~a~a~s~a\n"
> +                           (match:substring matches 1)
> +                           (match:substring matches 2)
> +                           (match:substring matches 3)
> +                           sh-len
> +                           (match:substring matches 4)
> +                           sh
> +                           (match:substring matches 5))
> +                   (match:substring matches 2))
> +
> +                 (define fixups
> +                   (list (cons rx1 fixup-1)
> +                         (cons rx2 fixup-2)))

I think this whole part could use some comments, at the very least for
the cryptic ‘rx1’.

> +                 (define (rx-match rx line in out)
> +                   (if (null? rx)
> +                       (begin
> +                         (format out "~a\n" line)
> +                         #f)
> +
> +                       (let ((matches (regexp-exec (caar rx) line)))
> +                         (if (regexp-match? matches)
> +                             ((cdar rx) matches out)
> +                             (rx-match (cdr rx) line in out)))))

Please use ‘match’ instead of cdar & co. (info "(guix) Data Types and
Pattern Matching").

Apart from that LGTM.

Could you send an updated patch?

Thanks,
Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#75330; Package guix-patches. (Mon, 24 Feb 2025 22:30:02 GMT) Full text and rfc822 format available.

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

From: ashish.is <at> lostca.se
To: ludo <at> gnu.org
Cc: 75330 <at> debbugs.gnu.org, Ashish SHUKLA <ashish.is <at> lostca.se>
Subject: [PATCH v2] gnu: nim: Update to 2.2.2
Date: Mon, 24 Feb 2025 22:27:35 +0000
From: Ashish SHUKLA <ashish.is <at> lostca.se>

* gnu/packages/nim.scm (atlas, sat): New variables.
(nim): Update to 2.2.0. [arguments]: Use G-expressions.
<#:modules> Import modules used by phases. <#:phases>:
Add phase "copy-deps". Update phases "patch-installer",
"patch-dynamic-libraries", and "patch-more-shebangs".

Change-Id: I3f88dd6a3b78699e91e59b23ededf9f1923eb721
---
Hi,

Thanks for the helpful review. I hope I addressed all of the concerns, and while here, I also updatd it to 2.2.2.

 gnu/packages/nim.scm | 285 ++++++++++++++++++++++++++++---------------
 1 file changed, 189 insertions(+), 96 deletions(-)

diff --git a/gnu/packages/nim.scm b/gnu/packages/nim.scm
index ebcff26c7b..90ce4a7134 100644
--- a/gnu/packages/nim.scm
+++ b/gnu/packages/nim.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2022 (unmatched parenthesis <paren <at> disroot.org>
 ;;; Copyright © 2022 Trevor Richards <trev <at> trevdev.ca>
 ;;; Copyright © 2023 Gruruya <greytest <at> disroot.org>
+;;; Copyright © 2025 Ashish SHUKLA <ashish.is <at> lostca.se>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,8 @@
 (define-module (gnu packages nim)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (gnu packages bdw-gc)
@@ -34,120 +37,210 @@ (define-module (gnu packages nim)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls))
 
+(define atlas
+  (origin
+    (method git-fetch)
+    (file-name "atlas-checkout")
+    (uri
+     (git-reference
+      (url "https://github.com/nim-lang/atlas.git")
+      ;; referenced in koch.nim
+      (commit "5faec3e9a33afe99a7d22377dd1b45a5391f5504")))
+    (sha256 (base32 "1yd3pcg46blkxfkpcvymfln44wgryq9v1mcxblqjhgfi0rvdjm0v"))))
+
+(define sat
+  (origin
+    (method git-fetch)
+    (file-name "sat-checkout")
+    (uri
+     (git-reference
+      (url "https://github.com/nim-lang/sat.git")
+      ;; referenced in koch.nim
+      (commit "faf1617f44d7632ee9601ebc13887644925dcc01")))
+    (sha256 (base32 "1dxbc41wbvkpdp6q3qz1r38lpn32447qkkgyh2s12ym6bx4ynni4"))))
+
 (define-public nim
   (package
     (name "nim")
-    (version "1.6.12")
+    (version "2.2.2")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://nim-lang.org/download/"
                           name "-" version ".tar.xz"))
       (sha256
-       (base32 "1hjd9dxhqzn2ifr988li8q7v6kxpxlcqbdllfd6lsq3knw50pvxc"))))
+       (base32 "07wazlsj3yby4vb008b2rairdkl0hhnnxhpxi6jaa2wwmj3rpk3z"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f          ; TODO: Investigate tests failures.
+       #:modules
+       ((ice-9 rdelim)
+        (ice-9 regex)
+        (ice-9 match)
+        ,@%default-gnu-modules)
        #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)          ; no configure script
-           (add-after 'unpack 'patch-installer
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (substitute* "install.sh"
-                  (("/usr/local") out)
-                  (("/lib/nim") "/lib")
-                  (("/opt/nimble") (string-append out "/share/nimble"))
-                  (("configdir=/etc/nim")
-                   (string-append "configdir=" out "/etc/nim"))))))
-           (add-after 'unpack 'patch-dynamic-libraries
-             (lambda* (#:key inputs native-inputs #:allow-other-keys)
-               ;(substitute* "compiler/nodejs.nim"
-               ;  (("nodejs")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/bin/nodejs"))
-               ;  (("node")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/bin/node")))
-               (substitute* "lib/system.nim"
-                 (("libgc\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libgc.so")))
-               ;(substitute* "lib/wrappers/mysql.nim"
-               ;  (("\(libmysqlclient|libmariadbclient\)\\.so")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/lib/libmariadbclient.so")))
-               (substitute* "lib/wrappers/openssl.nim"
-                 (("libssl\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libssl.so"))
-                 (("libcrypto\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libcrypto.so")))
-               (substitute* "lib/wrappers/pcre.nim"
-                 (("libpcre\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libpcre.so")))
-               ;(substitute* "lib/wrappers/postgres.nim"
-               ;  (("libpg\\.so")
-               ;   (search-input-file (or native-inputs inputs)
-               ;                      "/lib/libpg.so")))
-               (substitute* "lib/wrappers/sqlite3.nim"
-                 (("libsqlite3\\.so")
-                  (search-input-file (or native-inputs inputs)
-                                     "/lib/libsqlite3.so")))))
-           (add-after 'patch-source-shebangs 'patch-more-shebangs
-             (lambda _
-               (let ((sh (which "sh")))
+       ,#~(modify-phases %standard-phases
+             (delete 'configure)          ; no configure script
+             (add-after 'unpack 'copy-deps:www
+               (lambda _
+                 (copy-recursively #$(this-package-input "atlas-checkout") "dist/atlas"
+                                   #:keep-permissions? #f)
+                 (copy-recursively #$(this-package-input "sat-checkout") "dist/atlas/dist/sat"
+                                   #:keep-permissions? #f)))
+             (add-after 'unpack 'patch-installer
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (substitute* "install.sh"
+                    (("/usr/local") out)
+                    (("/lib/nim") "/")
+                    (("/opt/nimble") (string-append out "/share/nimble"))
+                    (("configdir=\"/etc/nim\"")
+                     (string-append "configdir=\"" out "/etc/nim\""))))))
+             (add-after 'unpack 'patch-dynamic-libraries
+               (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                 (substitute* "lib/system.nim"
+                   (("libgc\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libgc.so")))
+                 (substitute* "lib/wrappers/openssl.nim"
+                   (("libssl\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libssl.so"))
+                   (("libcrypto\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libcrypto.so")))
+                 (substitute* "lib/wrappers/pcre.nim"
+                   (("libpcre\\.so")
+                    (search-input-file (or native-inputs inputs)
+                                       "/lib/libpcre.so")))))
+             (add-after 'patch-source-shebangs 'patch-more-shebangs
+               (lambda _
+
+                 (define sh (which "sh"))
+                 (define sh-len (string-length sh))
+
+                 (define rx1 (make-regexp "^(.*NIM_CHAR data\\[)7(\\+1\\];.*)$" regexp/extended))
+                 ;; } TM__HZdw8BhppcTQo8DIK46LSg_5 = { 7 | NIM_STRLIT_FLAG, "/bin/sh" };
+                 (define rx2 (make-regexp
+                               (string-append "^(\\} )"
+                                               "([^[:space:]]+)"
+                                               "( = \\{ )"
+                                               "7"
+                                               "( [|] NIM_STRLIT_FLAG, )"
+                                               "\"/bin/sh\""
+                                               "(.*)$")
+                               regexp/extended))
+
+                 (define (fixup-1 matches out)
+                   (format out "~a~a~a\n"
+                           ;;   NI cap; NIM_CHAR data[(string-length (which "sh"))+1];
+                           (match:substring matches 1)  ;; NI cap; NIM_CHAR data[
+                           sh-len                       ;; (string-length (which "sh")
+                           (match:substring matches 2)) ;; +1];
+                   #f)
+
+                 (define (fixup-2 matches out)
+                   (format out "~a~a~a~a~a~s~a\n"
+                           ;; } TM__HZdw8BhppcTQo8DIK46LSg_5 = { (string-length (which "sh")) | NIM_STRLIT_FLAG, (which "sh") };
+                           (match:substring matches 1)  ;; }
+                           (match:substring matches 2)  ;; TM__HZdw8BhppcTQo8DIK46LSg_5
+                           (match:substring matches 3)  ;; = {
+                           sh-len                       ;; (string-length (which "sh"))
+                           (match:substring matches 4)  ;; | NIM_STRLIT_FLAG,
+                           sh                           ;; (which "sh")
+                           (match:substring matches 5)) ;; };
+                   ;; return a reference to patch
+                   (match:substring matches 2)) ;; TM__HZdw8BhppcTQo8DIK46LSg_5
+
+                 (define fixups
+                   (list (list rx1 fixup-1)
+                         (list rx2 fixup-2)))
+
+                 (define (rx-match rx-list line in out)
+                   (if (null? rx-list)
+                       (begin
+                         (format out "~a\n" line)
+                         #f)
+
+                       (match rx-list
+                         (((rx fixup) . rest)
+                          (let ((matches (regexp-exec rx line)))
+                            (if (regexp-match? matches)
+                                (fixup matches out)
+                                (rx-match rest line in out)))))))
+
+                 (define (fixup-bin-sh-references in out)
+                   (let loop ((line (read-line in))
+                              (flagged #f))
+                     (let* ((pat (and (string? flagged)
+                                      (format #f "{7, (NimStrPayload*)&~a};" flagged)))
+                            (pat-len (if (string? pat) (string-length pat) 0)))
+                       (unless (eof-object? line)
+                         (if (and (string? pat) (string-suffix? pat line))
+                             (begin
+                               (format out
+                                       "~a{~a, (NimStrPayload*)&~a};\n"
+                                       (substring line 0
+                                                  (- (string-length line) pat-len))
+                                       sh-len
+                                       flagged)
+                               (loop (read-line in) flagged))
+
+                             (loop (read-line in)
+                                   (rx-match fixups line in out)))))))
+
                  (substitute* '("tests/stdlib/tosprocterminate.nim"
                                 "tests/stdlib/tstrscans.nim"
                                 "lib/pure/osproc.nim"
                                 "lib/pure/strscans.nim")
                    (("/bin/sh") sh))
-                 (substitute* (find-files "c_code" "@m\\.\\.@slib <at> spure <at> sosproc\\.nim\\.c")
-                   (("\"/bin/sh\", 7") (format #f "~s, ~s" sh (string-length sh)))))))
-           (replace 'build
-             (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
-               (setenv "XDG_CACHE_HOME" "./cache-home")
-               (setenv "HOME" "./cache-home")
-               (mkdir-p "./cache-home")
-               (invoke "sh" "build.sh"
-                       "--parallel"
-                       (if parallel-build?
-                         (number->string (parallel-job-count))
-                         "1"))
-               (sleep 5)        ; Wait for the parallel builds to finish.
-               (invoke "./bin/nim" "c" "-d:release" "koch")
-               (invoke "./koch" "boot" "-d:release")
-               (invoke "./koch" "tools")))
-           (replace 'check
-             (lambda* (#:key tests? #:allow-other-keys)
-               (when tests?
-                 (invoke "./koch" "tests"))))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-                 (mkdir-p bin)
-                 (invoke "./install.sh" bin)
-                 (for-each (lambda (file)
-                             (install-file file bin))
-                           (delete "testament" (find-files "bin"))))))
-           (add-after 'install 'install-completions
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((share (string-append (assoc-ref outputs "out") "/share"))
-                      (bash  (string-append share "/bash-completion/completions"))
-                      (zsh   (string-append share "/zsh/vendor_completions")))
-                 (mkdir-p bash)
-                 (mkdir-p zsh)
-                 (copy-file "tools/nim.bash-completion"
-                            (string-append bash "/nim"))
-                 (copy-file "dist/nimble/nimble.bash-completion"
-                            (string-append bash "/nimble"))
-                 (copy-file "tools/nim.zsh-completion"
-                            (string-append zsh "/_nim"))
-                 (copy-file "dist/nimble/nimble.bash-completion"
-                            (string-append zsh "/_nimble"))))))))
-    (inputs (list libgc openssl pcre sqlite))
+
+                 (for-each (lambda (f)
+                             (with-atomic-file-replacement f fixup-bin-sh-references))
+                           (find-files "c_code" "@m\\.\\.@slib <at> spure <at> sosproc\\.nim\\.c"))))
+             (replace 'build
+               (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
+                 (setenv "XDG_CACHE_HOME" "./cache-home")
+                 (setenv "HOME" "./cache-home")
+                 (setenv "SHELL" (which "sh"))
+                 (mkdir-p "./cache-home")
+                 (invoke "sh" "build.sh"
+                         "--parallel"
+                         (if parallel-build?
+                           (number->string (parallel-job-count))
+                           "1"))
+                 (sleep 5)        ; Wait for the parallel builds to finish.
+                 (invoke "./bin/nim" "c" "-d:release" "koch")
+                 (invoke "./koch" "boot" "-d:release")
+                 (invoke "./koch" "tools")))
+             (replace 'check
+               (lambda* (#:key tests? #:allow-other-keys)
+                 (when tests?
+                   (invoke "./koch" "tests"))))
+             (replace 'install
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                   (mkdir-p bin)
+                   (invoke "./install.sh" bin)
+                   (for-each (lambda (file)
+                               (install-file file bin))
+                             (delete "testament" (find-files "bin"))))))
+             (add-after 'install 'install-completions
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
+                        (bash  (string-append share "/bash-completion/completions"))
+                        (zsh   (string-append share "/zsh/vendor_completions")))
+                   (mkdir-p bash)
+                   (mkdir-p zsh)
+                   (copy-file "tools/nim.bash-completion"
+                              (string-append bash "/nim"))
+                   (copy-file "dist/nimble/nimble.bash-completion"
+                              (string-append bash "/nimble"))
+                   (copy-file "tools/nim.zsh-completion"
+                              (string-append zsh "/_nim"))
+                   (copy-file "dist/nimble/nimble.bash-completion"
+                              (string-append zsh "/_nimble"))))))))
+    (inputs (list atlas libgc openssl pcre sat sqlite))
     (native-inputs (list nss-certs parallel))
     (home-page "https://nim-lang.org")
     (synopsis "Statically-typed, imperative programming language")

base-commit: e08dd8c33a38d692d7754c1061e30a24928e23a9
-- 
2.48.1





Changed bug title to '[PATCH v2] gnu: nim: Update to 2.2.2' from '[PATCH] gnu: nim: Update to 2.2.0.' Request was from "Ashish SHUKLA" <ashish.is <at> lostca.se> to control <at> debbugs.gnu.org. (Mon, 24 Feb 2025 22:31:02 GMT) Full text and rfc822 format available.

Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Wed, 26 Mar 2025 21:34:02 GMT) Full text and rfc822 format available.

Notification sent to ashish.is <at> lostca.se:
bug acknowledged by developer. (Wed, 26 Mar 2025 21:34:02 GMT) Full text and rfc822 format available.

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

From: Ludovic Courtès <ludo <at> gnu.org>
To: ashish.is <at> lostca.se
Cc: 75330-done <at> debbugs.gnu.org
Subject: Re: bug#75330: [PATCH v2] gnu: nim: Update to 2.2.2
Date: Wed, 26 Mar 2025 22:33:04 +0100
ashish.is <at> lostca.se skribis:

> From: Ashish SHUKLA <ashish.is <at> lostca.se>
>
> * gnu/packages/nim.scm (atlas, sat): New variables.
> (nim): Update to 2.2.0. [arguments]: Use G-expressions.
> <#:modules> Import modules used by phases. <#:phases>:
> Add phase "copy-deps". Update phases "patch-installer",
> "patch-dynamic-libraries", and "patch-more-shebangs".
>
> Change-Id: I3f88dd6a3b78699e91e59b23ededf9f1923eb721
> ---
> Hi,
>
> Thanks for the helpful review. I hope I addressed all of the concerns, and while here, I also updatd it to 2.2.2.

Yup.  Applied, thanks!

Ludo'.




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

This bug report was last modified 57 days ago.

Previous Next


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