Re: [PATCH] ci: do not die on deprecated-declarations warning
From: Ramsay Jones <hidden>
Date: 2023-01-14 14:32:40
Hi Junio, On 14/01/2023 03:47, Junio C Hamano wrote:
Like a recent GitHub CI run on linux-musl [1] shows, we seem to be getting a bunch of errors of the form: Error: http.c:1002:9: 'CURLOPT_REDIR_PROTOCOLS' is deprecated: since 7.85.0. Use CURLOPT_REDIR_PROTOCOLS_STR [-Werror=deprecated-declarations]
Yes, on 30-Dec-2022 I updated my cygwin installation, which updated
the curl package(s) from v7.86.0 to v7.87.0, and caused my build
to fail. I had a quick look at the new 'curl.h' header file and
disabled the deprecation warnings to fix my build. I used vim to
add the following to my config.mak:
CFLAGS += -DCURL_DISABLE_DEPRECATION
.. and then promptly forgot about it for a couple of weeks! :)
As it happens, just last night I started to look at fixing the code
to avoid the deprecated 'options'. However, if you are not interested
in doing that, I can stop looking into that. ;)
[I was probably doing it wrong anyway - I was just #ifdef-ing code
based on the curl version number, rather than setting something up
in the git-curl-compat.h header file; I haven't grokked that yet.]
quoted hunk ↗ jump to hunk
For some of them, it may be reasonable to follow the deprecation notice and update the code, but some symbols like the above is not. According to the release table [2], 7.85.0 that deprecates CURLOPT_REDIR_PROTOCOLS was released on 2022-08-31, less than a year ago, and according to the symbols-in-versions table [3], CURLOPT_REDIR_PROTOCOLS_STR was introduced in 7.85.0, so it will make us incompatible with anything older than a year if we rewrote the call as the message suggests. Make sure that we won't break the build when -Wdeprecated-declarations triggers. [1] https://github.com/git/git/actions/runs/3915509922/jobs/6693756050 [2] https://curl.se/docs/releases.html [3] https://github.com/curl/curl/blob/master/docs/libcurl/symbols-in-versions Signed-off-by: Junio C Hamano <redacted> --- config.mak.dev | 9 +++++++++ 1 file changed, 9 insertions(+)diff --git a/config.mak.dev b/config.mak.dev index 981304727c..afcffa6a04 100644 --- a/config.mak.dev +++ b/config.mak.dev@@ -69,6 +69,15 @@ DEVELOPER_CFLAGS += -Wno-missing-braces endif endif +# Libraries deprecate symbols while retaining them for a long time to +# keep software working with both older and newer versions of them. +# Getting warnings does help the developers' awareness, but we cannot +# afford to update too aggressively. E.g. CURLOPT_REDIR_PROTOCOLS_STR +# is only available in 7.85.0 that deprecates CURLOPT_REDIR_PROTOCOLS +# but we cannot rewrite the uses of the latter with the former until +# 7.85.0, which was released in August 2022, becomes ubiquitous. +DEVELOPER_CFLAGS += -Wno-error=deprecated-declarations + # Old versions of clang complain about initializaing a # struct-within-a-struct using just "{0}" rather than "{{0}}". This # error is considered a false-positive and not worth fixing, because
Rather than suppressing 'deprecated-declarations' globally, we could just add '-DCURL_DISABLE_DEPRECATION' to the compilation of http.c, http-push.c and remote-curl.c; similar to how we use target specific rules to pass '-DCURL_DISABLE_TYPECHECK' to sparse (only) to a similar set of files. I haven't tried that yet (so famous last words...). Sorry for not looking into this (and notifying the list) sooner. ATB, Ramsay Jones