[PATCH 1/2] crypto: fix build without gcrypt and gnutls

Daniel P. Berrangé posted 2 patches 5 years, 5 months ago
There is a newer version of this series
[PATCH 1/2] crypto: fix build without gcrypt and gnutls
Posted by Daniel P. Berrangé 5 years, 5 months ago
If nettle is disabled and gcrypt enabled, the compiler and linker flags
needed for gcrypt are not passed.

Gnutls was also not added as a dependancy wen gcrypt is enabled.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 configure          |  2 ++
 crypto/meson.build | 24 ++++++++++++------------
 meson.build        |  5 +++++
 3 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/configure b/configure
index 6ecaff429b..4effe769c9 100755
--- a/configure
+++ b/configure
@@ -6973,6 +6973,8 @@ if test "$gcrypt" = "yes" ; then
   if test "$gcrypt_hmac" = "yes" ; then
     echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
   fi
+  echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
+  echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
 fi
 if test "$nettle" = "yes" ; then
   echo "CONFIG_NETTLE=y" >> $config_host_mak
diff --git a/crypto/meson.build b/crypto/meson.build
index 18da7c8541..af12b85aae 100644
--- a/crypto/meson.build
+++ b/crypto/meson.build
@@ -23,23 +23,23 @@ crypto_ss.add(files(
   'tlssession.c',
 ))
 
-if 'CONFIG_GCRYPT' in config_host
-  wo_nettle = files('hash-gcrypt.c', 'pbkdf-gcrypt.c')
+if 'CONFIG_NETTLE' in config_host
+  crypto_ss.add(files('hash-nettle.c', 'hmac-nettle.c', 'pbkdf-nettle.c'), nettle)
+elif 'CONFIG_GCRYPT' in config_host
+  crypto_ss.add(files('hash-gcrypt.c', 'pbkdf-gcrypt.c'), gcrypt)
+  if 'CONFIG_GCRYPT_HMAC' in config_host
+    crypto_ss.add(files('hmac-gcrypt.c'))
+  else
+    crypto_ss.add(files('hmac-glib.c'))
+  endif
 else
-  wo_nettle = files('hash-glib.c', 'pbkdf-stub.c')
-endif
-if 'CONFIG_GCRYPT_HMAC' not in config_host
-  wo_nettle += files('hmac-glib.c')
+  crypto_ss.add(files('hash-glib.c', 'hmac-glib.c', 'pbkdf-stub.c'))
 endif
-crypto_ss.add(when: [nettle, 'CONFIG_NETTLE'],
-             if_true: files('hash-nettle.c', 'hmac-nettle.c', 'pbkdf-nettle.c'),
-             if_false: wo_nettle)
 
 crypto_ss.add(when: 'CONFIG_SECRET_KEYRING', if_true: files('secret_keyring.c'))
 crypto_ss.add(when: 'CONFIG_QEMU_PRIVATE_XTS', if_true: files('xts.c'))
-crypto_ss.add(when: 'CONFIG_GCRYPT_HMAC', if_true: files('hmac-gcrypt.c'))
 crypto_ss.add(when: 'CONFIG_AF_ALG', if_true: files('afalg.c', 'cipher-afalg.c', 'hash-afalg.c'))
