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.

Reply via email to