[PATCH] Fix linkage to libutil and libkvm on FreeBSD 11

Pavel Hrdina phrdina at redhat.com
Mon Sep 7 09:39:53 UTC 2020


On Fri, Sep 04, 2020 at 02:23:48PM +0100, Daniel P. Berrangé wrote:
> We are currently adding -lutil and -lkvm to the linker using the
> add_project_link_arguments method. On FreeBSD 11.4, this results in
> build errors because the args appear too early in the command line.
> 
> We need to pass the libraries as dependencies so that they get placed
> at the same point in the linker args as other dependencies.
> 
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  meson.build           | 16 +++++++---------
>  src/bhyve/meson.build | 15 +++++++++++----
>  src/util/meson.build  | 26 +++++++++++++++++---------
>  3 files changed, 35 insertions(+), 22 deletions(-)
> 
> Using the CI patch I posted earlier to add FreeBSD 11:
> 
>   https://gitlab.com/berrange/libvirt/-/pipelines/185834799
> 
> 
> diff --git a/meson.build b/meson.build
> index 1eadea33bf..c30ff187aa 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1086,7 +1086,8 @@ endif
>  # Check for BSD kvm (kernel memory interface)
>  if host_machine.system() == 'freebsd'
>    kvm_dep = cc.find_library('kvm')
> -  add_project_link_arguments('-lkvm', language: 'c')
> +else
> +  kvm_dep = disabler()
>  endif
>  
>  libiscsi_version = '1.18.0'
> @@ -1203,11 +1204,9 @@ have_gnu_gettext_tools = false
>  if not get_option('nls').disabled()
>    have_gettext = cc.has_function('gettext')
>    if not have_gettext
> -    intl_lib = cc.find_library('intl', required: false)
> -    have_gettext = intl_lib.found()
> -    if have_gettext
> -      add_project_link_arguments('-lintl', language: 'c')
> -    endif
> +    intl_dep = cc.find_library('intl', required: false)
> +  else
> +    intl_dep = disabler()
>    endif
>    if not have_gettext and get_option('nls').enabled()
>      error('gettext() is required to build libvirt')
> @@ -1235,6 +1234,8 @@ if not get_option('nls').disabled()
>        have_gnu_gettext_tools = true
>      endif
>    endif
> +else
> +  intl_dep = disabler()
>  endif

We can use the same construct as other places in libvirt:

    dependency('', required: false)

which returns empty dependency that can be used unconditionally.

>  
>  numactl_dep = cc.find_library('numa', required: get_option('numactl'))
> @@ -1402,9 +1403,6 @@ if udev_dep.found()
>  endif
>  
>  util_dep = cc.find_library('util', required: false)
> -if util_dep.found()
> -  add_project_link_arguments('-lutil', language: 'c')
> -endif
>  
>  if not get_option('virtualport').disabled()
>    if cc.has_header_symbol('linux/if_link.h', 'IFLA_PORT_MAX')
> diff --git a/src/bhyve/meson.build b/src/bhyve/meson.build
> index 7d54718820..c382f64aee 100644
> --- a/src/bhyve/meson.build
> +++ b/src/bhyve/meson.build
> @@ -14,15 +14,22 @@ driver_source_files += bhyve_sources
>  stateful_driver_source_files += bhyve_sources
>  
>  if conf.has('WITH_BHYVE')
> +  bhyve_driver_deps = [
> +    access_dep,
> +    src_dep,
> +  ]
> +  if kvm_dep.found()
> +    bhyve_driver_deps += kvm_dep
> +  endif
> +  if util_dep.found()
> +    bhyve_driver_deps += util_dep
> +  endif
>    bhyve_driver_impl = static_library(
>      'virt_driver_bhyve_impl',
>      [
>        bhyve_sources,
>      ],
> -    dependencies: [
> -      access_dep,
> -      src_dep,
> -    ],

Here you would simply add kvm_dep and util_dep.

Pavel

> +    dependencies: bhyve_driver_deps,
>      include_directories: [
>        conf_inc_dir,
>        hypervisor_inc_dir,
> diff --git a/src/util/meson.build b/src/util/meson.build
> index f7092cc3f1..c899f232e6 100644
> --- a/src/util/meson.build
> +++ b/src/util/meson.build
> @@ -172,15 +172,7 @@ io_helper_sources = [
>    'iohelper.c',
>  ]
>  
> -virt_util_lib = static_library(
> -  'virt_util',
> -  [
> -    util_sources,
> -    util_public_sources,
> -    keycode_gen_sources,
> -    dtrace_gen_headers,
> -  ],
> -  dependencies: [
> +virt_util_deps = [
>      acl_dep,
>      audit_dep,
>      capng_dep,
> @@ -195,7 +187,23 @@ virt_util_lib = static_library(
>      thread_dep,
>      win32_dep,
>      yajl_dep,
> +  ]
> +if util_dep.found()
> +  virt_util_deps += util_dep
> +endif
> +if intl_dep.found()
> +  virt_util_deps += intl_dep
> +endif
> +
> +virt_util_lib = static_library(
> +  'virt_util',
> +  [
> +    util_sources,
> +    util_public_sources,
> +    keycode_gen_sources,
> +    dtrace_gen_headers,
>    ],
> +  dependencies: virt_util_deps,
>  )
>  
>  libvirt_libs += virt_util_lib
> -- 
> 2.26.2
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200907/c9c53025/attachment-0001.sig>


More information about the libvir-list mailing list