-crypto_ss.add(when: 'CONFIG_GNUTLS', if_true: files('tls-cipher-suites.c'))
+crypto_ss.add(when: [gnutls, 'CONFIG_GNUTLS'], if_true: files('tls-cipher-suites.c'))
 
 crypto_ss = crypto_ss.apply(config_host, strict: false)
 libcrypto = static_library('crypto', crypto_ss.sources() + genh,
@@ -53,7 +53,7 @@ crypto = declare_dependency(link_whole: libcrypto,
 util_ss.add(files('aes.c'))
 util_ss.add(files('init.c'))
 if 'CONFIG_GCRYPT' in config_host
-  util_ss.add(files('random-gcrypt.c'))
+  util_ss.add(files('random-gcrypt.c'), gcrypt)
 elif 'CONFIG_GNUTLS' in config_host
   util_ss.add(files('random-gnutls.c'), gnutls)
 elif 'CONFIG_RNG_NONE' in config_host
diff --git a/meson.build b/meson.build
index 74f8ea0c2e..c5f672028f 100644
--- a/meson.build
+++ b/meson.build
@@ -114,6 +114,11 @@ urcubp = not_found
 if 'CONFIG_TRACE_UST' in config_host
   urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
 endif
+gcrypt = not_found
+if 'CONFIG_GCRYPT' in config_host
+  gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(),
+                              link_args: config_host['GCRYPT_LIBS'].split())
+endif
 nettle = not_found
 if 'CONFIG_NETTLE' in config_host
   nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
-- 
2.26.2


Re: [PATCH 1/2] crypto: fix build without gcrypt and gnutls
Posted by Richard Henderson 5 years, 5 months ago
On 8/28/20 6:27 AM, Daniel P. Berrangé wrote:
> If nettle is disabled and gcrypt enabled, the compiler and linker flags
> needed for gcrypt are not passed.
> 
> Gnutls was also not added as a dependancy wen gcrypt is enabled.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>

This still needs something else.  I get

Linking target qemu-x86_64
/usr/bin/ld: libqemuutil.a(crypto_init.c.o): in function `qcrypto_init':
/home/rth/qemu/bld-g/../qemu/crypto/init.c:111: undefined reference to
`gnutls_global_init'
/usr/bin/ld: /home/rth/qemu/bld-g/../qemu/crypto/init.c:113: undefined
reference to `gnutls_strerror'
collect2: error: ld returned 1 exit status
make: *** [Makefile.ninja:1570: qemu-x86_64] Error 1


r~

Re: [PATCH 1/2] crypto: fix build without gcrypt and gnutls
Posted by Daniel P. Berrangé 5 years, 5 months ago
On Fri, Aug 28, 2020 at 08:13:26AM -0700, Richard Henderson wrote:
> On 8/28/20 6:27 AM, Daniel P. Berrangé wrote:
> > If nettle is disabled and gcrypt enabled, the compiler and linker flags
> > needed for gcrypt are not passed.
> > 
> > Gnutls was also not added as a dependancy wen gcrypt is enabled.
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> 
> This still needs something else.  I get
> 
> Linking target qemu-x86_64
> /usr/bin/ld: libqemuutil.a(crypto_init.c.o): in function `qcrypto_init':
> /home/rth/qemu/bld-g/../qemu/crypto/init.c:111: undefined reference to
> `gnutls_global_init'
> /usr/bin/ld: /home/rth/qemu/bld-g/../qemu/crypto/init.c:113: undefined
> reference to `gnutls_strerror'
> collect2: error: ld returned 1 exit status
> make: *** [Makefile.ninja:1570: qemu-x86_64] Error 1

Can you tell me what  configure args you're using and host OS distro

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Re: [PATCH 1/2] crypto: fix build without gcrypt and gnutls
Posted by Richard Henderson 5 years, 5 months ago
On 8/28/20 8:23 AM, Daniel P. Berrangé wrote:
> On Fri, Aug 28, 2020 at 08:13:26AM -0700, Richard Henderson wrote:
>> On 8/28/20 6:27 AM, Daniel P. Berrangé wrote:
>>> If nettle is disabled and gcrypt enabled, the compiler and linker flags
>>> needed for gcrypt are not passed.
>>>
>>> Gnutls was also not added as a dependancy wen gcrypt is enabled.
>>>
>>> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
>>
>> This still needs something else.  I get
>>
>> Linking target qemu-x86_64
>> /usr/bin/ld: libqemuutil.a(crypto_init.c.o): in function `qcrypto_init':
>> /home/rth/qemu/bld-g/../qemu/crypto/init.c:111: undefined reference to
>> `gnutls_global_init'
>> /usr/bin/ld: /home/rth/qemu/bld-g/../qemu/crypto/init.c:113: undefined
>> reference to `gnutls_strerror'
>> collect2: error: ld returned 1 exit status
>> make: *** [Makefile.ninja:1570: qemu-x86_64] Error 1
> 
> Can you tell me what  configure args you're using and host OS distro

../qemu/configure --enable-gcrypt \
  --target-list=x86_64-softmmu,x86_64-linux-user

On ubuntu 20 (focal).


r~

Re: [PATCH 1/2] crypto: fix build without gcrypt and gnutls
Posted by Alex Bennée 5 years, 5 months ago
Daniel P. Berrangé <berrange@redhat.com> writes:

> If nettle is disabled and gcrypt enabled, the compiler and linker flags
> needed for gcrypt are not passed.
>
> Gnutls was also not added as a dependancy wen gcrypt is enabled.

nit: when

-- 
Alex Bennée