diff --git a/configure.ac b/configure.ac index 47a72b9b74..690de2a720 100644 --- a/configure.ac +++ b/configure.ac @@ -2902,14 +2902,32 @@ 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. + # (Setting LIBNL_CFLAGS is already used by PKG_CHECK_MODULES to + # override any probing, so if it set, you know which libnl is in use.) + 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 +2938,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"])