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: 75330 <at> debbugs.gnu.org Cc: Ashish SHUKLA <ashish.is <at> lostca.se> Subject: [bug#75330] [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
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.