curl/.github
Viktor Szakats c129d0b1a8
GHA/windows: make MSVC jobs use MSYS2 libraries: psl, OpenSSL, H2, libssh2
Extend MSVC jobs with the option to use MSYS2 binary package as DLL
dependencies. Allow to use them alone (without vcpkg) or combined with
vcpkg packages. This saves the trouble of building these packages from
source and cache them manually.

This solution requires two tricks:
- workaround for zlib which installs a target-specific `zconf.h` that's
  not portable between platforms and C compilers.
- manual dependency configuration in CMake to ensure linking against
  the MSYS2 DLLs (and not it static libs). Static libs aren't portable
  to MSVC due to missing symbols `__chkstk_ms`, `_stack_chk_fail`,
  `_memcpy_chk`, `_stack_chk_guard`, and potentially other issues. CMake
  in MSVC mode, `linker.exe` and `pkg-config` pick the static libs by
  default. To pick `.dll.a` in favour of `.a`, these tools would have
  to be taught about this convention. An alternative is deleting static
  libs and see if `.dll.a` are picked-up automatically.

Using MSYS2 packages adds an install step taking 15-45 seconds per job.

It allowed to:
- re-enable libpsl for all MSVC jobs.
- convert the Intel 64-bit job to use MSYS2 without vcpkg, enabling
  brotli, zstd, OpenSSL 3.5.0, libssh2 (with OpenSSL cryprography) and
  nghttp2.

Using the same technique it's possible to re-enable more features
in MSVC builds, e.g. GnuTLS (also with H3), LibreSSL, mbedTLS, nghttp3,
ngtcp2, libssh, c-ares, gsasl, and replace vcpkg zlib, for faster runs.
What's missing compared to vcpkg is BoringSSL and wolfSSL
(the MSYS2-supplied build doesn't fit curl's requirements IIRC). These
could be built and cached manually.

Also:
- add workaround for zlib (classic) which uses a generated `zconf.h`,
  rendering the MSYS2 zlib header incompatible with MSVC.
- set the correct `msystem` for arm64.
- allow using MSVC without vcpkg.

Follow-up to cd0ec4784c #17089

Closes #17561
2025-06-11 00:51:04 +02:00
..
ISSUE_TEMPLATE ISSUE_TEMPLATE/docs: correct the field identifiers 2024-07-12 12:22:15 +02:00
scripts CI: fix zizmor 1.9.0 warnings, shellcheck verify CI shell code, fix fallouts 2025-06-06 21:30:43 +02:00
workflows GHA/windows: make MSVC jobs use MSYS2 libraries: psl, OpenSSL, H2, libssh2 2025-06-11 00:51:04 +02:00
CODEOWNERS CI: add whitespace checker 2024-06-27 13:33:30 +02:00
CONTRIBUTING.md GHA: silence proselint warnings and an error 2024-10-15 16:44:17 +02:00
dependabot.yml GHA: tidy up quotes, checkout order, silence Android/CMake warnings 2025-01-19 15:03:16 +01:00
FUNDING.yml copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
labeler.yml lib: move multibyte.[ch] to curlx/ 2025-05-08 10:19:19 +02:00
lock.yml copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
stale.yml copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00