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

Laine Stump laine at laine.org
Wed Sep 12 19:14:30 UTC 2012


On 09/10/2012 06:14 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 - we merely skip the probe of libnl-3 if we can prove
> that netcf is still using libnl-1.  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 things.
>
> Defaults being what they are, someone will invariably complain
> that our smarts were wrong.  Never fear - in that case, just run
> ./configure LIBNL_CFLAGS=..., where the fact that you set
> LIBNL_CFLAGS (even to the empty string) will go back to probing
> for libnl-3, regardless of netcf's choice.

This method of forcing libnl-3 is a bit obscure, but it will be used
infrequently enough (possibly never? :-P) that I'm okay doing it that
way, as long as you add a comment to configure.ac briefly explaining it
(as you've done in the commit message). ACK with that added.

>
> * configure.ac (LIBNL): Don't probe libnl3 if netcf doesn't use it.
> ---
>
> v2: check for libnetcf.so, in usual suspect locations; and document
> a way to override things if the guess is wrong.
>
>  configure.ac | 34 +++++++++++++++++++++++++---------
>  1 file changed, 25 insertions(+), 9 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 47a72b9..6a96bf3 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -2902,14 +2902,30 @@ 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, or unless the user set LIBNL_CFLAGS.
> +    libnl_ldd=
> +    for dir in /usr/lib64 /usr/lib; do
> +        if test -f $dir/libnetcf.so; then
> +            libnl_ldd=`(ldd $dir/libnetcf.so) 2>&1`
> +            break
> +        fi
> +    done
> +    case $libnl_ldd:${LIBNL_CFLAGS+set} 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 +2936,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