On Wednesday, 14 August 2019 14:15:25 CEST Philippe Mathieu-Daudé wrote: > The libssh packaged by a distribution can predate version 0.8, > but still provides the newer API introduced after version 0.7. > > Using the deprecated API leads to build failure, as on Ubuntu 18.04: > > CC block/ssh.o > block/ssh.c: In function 'check_host_key_hash': > block/ssh.c:444:5: error: 'ssh_get_publickey' is deprecated [-Werror=deprecated-declarations] > r = ssh_get_publickey(s->session, &pubkey); > ^ > In file included from block/ssh.c:27:0: > /usr/include/libssh/libssh.h:489:31: note: declared here > SSH_DEPRECATED LIBSSH_API int ssh_get_publickey(ssh_session session, ssh_key *key); > ^~~~~~~~~~~~~~~~~ > rules.mak:69: recipe for target 'block/ssh.o' failed > make: *** [block/ssh.o] Error 1 > > Fix by using the newer API if available. > > Suggested-by: Andrea Bolognani > Signed-off-by: Philippe Mathieu-Daudé > --- > block/ssh.c | 2 +- > configure | 7 +++++++ > 2 files changed, 8 insertions(+), 1 deletion(-) > > diff --git a/block/ssh.c b/block/ssh.c > index 501933b855..f5fea921c6 100644 > --- a/block/ssh.c > +++ b/block/ssh.c > @@ -438,7 +438,7 @@ check_host_key_hash(BDRVSSHState *s, const char *hash, > unsigned char *server_hash; > size_t server_hash_len; > > -#ifdef HAVE_LIBSSH_0_8 > +#ifdef HAVE_SSH_GET_SERVER_PUBLICKEY > r = ssh_get_server_publickey(s->session, &pubkey); > #else > r = ssh_get_publickey(s->session, &pubkey); > diff --git a/configure b/configure > index 1d5c07de1f..fe3fef9309 100755 > --- a/configure > +++ b/configure > @@ -3949,11 +3949,18 @@ fi > if test "$libssh" = "yes"; then > cat > $TMPC < #include > +#ifdef HAVE_SSH_GET_SERVER_PUBLICKEY > int main(void) { return ssh_get_server_publickey(NULL, NULL); } > +#else > +int main(void) { return ssh_get_publickey(NULL, NULL); } > +#endif > EOF > if compile_object "$libssh_cflags"; then > libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" > fi > + if compile_object "$libssh_cflags -DHAVE_SSH_GET_SERVER_PUBLICKEY"; then > + libssh_cflags="-DHAVE_SSH_GET_SERVER_PUBLICKEY $libssh_cflags" > + fi Why try to compile it twice? If the check for ssh_get_server_publickey works, then it is available... Just add an additional HAVE_SSH_GET_SERVER_PUBLICKEY define when this test succeeds, and change the usage of ssh_get_server_publickey based on this. -- Pino Toscano