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.
View this message in rfc822 format
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: [bug#75330] [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
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.