On Tue, Oct 06, 2026 at 09:16:57AM -0700, Alfred Morgan wrote:
> Nim 2.2.12 update
>
> I tried to clean up dependencies. Let me know if this still works for you all.
>
> -alfred
Seems to work okay with make test. Updated diff attached with updated
patches if that still works for you?
diff refs/heads/master refs/heads/nim
commit - 95f0dc7a65cb9d99b358422d51ebe4cd140dfb25
commit + 933dda27509c89ae303df353d83a6226e77a9049
blob - 627ad33783ec4b0492337f396270606a20beb32e
blob + 00f7704adc1c4f4f601e572e4532307034895422
--- lang/nim/Makefile
+++ lang/nim/Makefile
@@ -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 <[email protected]>
-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
blob - e887957fbcf0b860c3ad71d61fd83c6e8a2cef33
blob + 46d7bb3b263b08525ceeb33febfd1c2ae68c49dc
--- lang/nim/distinfo
+++ lang/nim/distinfo
@@ -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
blob - b8c4e419b4db0bf21090c153fe17e1dfeb34392b
blob + 54984c51f625063c093d0ca0496f420099a101f6
--- lang/nim/patches/patch-compiler_options_nim
+++ lang/nim/patches/patch-compiler_options_nim
@@ -9,7 +9,7 @@ Index: compiler/options.nim
hasTinyCBackend* = defined(tinyc)
useEffectSystem* = true
useWriteTracking* = false
-@@ -576,7 +577,7 @@ proc newConfigRef*(): ConfigRef =
+@@ -584,7 +585,7 @@ proc newConfigRef*(): ConfigRef =
outFile: RelativeFile"",
outDir: AbsoluteDir"",
prefixDir: AbsoluteDir"",
blob - aab32b8987e207fb46af2c55840f71ec33afa932
blob + e27733990b7f243fde97401c10db56085627b662
--- lang/nim/patches/patch-config_nim_cfg
+++ lang/nim/patches/patch-config_nim_cfg
@@ -24,7 +24,7 @@ Index: config/nim.cfg
@elif haiku:
gcc.options.linker = "-Wl,--as-needed -lnetwork"
gcc.cpp.options.linker = "-Wl,--as-needed -lnetwork"
-@@ -223,21 +223,27 @@ clang.objc.options.linker = "-lobjc -lgnustep-base"
+@@ -236,21 +236,27 @@ clang.objc.options.linker = "-lobjc -lgnustep-base"
# Options for FreeBSD, OpenBSD, NetBSD linker to add locations for searching
# shared libraries.
@@ -58,7 +58,7 @@ Index: config/nim.cfg
@elif netbsd:
cincludes: "/usr/pkg/include"
clibdir: "/usr/pkg/lib"
-@@ -262,15 +268,15 @@ gcc.options.always %= "${gcc.options.always} -fno-stri
+@@ -275,15 +281,15 @@ gcc.options.always %= "${gcc.options.always} -fno-stri
# -fno-math-errno is default in OSX, iOS, BSD, Musl, Libm, LLVM, Clang, ICC.
# See https://itnext.io/why-standard-c-math-functions-are-slow-d10d02554e33
# and
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Optimize-Options.html#Optimize-Options
@@ -78,7 +78,7 @@ Index: config/nim.cfg
gcc.cpp.options.debug = "-g3 -Og"
#passl = "-pg"
-@@ -284,8 +290,8 @@ llvm_gcc.options.size = "-Os"
+@@ -297,8 +303,8 @@ llvm_gcc.options.size = "-Os"
clang.options.debug = "-g"
clang.cpp.options.debug = "-g"
clang.options.always = "-w -ferror-limit=3 -fno-strict-aliasing"
blob - 3975698fcc1d2e7c1db036bd4022b6793aa954bc (mode 644)
blob + /dev/null
--- lang/nim/patches/patch-dist_nimble_src_nimblepkg_downloadnim_nim
+++ /dev/null
@@ -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 =
blob - 03cb9e6483c864f0a2cc13661083e24e249c985f
blob + 3cbace663e0389bc5c82527029937264ce586078
--- lang/nim/patches/patch-dist_nimble_src_nimblepkg_options_nim
+++ lang/nim/patches/patch-dist_nimble_src_nimblepkg_options_nim
@@ -3,7 +3,7 @@ don't exec git
Index: dist/nimble/src/nimblepkg/options.nim
--- dist/nimble/src/nimblepkg/options.nim.orig
+++ dist/nimble/src/nimblepkg/options.nim
-@@ -354,15 +354,7 @@ const
+@@ -377,15 +377,7 @@ const
## sources outside the git tree of Nimble:
git_revision_override* {.strdefine.} = ""
blob - /dev/null
blob + 12b65395cef2d3d74d43d466219843245e022cad (mode 644)
--- /dev/null
+++
lang/nim/patches/patch-dist_nimble_vendor_bearssl_bearssl_abi_bearssl_ssl_nim
@@ -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,
blob - ff80fb48c9cb0690b731a871e48d312137d665fb
blob + e2e236adcd703093d5c902bbf510283da9d62caf
--- lang/nim/patches/patch-koch_nim
+++ lang/nim/patches/patch-koch_nim
@@ -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"):
blob - /dev/null
blob + 4b2d56f6350ae7c7d3baf0bd284634ba9f1ef928 (mode 644)
--- /dev/null
+++ lang/nim/patches/patch-dist_nimble_vendor_chronos_chronos_sendfile_nim
@@ -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 @@ elif defined(emscripten) or defined(haiku):
+ 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 @@ elif (defined(linux) or defined(android)) and not(defi
+ 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
blob - /dev/null
blob + c2713d470f0bc793decbe89133c1474c390c728a (mode 644)
--- /dev/null
+++
lang/nim/patches/patch-dist_nimble_vendor_chronos_chronos_streams_tlsstream_nim
@@ -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
blob - /dev/null
blob + 713bb09188d2f3c240543c2a207817fffcaf58ce (mode 644)
--- /dev/null
+++
lang/nim/patches/patch-dist_nimble_vendor_chronos_chronos_transports_stream_nim
@@ -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 @@ else:
+ 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:
blob - 3185dd1f8911bad6873c9bcfbf8bf7450b018684
blob + cb631e102c5e9dc7f252e0e8d0c1cb993d40c45c
--- lang/nim/patches/patch-lib_system_nim
+++ lang/nim/patches/patch-lib_system_nim
@@ -1,7 +1,7 @@
Index: lib/system.nim
--- lib/system.nim.orig
+++ lib/system.nim
-@@ -1098,7 +1098,7 @@ when defined(boehmgc):
+@@ -1108,7 +1108,7 @@ when defined(boehmgc):
elif defined(macosx):
const boehmLib = "libgc.dylib"
elif defined(openbsd):
blob - 2ac5ec6bc07ec27adcbbde4e766c268d2a99434d (mode 644)
blob + /dev/null
--- lang/nim/patches/patch-lib_system_sysstr_nim
+++ /dev/null
@@ -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.