From: "ashish.is--- via Guix-patches" via <guix-patches@gnu.org>
To: 75330@debbugs.gnu.org
Cc: Ashish SHUKLA <ashish.is@lostca.se>
Subject: [bug#75330] [PATCH] gnu: nim: Update to 2.2.0.
Date: Fri, 3 Jan 2025 23:40:24 +0000 [thread overview]
Message-ID: <dd724ba8a4e2c3938ad5b4ada563dfc711638650.1735947624.git.ashish.is@lostca.se> (raw)
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(-)
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
reply other threads:[~2025-01-03 23:41 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=dd724ba8a4e2c3938ad5b4ada563dfc711638650.1735947624.git.ashish.is@lostca.se \
--to=guix-patches@gnu.org \
--cc=75330@debbugs.gnu.org \
--cc=ashish.is@lostca.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.