## Problem Windows builds break with a current local toolchain (Scoop LLVM 22.1.8, CMake 4.4.0, VS 2026), in two independent ways: 1. The build stops at curl's deliberate guard: `#error "no non-blocking method was found/used/set"` in `third-party/curl/lib/nonblock.c`. 2. From the second configure onward, `cmake --build` re-runs CMake in an endless loop (observed 42 consecutive reconfigure cycles in a single build). Likely the same mechanism behind the "endlessly building" VS 2026 note in `docs/setup/dev/vs.md`. ## Root cause 1. `third-party/curl/CMake/CurlTests.c` passes `int *` to `ioctlsocket()`, whose third parameter is `u_long *`. Clang 22 promotes `-Wincompatible-pointer-types` to a hard error in C, so the `HAVE_IOCTLSOCKET_FIONBIO` try_compile silently fails and `curl_config.h` never defines it. Upstream CI does not see this because the windows-2022 runner image ships an older LLVM. GCC 14 promotes the same warning to a hard error, which is very likely the `CurlTests.c.obj` failure reported from MSYS2 in open-goal/jak-project#3551. Upstream curl hit the identical problem with GCC 14 and fixed the probe in curl 8.8.0 (curl/curl#13578). 2. The root CMakeLists copies the build tree's `compile_commands.json` into `<src>/build/` for clangd using `configure_file()`, which registers its input as a configure dependency. CMake rewrites `compile_commands.json` late in every generation, after `CTestTestfile.cmake` and `cmake_install.cmake` (outputs of the same Ninja regen rule), so once the dependency is registered the rule is deterministically dirty and every `ninja` invocation re-runs CMake. A pristine first configure is safe (the file does not exist yet, so the `if(EXISTS ...)` guard skips the copy), which is why the loop looks machine- or IDE-specific. ## Fix 1. Per review, re-vendor `third-party/curl` at the `curl-8_21_0` tag (previously `curl-8_3_0`), which carries the upstream probe fix plus two years of upstream development; `vendor.yaml` updated to match. Adjustments the version jump forced: - curl 8.15 removed the native macOS Secure Transport backend (`CURL_USE_SECTRANSP`), so macOS now builds curl against OpenSSL like Linux. The two macOS workflows install Homebrew `openssl@3` and export `OPENSSL_ROOT_DIR` (keg-only), and the macOS setup docs gained the same two lines. - `CURL_BROTLI` / `CURL_ZSTD` switched to AUTO-detection in curl 8.10; pinned OFF to keep the previous no-compression behavior and avoid silently linking whatever the CI images happen to have. - curl's new top-level `BUILD_EXAMPLES` cache option (default ON) leaked into discord-rpc's identically named option and broke configure at a nonexistent `examples/send-presence` directory; pinned OFF ahead of the third-party subdirectories. The diff is dominated by the mechanical tag-tree swap under `third-party/curl` (linguist-vendored, collapsed in review). The hand-written changes are `CMakeLists.txt`, the two macOS workflows, `docs/setup/system/macos.md`, and `vendor.yaml`. 2. Swap `configure_file()` for `file(COPY ...)`: the same clangd copy with no configure dependency registered. (`file(COPY_FILE ... ONLY_IF_DIFFERENT)` would be cleaner still but requires CMake 3.21, above the declared `cmake_minimum_required(VERSION 3.10)`.) ## Test plan - [x] Fresh `cmake --preset Release-windows-clang` (LLVM 22, no cache seeding) completes and logs `Enabled SSL backends: Schannel`; the FIONBIO probe passes without the previous `#error` - [x] Full Windows Release build from scratch in the branch worktree (all 1422 targets) - [x] goalc-test suite: 1509 passed, 0 failed - [x] Second consecutive configure with `compile_commands.json` present: the regen rule in `build.ninja` has no `compile_commands.json` input; `<src>/build/compile_commands.json` is still refreshed for clangd - [x] Repeated `ninja` invocations after a full build no longer re-run CMake - [x] macOS Intel and ARM CI green (first exercise of the OpenSSL backend switch) --- I work off a self-hosted forge, so this GitHub account is quiet; the configure logs and ninja dirty-node traces from the investigation are available if anyone wants the raw data. (AI-assisted)
6.5 KiB
Vendored
Generated
libcurl bindings
Creative people have written bindings or interfaces for various environments and programming languages. Using one of these allows you to take advantage of curl powers from within your favorite language or system.
This is a list of all known interfaces as of this writing.
The bindings listed below are not part of the curl/libcurl distribution archives, but must be downloaded and installed separately.
Ada95 Written by Andreas Almroth
Basic ScriptBasic bindings written by Peter Verhas
C++: curlpp Written by Jean-Philippe Barrette-LaPierre, curlcpp by Giuseppe Persico and C++ Requests by Huu Nguyen
Ch Written by Stephen Nestinger and Jonathan Rogado
Cocoa: BBHTTP written by Bruno de Carvalho curlhandle Written by Dan Wood
Clojure: clj-curl by Lucas Severo
D Written by Kenneth Bogert
Delphi Written by Mikhail Merkuryev
Dylan Written by Chris Double
Eiffel Written by Eiffel Software
Euphoria Written by Ray Smith
Ferite Written by Paul Querna
Fortran Written by Philipp Engel
glib/GTK+ Written by Richard Atterer
Go: go-curl by ShuYu Wang
Guile Written by Michael L. Gran
Harbour Written by Viktor Szakats
Haskell Written by Galois, Inc
Hollywood hURL by Andreas Falkenhahn
Julia Written by Amit Murthy
Katipo is an Erlang HTTP library around libcurl.
Lisp Written by Liam Healy
LibQurl a feature-rich AutoHotKey v2 (AHKv2) wrapper around libcurl.
Lua: luacurl by Alexander Marinov, Lua-curl by Jürgen Hötzel
Mono Written by Jeffrey Phillips
.NET libcurl-net by Jeffrey Phillips
Nim wrapper for libcurl
node.js node-libcurl by Jonathan Cardoso Machado
Object-Pascal Free Pascal, Delphi and Kylix binding written by Christophe Espern.
OCaml Written by Lars Nilsson and ygrek
Pascal Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
Perl: WWW::Curl Maintained by Cris Bailiff and Bálint Szilakszi, perl6-net-curl by Ahmad M. Zawawi NET::Curl by Przemyslaw Iskra
PHP Originally written by Sterling Hughes
PostgreSQL - HTTP client for PostgreSQL
PostgreSQL - curl client for PostgreSQL
PureBasic uses libcurl in its "native" HTTP subsystem
Python PycURL by Kjetil Jacobsen
Python mcurl by Ganesh Viswanathan
Q The libcurl module is part of the default install
Rexx Written by Mark Hessling
Ring RingLibCurl by Mahmoud Fayed
RPG, support for ILE/RPG on OS/400 is included in source distribution
Ruby: curb written by Ross Bamford, ruby-curl-multi by Kristjan Petursson and Keith Rarick
Rust curl-rust - by Carl Lerche
Scheme Bigloo binding by Kirill Lisovsky
Scilab binding by Sylvestre Ledru
S-Lang by John E Davis
Smalltalk Written by Danil Osipchuk
SP-Forth Written by Andrey Cherezov
SPL Written by Clifford Wolf
Tcl Tclcurl by Andrés García
Vibe HTTP requests through libcurl in V
Visual Basic libcurl-vb by Jeffrey Phillips
Visual Foxpro by Carlos Alloatti
wxWidgets Written by Casey O'Donnell
XBLite Written by David Szafranski
Xojo Written by Andrew Lambert
Zig Written by Jiacai Liu, both easy and multi API are supported.