[PATCH] gnu: nim: Update to 2.2.0.

  • Open
  • quality assurance status badge
Details
One participant
  • ashish.is
Owner
unassigned
Submitted by
ashish.is
Severity
normal
A
A
ashish.is wrote 6 days ago
(address . guix-patches@gnu.org)(name . Ashish SHUKLA)(address . ashish.is@lostca.se)
dd724ba8a4e2c3938ad5b4ada563dfc711638650.1735947624.git.ashish.is@lostca.se
From: Ashish SHUKLA <ashish.is@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(-)

Toggle diff (322 lines)
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@disroot.org>
;;; Copyright © 2022 Trevor Richards <trev@trevdev.ca>
;;; Copyright © 2023 Gruruya <greytest@disroot.org>
+;;; Copyright © 2025 Ashish SHUKLA <ashish.is@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@spure@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@spure@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
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 75330@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 75330
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch