curl/.github/workflows
Viktor Szakats e0443a76c4
cmake: lib order fixes for picky linkers (e.g. binutils ld)
This issue was not addressed with CMake builds so far. curl-for-win
worked thanks to its `-Wl,--start-group` workaround. It affects
binutils `ld` linking statically. Shared linking and llvm's `lld`
doesn't need strict lib order, and are not affected.

The solution is to pass libs in dependency order, with least dependent
(e.g. system) libs last. In case of cyclic dependency, may pass libs
twice.

Fix most issues by moving Windows system libs `ws2_32` and `bcrypt`
last, and move SSH libs first due to their dependence on crypto
backends and zlib compression.

Also:
- modify an existing Linux curl-for-win job to use gcc.
- add a specific Windows gcc job to test this. Make it use different
  options than the default to extend build coverage too: `libssh`,
  `zlib-ng`, 32-bit.
- prefer CMake imported targets for OpenSSL and ZLIB.

Examples of issues fixed:

Windows LibreSSL, libpsl vs. ws2_32:
```
x86_64-w64-mingw32-ld: curl/libressl/lib/libcrypto.a(bss_sock.c.obj):bss_sock.c:(.text$sock_ctrl[sock_ctrl]+0x59): undefined reference to `__imp_shutdown'
x86_64-w64-mingw32-ld: curl/libressl/lib/libcrypto.a(gcm128.c.obj):gcm128.c:(.text$CRYPTO_gcm128_init[CRYPTO_gcm128_init]+0x65): undefined reference to `__imp_ntohl'
x86_64-w64-mingw32-ld: curl/libpsl/_x64-win-ucrt/usr/lib/libpsl.a(psl.o):(.text$psl_is_cookie_domain_acceptable+0xef): undefined reference to `__imp_WSAStringToAddressW'
```
Ref: https://github.com/curl/curl/actions/runs/13157579253/job/36718144881?pr=16182#step:3:5354

Linux libssh2 vs. zlib:
```
/usr/lib/gcc-cross/aarch64-linux-gnu/12/../../../../aarch64-linux-gnu/bin/ld: curl/libssh2/_a64-linux-gnu-libressl/usr/lib/libssh2.a(unity_0_c.c.o): in function `comp_method_zlib_dtor':
(.text.comp_method_zlib_dtor+0x8c): undefined reference to `deflateEnd'
/usr/lib/gcc-cross/aarch64-linux-gnu/12/../../../../aarch64-linux-gnu/bin/ld: curl/libssh2/_a64-linux-gnu-libressl/usr/lib/libssh2.a(unity_0_c.c.o): in function `comp_method_zlib_comp':
(.text.comp_method_zlib_comp+0x50): undefined reference to `deflate'
/usr/lib/gcc-cross/aarch64-linux-gnu/12/../../../../aarch64-linux-gnu/bin/ld: curl/libssh2/_a64-linux-gnu-libressl/usr/lib/libssh2.a(unity_0_c.c.o): in function `comp_method_zlib_init':
(.text.comp_method_zlib_init+0x8c): undefined reference to `deflateInit_'
```
Ref: https://github.com/curl/curl/actions/runs/13157270420/job/36717189086?pr=16182#step:3:5285

Windows libssh vs. ws2_32 and LibreSSL:
```
/usr/bin/i686-w64-mingw32-ld: curl/libssh/_x86-win-ucrt-libressl/usr/lib/libssh.a(connect.c.obj):(.text$ssh_connect_host_nonblocking+0x92): undefined reference to `WspiapiGetAddrInfo@16'
/usr/bin/i686-w64-mingw32-ld: curl/libssh/_x86-win-ucrt-libressl/usr/lib/libssh.a(connect.c.obj):(.text$ssh_connect_host_nonblocking+0x3d9): undefined reference to `gai_strerrorA'
/usr/bin/i686-w64-mingw32-ld: curl/libssh/_x86-win-ucrt-libressl/usr/lib/libssh.a(kex.c.obj):(.text$ssh_client_select_hostkeys+0xd2): undefined reference to `FIPS_mode'
/usr/bin/i686-w64-mingw32-ld: curl/libssh/_x86-win-ucrt-libressl/usr/lib/libssh.a(options.c.obj):(.text$ssh_options_set+0x942): undefined reference to `FIPS_mode'
```
Ref: https://github.com/curl/curl/actions/runs/13163986294/job/36739557888?pr=16182#step:3:5127
Ref: https://github.com/curl/curl/actions/runs/13163986294/job/36739557888?pr=16182#step:3:5121

Closes #16182
2025-02-06 23:35:04 +01:00
..
appveyor-status.yml GHA: add yamlcheck 2024-08-23 18:42:55 +02:00
checkdocs.yml GHA: tidy up apt commands 2025-01-30 02:36:43 +01:00
checksrc.yml GHA: tidy up apt commands 2025-01-30 02:36:43 +01:00
configure-vs-cmake.yml GHA: tidy up apt commands 2025-01-30 02:36:43 +01:00
curl-for-win.yml cmake: lib order fixes for picky linkers (e.g. binutils ld) 2025-02-06 23:35:04 +01:00
distcheck.yml GHA: tidy up apt commands 2025-01-30 02:36:43 +01:00
fuzz.yml CI: move Azure jobs to GHA, fix fallouts, sshserver, runtests tweaks 2024-09-16 10:00:17 +02:00
hacktoberfest-accepted.yml GHA: set persist-credentials: false 2024-12-16 18:00:22 +01:00
http3-linux.yml GHA: tidy up apt commands 2025-01-30 02:36:43 +01:00
label.yml GHA: tidy up quotes, checkout order, silence Android/CMake warnings 2025-01-19 15:03:16 +01:00
linux-old.yml libssh: drop support for libssh older than 0.9.0 2025-02-06 22:27:13 +01:00
linux.yml CI: update dependency awslabs/aws-lc to v1.45.0 2025-02-06 22:58:51 +01:00
macos.yml GHA: fixup CM/AM order within Apple steps, move name: first, quote them 2025-01-26 15:18:59 +01:00
non-native.yml GHA/non-native: skip examples in non-unity job 2025-02-05 22:50:29 +01:00
windows.yml GHA/windows: always pass -A <arch> to cmake in vcpkg jobs 2025-02-06 15:44:18 +01:00