zuvloop 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. zuvloop-0.0.1/.gitignore +24 -0
  2. zuvloop-0.0.1/LICENSE +21 -0
  3. zuvloop-0.0.1/PKG-INFO +222 -0
  4. zuvloop-0.0.1/README.md +198 -0
  5. zuvloop-0.0.1/build.zig +134 -0
  6. zuvloop-0.0.1/build.zig.zon +12 -0
  7. zuvloop-0.0.1/pyproject.toml +120 -0
  8. zuvloop-0.0.1/vendor/README.md +13 -0
  9. zuvloop-0.0.1/vendor/libuv/.gitattributes +1 -0
  10. zuvloop-0.0.1/vendor/libuv/.github/ISSUE_TEMPLATE.md +13 -0
  11. zuvloop-0.0.1/vendor/libuv/.github/dependabot.yml +7 -0
  12. zuvloop-0.0.1/vendor/libuv/.github/workflows/CI-docs.yml +25 -0
  13. zuvloop-0.0.1/vendor/libuv/.github/workflows/CI-sample.yml +33 -0
  14. zuvloop-0.0.1/vendor/libuv/.github/workflows/CI-unix.yml +182 -0
  15. zuvloop-0.0.1/vendor/libuv/.github/workflows/CI-win.yml +128 -0
  16. zuvloop-0.0.1/vendor/libuv/.github/workflows/sanitizer.yml +128 -0
  17. zuvloop-0.0.1/vendor/libuv/.gitignore +80 -0
  18. zuvloop-0.0.1/vendor/libuv/.mailmap +71 -0
  19. zuvloop-0.0.1/vendor/libuv/.readthedocs.yaml +15 -0
  20. zuvloop-0.0.1/vendor/libuv/AUTHORS +606 -0
  21. zuvloop-0.0.1/vendor/libuv/CMakeLists.txt +816 -0
  22. zuvloop-0.0.1/vendor/libuv/CONTRIBUTING.md +171 -0
  23. zuvloop-0.0.1/vendor/libuv/ChangeLog +6522 -0
  24. zuvloop-0.0.1/vendor/libuv/LICENSE +19 -0
  25. zuvloop-0.0.1/vendor/libuv/LICENSE-docs +396 -0
  26. zuvloop-0.0.1/vendor/libuv/LICENSE-extra +36 -0
  27. zuvloop-0.0.1/vendor/libuv/LINKS.md +112 -0
  28. zuvloop-0.0.1/vendor/libuv/MAINTAINERS.md +56 -0
  29. zuvloop-0.0.1/vendor/libuv/Makefile.am +563 -0
  30. zuvloop-0.0.1/vendor/libuv/README.md +355 -0
  31. zuvloop-0.0.1/vendor/libuv/SECURITY.md +27 -0
  32. zuvloop-0.0.1/vendor/libuv/SUPPORTED_PLATFORMS.md +68 -0
  33. zuvloop-0.0.1/vendor/libuv/autogen.sh +75 -0
  34. zuvloop-0.0.1/vendor/libuv/cmake-toolchains/cross-mingw32.cmake +17 -0
  35. zuvloop-0.0.1/vendor/libuv/configure.ac +92 -0
  36. zuvloop-0.0.1/vendor/libuv/docs/code/.gitignore +3 -0
  37. zuvloop-0.0.1/vendor/libuv/docs/code/CMakeLists.txt +51 -0
  38. zuvloop-0.0.1/vendor/libuv/docs/code/cgi/main.c +81 -0
  39. zuvloop-0.0.1/vendor/libuv/docs/code/cgi/tick.c +13 -0
  40. zuvloop-0.0.1/vendor/libuv/docs/code/default-loop/main.c +12 -0
  41. zuvloop-0.0.1/vendor/libuv/docs/code/detach/main.c +31 -0
  42. zuvloop-0.0.1/vendor/libuv/docs/code/dns/main.c +80 -0
  43. zuvloop-0.0.1/vendor/libuv/docs/code/helloworld/main.c +15 -0
  44. zuvloop-0.0.1/vendor/libuv/docs/code/idle-basic/main.c +24 -0
  45. zuvloop-0.0.1/vendor/libuv/docs/code/idle-compute/main.c +43 -0
  46. zuvloop-0.0.1/vendor/libuv/docs/code/interfaces/main.c +33 -0
  47. zuvloop-0.0.1/vendor/libuv/docs/code/locks/main.c +57 -0
  48. zuvloop-0.0.1/vendor/libuv/docs/code/multi-echo-server/main.c +114 -0
  49. zuvloop-0.0.1/vendor/libuv/docs/code/multi-echo-server/worker.c +88 -0
  50. zuvloop-0.0.1/vendor/libuv/docs/code/onchange/main.c +44 -0
  51. zuvloop-0.0.1/vendor/libuv/docs/code/pipe-echo-server/main.c +94 -0
  52. zuvloop-0.0.1/vendor/libuv/docs/code/plugin/hello.c +5 -0
  53. zuvloop-0.0.1/vendor/libuv/docs/code/plugin/main.c +38 -0
  54. zuvloop-0.0.1/vendor/libuv/docs/code/plugin/plugin.h +7 -0
  55. zuvloop-0.0.1/vendor/libuv/docs/code/proc-streams/main.c +49 -0
  56. zuvloop-0.0.1/vendor/libuv/docs/code/proc-streams/test.c +8 -0
  57. zuvloop-0.0.1/vendor/libuv/docs/code/progress/main.c +47 -0
  58. zuvloop-0.0.1/vendor/libuv/docs/code/queue-cancel/main.c +59 -0
  59. zuvloop-0.0.1/vendor/libuv/docs/code/queue-work/main.c +44 -0
  60. zuvloop-0.0.1/vendor/libuv/docs/code/ref-timer/main.c +29 -0
  61. zuvloop-0.0.1/vendor/libuv/docs/code/signal/main.c +66 -0
  62. zuvloop-0.0.1/vendor/libuv/docs/code/spawn/main.c +36 -0
  63. zuvloop-0.0.1/vendor/libuv/docs/code/tcp-echo-server/main.c +87 -0
  64. zuvloop-0.0.1/vendor/libuv/docs/code/thread-create/main.c +35 -0
  65. zuvloop-0.0.1/vendor/libuv/docs/code/tty/main.c +31 -0
  66. zuvloop-0.0.1/vendor/libuv/docs/code/tty-gravity/main.c +48 -0
  67. zuvloop-0.0.1/vendor/libuv/docs/code/udp-dhcp/main.c +128 -0
  68. zuvloop-0.0.1/vendor/libuv/docs/code/uvcat/main.c +62 -0
  69. zuvloop-0.0.1/vendor/libuv/docs/code/uvstop/main.c +33 -0
  70. zuvloop-0.0.1/vendor/libuv/docs/code/uvtee/main.c +79 -0
  71. zuvloop-0.0.1/vendor/libuv/docs/code/uvwget/main.c +166 -0
  72. zuvloop-0.0.1/vendor/libuv/docs/make.bat +243 -0
  73. zuvloop-0.0.1/vendor/libuv/docs/requirements.txt +36 -0
  74. zuvloop-0.0.1/vendor/libuv/docs/src/api.rst +36 -0
  75. zuvloop-0.0.1/vendor/libuv/docs/src/async.rst +65 -0
  76. zuvloop-0.0.1/vendor/libuv/docs/src/check.rst +54 -0
  77. zuvloop-0.0.1/vendor/libuv/docs/src/conf.py +348 -0
  78. zuvloop-0.0.1/vendor/libuv/docs/src/design.rst +141 -0
  79. zuvloop-0.0.1/vendor/libuv/docs/src/dll.rst +44 -0
  80. zuvloop-0.0.1/vendor/libuv/docs/src/dns.rst +108 -0
  81. zuvloop-0.0.1/vendor/libuv/docs/src/errors.rst +388 -0
  82. zuvloop-0.0.1/vendor/libuv/docs/src/fs.rst +727 -0
  83. zuvloop-0.0.1/vendor/libuv/docs/src/fs_event.rst +144 -0
  84. zuvloop-0.0.1/vendor/libuv/docs/src/fs_poll.rst +77 -0
  85. zuvloop-0.0.1/vendor/libuv/docs/src/guide/about.rst +22 -0
  86. zuvloop-0.0.1/vendor/libuv/docs/src/guide/basics.rst +236 -0
  87. zuvloop-0.0.1/vendor/libuv/docs/src/guide/eventloops.rst +50 -0
  88. zuvloop-0.0.1/vendor/libuv/docs/src/guide/filesystem.rst +349 -0
  89. zuvloop-0.0.1/vendor/libuv/docs/src/guide/introduction.rst +73 -0
  90. zuvloop-0.0.1/vendor/libuv/docs/src/guide/networking.rst +256 -0
  91. zuvloop-0.0.1/vendor/libuv/docs/src/guide/processes.rst +424 -0
  92. zuvloop-0.0.1/vendor/libuv/docs/src/guide/threads.rst +397 -0
  93. zuvloop-0.0.1/vendor/libuv/docs/src/guide/utilities.rst +450 -0
  94. zuvloop-0.0.1/vendor/libuv/docs/src/guide.rst +22 -0
  95. zuvloop-0.0.1/vendor/libuv/docs/src/handle.rst +286 -0
  96. zuvloop-0.0.1/vendor/libuv/docs/src/idle.rst +62 -0
  97. zuvloop-0.0.1/vendor/libuv/docs/src/index.rst +62 -0
  98. zuvloop-0.0.1/vendor/libuv/docs/src/loop.rst +263 -0
  99. zuvloop-0.0.1/vendor/libuv/docs/src/metrics.rst +71 -0
  100. zuvloop-0.0.1/vendor/libuv/docs/src/migration_010_100.rst +244 -0
  101. zuvloop-0.0.1/vendor/libuv/docs/src/misc.rst +940 -0
  102. zuvloop-0.0.1/vendor/libuv/docs/src/pipe.rst +182 -0
  103. zuvloop-0.0.1/vendor/libuv/docs/src/poll.rst +150 -0
  104. zuvloop-0.0.1/vendor/libuv/docs/src/prepare.rst +54 -0
  105. zuvloop-0.0.1/vendor/libuv/docs/src/process.rst +291 -0
  106. zuvloop-0.0.1/vendor/libuv/docs/src/request.rst +121 -0
  107. zuvloop-0.0.1/vendor/libuv/docs/src/signal.rst +101 -0
  108. zuvloop-0.0.1/vendor/libuv/docs/src/sphinx-plugins/manpage.py +45 -0
  109. zuvloop-0.0.1/vendor/libuv/docs/src/static/architecture.png +0 -0
  110. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/Data/st0-311.jpg +0 -0
  111. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/Data/st1-475.jpg +0 -0
  112. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/Index.zip +0 -0
  113. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/Metadata/BuildVersionHistory.plist +8 -0
  114. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/Metadata/DocumentIdentifier +1 -0
  115. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/Metadata/Properties.plist +0 -0
  116. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/preview-micro.jpg +0 -0
  117. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/preview-web.jpg +0 -0
  118. zuvloop-0.0.1/vendor/libuv/docs/src/static/diagrams.key/preview.jpg +0 -0
  119. zuvloop-0.0.1/vendor/libuv/docs/src/static/favicon.ico +0 -0
  120. zuvloop-0.0.1/vendor/libuv/docs/src/static/logo.png +0 -0
  121. zuvloop-0.0.1/vendor/libuv/docs/src/static/loop_iteration.png +0 -0
  122. zuvloop-0.0.1/vendor/libuv/docs/src/stream.rst +258 -0
  123. zuvloop-0.0.1/vendor/libuv/docs/src/tcp.rst +190 -0
  124. zuvloop-0.0.1/vendor/libuv/docs/src/threading.rst +284 -0
  125. zuvloop-0.0.1/vendor/libuv/docs/src/threadpool.rst +74 -0
  126. zuvloop-0.0.1/vendor/libuv/docs/src/timer.rst +92 -0
  127. zuvloop-0.0.1/vendor/libuv/docs/src/tty.rst +145 -0
  128. zuvloop-0.0.1/vendor/libuv/docs/src/udp.rst +501 -0
  129. zuvloop-0.0.1/vendor/libuv/docs/src/upgrading.rst +11 -0
  130. zuvloop-0.0.1/vendor/libuv/docs/src/version.rst +60 -0
  131. zuvloop-0.0.1/vendor/libuv/img/banner.png +0 -0
  132. zuvloop-0.0.1/vendor/libuv/img/logos.svg +152 -0
  133. zuvloop-0.0.1/vendor/libuv/include/uv/aix.h +32 -0
  134. zuvloop-0.0.1/vendor/libuv/include/uv/bsd.h +34 -0
  135. zuvloop-0.0.1/vendor/libuv/include/uv/darwin.h +61 -0
  136. zuvloop-0.0.1/vendor/libuv/include/uv/errno.h +483 -0
  137. zuvloop-0.0.1/vendor/libuv/include/uv/linux.h +34 -0
  138. zuvloop-0.0.1/vendor/libuv/include/uv/os390.h +33 -0
  139. zuvloop-0.0.1/vendor/libuv/include/uv/posix.h +31 -0
  140. zuvloop-0.0.1/vendor/libuv/include/uv/sunos.h +44 -0
  141. zuvloop-0.0.1/vendor/libuv/include/uv/threadpool.h +37 -0
  142. zuvloop-0.0.1/vendor/libuv/include/uv/tree.h +521 -0
  143. zuvloop-0.0.1/vendor/libuv/include/uv/unix.h +512 -0
  144. zuvloop-0.0.1/vendor/libuv/include/uv/version.h +43 -0
  145. zuvloop-0.0.1/vendor/libuv/include/uv/win.h +698 -0
  146. zuvloop-0.0.1/vendor/libuv/include/uv.h +1990 -0
  147. zuvloop-0.0.1/vendor/libuv/libuv-static.pc.in +12 -0
  148. zuvloop-0.0.1/vendor/libuv/libuv.pc.in +13 -0
  149. zuvloop-0.0.1/vendor/libuv/m4/.gitignore +5 -0
  150. zuvloop-0.0.1/vendor/libuv/m4/as_case.m4 +21 -0
  151. zuvloop-0.0.1/vendor/libuv/m4/ax_pthread.m4 +485 -0
  152. zuvloop-0.0.1/vendor/libuv/m4/libuv-check-flags.m4 +336 -0
  153. zuvloop-0.0.1/vendor/libuv/src/fs-poll.c +290 -0
  154. zuvloop-0.0.1/vendor/libuv/src/heap-inl.h +245 -0
  155. zuvloop-0.0.1/vendor/libuv/src/idna.c +560 -0
  156. zuvloop-0.0.1/vendor/libuv/src/idna.h +31 -0
  157. zuvloop-0.0.1/vendor/libuv/src/inet.c +298 -0
  158. zuvloop-0.0.1/vendor/libuv/src/queue.h +90 -0
  159. zuvloop-0.0.1/vendor/libuv/src/random.c +123 -0
  160. zuvloop-0.0.1/vendor/libuv/src/strscpy.c +38 -0
  161. zuvloop-0.0.1/vendor/libuv/src/strscpy.h +39 -0
  162. zuvloop-0.0.1/vendor/libuv/src/strtok.c +52 -0
  163. zuvloop-0.0.1/vendor/libuv/src/strtok.h +27 -0
  164. zuvloop-0.0.1/vendor/libuv/src/thread-common.c +175 -0
  165. zuvloop-0.0.1/vendor/libuv/src/threadpool.c +419 -0
  166. zuvloop-0.0.1/vendor/libuv/src/timer.c +200 -0
  167. zuvloop-0.0.1/vendor/libuv/src/unix/aix-common.c +89 -0
  168. zuvloop-0.0.1/vendor/libuv/src/unix/aix.c +1321 -0
  169. zuvloop-0.0.1/vendor/libuv/src/unix/async.c +418 -0
  170. zuvloop-0.0.1/vendor/libuv/src/unix/bsd-ifaddrs.c +164 -0
  171. zuvloop-0.0.1/vendor/libuv/src/unix/bsd-proctitle.c +99 -0
  172. zuvloop-0.0.1/vendor/libuv/src/unix/core.c +2104 -0
  173. zuvloop-0.0.1/vendor/libuv/src/unix/cygwin.c +93 -0
  174. zuvloop-0.0.1/vendor/libuv/src/unix/darwin-proctitle.c +176 -0
  175. zuvloop-0.0.1/vendor/libuv/src/unix/darwin-stub.h +97 -0
  176. zuvloop-0.0.1/vendor/libuv/src/unix/darwin-syscalls.h +17 -0
  177. zuvloop-0.0.1/vendor/libuv/src/unix/darwin.c +237 -0
  178. zuvloop-0.0.1/vendor/libuv/src/unix/dl.c +80 -0
  179. zuvloop-0.0.1/vendor/libuv/src/unix/freebsd.c +290 -0
  180. zuvloop-0.0.1/vendor/libuv/src/unix/fs.c +2303 -0
  181. zuvloop-0.0.1/vendor/libuv/src/unix/fsevents.c +906 -0
  182. zuvloop-0.0.1/vendor/libuv/src/unix/getaddrinfo.c +252 -0
  183. zuvloop-0.0.1/vendor/libuv/src/unix/getnameinfo.c +121 -0
  184. zuvloop-0.0.1/vendor/libuv/src/unix/haiku.c +172 -0
  185. zuvloop-0.0.1/vendor/libuv/src/unix/hurd.c +172 -0
  186. zuvloop-0.0.1/vendor/libuv/src/unix/ibmi.c +545 -0
  187. zuvloop-0.0.1/vendor/libuv/src/unix/internal.h +530 -0
  188. zuvloop-0.0.1/vendor/libuv/src/unix/kqueue.c +667 -0
  189. zuvloop-0.0.1/vendor/libuv/src/unix/linux.c +2761 -0
  190. zuvloop-0.0.1/vendor/libuv/src/unix/loop-watcher.c +68 -0
  191. zuvloop-0.0.1/vendor/libuv/src/unix/loop.c +240 -0
  192. zuvloop-0.0.1/vendor/libuv/src/unix/netbsd.c +264 -0
  193. zuvloop-0.0.1/vendor/libuv/src/unix/no-fsevents.c +42 -0
  194. zuvloop-0.0.1/vendor/libuv/src/unix/no-proctitle.c +45 -0
  195. zuvloop-0.0.1/vendor/libuv/src/unix/openbsd.c +253 -0
  196. zuvloop-0.0.1/vendor/libuv/src/unix/os390-proctitle.c +136 -0
  197. zuvloop-0.0.1/vendor/libuv/src/unix/os390-syscalls.c +536 -0
  198. zuvloop-0.0.1/vendor/libuv/src/unix/os390-syscalls.h +75 -0
  199. zuvloop-0.0.1/vendor/libuv/src/unix/os390.c +1070 -0
  200. zuvloop-0.0.1/vendor/libuv/src/unix/pipe.c +555 -0
  201. zuvloop-0.0.1/vendor/libuv/src/unix/poll.c +159 -0
  202. zuvloop-0.0.1/vendor/libuv/src/unix/posix-hrtime.c +36 -0
  203. zuvloop-0.0.1/vendor/libuv/src/unix/posix-poll.c +385 -0
  204. zuvloop-0.0.1/vendor/libuv/src/unix/process.c +1123 -0
  205. zuvloop-0.0.1/vendor/libuv/src/unix/procfs-exepath.c +45 -0
  206. zuvloop-0.0.1/vendor/libuv/src/unix/proctitle.c +157 -0
  207. zuvloop-0.0.1/vendor/libuv/src/unix/qnx.c +142 -0
  208. zuvloop-0.0.1/vendor/libuv/src/unix/random-devurandom.c +93 -0
  209. zuvloop-0.0.1/vendor/libuv/src/unix/random-getentropy.c +57 -0
  210. zuvloop-0.0.1/vendor/libuv/src/unix/random-getrandom.c +86 -0
  211. zuvloop-0.0.1/vendor/libuv/src/unix/random-sysctl-linux.c +99 -0
  212. zuvloop-0.0.1/vendor/libuv/src/unix/signal.c +581 -0
  213. zuvloop-0.0.1/vendor/libuv/src/unix/stream.c +1567 -0
  214. zuvloop-0.0.1/vendor/libuv/src/unix/sunos.c +915 -0
  215. zuvloop-0.0.1/vendor/libuv/src/unix/sysinfo-loadavg.c +36 -0
  216. zuvloop-0.0.1/vendor/libuv/src/unix/sysinfo-memory.c +42 -0
  217. zuvloop-0.0.1/vendor/libuv/src/unix/tcp.c +673 -0
  218. zuvloop-0.0.1/vendor/libuv/src/unix/thread.c +975 -0
  219. zuvloop-0.0.1/vendor/libuv/src/unix/tty.c +510 -0
  220. zuvloop-0.0.1/vendor/libuv/src/unix/udp.c +1434 -0
  221. zuvloop-0.0.1/vendor/libuv/src/uv-common.c +1051 -0
  222. zuvloop-0.0.1/vendor/libuv/src/uv-common.h +474 -0
  223. zuvloop-0.0.1/vendor/libuv/src/uv-data-getter-setters.c +119 -0
  224. zuvloop-0.0.1/vendor/libuv/src/version.c +45 -0
  225. zuvloop-0.0.1/vendor/libuv/src/win/async.c +98 -0
  226. zuvloop-0.0.1/vendor/libuv/src/win/atomicops-inl.h +61 -0
  227. zuvloop-0.0.1/vendor/libuv/src/win/core.c +683 -0
  228. zuvloop-0.0.1/vendor/libuv/src/win/detect-wakeup.c +56 -0
  229. zuvloop-0.0.1/vendor/libuv/src/win/dl.c +135 -0
  230. zuvloop-0.0.1/vendor/libuv/src/win/error.c +183 -0
  231. zuvloop-0.0.1/vendor/libuv/src/win/fs-event.c +620 -0
  232. zuvloop-0.0.1/vendor/libuv/src/win/fs-fd-hash-inl.h +200 -0
  233. zuvloop-0.0.1/vendor/libuv/src/win/fs.c +3774 -0
  234. zuvloop-0.0.1/vendor/libuv/src/win/getaddrinfo.c +388 -0
  235. zuvloop-0.0.1/vendor/libuv/src/win/getnameinfo.c +146 -0
  236. zuvloop-0.0.1/vendor/libuv/src/win/handle-inl.h +180 -0
  237. zuvloop-0.0.1/vendor/libuv/src/win/handle.c +162 -0
  238. zuvloop-0.0.1/vendor/libuv/src/win/internal.h +335 -0
  239. zuvloop-0.0.1/vendor/libuv/src/win/loop-watcher.c +122 -0
  240. zuvloop-0.0.1/vendor/libuv/src/win/pipe.c +2725 -0
  241. zuvloop-0.0.1/vendor/libuv/src/win/poll.c +586 -0
  242. zuvloop-0.0.1/vendor/libuv/src/win/process-stdio.c +419 -0
  243. zuvloop-0.0.1/vendor/libuv/src/win/process.c +1407 -0
  244. zuvloop-0.0.1/vendor/libuv/src/win/req-inl.h +214 -0
  245. zuvloop-0.0.1/vendor/libuv/src/win/signal.c +282 -0
  246. zuvloop-0.0.1/vendor/libuv/src/win/snprintf.c +42 -0
  247. zuvloop-0.0.1/vendor/libuv/src/win/stream-inl.h +54 -0
  248. zuvloop-0.0.1/vendor/libuv/src/win/stream.c +252 -0
  249. zuvloop-0.0.1/vendor/libuv/src/win/tcp.c +1674 -0
  250. zuvloop-0.0.1/vendor/libuv/src/win/thread.c +568 -0
  251. zuvloop-0.0.1/vendor/libuv/src/win/tty.c +2460 -0
  252. zuvloop-0.0.1/vendor/libuv/src/win/udp.c +1162 -0
  253. zuvloop-0.0.1/vendor/libuv/src/win/util.c +1750 -0
  254. zuvloop-0.0.1/vendor/libuv/src/win/winapi.c +144 -0
  255. zuvloop-0.0.1/vendor/libuv/src/win/winapi.h +4831 -0
  256. zuvloop-0.0.1/vendor/libuv/src/win/winsock.c +575 -0
  257. zuvloop-0.0.1/vendor/libuv/src/win/winsock.h +160 -0
  258. zuvloop-0.0.1/vendor/libuv/test/benchmark-async-pummel.c +120 -0
  259. zuvloop-0.0.1/vendor/libuv/test/benchmark-async.c +142 -0
  260. zuvloop-0.0.1/vendor/libuv/test/benchmark-fs-stat.c +138 -0
  261. zuvloop-0.0.1/vendor/libuv/test/benchmark-getaddrinfo.c +92 -0
  262. zuvloop-0.0.1/vendor/libuv/test/benchmark-list.h +173 -0
  263. zuvloop-0.0.1/vendor/libuv/test/benchmark-loop-count.c +134 -0
  264. zuvloop-0.0.1/vendor/libuv/test/benchmark-million-async.c +113 -0
  265. zuvloop-0.0.1/vendor/libuv/test/benchmark-million-timers.c +86 -0
  266. zuvloop-0.0.1/vendor/libuv/test/benchmark-multi-accept.c +451 -0
  267. zuvloop-0.0.1/vendor/libuv/test/benchmark-ping-pongs.c +221 -0
  268. zuvloop-0.0.1/vendor/libuv/test/benchmark-ping-udp.c +169 -0
  269. zuvloop-0.0.1/vendor/libuv/test/benchmark-pound.c +351 -0
  270. zuvloop-0.0.1/vendor/libuv/test/benchmark-pump.c +478 -0
  271. zuvloop-0.0.1/vendor/libuv/test/benchmark-queue-work.c +71 -0
  272. zuvloop-0.0.1/vendor/libuv/test/benchmark-sizes.c +46 -0
  273. zuvloop-0.0.1/vendor/libuv/test/benchmark-spawn.c +164 -0
  274. zuvloop-0.0.1/vendor/libuv/test/benchmark-tcp-write-batch.c +144 -0
  275. zuvloop-0.0.1/vendor/libuv/test/benchmark-thread.c +64 -0
  276. zuvloop-0.0.1/vendor/libuv/test/benchmark-udp-pummel.c +243 -0
  277. zuvloop-0.0.1/vendor/libuv/test/blackhole-server.c +122 -0
  278. zuvloop-0.0.1/vendor/libuv/test/echo-server.c +431 -0
  279. zuvloop-0.0.1/vendor/libuv/test/fixtures/empty_file +0 -0
  280. zuvloop-0.0.1/vendor/libuv/test/fixtures/load_error.node +1 -0
  281. zuvloop-0.0.1/vendor/libuv/test/fixtures/lorem_ipsum.txt +1 -0
  282. zuvloop-0.0.1/vendor/libuv/test/fixtures/one_file/one_file +0 -0
  283. zuvloop-0.0.1/vendor/libuv/test/run-benchmarks.c +72 -0
  284. zuvloop-0.0.1/vendor/libuv/test/run-tests.c +269 -0
  285. zuvloop-0.0.1/vendor/libuv/test/runner-unix.c +457 -0
  286. zuvloop-0.0.1/vendor/libuv/test/runner-unix.h +36 -0
  287. zuvloop-0.0.1/vendor/libuv/test/runner-win.c +348 -0
  288. zuvloop-0.0.1/vendor/libuv/test/runner-win.h +41 -0
  289. zuvloop-0.0.1/vendor/libuv/test/runner.c +457 -0
  290. zuvloop-0.0.1/vendor/libuv/test/runner.h +172 -0
  291. zuvloop-0.0.1/vendor/libuv/test/task.h +388 -0
  292. zuvloop-0.0.1/vendor/libuv/test/test-active.c +84 -0
  293. zuvloop-0.0.1/vendor/libuv/test/test-async-null-cb.c +64 -0
  294. zuvloop-0.0.1/vendor/libuv/test/test-async.c +134 -0
  295. zuvloop-0.0.1/vendor/libuv/test/test-barrier.c +160 -0
  296. zuvloop-0.0.1/vendor/libuv/test/test-callback-stack.c +209 -0
  297. zuvloop-0.0.1/vendor/libuv/test/test-close-fd.c +84 -0
  298. zuvloop-0.0.1/vendor/libuv/test/test-close-order.c +80 -0
  299. zuvloop-0.0.1/vendor/libuv/test/test-condvar.c +248 -0
  300. zuvloop-0.0.1/vendor/libuv/test/test-connect-unspecified.c +60 -0
  301. zuvloop-0.0.1/vendor/libuv/test/test-connection-fail.c +161 -0
  302. zuvloop-0.0.1/vendor/libuv/test/test-cwd-and-chdir.c +57 -0
  303. zuvloop-0.0.1/vendor/libuv/test/test-default-loop-close.c +58 -0
  304. zuvloop-0.0.1/vendor/libuv/test/test-delayed-accept.c +189 -0
  305. zuvloop-0.0.1/vendor/libuv/test/test-dlerror.c +65 -0
  306. zuvloop-0.0.1/vendor/libuv/test/test-eintr-handling.c +96 -0
  307. zuvloop-0.0.1/vendor/libuv/test/test-embed.c +79 -0
  308. zuvloop-0.0.1/vendor/libuv/test/test-emfile.c +129 -0
  309. zuvloop-0.0.1/vendor/libuv/test/test-env-vars.c +178 -0
  310. zuvloop-0.0.1/vendor/libuv/test/test-error.c +82 -0
  311. zuvloop-0.0.1/vendor/libuv/test/test-fail-always.c +29 -0
  312. zuvloop-0.0.1/vendor/libuv/test/test-fork.c +769 -0
  313. zuvloop-0.0.1/vendor/libuv/test/test-fs-copyfile.c +232 -0
  314. zuvloop-0.0.1/vendor/libuv/test/test-fs-event.c +1220 -0
  315. zuvloop-0.0.1/vendor/libuv/test/test-fs-fd-hash.c +133 -0
  316. zuvloop-0.0.1/vendor/libuv/test/test-fs-open-flags.c +435 -0
  317. zuvloop-0.0.1/vendor/libuv/test/test-fs-poll.c +292 -0
  318. zuvloop-0.0.1/vendor/libuv/test/test-fs-readdir.c +548 -0
  319. zuvloop-0.0.1/vendor/libuv/test/test-fs.c +4922 -0
  320. zuvloop-0.0.1/vendor/libuv/test/test-get-currentexe.c +109 -0
  321. zuvloop-0.0.1/vendor/libuv/test/test-get-loadavg.c +35 -0
  322. zuvloop-0.0.1/vendor/libuv/test/test-get-memory.c +53 -0
  323. zuvloop-0.0.1/vendor/libuv/test/test-get-passwd.c +211 -0
  324. zuvloop-0.0.1/vendor/libuv/test/test-getaddrinfo.c +215 -0
  325. zuvloop-0.0.1/vendor/libuv/test/test-gethostname.c +58 -0
  326. zuvloop-0.0.1/vendor/libuv/test/test-getnameinfo.c +116 -0
  327. zuvloop-0.0.1/vendor/libuv/test/test-getsockname.c +362 -0
  328. zuvloop-0.0.1/vendor/libuv/test/test-getters-setters.c +114 -0
  329. zuvloop-0.0.1/vendor/libuv/test/test-gettimeofday.c +39 -0
  330. zuvloop-0.0.1/vendor/libuv/test/test-handle-fileno.c +125 -0
  331. zuvloop-0.0.1/vendor/libuv/test/test-homedir.c +81 -0
  332. zuvloop-0.0.1/vendor/libuv/test/test-hrtime.c +65 -0
  333. zuvloop-0.0.1/vendor/libuv/test/test-idle.c +125 -0
  334. zuvloop-0.0.1/vendor/libuv/test/test-idna.c +232 -0
  335. zuvloop-0.0.1/vendor/libuv/test/test-iouring-pollhup.c +111 -0
  336. zuvloop-0.0.1/vendor/libuv/test/test-ip-name.c +65 -0
  337. zuvloop-0.0.1/vendor/libuv/test/test-ip4-addr.c +55 -0
  338. zuvloop-0.0.1/vendor/libuv/test/test-ip6-addr.c +175 -0
  339. zuvloop-0.0.1/vendor/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c +159 -0
  340. zuvloop-0.0.1/vendor/libuv/test/test-ipc-send-recv.c +435 -0
  341. zuvloop-0.0.1/vendor/libuv/test/test-ipc.c +857 -0
  342. zuvloop-0.0.1/vendor/libuv/test/test-list.h +1269 -0
  343. zuvloop-0.0.1/vendor/libuv/test/test-loop-alive.c +68 -0
  344. zuvloop-0.0.1/vendor/libuv/test/test-loop-close.c +77 -0
  345. zuvloop-0.0.1/vendor/libuv/test/test-loop-configure.c +38 -0
  346. zuvloop-0.0.1/vendor/libuv/test/test-loop-handles.c +337 -0
  347. zuvloop-0.0.1/vendor/libuv/test/test-loop-oom.c +62 -0
  348. zuvloop-0.0.1/vendor/libuv/test/test-loop-stop.c +83 -0
  349. zuvloop-0.0.1/vendor/libuv/test/test-loop-time.c +69 -0
  350. zuvloop-0.0.1/vendor/libuv/test/test-metrics.c +390 -0
  351. zuvloop-0.0.1/vendor/libuv/test/test-multiple-listen.c +109 -0
  352. zuvloop-0.0.1/vendor/libuv/test/test-mutexes.c +182 -0
  353. zuvloop-0.0.1/vendor/libuv/test/test-not-readable-nor-writable-on-read-error.c +104 -0
  354. zuvloop-0.0.1/vendor/libuv/test/test-not-writable-after-shutdown.c +69 -0
  355. zuvloop-0.0.1/vendor/libuv/test/test-osx-select.c +140 -0
  356. zuvloop-0.0.1/vendor/libuv/test/test-pass-always.c +28 -0
  357. zuvloop-0.0.1/vendor/libuv/test/test-ping-pong.c +439 -0
  358. zuvloop-0.0.1/vendor/libuv/test/test-pipe-bind-error.c +215 -0
  359. zuvloop-0.0.1/vendor/libuv/test/test-pipe-close-stdout-read-stdin.c +122 -0
  360. zuvloop-0.0.1/vendor/libuv/test/test-pipe-connect-error.c +97 -0
  361. zuvloop-0.0.1/vendor/libuv/test/test-pipe-connect-multiple.c +178 -0
  362. zuvloop-0.0.1/vendor/libuv/test/test-pipe-connect-prepare.c +83 -0
  363. zuvloop-0.0.1/vendor/libuv/test/test-pipe-getsockname.c +370 -0
  364. zuvloop-0.0.1/vendor/libuv/test/test-pipe-pending-instances.c +59 -0
  365. zuvloop-0.0.1/vendor/libuv/test/test-pipe-sendmsg.c +172 -0
  366. zuvloop-0.0.1/vendor/libuv/test/test-pipe-server-close.c +94 -0
  367. zuvloop-0.0.1/vendor/libuv/test/test-pipe-set-fchmod.c +92 -0
  368. zuvloop-0.0.1/vendor/libuv/test/test-pipe-set-non-blocking.c +131 -0
  369. zuvloop-0.0.1/vendor/libuv/test/test-platform-output.c +259 -0
  370. zuvloop-0.0.1/vendor/libuv/test/test-poll-close-doesnt-corrupt-stack.c +114 -0
  371. zuvloop-0.0.1/vendor/libuv/test/test-poll-close.c +73 -0
  372. zuvloop-0.0.1/vendor/libuv/test/test-poll-closesocket.c +92 -0
  373. zuvloop-0.0.1/vendor/libuv/test/test-poll-multiple-handles.c +104 -0
  374. zuvloop-0.0.1/vendor/libuv/test/test-poll-oob.c +214 -0
  375. zuvloop-0.0.1/vendor/libuv/test/test-poll.c +730 -0
  376. zuvloop-0.0.1/vendor/libuv/test/test-process-priority.c +83 -0
  377. zuvloop-0.0.1/vendor/libuv/test/test-process-title-threadsafe.c +108 -0
  378. zuvloop-0.0.1/vendor/libuv/test/test-process-title.c +135 -0
  379. zuvloop-0.0.1/vendor/libuv/test/test-queue-foreach-delete.c +205 -0
  380. zuvloop-0.0.1/vendor/libuv/test/test-random.c +94 -0
  381. zuvloop-0.0.1/vendor/libuv/test/test-readable-on-eof.c +110 -0
  382. zuvloop-0.0.1/vendor/libuv/test/test-ref.c +445 -0
  383. zuvloop-0.0.1/vendor/libuv/test/test-run-nowait.c +46 -0
  384. zuvloop-0.0.1/vendor/libuv/test/test-run-once.c +48 -0
  385. zuvloop-0.0.1/vendor/libuv/test/test-semaphore.c +111 -0
  386. zuvloop-0.0.1/vendor/libuv/test/test-shutdown-close.c +108 -0
  387. zuvloop-0.0.1/vendor/libuv/test/test-shutdown-eof.c +188 -0
  388. zuvloop-0.0.1/vendor/libuv/test/test-shutdown-simultaneous.c +135 -0
  389. zuvloop-0.0.1/vendor/libuv/test/test-shutdown-twice.c +85 -0
  390. zuvloop-0.0.1/vendor/libuv/test/test-signal-multiple-loops.c +325 -0
  391. zuvloop-0.0.1/vendor/libuv/test/test-signal-pending-on-close.c +116 -0
  392. zuvloop-0.0.1/vendor/libuv/test/test-signal.c +325 -0
  393. zuvloop-0.0.1/vendor/libuv/test/test-socket-buffer-size.c +77 -0
  394. zuvloop-0.0.1/vendor/libuv/test/test-spawn.c +2112 -0
  395. zuvloop-0.0.1/vendor/libuv/test/test-stdio-over-pipes.c +299 -0
  396. zuvloop-0.0.1/vendor/libuv/test/test-strscpy.c +53 -0
  397. zuvloop-0.0.1/vendor/libuv/test/test-strtok.c +90 -0
  398. zuvloop-0.0.1/vendor/libuv/test/test-tcp-alloc-cb-fail.c +123 -0
  399. zuvloop-0.0.1/vendor/libuv/test/test-tcp-bind-error.c +317 -0
  400. zuvloop-0.0.1/vendor/libuv/test/test-tcp-bind6-error.c +176 -0
  401. zuvloop-0.0.1/vendor/libuv/test/test-tcp-close-accept.c +198 -0
  402. zuvloop-0.0.1/vendor/libuv/test/test-tcp-close-after-read-timeout.c +183 -0
  403. zuvloop-0.0.1/vendor/libuv/test/test-tcp-close-reset.c +340 -0
  404. zuvloop-0.0.1/vendor/libuv/test/test-tcp-close-while-connecting.c +97 -0
  405. zuvloop-0.0.1/vendor/libuv/test/test-tcp-close.c +136 -0
  406. zuvloop-0.0.1/vendor/libuv/test/test-tcp-connect-error-after-write.c +98 -0
  407. zuvloop-0.0.1/vendor/libuv/test/test-tcp-connect-error.c +73 -0
  408. zuvloop-0.0.1/vendor/libuv/test/test-tcp-connect-timeout.c +196 -0
  409. zuvloop-0.0.1/vendor/libuv/test/test-tcp-connect6-error.c +129 -0
  410. zuvloop-0.0.1/vendor/libuv/test/test-tcp-create-socket-early.c +213 -0
  411. zuvloop-0.0.1/vendor/libuv/test/test-tcp-flags.c +59 -0
  412. zuvloop-0.0.1/vendor/libuv/test/test-tcp-oob.c +146 -0
  413. zuvloop-0.0.1/vendor/libuv/test/test-tcp-open.c +407 -0
  414. zuvloop-0.0.1/vendor/libuv/test/test-tcp-read-stop-start.c +136 -0
  415. zuvloop-0.0.1/vendor/libuv/test/test-tcp-read-stop.c +76 -0
  416. zuvloop-0.0.1/vendor/libuv/test/test-tcp-reuseport.c +248 -0
  417. zuvloop-0.0.1/vendor/libuv/test/test-tcp-rst.c +110 -0
  418. zuvloop-0.0.1/vendor/libuv/test/test-tcp-shutdown-after-write.c +138 -0
  419. zuvloop-0.0.1/vendor/libuv/test/test-tcp-try-write-error.c +109 -0
  420. zuvloop-0.0.1/vendor/libuv/test/test-tcp-try-write.c +135 -0
  421. zuvloop-0.0.1/vendor/libuv/test/test-tcp-unexpected-read.c +117 -0
  422. zuvloop-0.0.1/vendor/libuv/test/test-tcp-write-after-connect.c +77 -0
  423. zuvloop-0.0.1/vendor/libuv/test/test-tcp-write-fail.c +115 -0
  424. zuvloop-0.0.1/vendor/libuv/test/test-tcp-write-in-a-row.c +143 -0
  425. zuvloop-0.0.1/vendor/libuv/test/test-tcp-write-queue-order.c +139 -0
  426. zuvloop-0.0.1/vendor/libuv/test/test-tcp-write-to-half-open-connection.c +141 -0
  427. zuvloop-0.0.1/vendor/libuv/test/test-tcp-writealot.c +185 -0
  428. zuvloop-0.0.1/vendor/libuv/test/test-test-macros.c +42 -0
  429. zuvloop-0.0.1/vendor/libuv/test/test-thread-affinity.c +154 -0
  430. zuvloop-0.0.1/vendor/libuv/test/test-thread-equal.c +51 -0
  431. zuvloop-0.0.1/vendor/libuv/test/test-thread-name.c +193 -0
  432. zuvloop-0.0.1/vendor/libuv/test/test-thread-priority.c +105 -0
  433. zuvloop-0.0.1/vendor/libuv/test/test-thread.c +306 -0
  434. zuvloop-0.0.1/vendor/libuv/test/test-threadpool-cancel.c +418 -0
  435. zuvloop-0.0.1/vendor/libuv/test/test-threadpool.c +76 -0
  436. zuvloop-0.0.1/vendor/libuv/test/test-timer-again.c +141 -0
  437. zuvloop-0.0.1/vendor/libuv/test/test-timer-from-check.c +80 -0
  438. zuvloop-0.0.1/vendor/libuv/test/test-timer.c +453 -0
  439. zuvloop-0.0.1/vendor/libuv/test/test-tmpdir.c +89 -0
  440. zuvloop-0.0.1/vendor/libuv/test/test-tty-duplicate-key.c +381 -0
  441. zuvloop-0.0.1/vendor/libuv/test/test-tty-escape-sequence-processing.c +1632 -0
  442. zuvloop-0.0.1/vendor/libuv/test/test-tty.c +468 -0
  443. zuvloop-0.0.1/vendor/libuv/test/test-udp-alloc-cb-fail.c +196 -0
  444. zuvloop-0.0.1/vendor/libuv/test/test-udp-bind.c +93 -0
  445. zuvloop-0.0.1/vendor/libuv/test/test-udp-connect.c +196 -0
  446. zuvloop-0.0.1/vendor/libuv/test/test-udp-connect6.c +199 -0
  447. zuvloop-0.0.1/vendor/libuv/test/test-udp-create-socket-early.c +139 -0
  448. zuvloop-0.0.1/vendor/libuv/test/test-udp-dgram-too-big.c +91 -0
  449. zuvloop-0.0.1/vendor/libuv/test/test-udp-ipv6.c +259 -0
  450. zuvloop-0.0.1/vendor/libuv/test/test-udp-mmsg.c +150 -0
  451. zuvloop-0.0.1/vendor/libuv/test/test-udp-multicast-interface.c +104 -0
  452. zuvloop-0.0.1/vendor/libuv/test/test-udp-multicast-interface6.c +108 -0
  453. zuvloop-0.0.1/vendor/libuv/test/test-udp-multicast-join.c +199 -0
  454. zuvloop-0.0.1/vendor/libuv/test/test-udp-multicast-join6.c +224 -0
  455. zuvloop-0.0.1/vendor/libuv/test/test-udp-multicast-ttl.c +94 -0
  456. zuvloop-0.0.1/vendor/libuv/test/test-udp-open.c +350 -0
  457. zuvloop-0.0.1/vendor/libuv/test/test-udp-options.c +160 -0
  458. zuvloop-0.0.1/vendor/libuv/test/test-udp-recv-in-a-row.c +128 -0
  459. zuvloop-0.0.1/vendor/libuv/test/test-udp-reuseport.c +287 -0
  460. zuvloop-0.0.1/vendor/libuv/test/test-udp-send-and-recv.c +212 -0
  461. zuvloop-0.0.1/vendor/libuv/test/test-udp-send-hang-loop.c +99 -0
  462. zuvloop-0.0.1/vendor/libuv/test/test-udp-send-immediate.c +148 -0
  463. zuvloop-0.0.1/vendor/libuv/test/test-udp-send-unreachable.c +201 -0
  464. zuvloop-0.0.1/vendor/libuv/test/test-udp-sendmmsg-error.c +75 -0
  465. zuvloop-0.0.1/vendor/libuv/test/test-udp-try-send.c +149 -0
  466. zuvloop-0.0.1/vendor/libuv/test/test-uname.c +69 -0
  467. zuvloop-0.0.1/vendor/libuv/test/test-walk-handles.c +77 -0
  468. zuvloop-0.0.1/vendor/libuv/test/test-watcher-cross-stop.c +112 -0
  469. zuvloop-0.0.1/vendor/libuv/tools/make_dist_html.py +122 -0
  470. zuvloop-0.0.1/vendor/libuv/tools/vswhere_usability_wrapper.cmd +33 -0
  471. zuvloop-0.0.1/vendor/libuv/tsansupp.txt +2 -0
  472. zuvloop-0.0.1/vendor/libuv/uv_win_longpath.manifest +8 -0
  473. zuvloop-0.0.1/vendor/update-libuv.sh +21 -0
  474. zuvloop-0.0.1/zig/addr.zig +107 -0
  475. zuvloop-0.0.1/zig/c.zig +4 -0
  476. zuvloop-0.0.1/zig/collections.zig +176 -0
  477. zuvloop-0.0.1/zig/datagram.zig +713 -0
  478. zuvloop-0.0.1/zig/dns.zig +416 -0
  479. zuvloop-0.0.1/zig/handle.zig +263 -0
  480. zuvloop-0.0.1/zig/loop.zig +1025 -0
  481. zuvloop-0.0.1/zig/module.zig +46 -0
  482. zuvloop-0.0.1/zig/poller.zig +169 -0
  483. zuvloop-0.0.1/zig/process.zig +334 -0
  484. zuvloop-0.0.1/zig/py.zig +293 -0
  485. zuvloop-0.0.1/zig/transport.zig +1255 -0
  486. zuvloop-0.0.1/zig/uv.zig +331 -0
  487. zuvloop-0.0.1/zuvloop/__init__.py +17 -0
  488. zuvloop-0.0.1/zuvloop/_base.py +383 -0
  489. zuvloop-0.0.1/zuvloop/_connect.py +850 -0
  490. zuvloop-0.0.1/zuvloop/_instrumentation.py +142 -0
  491. zuvloop-0.0.1/zuvloop/_loop.py +64 -0
  492. zuvloop-0.0.1/zuvloop/_process.py +134 -0
  493. zuvloop-0.0.1/zuvloop/_runner.py +18 -0
  494. zuvloop-0.0.1/zuvloop/_server.py +169 -0
  495. zuvloop-0.0.1/zuvloop/_sockets.py +149 -0
  496. zuvloop-0.0.1/zuvloop/_zuvloop.pyi +140 -0
  497. zuvloop-0.0.1/zuvloop/py.typed +0 -0
