[libvirt] [PATCH] build: force libnl1 if netcf also used libnl1

Laine Stump laine at laine.org
Sat Sep 8 17:19:27 UTC 2012


On 09/07/2012 06:42 PM, Eric Blake wrote:
> Recent spec file changes ensure that in distro situations, netcf
> and libvirt will link against the same libnl in order to avoid
> dumping core.  But for every-day development, if you are F17 and
> have the libnl3-devel headers available, libvirt was blindly
> linking against libnl3 even though F17 netcf still links against
> libnl1, making testing a self-built binary on F17 impossible.
>
> By making configure a little bit smarter, we can avoid this
> situation.  I intentionally wrote the test so that we still favor
> libnl-3 if netcf is not installed or if we couldn't use ldd
> to determine which library netcf linked against.
>
> * configure.ac (LIBNL): Don't probe libnl3 if netcf doesn't use it.
> ---
>
> Does this patch look safe enough to use?  It was sufficient to
> let me resume self-tests on my F17 box, where I had intentionally
> installed libnl3-devel.

After thinking about it for a bit, I only have two concerns:

1) is it possible to force either libnl1 or libnl3 from the configure
commandline, and fail if the requested version isn't available? I think
it's nice to have it default to the libnl version used by the installed
netcf, but may not always be what's wanted.

2) ncftool isn't installed unless the package "netcf" is installed, but
running libvirt only requires netcf-libs, and building only requires
netcf-devel + netcf-libs. How about checking the version of libnl that
libnetcf.so is linked against instead? Of course this is a bit more
complex, because you can't just look in $PATH, but if there's a simple
way to locate that file, it's more likely to be on the system. (If not,
checking ncftool is better than no check at all.)



>
>  configure.ac | 28 +++++++++++++++++++---------
>  1 file changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 47a72b9..7528894 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -2902,14 +2902,24 @@ LIBNL_LIBS=""
>  have_libnl=no
>
>  if test "$with_linux" = "yes"; then
> -    PKG_CHECK_MODULES([LIBNL], [libnl-3.0], [
> -        have_libnl=yes
> -        AC_DEFINE([HAVE_LIBNL3], [1], [Use libnl-3.0])
> -        AC_DEFINE([HAVE_LIBNL], [1], [whether the netlink library is available])
> -        PKG_CHECK_MODULES([LIBNL_ROUTE3], [libnl-route-3.0])
> -        LIBNL_CFLAGS="$LIBNL_CFLAGS $LIBNL_ROUTE3_CFLAGS"
> -        LIBNL_LIBS="$LIBNL_LIBS $LIBNL_ROUTE3_LIBS"
> -    ], [PKG_CHECK_MODULES([LIBNL], [libnl-1 >= $LIBNL_REQUIRED], [
> +    # When linking with netcf, we must ensure that we pick the same version
> +    # of libnl that netcf picked.  Prefer libnl-3 unless we can prove
> +    # netcf linked against libnl-1.
> +    ncftool=`which ncftool`
> +    case `(ldd "$ncftool") 2>&1` in
> +        *libnl.so.1*) ;;
> +        *)
> +        PKG_CHECK_MODULES([LIBNL], [libnl-3.0], [
> +            have_libnl=yes
> +            AC_DEFINE([HAVE_LIBNL3], [1], [Use libnl-3.0])
> +            AC_DEFINE([HAVE_LIBNL], [1], [whether the netlink library is available])
> +            PKG_CHECK_MODULES([LIBNL_ROUTE3], [libnl-route-3.0])
> +            LIBNL_CFLAGS="$LIBNL_CFLAGS $LIBNL_ROUTE3_CFLAGS"
> +            LIBNL_LIBS="$LIBNL_LIBS $LIBNL_ROUTE3_LIBS"
> +        ], []) ;;
> +    esac
> +    if test "$have_libnl" = no; then
> +        PKG_CHECK_MODULES([LIBNL], [libnl-1 >= $LIBNL_REQUIRED], [
>              have_libnl=yes
>              AC_DEFINE_UNQUOTED([HAVE_LIBNL], [1],
>               [whether the netlink library is available])
> @@ -2920,7 +2930,7 @@ if test "$with_linux" = "yes"; then
>                  AC_MSG_ERROR([libnl-devel >= $LIBNL_REQUIRED is required for macvtap support])
>              fi
>          ])
> -    ])
> +    fi
>  fi
>  AM_CONDITIONAL([HAVE_LIBNL], [test "$have_libnl" = "yes"])
>




More information about the libvir-list mailing list