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.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#75330: closed ([PATCH v2] gnu: nim: Update to 2.2.2)
Date: Wed, 26 Mar 2025 21:34:02 +0000
[Message part 1 (text/plain, inline)]
Your message dated Wed, 26 Mar 2025 22:33:04 +0100
with message-id <87msd7jx4f.fsf_-_ <at> gnu.org>
and subject line Re: bug#75330: [PATCH v2] gnu: nim: Update to 2.2.2
has caused the debbugs.gnu.org bug report #75330,
regarding [PATCH v2] gnu: nim: Update to 2.2.2
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
75330: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=75330
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
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



[Message part 3 (message/rfc822, inline)]
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'.


This bug report was last modified 58 days ago.

Previous Next


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