Index: Makefile =================================================================== RCS file: /cvs/ports/lang/nim/Makefile,v retrieving revision 1.28 diff -u -p -r1.28 Makefile --- Makefile 17 Sep 2026 17:31:35 -0000 1.28 +++ Makefile 3 Oct 2026 11:40:07 -0000 @@ -2,9 +2,8 @@ ONLY_FOR_ARCHS = amd64 arm64 i386 COMMENT = statically typed systems programming language -DISTNAME = nim-2.2.10 +DISTNAME = nim-2.2.12 EXTRACT_SUFX = .tar.xz -REVISION = 0 CATEGORIES = lang @@ -13,20 +12,11 @@ SITES = ${HOMEPAGE}download/ MAINTAINER = Alfred Morgan -NIMBLE_CHECKSUMS_V = f8f6bd34bfa3fe12c64b919059ad856a96efcba0 -NIMBLE_ZIPPY_V = a99f6a7d8a8e3e0213b3cad0daf0ea974bf58e3f -NIMBLE_CHRONOS_V = 0646c444fce7c7ed08ef6f2c9a7abfd172ffe655 -NIMBLE_RESULTS_V = df8113dda4c2d74d460a8fa98252b0b771bf1f27 -NIMBLE_STEW_V = b66168735d6f3841c5239c3169d3fe5fe98b1257 +NIMBLE_CHRONOS_V = 536169b4ab6b7772f57993284331b7de716b6e99 -DIST_TUPLE = github nim-lang atlas 0.14.7 . -DIST_TUPLE += github nim-lang nimble 42ef70c2102a942c46f13eb76872326edd525cec . +DIST_TUPLE = github nim-lang atlas 0.16.3 . +DIST_TUPLE += github nim-lang nimble v0.26.0 . DIST_TUPLE += github status-im nim-chronos ${NIMBLE_CHRONOS_V} . -DIST_TUPLE += github arnetheduck nim-results ${NIMBLE_RESULTS_V} . -DIST_TUPLE += github status-im nim-stew ${NIMBLE_STEW_V} . -DIST_TUPLE += github nim-lang sat e63eaea8baf00bed8bcd5a29ffd8823abb265b39 . -DIST_TUPLE += github nim-lang checksums ${NIMBLE_CHECKSUMS_V} . -DIST_TUPLE += github guzba zippy ${NIMBLE_ZIPPY_V} . # MIT, BSD, Apache 2.0 PERMIT_PACKAGE = Yes @@ -49,26 +39,16 @@ TEST_DEPENDS = archivers/7zip,-main \ SUBST_VARS += CFLAGS post-extract: + # Reuse bundled dependencies except for Nimble's updated Chronos revision. + rm -R ${WRKDIR}/nimble-*/vendor + mv ${WRKDIST}/dist/nimble/vendor ${WRKDIR}/nimble-*/ rm -R ${WRKDIST}/dist/nimble - rm -R ${WRKDIST}/dist/checksums mv ${WRKDIR}/nimble-* ${WRKDIST}/dist/nimble - rm -R ${WRKDIST}/dist/nimble/vendor/{checksums,chronos,results,stew,zippy} - cp -r ${WRKDIR}/checksums-${NIMBLE_CHECKSUMS_V} \ - ${WRKDIST}/dist/nimble/vendor/checksums - mv ${WRKDIR}/nim-chronos-${NIMBLE_CHRONOS_V} \ - ${WRKDIST}/dist/nimble/vendor/chronos - mv ${WRKDIR}/nim-results-${NIMBLE_RESULTS_V} \ - ${WRKDIST}/dist/nimble/vendor/results - mv ${WRKDIR}/nim-stew-${NIMBLE_STEW_V} \ - ${WRKDIST}/dist/nimble/vendor/stew - mv ${WRKDIR}/zippy-${NIMBLE_ZIPPY_V} \ - ${WRKDIST}/dist/nimble/vendor/zippy - cp -r ${WRKDIR}/sat-*/* \ - ${WRKDIST}/dist/nimble/vendor/sat/ - mv ${WRKDIR}/checksums-* ${WRKDIST}/dist/checksums + rm -R ${WRKDIST}/dist/nimble/vendor/chronos + mv ${WRKDIR}/nim-chronos-* ${WRKDIST}/dist/nimble/vendor/chronos mv ${WRKDIR}/atlas-* ${WRKDIST}/dist/atlas mkdir -p ${WRKDIST}/dist/atlas/dist - mv ${WRKDIR}/sat-* ${WRKDIST}/dist/atlas/dist/sat + cp -R ${WRKDIST}/dist/nimble/vendor/sat ${WRKDIST}/dist/atlas/dist/sat post-patch: mkdir -p ${WRKSRC}/nimcache-port Index: distinfo =================================================================== RCS file: /cvs/ports/lang/nim/distinfo,v retrieving revision 1.12 diff -u -p -r1.12 distinfo --- distinfo 17 Jul 2026 00:54:38 -0000 1.12 +++ distinfo 3 Oct 2026 11:40:07 -0000 @@ -1,18 +1,8 @@ -SHA256 (arnetheduck-nim-results-df8113dda4c2d74d460a8fa98252b0b771bf1f27.tar.gz) = UtR71LY9UYHWk0Mwd0rx+nXxYH2YzGfLb0uIKjfc8Yc= -SHA256 (guzba-zippy-a99f6a7d8a8e3e0213b3cad0daf0ea974bf58e3f.tar.gz) = TmlLHmmbJYmlMcgfY/AWT1AKX1K9EF7PRXLeqYLx2ms= -SHA256 (nim-2.2.10.tar.xz) = eVe37QBCBrzxC8xPO0dEFTh45i8kMVUqmo6dP0Do1dU= -SHA256 (nim-lang-atlas-0.14.7.tar.gz) = rnH51fTA98LlbcUgkSiJniXh6gIPk9kt5N5ru6TadNk= -SHA256 (nim-lang-checksums-f8f6bd34bfa3fe12c64b919059ad856a96efcba0.tar.gz) = nNBiWuiGDtHWogz/PauBMlqSPCd4n8K+2CYlp8V2OXU= -SHA256 (nim-lang-nimble-42ef70c2102a942c46f13eb76872326edd525cec.tar.gz) = PyTiH5jxAkcigZIwV95spkEuIRqM9VJp8WEPrH5NdvA= -SHA256 (nim-lang-sat-e63eaea8baf00bed8bcd5a29ffd8823abb265b39.tar.gz) = CEZgfiHMKYDOaDJfw7Ssvy6+THTLxe4cRZ+8Krr3KFY= -SHA256 (status-im-nim-chronos-0646c444fce7c7ed08ef6f2c9a7abfd172ffe655.tar.gz) = 1ZtM8tzIA6Mz2c0pWwd5QFaAVj7CB5VqLmSNbzfrMTY= -SHA256 (status-im-nim-stew-b66168735d6f3841c5239c3169d3fe5fe98b1257.tar.gz) = XDu+cFL6ktOZcIhLmhSVEHpQUB2Ikw5fqUPuuovssgM= -SIZE (arnetheduck-nim-results-df8113dda4c2d74d460a8fa98252b0b771bf1f27.tar.gz) = 24169 -SIZE (guzba-zippy-a99f6a7d8a8e3e0213b3cad0daf0ea974bf58e3f.tar.gz) = 29504190 -SIZE (nim-2.2.10.tar.xz) = 8287652 -SIZE (nim-lang-atlas-0.14.7.tar.gz) = 160612 -SIZE (nim-lang-checksums-f8f6bd34bfa3fe12c64b919059ad856a96efcba0.tar.gz) = 47503 -SIZE (nim-lang-nimble-42ef70c2102a942c46f13eb76872326edd525cec.tar.gz) = 772179 -SIZE (nim-lang-sat-e63eaea8baf00bed8bcd5a29ffd8823abb265b39.tar.gz) = 10245 -SIZE (status-im-nim-chronos-0646c444fce7c7ed08ef6f2c9a7abfd172ffe655.tar.gz) = 297162 -SIZE (status-im-nim-stew-b66168735d6f3841c5239c3169d3fe5fe98b1257.tar.gz) = 117078 +SHA256 (nim-2.2.12.tar.xz) = Jjmgal6np/z1ffHn4e9NGyvuWMesm9ANvSqlvqHlpWo= +SHA256 (nim-lang-atlas-0.16.3.tar.gz) = pQG5wWgd2ZNn4vw7GUXeUTgiVKZa87kS8jhRNd0fBGs= +SHA256 (nim-lang-nimble-v0.26.0.tar.gz) = p0fgqocZNg+Fj7Ady+cW91VHQmogtkzGv1mTTULSm10= +SHA256 (status-im-nim-chronos-536169b4ab6b7772f57993284331b7de716b6e99.tar.gz) = 7tK1X7tOwzFHenM1O5wfLoBO5fMDnw8OkFZDRAFeO2Y= +SIZE (nim-2.2.12.tar.xz) = 10259940 +SIZE (nim-lang-atlas-0.16.3.tar.gz) = 206062 +SIZE (nim-lang-nimble-v0.26.0.tar.gz) = 893733 +SIZE (status-im-nim-chronos-536169b4ab6b7772f57993284331b7de716b6e99.tar.gz) = 698219 Index: patches/patch-dist_nimble_src_nimblepkg_downloadnim_nim =================================================================== RCS file: patches/patch-dist_nimble_src_nimblepkg_downloadnim_nim diff -N patches/patch-dist_nimble_src_nimblepkg_downloadnim_nim --- patches/patch-dist_nimble_src_nimblepkg_downloadnim_nim 17 Jul 2026 00:54:38 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,46 +0,0 @@ -Index: dist/nimble/src/nimblepkg/downloadnim.nim ---- dist/nimble/src/nimblepkg/downloadnim.nim.orig -+++ dist/nimble/src/nimblepkg/downloadnim.nim -@@ -114,25 +114,26 @@ proc isAppleSilicon*(): bool = - - proc getPlatformString*(arch: int): string = - ## Returns the platform string used in releases.json (e.g., "linux_x64", "macosx_arm64") -- let os = -- when defined(windows): -- "windows" -- elif defined(linux): -- "linux" -- elif defined(macosx): -- "macosx" -- else: -- # For other platforms, fall back to source -- return "source_tar" -+ when defined(windows) or defined(linux) or defined(macosx): -+ let os = -+ when defined(windows): -+ "windows" -+ elif defined(linux): -+ "linux" -+ else: -+ "macosx" - -- when defined(macosx): -- if isAppleSilicon(): -- return os & "_arm64" -+ when defined(macosx): -+ if isAppleSilicon(): -+ return os & "_arm64" -+ else: -+ return os & "_x64" - else: -- return os & "_x64" -+ # For Windows and Linux -+ return os & "_x" & $arch - else: -- # For Windows and Linux -- return os & "_x" & $arch -+ # For other platforms, fall back to source -+ return "source_tar" - - proc getNightliesUrl*(parsedContents: JsonNode, arch: int): (string, string) = - let os = Index: patches/patch-dist_nimble_vendor_bearssl_bearssl_abi_bearssl_ssl_nim =================================================================== RCS file: patches/patch-dist_nimble_vendor_bearssl_bearssl_abi_bearssl_ssl_nim diff -N patches/patch-dist_nimble_vendor_bearssl_bearssl_abi_bearssl_ssl_nim --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-dist_nimble_vendor_bearssl_bearssl_abi_bearssl_ssl_nim 3 Oct 2026 11:40:07 -0000 @@ -0,0 +1,35 @@ +Match BearSSL's size_t output parameters instead of Nim's native uint. + +Index: dist/nimble/vendor/bearssl/bearssl/abi/bearssl_ssl.nim +--- dist/nimble/vendor/bearssl/bearssl/abi/bearssl_ssl.nim.orig ++++ dist/nimble/vendor/bearssl/bearssl/abi/bearssl_ssl.nim +@@ -823,25 +823,25 @@ proc sslEngineLastError*(cc: var SslEngineContext): ci + return cc.err + + +-proc sslEngineSendappBuf*(cc: var SslEngineContext; len: var uint): ptr byte {. ++proc sslEngineSendappBuf*(cc: var SslEngineContext; len: var csize_t): ptr byte {. + importcFunc, importc: "br_ssl_engine_sendapp_buf", header: "bearssl_ssl.h".} + + proc sslEngineSendappAck*(cc: var SslEngineContext; len: csize_t) {.importcFunc, + importc: "br_ssl_engine_sendapp_ack", header: "bearssl_ssl.h".} + +-proc sslEngineRecvappBuf*(cc: var SslEngineContext; len: var uint): ptr byte {. ++proc sslEngineRecvappBuf*(cc: var SslEngineContext; len: var csize_t): ptr byte {. + importcFunc, importc: "br_ssl_engine_recvapp_buf", header: "bearssl_ssl.h".} + + proc sslEngineRecvappAck*(cc: var SslEngineContext; len: csize_t) {.importcFunc, + importc: "br_ssl_engine_recvapp_ack", header: "bearssl_ssl.h".} + +-proc sslEngineSendrecBuf*(cc: var SslEngineContext; len: var uint): ptr byte {. ++proc sslEngineSendrecBuf*(cc: var SslEngineContext; len: var csize_t): ptr byte {. + importcFunc, importc: "br_ssl_engine_sendrec_buf", header: "bearssl_ssl.h".} + + proc sslEngineSendrecAck*(cc: var SslEngineContext; len: csize_t) {.importcFunc, + importc: "br_ssl_engine_sendrec_ack", header: "bearssl_ssl.h".} + +-proc sslEngineRecvrecBuf*(cc: var SslEngineContext; len: var uint): ptr byte {. ++proc sslEngineRecvrecBuf*(cc: var SslEngineContext; len: var csize_t): ptr byte {. + importcFunc, importc: "br_ssl_engine_recvrec_buf", header: "bearssl_ssl.h".} + + proc sslEngineRecvrecAck*(cc: var SslEngineContext; len: csize_t) {.importcFunc, Index: patches/patch-dist_nimble_vendor_chronos_chronos_sendfile_nim =================================================================== RCS file: patches/patch-dist_nimble_vendor_chronos_chronos_sendfile_nim diff -N patches/patch-dist_nimble_vendor_chronos_chronos_sendfile_nim --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-dist_nimble_vendor_chronos_chronos_sendfile_nim 3 Oct 2026 11:40:07 -0000 @@ -0,0 +1,49 @@ +Implement OpenBSD file-to-socket transfers with bounded buffered I/O. +Preserve the input file position and let Chronos retry partial writes. + +Index: dist/nimble/vendor/chronos/chronos/sendfile.nim +--- dist/nimble/vendor/chronos/chronos/sendfile.nim.orig ++++ dist/nimble/vendor/chronos/chronos/sendfile.nim +@@ -43,6 +43,33 @@ + proc sendfile*(outfd, infd: int, offset: int, count: var int): int = + raiseAssert "sendfile() is not implemented yet" + ++elif defined(openbsd): ++ import std/posix ++ ++ proc sendfile*(outfd, infd: int, offset: int, count: var int): int = ++ let requested = count ++ count = 0 ++ if requested < 0 or offset < 0: ++ errno = EINVAL ++ return -1 ++ if requested == 0: ++ return 0 ++ ++ # pread preserves the file position. The caller retries unsent bytes. ++ var buffer: array[16384, byte] ++ let nread = pread(cint(infd), addr buffer[0], ++ min(requested, buffer.len), Off(offset)) ++ if nread < 0: ++ return -1 ++ if nread == 0: ++ return 0 ++ let written = send(SocketHandle(outfd), addr buffer[0], nread, ++ MSG_NOSIGNAL) ++ if written < 0: ++ return -1 ++ count = written ++ 0 ++ + elif (defined(linux) or defined(android)) and not(defined(emscripten)): + + type +@@ -64,7 +91,7 @@ + count = 0 + -1 + +-elif defined(freebsd) or defined(openbsd) or defined(netbsd) or ++elif defined(freebsd) or defined(netbsd) or + defined(dragonflybsd): + import oserrno + type Index: patches/patch-dist_nimble_vendor_chronos_chronos_streams_tlsstream_nim =================================================================== RCS file: patches/patch-dist_nimble_vendor_chronos_chronos_streams_tlsstream_nim diff -N patches/patch-dist_nimble_vendor_chronos_chronos_streams_tlsstream_nim --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-dist_nimble_vendor_chronos_chronos_streams_tlsstream_nim 3 Oct 2026 11:40:07 -0000 @@ -0,0 +1,60 @@ +Keep BearSSL buffer lengths in C size_t storage, including async captures. +Nim's uint and C size_t have different underlying types on OpenBSD/amd64. + +Index: dist/nimble/vendor/chronos/chronos/streams/tlsstream.nim +--- dist/nimble/vendor/chronos/chronos/streams/tlsstream.nim.orig ++++ dist/nimble/vendor/chronos/chronos/streams/tlsstream.nim +@@ -112,7 +112,7 @@ type + alpnProtosC: seq[cstring] + readFut: Future[int].Raising([CancelledError, AsyncStreamError]) + writeFut: Future[void].Raising([CancelledError, AsyncStreamError]) +- wlength: uint ++ wlength: csize_t + error: ref AsyncStreamError + + SomeTLSStreamType* = TLSStreamReader|TLSStreamWriter|TLSAsyncStream +@@ -276,7 +276,7 @@ proc runUntil(rws: TLSAsyncStream, target: cuint): Fut + await cancelAndWait(move(rws.writeFut)) + break + +- sslEngineRecvrecAck(engine[], uint(fut.value)) ++ sslEngineRecvrecAck(engine[], csize_t(fut.value)) + continue # re-read state / last error + + if ((state and target) == target): +@@ -290,7 +290,7 @@ proc runUntil(rws: TLSAsyncStream, target: cuint): Fut + if rws.eof: # We've already read EOF from the underlying stream + break + +- var length = 0'u ++ var length: csize_t = 0 + var buf = sslEngineRecvrecBuf(engine[], length) + rws.readFut = rws.rsource.readOnce(buf, int(length)) + +@@ -342,9 +342,9 @@ proc readOnce( + if (state and SSL_RECVAPP) == SSL_RECVAPP: + # Unencrypted data is available from the engine - copy as much as possible + # to the user buffer +- var length = 0'u ++ var length: csize_t = 0 + var buf = sslEngineRecvappBuf(engine[], length) +- let n = min(nbytes.uint, length) ++ let n = min(nbytes.csize_t, length) + copyMem(pbytes, buf, n) + sslEngineRecvappAck(engine[], n) + return n.int +@@ -387,12 +387,12 @@ proc write( + + if (state and SSL_SENDAPP) == SSL_SENDAPP: + # Application data can be queued for encryption +- var length = 0'u ++ var length: csize_t = 0 + var buf = sslEngineSendappBuf(engine[], length) + let toWrite = min(int(length), nbytes - offset) + copyMem(buf, pbytes.offset(offset), toWrite) + offset += toWrite +- sslEngineSendappAck(engine[], uint(toWrite)) ++ sslEngineSendappAck(engine[], csize_t(toWrite)) + + if offset == nbytes: + # Flushing is necessary for writes that only partially fill an SSL Index: patches/patch-dist_nimble_vendor_chronos_chronos_transports_stream_nim =================================================================== RCS file: patches/patch-dist_nimble_vendor_chronos_chronos_transports_stream_nim diff -N patches/patch-dist_nimble_vendor_chronos_chronos_transports_stream_nim --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-dist_nimble_vendor_chronos_chronos_transports_stream_nim 3 Oct 2026 11:40:07 -0000 @@ -0,0 +1,16 @@ +Complete OpenBSD buffered file transfers at EOF instead of retrying forever. + +Index: dist/nimble/vendor/chronos/chronos/transports/stream.nim +--- dist/nimble/vendor/chronos/chronos/transports/stream.nim.orig ++++ dist/nimble/vendor/chronos/chronos/transports/stream.nim +@@ -1397,7 +1397,9 @@ + vector.size += nbytes + + if res >= 0: +- if cast[int](vector.buf) == nbytes: ++ # The OpenBSD buffered fallback returns no bytes at end-of-file. ++ if cast[int](vector.buf) == nbytes or ++ (defined(openbsd) and nbytes == 0): + if not(vector.writer.finished()): + vector.writer.complete(vector.size) + else: Index: patches/patch-koch_nim =================================================================== RCS file: /cvs/ports/lang/nim/patches/patch-koch_nim,v retrieving revision 1.4 diff -u -p -r1.4 patch-koch_nim --- patches/patch-koch_nim 19 Mar 2026 23:43:39 -0000 1.4 +++ patches/patch-koch_nim 3 Oct 2026 11:40:07 -0000 @@ -1,3 +1,5 @@ +Use the bundled dependencies when building the compiler and tools. + Index: koch.nim --- koch.nim.orig +++ koch.nim @@ -24,3 +26,20 @@ Index: koch.nim # installer.ini expects it under $nim/bin nimCompile("dist/atlas/src/atlas.nim", options = "-d:release --noNimblePath -d:nimAtlasBootstrap " & args) +@@ -181,7 +172,6 @@ proc bundleChecksums(latest: bool) = + cloneDependency(distDir, "https://github.com/nim-lang/checksums.git", commit, allowBundled = true) + + proc bundleNimsuggest(args: string) = +- bundleChecksums(false) + nimCompileFold("Compile nimsuggest", "nimsuggest/nimsuggest.nim", + options = "-d:danger " & args) + +@@ -344,8 +334,6 @@ proc boot(args: string, skipIntegrityCheck: bool) = + let useCpp = doUseCpp() + let smartNimcache = (if "release" in args or "danger" in args: "nimcache/r_" else: "nimcache/d_") & + hostOS & "_" & hostCPU +- +- bundleChecksums(false) + + let usingLibFFI = "nimHasLibFFI" in args + if usingLibFFI and not dirExists("dist/libffi"): Index: patches/patch-lib_system_sysstr_nim =================================================================== RCS file: patches/patch-lib_system_sysstr_nim diff -N patches/patch-lib_system_sysstr_nim --- patches/patch-lib_system_sysstr_nim 17 Jul 2026 00:54:38 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -Index: lib/system/sysstr.nim ---- lib/system/sysstr.nim.orig -+++ lib/system/sysstr.nim -@@ -223,8 +223,9 @@ proc addChar(s: NimString, c: char): NimString = - proc appendString(dest, src: NimString) {.compilerproc, inline.} = - ## Raw, does not prepare `dest` space for copying - if src != nil: -- copyMem(addr(dest.data[dest.len]), addr(src.data), src.len + 1) -+ copyMem(addr(dest.data[dest.len]), addr(src.data), src.len) - inc(dest.len, src.len) -+ dest.data[dest.len] = '\0' - - proc setLengthStr(s: NimString, newLen: int): NimString {.compilerRtl.} = - ## Sets the `s` length to `newLen` zeroing memory on growth.