build: make CURL_FORMAT_CURL_OFF_T[U] work with mingw-w64 <=7.0.0

Add tweak for mingw-w64 when building tests/http/client programs to
avoid a bogus `-Wformat` warning when using mingw-w64 v7.0.0 or older.
The warning is bogus because these programs use curl's `printf()`
implementation that is guaranteed to support that format spec.

Add this for both CMake and autotools. (But only CMake is CI tested with
an old toolchain.)

Apply the workaround to `docs/examples`, and fix an example to use
curl's `printf()` with `CURL_FORMAT_CURL_OFF_T`.

Reintroduce curl `printf()` calls into `tests/http/client`, via #14625.
Also restore large number masks to a printf, changed earlier in #14382.

Follow-up to 232302f88a #14382
Ref: https://github.com/curl/curl/pull/14625#issuecomment-2302361737

Closes #14640
This commit is contained in:
Viktor Szakats 2024-08-22 00:21:51 +02:00
parent c04504885d
commit c730c8549b
No known key found for this signature in database
GPG key ID: B5ABD165E2AEF201
12 changed files with 60 additions and 43 deletions

View file

@ -34,6 +34,10 @@ foreach(_example IN LISTS check_PROGRAMS)
if(LIB_SELECTED STREQUAL LIB_STATIC AND WIN32)
set_property(TARGET ${_example_target} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_STATICLIB")
endif()
if(MINGW)
# For mingw-w64 7.0.0 and earlier to avoid '-Wformat='
set_property(TARGET ${_example_target} APPEND PROPERTY COMPILE_DEFINITIONS "__USE_MINGW_ANSI_STDIO=1")
endif()
set_target_properties(${_example_target} PROPERTIES
OUTPUT_NAME "${_example}" UNITY_BUILD OFF)
endforeach()

View file

@ -46,6 +46,11 @@ if USE_CPPFLAG_CURL_STATICLIB
AM_CPPFLAGS += -DCURL_STATICLIB
endif
if HAVE_MINGW
# For mingw-w64 7.0.0 and earlier to avoid '-Wformat='
AM_CPPFLAGS += -D__USE_MINGW_ANSI_STDIO=1
endif
# Prevent LIBS from being used for all link targets
LIBS = $(BLANK_AT_MAKETIME)

View file

@ -75,8 +75,8 @@ int main(void)
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
&filesize);
if((CURLE_OK == res) && (filesize>0))
printf("filesize %s: %" CURL_FORMAT_CURL_OFF_T " bytes\n",
filename, filesize);
curl_mprintf("filesize %s: %" CURL_FORMAT_CURL_OFF_T " bytes\n",
filename, filesize);
}
else {
/* we failed */