curl/.github/workflows
Viktor Szakats a75110570a
windows: fix if_nametoindex() detection with autotools, improve with cmake
- autotools: fix auto-detection on the Windows platform.
  It was mis-detected when targeting Windows XP/2003 64-bit.
  It was permanently undetected when building for Windows 32-bit.
  ```
  lib/url.c: In function 'zonefrom_url':
  lib/url.c:1802:18: error: implicit declaration of function 'if_nametoindex' [-Wimplicit-function-declaration]
   1802 |       scopeidx = if_nametoindex(zoneid);
        |                  ^~~~~~~~~~~~~~
  lib/url.c:1802:18: error: nested extern declaration of 'if_nametoindex' [-Werror=nested-externs]
  ```
  Ref: https://github.com/curl/curl/actions/runs/16405598782/job/46351023138?pr=17982#step:10:29

  Reported-by: LoRd_MuldeR
  Fixes #17979

  Without this patch the workaround for the 8.15.0 release is:
  `export ac_cv_func_if_nametoindex=0` for Windows XP/2003 64-bit.

  Background: Checking for the `if_nametoindex()` function via
  `AC_CHECK_FUNCS()` (autotools) or `check_function_exists()` (cmake) do
  not work on Windows, for two reasons:
  - the function may be disabled at compile-time in Windows headers
    when targeting old Windows versions (XP or WS2003 in curl context)
    via `_WIN32_WINNT`. But it's always present in the system implib
    `iphlpapi` where these checks are looking.
  - for 32-bit Windows the function signature in the implib requires
    a 4-byte argument, while these checks always use no arguments,
    making them always fail.

- cmake: call `if_nametoindex` dynamically with mingw-w64 v1.0.
  This mingw-w64 version lacks prototype and implib entry for it.

- cmake: add auto-detection for Windows and use as a fallback for
  non-pre-fill cases.

- cmake: disable pre-fill with `_CURL_PREFILL=OFF`. (for testing)

- cmake: disable pre-fill for untested compilers. (i.e. non-MSVC,
  non-mingw64)

- GHA/windows: make an autotools job build for Windows XP.

Follow-up to 0d71b18153 #17413

Closes #17982
2025-07-21 13:30:01 +02:00
..
appveyor-status.yml GHA: fix zizmor 1.10.0 warnings, update names 2025-06-30 18:38:56 +02:00
checkdocs.yml GHA: fix zizmor 1.10.0 warnings, update names 2025-06-30 18:38:56 +02:00
checksrc.yml GHA: minor tidy-ups 2025-07-13 11:52:08 +02:00
configure-vs-cmake.yml GHA: fix zizmor 1.10.0 warnings, update names 2025-06-30 18:38:56 +02:00
curl-for-win.yml GHA/curl-for-win: reduce job timeout to 10m, apply to Windows jobs 2025-07-07 19:03:00 +02:00
distcheck.yml checksrc-all: rewrite in Perl, remove checksrc.bat 2025-07-11 12:28:46 +02:00
fuzz.yml CI: skip CI builds that just touch Dockerfile 2025-07-02 18:28:24 -07:00
hacktoberfest-accepted.yml GHA: fix zizmor 1.10.0 warnings, update names 2025-06-30 18:38:56 +02:00
http3-linux.yml GHA: update dependency wolfSSL/wolfssl to v5.8.2 2025-07-18 00:54:34 +02:00
label.yml GHA: fix zizmor 1.10.0 warnings, update names 2025-06-30 18:38:56 +02:00
linux-old.yml CI: skip CI builds that just touch Dockerfile 2025-07-02 18:28:24 -07:00
linux.yml multissl: initialize when requesting a random number 2025-07-20 12:03:56 +02:00
macos.yml multissl: initialize when requesting a random number 2025-07-20 12:03:56 +02:00
non-native.yml GHA: move iOS jobs from non-native to macos workflow 2025-07-14 14:01:46 +02:00
windows.yml windows: fix if_nametoindex() detection with autotools, improve with cmake 2025-07-21 13:30:01 +02:00