acinclude.m4: dpdk: link with -ldl if necessary
authorDaniele Di Proietto <ddiproietto@vmware.com>
Tue, 3 Jun 2014 18:29:53 +0000 (11:29 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 9 Jun 2014 18:28:59 +0000 (11:28 -0700)
On some systems libintel_dpdk.a fails to link with libopenvswitch
unless -ldl is used. This should address the issue

Signed-off-by: Daniele Di Proietto <ddiproietto@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
acinclude.m4

index bd71a82..69d65f0 100644 (file)
@@ -170,10 +170,34 @@ AC_DEFUN([OVS_CHECK_DPDK], [
 
     DPDK_INCLUDE=$RTE_SDK/include
     DPDK_LIB_DIR=$RTE_SDK/lib
-    DPDK_LIBS="$DPDK_LIB_DIR/libintel_dpdk.a"
 
-    LIBS="$DPDK_LIBS $LIBS"
-    CPPFLAGS="-I$DPDK_INCLUDE $CPPFLAGS"
+    LDFLAGS="$LDFLAGS -L$DPDK_LIB_DIR"
+    CFLAGS="$CFLAGS -I$DPDK_INCLUDE"
+
+    # On some systems we have to add -ldl to link with dpdk
+    #
+    # This code, at first, tries to link without -ldl (""),
+    # then adds it and tries again.
+    # Before each attempt the search cache must be unset,
+    # otherwise autoconf will stick with the old result
+
+    found=false
+    save_LIBS=$LIBS
+    for extras in "" "-ldl"; do
+        LIBS="-lintel_dpdk $extras $save_LIBS"
+        AC_LINK_IFELSE(
+           [AC_LANG_PROGRAM([#include <rte_config.h>
+                             #include <rte_eal.h>],
+                            [int rte_argc; char ** rte_argv;
+                             rte_eal_init(rte_argc, rte_argv);])],
+           [found=true])
+        if $found; then
+            break
+        fi
+    done
+    if $found; then :; else
+        AC_MSG_ERROR([cannot link with dpdk])
+    fi
 
     AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.])
   else