mirror of
https://github.com/open-goal/jak-project
synced 2026-08-20 14:24:45 -04:00
5d5e35fb9b
## 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)
86 lines
2.9 KiB
Markdown
Vendored
Generated
86 lines
2.9 KiB
Markdown
Vendored
Generated
<!--
|
|
Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
|
|
SPDX-License-Identifier: curl
|
|
-->
|
|
|
|
# Items to be removed from future curl releases
|
|
|
|
If any of these deprecated features is a cause for concern for you, please
|
|
email the
|
|
[curl-library mailing list](https://lists.haxx.se/listinfo/curl-library)
|
|
as soon as possible and explain to us why this is a problem for you and
|
|
how your use case cannot be satisfied properly using a workaround.
|
|
|
|
## TLS-SRP Authentication
|
|
|
|
Transport Layer Security Secure Remote Password is a TLS feature that does not
|
|
work with TLS 1.3 or QUIC and is virtually unused by curl users and in
|
|
general.
|
|
|
|
TLS-SRP support gets removed in August 2026.
|
|
|
|
## drop SMB support
|
|
|
|
The SMB protocol has weak security and is rarely used these days.
|
|
|
|
SMB support gets removed in September 2026.
|
|
|
|
## drop NTLM support
|
|
|
|
The NTLM authentication method has weak security and is rarely used these
|
|
days. It has been deprecated by Microsoft and does not work over HTTP/2 or
|
|
HTTP/3.
|
|
|
|
NTLM support gets removed in September 2026
|
|
|
|
## Local crypto implementations
|
|
|
|
Since the dawn of time, curl bundles code for a few crypto and hash algorithms
|
|
in order to enable functionality for builds without TLS libraries. This list
|
|
includes MD4, MD5, SHA256, SHA256_512 and perhaps something more.
|
|
|
|
Meanwhile, curl is almost always built to use a TLS/crypto library which for
|
|
sure has better maintained and better performing versions of these algorithms.
|
|
|
|
Also, the local curl implementations are not as widely tested since curl
|
|
builds without TLS are rare.
|
|
|
|
Since these implementations are going away, a good idea is to verify ahead of
|
|
time that builds using your preferred TLS library use the crypto functions
|
|
provided by that library and are not bundled by curl.
|
|
|
|
The removal of local crypto functions subsequently disables some functions in
|
|
future curl versions when built without TLS support. For example Digest.
|
|
|
|
Local crypto gets removed in October 2026.
|
|
|
|
## Past removals
|
|
|
|
- axTLS (removed in 7.63.0)
|
|
- Pipelining (removed in 7.65.0)
|
|
- PolarSSL (removed in 7.69.0)
|
|
- NPN (removed in 7.86.0)
|
|
- Support for systems without 64-bit data types (removed in 8.0.0)
|
|
- NSS (removed in 8.3.0)
|
|
- gskit (removed in 8.3.0)
|
|
- MinGW v1 (removed in 8.4.0)
|
|
- NTLM_WB (removed in 8.8.0)
|
|
- space-separated `NOPROXY` patterns (removed in 8.9.0)
|
|
- hyper (removed in 8.12.0)
|
|
- Support for Visual Studio 2005 and older (removed in 8.13.0)
|
|
- Secure Transport (removed in 8.15.0)
|
|
- BearSSL (removed in 8.15.0)
|
|
- msh3 (removed in 8.16.0)
|
|
- winbuild build system (removed in 8.17.0)
|
|
- Windows CE (removed in 8.18.0)
|
|
- Support for Visual Studio 2008 (removed in 8.18.0)
|
|
- OpenSSL 1.1.1 and older (removed in 8.18.0)
|
|
- Support for Windows XP (removed in 8.19.0)
|
|
- OpenSSL-QUIC (removed in 8.19.0)
|
|
- CMake 3.17 and older (removed in 8.20.0)
|
|
- RTMP (removed in 8.20.0)
|
|
- SMB (became opt-in in 8.20.0)
|
|
- NTLM (became opt-in in 8.20.0)
|
|
- c-ares < 1.16.0 (removed in 8.20.0)
|