@@ -0,0 +1,24 @@
1
+ .zig-cache/
2
+ zig-out/
3
+ __pycache__/
4
+ *.py[cod]
5
+ *.so
6
+ .venv/
7
+ .coverage
8
+ .pytest_cache/
9
+ .mypy_cache/
10
+ .ruff_cache/
11
+ dist/
12
+ build/
13
+ tests/certs/
14
+
15
+ # Rendered documentation
16
+ site/
17
+
18
+ # CodSpeed run data
19
+ .codspeed/
20
+
21
+ # Compiled extension, built in place
22
+ zuvloop/*.so
23
+ zig-out/
24
+ .conformance/
zuvloop-0.0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Marcelo Trylesinski
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
zuvloop-0.0.1/PKG-INFO ADDED
@@ -0,0 +1,222 @@
1
+ Metadata-Version: 2.4
2
+ Name: zuvloop
3
+ Version: 0.0.1
4
+ Summary: A libuv event loop for asyncio, written in Zig.
5
+ Project-URL: Source, https://github.com/Kludex/zuvloop
6
+ Author-email: Marcelo Trylesinski <marcelotryle@gmail.com>
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ License-File: vendor/libuv/LICENSE
10
+ License-File: vendor/libuv/LICENSE-docs
11
+ License-File: vendor/libuv/LICENSE-extra
12
+ Keywords: asyncio,event-loop,libuv,uvloop,zig
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Framework :: AsyncIO
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Programming Language :: Zig
20
+ Classifier: Typing :: Typed
21
+ Requires-Python: >=3.14
22
+ Requires-Dist: opentelemetry-api>=1.23
23
+ Description-Content-Type: text/markdown
24
+
25
+ # zuvloop
26
+
27
+ <p align="center">
28
+ <em>A fast, drop-in asyncio event loop, powered by libuv and written in Zig ⚡</em>
29
+ </p>
30
+
31
+ ---
32
+
33
+ **Documentation**: <a href="https://zuvloop.marcelotryle.com" target="_blank">https://zuvloop.marcelotryle.com</a>
34
+
35
+ **Source Code**: <a href="https://github.com/Kludex/zuvloop" target="_blank">https://github.com/Kludex/zuvloop</a>
36
+
37
+ ---
38
+
39
+ zuvloop is a replacement for the built-in `asyncio` event loop.
40
+
41
+ Your code stays the same. The loop underneath gets faster. 🚀
42
+
43
+ The key features are:
44
+
45
+ - **Fast**: Scheduling, timers, sockets, and DNS run in native code, driven by [libuv](https://libuv.org) — the same engine behind Node.js. Up to **6x faster than asyncio** and faster than [uvloop](https://github.com/MagicStack/uvloop) on every benchmark below.
46
+ - **Drop-in**: One line to switch. Everything is standard `asyncio` — same `Task` objects, same protocols, same APIs.
47
+ - **Fully typed**: Ships type hints for everything and passes **strict mypy**. Your editor will love it. ✨
48
+ - **Observable**: Built-in [OpenTelemetry](https://opentelemetry.io) instrumentation — slow-callback spans, unhandled-exception spans, loop metrics. Zero cost until you turn it on.
49
+ - **Modern**: Built for Python 3.14, including the new asyncio introspection tools (`python -m asyncio ps`, call graphs, and friends).
50
+
51
+ ## Performance
52
+
53
+ <p align="center">
54
+ <img src="docs/assets/performance.png" alt="zuvloop vs uvloop vs asyncio benchmarks">
55
+ </p>
56
+
57
+ Throughput relative to stock asyncio (higher is better), measured with the suite in
58
+ `benchmarks/` on an M3 Max, macOS 26, CPython 3.14. The labels show the absolute numbers.
59
+
60
+ | Benchmark | asyncio | uvloop | zuvloop |
61
+ | --- | ---: | ---: | ---: |
62
+ | `call_soon` | 2.69M/s | 4.69M/s | **5.91M/s** |
63
+ | `call_soon` with arguments | 2.43M/s | 3.87M/s | **6.47M/s** |
64
+ | timer schedule + cancel | 1.58M/s | 2.62M/s | **9.55M/s** |
65
+ | bulk stream | 8.4 GiB/s | 8.5 GiB/s | **10.2 GiB/s** |
66
+ | echo round trips, 1 KiB | 39.0k/s | 56.8k/s | **58.5k/s** |
67
+ | uvicorn, plaintext | 55.3k req/s | 71.9k req/s | **75.9k req/s** |
68
+ | uvicorn, 10 KiB body | 52.6k req/s | 68.7k req/s | **73.6k req/s** |
69
+ | aiohttp server | 49.0k req/s | 59.8k req/s | **60.6k req/s** |
70
+ | aiohttp client | 13.2k req/s | 16.2k req/s | **16.9k req/s** |
71
+ | `getaddrinfo`, numeric host | 28.5k/s | 1.57M/s | **1.90M/s** |
72
+
73
+ Curious how? The [architecture docs](https://zuvloop.marcelotryle.com) explain the design:
74
+ argument storage inside handles (no tuple per callback), a native timer heap behind a single
75
+ `uv_timer_t`, per-turn vectored write batching, zero-copy reads, and a `getaddrinfo` fast path
76
+ for address literals.
77
+
78
+ ## Requirements
79
+
80
+ - Python 3.14+
81
+ - Linux or macOS
82
+
83
+ ## Installation
84
+
85
+ ```console
86
+ $ pip install zuvloop
87
+ ```
88
+
89
+ To build from source you also need [Zig](https://ziglang.org/download/) 0.16.
90
+
91
+ ## Example
92
+
93
+ Write normal asyncio code, run it with zuvloop:
94
+
95
+ ```python
96
+ import asyncio
97
+
98
+ import zuvloop
99
+
100
+
101
+ async def main() -> None:
102
+ reader, writer = await asyncio.open_connection("example.com", 80)
103
+ writer.write(b"GET / HTTP/1.0\r\nHost: example.com\r\n\r\n")
104
+ await writer.drain()
105
+ print(await reader.read(64))
106
+ writer.close()
107
+ await writer.wait_closed()
108
+
109
+
110
+ zuvloop.run(main())
111
+ ```
112
+
113
+ Prefer to keep `asyncio.run()`? Hand it the loop factory:
114
+
115
+ ```python
116
+ asyncio.run(main(), loop_factory=zuvloop.new_event_loop)
117
+ ```
118
+
119
+ That's it. That's the migration. 🎉
120
+
121
+ ## Observability
122
+
123
+ zuvloop emits plain OpenTelemetry. The only runtime dependency is `opentelemetry-api` — not the
124
+ SDK, nothing vendor-specific. Until your application installs a provider, the instruments are
125
+ no-ops and cost nothing.
126
+
127
+ Anything that speaks OpenTelemetry can collect it. For example, with
128
+ <a href="https://logfire.pydantic.dev" target="_blank">Logfire</a>:
129
+
130
+ ```python
131
+ import logfire
132
+ import zuvloop
133
+
134
+ logfire.configure() # installs the OTel providers
135
+
136
+
137
+ async def main() -> None: ...
138
+
139
+
140
+ zuvloop.run(main())
141
+ ```
142
+
143
+ That's all — there is no zuvloop-specific setup. Spans and counters are emitted
144
+ as events happen, and the loop gauges are sampled automatically while the loop
145
+ runs (only when a real provider is installed, so an uninstrumented program never
146
+ pays for sampling).
147
+
148
+ You get:
149
+
150
+ - **`zuvloop.slow_callback`** spans — with real start/end timestamps measured by `uv_hrtime()`
151
+ in native code, and the awaiting call graph attached (via `asyncio.format_call_graph()`),
152
+ so you see *why* a callback was running, not just its repr.
153
+ - **`zuvloop.unhandled_exception`** spans — with the exception recorded.
154
+ - Counters, a callback-duration histogram, and live loop gauges (`loop_count`, `events`,
155
+ `idle_time_ns`, `ready`, `timers`, `watchers`, ...).
156
+
157
+ And because zuvloop schedules real `asyncio.Task` objects, the Python 3.14 introspection tools
158
+ work unchanged:
159
+
160
+ ```console
161
+ $ python -m asyncio ps <pid>
162
+ $ python -m asyncio pstree <pid>
163
+ ```
164
+
165
+ ## Compatibility
166
+
167
+ zuvloop is checked against CPython's own conformance suite and against the test suites of the
168
+ projects that exercise an event loop hardest — run unmodified, with the loop swapped underneath:
169
+
170
+ | Suite | Result |
171
+ | --- | --- |
172
+ | CPython `test_asyncio` | 88 passed, 4 skipped, none failing |
173
+ | uvicorn | 1257 passed, no failures |
174
+ | aiohttp | 4473 passed, 36 failed — 33 of which also fail on stock asyncio |
175
+
176
+ `scripts/conformance.py` runs CPython's `EventLoopTestsMixin`, `SubprocessTestsMixin` and
177
+ `BaseSockTestsMixin` against zuvloop, downloading the source of whichever interpreter is running
178
+ so the suite always matches it. Each test runs in its own process, so a hang is reported rather
179
+ than stopping the run. Three of the four skips are white-box tests of CPython's own internals -
180
+ two patch `asyncio.base_events.socket`, one counts calls to `BaseEventLoop._run_once` - which no
181
+ loop outside the standard library can satisfy.
182
+
183
+ Of aiohttp's three remaining failures, two are `blockbuster` reporting a blocking `os.stat` that
184
+ the standard library makes on the same path, and the third is the `loop.time()` difference below.
185
+
186
+ (For reference: uvloop cannot complete the aiohttp suite — it fails fifteen tests and then hangs.)
187
+
188
+ There is one intentional difference: **patching `loop.time()` does not move the scheduler**.
189
+ zuvloop keeps its timer heap in native code and reads the clock directly, so monkeypatching
190
+ `time()` — a trick some test suites use to fast-forward timeouts — changes what `loop.time()`
191
+ returns and nothing else. A loop that needs a controllable clock should schedule against one
192
+ explicitly.
193
+
194
+ Also not implemented: `sendfile()` and `sock_sendfile()` raise `NotImplementedError`. Handles
195
+ returned by `call_soon` and `call_later` implement the `asyncio.Handle` and
196
+ `asyncio.TimerHandle` interfaces but are not instances of those classes; `call_soon_threadsafe`
197
+ does return a real `asyncio.Handle`, because 3.14 requires cancelling one from another thread to
198
+ block until a callback that has already started finishes.
199
+
200
+ ## Development
201
+
202
+ ```console
203
+ $ uv venv --python 3.14
204
+ $ uv pip install -e . --group dev
205
+ $ uv run pytest
206
+ $ uv run mypy
207
+ $ uv run ruff check
208
+ $ uv run --group bench python benchmarks/run.py
209
+ ```
210
+
211
+ The extension is rebuilt by `hatch_build.py` on every install. To rebuild in place:
212
+
213
+ ```console
214
+ $ python scripts/build.py
215
+ ```
216
+
217
+ `vendor/libuv` is an unmodified upstream release tarball; see `vendor/README.md`. Update it with
218
+ `./vendor/update-libuv.sh <version>`.
219
+
220
+ ## License
221
+
222
+ This project is licensed under the terms of the MIT license.
@@ -0,0 +1,198 @@
1
+ # zuvloop
2
+
3
+ <p align="center">
4
+ <em>A fast, drop-in asyncio event loop, powered by libuv and written in Zig ⚡</em>
5
+ </p>
6
+
7
+ ---
8
+
9
+ **Documentation**: <a href="https://zuvloop.marcelotryle.com" target="_blank">https://zuvloop.marcelotryle.com</a>
10
+
11
+ **Source Code**: <a href="https://github.com/Kludex/zuvloop" target="_blank">https://github.com/Kludex/zuvloop</a>
12
+
13
+ ---
14
+
15
+ zuvloop is a replacement for the built-in `asyncio` event loop.
16
+
17
+ Your code stays the same. The loop underneath gets faster. 🚀
18
+
19
+ The key features are:
20
+
21
+ - **Fast**: Scheduling, timers, sockets, and DNS run in native code, driven by [libuv](https://libuv.org) — the same engine behind Node.js. Up to **6x faster than asyncio** and faster than [uvloop](https://github.com/MagicStack/uvloop) on every benchmark below.
22
+ - **Drop-in**: One line to switch. Everything is standard `asyncio` — same `Task` objects, same protocols, same APIs.
23
+ - **Fully typed**: Ships type hints for everything and passes **strict mypy**. Your editor will love it. ✨
24
+ - **Observable**: Built-in [OpenTelemetry](https://opentelemetry.io) instrumentation — slow-callback spans, unhandled-exception spans, loop metrics. Zero cost until you turn it on.
25
+ - **Modern**: Built for Python 3.14, including the new asyncio introspection tools (`python -m asyncio ps`, call graphs, and friends).
26
+
27
+ ## Performance
28
+
29
+ <p align="center">
30
+ <img src="docs/assets/performance.png" alt="zuvloop vs uvloop vs asyncio benchmarks">
31
+ </p>
32
+
33
+ Throughput relative to stock asyncio (higher is better), measured with the suite in
34
+ `benchmarks/` on an M3 Max, macOS 26, CPython 3.14. The labels show the absolute numbers.
35
+
36
+ | Benchmark | asyncio | uvloop | zuvloop |
37
+ | --- | ---: | ---: | ---: |
38
+ | `call_soon` | 2.69M/s | 4.69M/s | **5.91M/s** |
39
+ | `call_soon` with arguments | 2.43M/s | 3.87M/s | **6.47M/s** |
40
+ | timer schedule + cancel | 1.58M/s | 2.62M/s | **9.55M/s** |
41
+ | bulk stream | 8.4 GiB/s | 8.5 GiB/s | **10.2 GiB/s** |
42
+ | echo round trips, 1 KiB | 39.0k/s | 56.8k/s | **58.5k/s** |
43
+ | uvicorn, plaintext | 55.3k req/s | 71.9k req/s | **75.9k req/s** |
44
+ | uvicorn, 10 KiB body | 52.6k req/s | 68.7k req/s | **73.6k req/s** |
45
+ | aiohttp server | 49.0k req/s | 59.8k req/s | **60.6k req/s** |
46
+ | aiohttp client | 13.2k req/s | 16.2k req/s | **16.9k req/s** |
47
+ | `getaddrinfo`, numeric host | 28.5k/s | 1.57M/s | **1.90M/s** |
48
+
49
+ Curious how? The [architecture docs](https://zuvloop.marcelotryle.com) explain the design:
50
+ argument storage inside handles (no tuple per callback), a native timer heap behind a single
51
+ `uv_timer_t`, per-turn vectored write batching, zero-copy reads, and a `getaddrinfo` fast path
52
+ for address literals.
53
+
54
+ ## Requirements
55
+
56
+ - Python 3.14+
57
+ - Linux or macOS
58
+
59
+ ## Installation
60
+
61
+ ```console
62
+ $ pip install zuvloop
63
+ ```
64
+
65
+ To build from source you also need [Zig](https://ziglang.org/download/) 0.16.
66
+
67
+ ## Example
68
+
69
+ Write normal asyncio code, run it with zuvloop:
70
+
71
+ ```python
72
+ import asyncio
73
+
74
+ import zuvloop
75
+
76
+
77
+ async def main() -> None:
78
+ reader, writer = await asyncio.open_connection("example.com", 80)
79
+ writer.write(b"GET / HTTP/1.0\r\nHost: example.com\r\n\r\n")
80
+ await writer.drain()
81
+ print(await reader.read(64))
82
+ writer.close()
83
+ await writer.wait_closed()
84
+
85
+
86
+ zuvloop.run(main())
87
+ ```
88
+
89
+ Prefer to keep `asyncio.run()`? Hand it the loop factory:
90
+
91
+ ```python
92
+ asyncio.run(main(), loop_factory=zuvloop.new_event_loop)
93
+ ```
94
+
95
+ That's it. That's the migration. 🎉
96
+
97
+ ## Observability
98
+
99
+ zuvloop emits plain OpenTelemetry. The only runtime dependency is `opentelemetry-api` — not the
100
+ SDK, nothing vendor-specific. Until your application installs a provider, the instruments are
101
+ no-ops and cost nothing.
102
+
103
+ Anything that speaks OpenTelemetry can collect it. For example, with
104
+ <a href="https://logfire.pydantic.dev" target="_blank">Logfire</a>:
105
+
106
+ ```python
107
+ import logfire
108
+ import zuvloop
109
+
110
+ logfire.configure() # installs the OTel providers
111
+
112
+
113
+ async def main() -> None: ...
114
+
115
+
116
+ zuvloop.run(main())
117
+ ```
118
+
119
+ That's all — there is no zuvloop-specific setup. Spans and counters are emitted
120
+ as events happen, and the loop gauges are sampled automatically while the loop
121
+ runs (only when a real provider is installed, so an uninstrumented program never
122
+ pays for sampling).
123
+
124
+ You get:
125
+
126
+ - **`zuvloop.slow_callback`** spans — with real start/end timestamps measured by `uv_hrtime()`
127
+ in native code, and the awaiting call graph attached (via `asyncio.format_call_graph()`),
128
+ so you see *why* a callback was running, not just its repr.
129
+ - **`zuvloop.unhandled_exception`** spans — with the exception recorded.
130
+ - Counters, a callback-duration histogram, and live loop gauges (`loop_count`, `events`,
131
+ `idle_time_ns`, `ready`, `timers`, `watchers`, ...).
132
+
133
+ And because zuvloop schedules real `asyncio.Task` objects, the Python 3.14 introspection tools
134
+ work unchanged:
135
+
136
+ ```console
137
+ $ python -m asyncio ps <pid>
138
+ $ python -m asyncio pstree <pid>
139
+ ```
140
+
141
+ ## Compatibility
142
+
143
+ zuvloop is checked against CPython's own conformance suite and against the test suites of the
144
+ projects that exercise an event loop hardest — run unmodified, with the loop swapped underneath:
145
+
146
+ | Suite | Result |
147
+ | --- | --- |
148
+ | CPython `test_asyncio` | 88 passed, 4 skipped, none failing |
149
+ | uvicorn | 1257 passed, no failures |
150
+ | aiohttp | 4473 passed, 36 failed — 33 of which also fail on stock asyncio |
151
+
152
+ `scripts/conformance.py` runs CPython's `EventLoopTestsMixin`, `SubprocessTestsMixin` and
153
+ `BaseSockTestsMixin` against zuvloop, downloading the source of whichever interpreter is running
154
+ so the suite always matches it. Each test runs in its own process, so a hang is reported rather
155
+ than stopping the run. Three of the four skips are white-box tests of CPython's own internals -
156
+ two patch `asyncio.base_events.socket`, one counts calls to `BaseEventLoop._run_once` - which no
157
+ loop outside the standard library can satisfy.
158
+
159
+ Of aiohttp's three remaining failures, two are `blockbuster` reporting a blocking `os.stat` that
160
+ the standard library makes on the same path, and the third is the `loop.time()` difference below.
161
+
162
+ (For reference: uvloop cannot complete the aiohttp suite — it fails fifteen tests and then hangs.)
163
+
164
+ There is one intentional difference: **patching `loop.time()` does not move the scheduler**.
165
+ zuvloop keeps its timer heap in native code and reads the clock directly, so monkeypatching
166
+ `time()` — a trick some test suites use to fast-forward timeouts — changes what `loop.time()`
167
+ returns and nothing else. A loop that needs a controllable clock should schedule against one
168
+ explicitly.
169
+
170
+ Also not implemented: `sendfile()` and `sock_sendfile()` raise `NotImplementedError`. Handles
171
+ returned by `call_soon` and `call_later` implement the `asyncio.Handle` and
172
+ `asyncio.TimerHandle` interfaces but are not instances of those classes; `call_soon_threadsafe`
173
+ does return a real `asyncio.Handle`, because 3.14 requires cancelling one from another thread to
174
+ block until a callback that has already started finishes.
175
+
176
+ ## Development
177
+
178
+ ```console
179
+ $ uv venv --python 3.14
180
+ $ uv pip install -e . --group dev
181
+ $ uv run pytest
182
+ $ uv run mypy
183
+ $ uv run ruff check
184
+ $ uv run --group bench python benchmarks/run.py
185
+ ```
186
+
187
+ The extension is rebuilt by `hatch_build.py` on every install. To rebuild in place:
188
+
189
+ ```console
190
+ $ python scripts/build.py
191
+ ```
192
+
193
+ `vendor/libuv` is an unmodified upstream release tarball; see `vendor/README.md`. Update it with
194
+ `./vendor/update-libuv.sh <version>`.
195
+
196
+ ## License
197
+
198
+ This project is licensed under the terms of the MIT license.
@@ -0,0 +1,134 @@
1
+ const std = @import("std");
2
+
3
+ const uv_common = [_][]const u8{
4
+ "src/fs-poll.c",
5
+ "src/idna.c",
6
+ "src/inet.c",
7
+ "src/random.c",
8
+ "src/strscpy.c",
9
+ "src/strtok.c",
10
+ "src/thread-common.c",
11
+ "src/threadpool.c",
12
+ "src/timer.c",
13
+ "src/uv-common.c",
14
+ "src/uv-data-getter-setters.c",
15
+ "src/version.c",
16
+ };
17
+
18
+ const uv_unix = [_][]const u8{
19
+ "src/unix/async.c",
20
+ "src/unix/core.c",
21
+ "src/unix/dl.c",
22
+ "src/unix/fs.c",
23
+ "src/unix/getaddrinfo.c",
24
+ "src/unix/getnameinfo.c",
25
+ "src/unix/loop-watcher.c",
26
+ "src/unix/loop.c",
27
+ "src/unix/pipe.c",
28
+ "src/unix/poll.c",
29
+ "src/unix/process.c",
30
+ "src/unix/random-devurandom.c",
31
+ "src/unix/signal.c",
32
+ "src/unix/stream.c",
33
+ "src/unix/tcp.c",
34
+ "src/unix/thread.c",
35
+ "src/unix/tty.c",
36
+ "src/unix/udp.c",
37
+ };
38
+
39
+ const uv_darwin = [_][]const u8{
40
+ "src/unix/bsd-ifaddrs.c",
41
+ "src/unix/darwin-proctitle.c",
42
+ "src/unix/darwin.c",
43
+ "src/unix/fsevents.c",
44
+ "src/unix/kqueue.c",
45
+ "src/unix/proctitle.c",
46
+ "src/unix/random-getentropy.c",
47
+ };
48
+
49
+ const uv_linux = [_][]const u8{
50
+ "src/unix/linux.c",
51
+ "src/unix/procfs-exepath.c",
52
+ "src/unix/proctitle.c",
53
+ "src/unix/random-getrandom.c",
54
+ "src/unix/random-sysctl-linux.c",
55
+ };
56
+
57
+ pub fn build(b: *std.Build) void {
58
+ const target = b.standardTargetOptions(.{});
59
+ const optimize = b.standardOptimizeOption(.{});
60
+
61
+ // hatch-ziglang passes the building interpreter through the environment, so a
62
+ // wheel is always built against the interpreter that asked for it. The `-D`
63
+ // options are for building by hand.
64
+ const python_include = b.option([]const u8, "python-include", "CPython include directory") orelse
65
+ (b.graph.environ_map.get("HATCH_ZIG_PYTHON_INCLUDE") orelse
66
+ @panic("python-include is required: pass -Dpython-include or set HATCH_ZIG_PYTHON_INCLUDE"));
67
+ const ext_suffix = b.option([]const u8, "ext-suffix", "Extension module suffix") orelse
68
+ (b.graph.environ_map.get("HATCH_ZIG_EXT_SUFFIX") orelse ".so");
69
+ const os = target.result.os.tag;
70
+
71
+ const mod = b.createModule(.{
72
+ .root_source_file = b.path("zig/module.zig"),
73
+ .target = target,
74
+ .optimize = optimize,
75
+ .link_libc = true,
76
+ .pic = true,
77
+ });
78
+ mod.addIncludePath(.{ .cwd_relative = python_include });
79
+ mod.addIncludePath(b.path("vendor/libuv/include"));
80
+ mod.addIncludePath(b.path("vendor/libuv/src"));
81
+
82
+ var uv_flags: std.ArrayList([]const u8) = .empty;
83
+ uv_flags.appendSlice(b.allocator, &.{
84
+ "-std=gnu11",
85
+ "-fno-strict-aliasing",
86
+ "-D_FILE_OFFSET_BITS=64",
87
+ "-D_LARGEFILE_SOURCE",
88
+ "-Wno-unused-parameter",
89
+ }) catch @panic("OOM");
90
+
91
+ var uv_files: std.ArrayList([]const u8) = .empty;
92
+ uv_files.appendSlice(b.allocator, &uv_common) catch @panic("OOM");
93
+ uv_files.appendSlice(b.allocator, &uv_unix) catch @panic("OOM");
94
+ switch (os) {
95
+ .macos, .ios, .watchos, .tvos => {
96
+ uv_files.appendSlice(b.allocator, &uv_darwin) catch @panic("OOM");
97
+ uv_flags.appendSlice(b.allocator, &.{
98
+ "-D_DARWIN_UNLIMITED_SELECT=1",
99
+ "-D_DARWIN_USE_64_BIT_INODE=1",
100
+ }) catch @panic("OOM");
101
+ },
102
+ .linux => {
103
+ uv_files.appendSlice(b.allocator, &uv_linux) catch @panic("OOM");
104
+ uv_flags.appendSlice(b.allocator, &.{
105
+ "-D_GNU_SOURCE",
106
+ "-D_POSIX_C_SOURCE=200112",
107
+ }) catch @panic("OOM");
108
+ },
109
+ else => @panic("unsupported target: zuvloop builds on Linux and macOS"),
110
+ }
111
+
112
+ mod.addCSourceFiles(.{
113
+ .root = b.path("vendor/libuv"),
114
+ .files = uv_files.items,
115
+ .flags = uv_flags.items,
116
+ });
117
+
118
+ const lib = b.addLibrary(.{
119
+ .name = "_zuvloop",
120
+ .root_module = mod,
121
+ .linkage = .dynamic,
122
+ });
123
+ lib.linker_allow_shlib_undefined = true;
124
+ lib.bundle_compiler_rt = true;
125
+ if (os == .linux) mod.linkSystemLibrary("rt", .{});
126
+
127
+ // Relative to the install prefix, so with the default `zig-out` the module
128
+ // lands beside the Python sources, which is where the build hook looks.
129
+ b.getInstallStep().dependOn(&b.addInstallFileWithDir(
130
+ lib.getEmittedBin(),
131
+ .{ .custom = "../zuvloop" },
132
+ b.fmt("_zuvloop{s}", .{ext_suffix}),
133
+ ).step);
134
+ }
@@ -0,0 +1,12 @@
1
+ .{
2
+ .name = .zuvloop,
3
+ .version = "0.1.0",
4
+ .fingerprint = 0x78121bf4a4379c83,
5
+ .minimum_zig_version = "0.16.0",
6
+ .paths = .{
7
+ "build.zig",
8
+ "build.zig.zon",
9
+ "zig",
10
+ "vendor",
11
+ },
12
+ }