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 <abolo...@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> --- 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 <<EOF #include <libssh/libssh.h> +#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 fi ########################################## -- 2.20.1