datapath: Tolerate backporting of rtnl_link_stats64 (as in RHEL 6).
[sliver-openvswitch.git] / m4 / openvswitch.m4
index 6fb8609..e6d03a6 100644 (file)
@@ -1,6 +1,6 @@
 # -*- autoconf -*-
 
-# Copyright (c) 2008, 2009, 2010 Nicira Networks.
+# Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -46,6 +46,25 @@ AC_DEFUN([OVS_CHECK_NDEBUG],
      [ndebug=false])
    AM_CONDITIONAL([NDEBUG], [test x$ndebug = xtrue])])
 
+dnl Checks for struct rtnl_link_stats64.
+dnl
+dnl (OVS checks for this structure in both kernel and userspace headers.  This
+dnl is not redundant, because the kernel and userspace builds have completely
+dnl different include paths.  It is possible for the kernel to have this
+dnl structure but not userspace, and vice versa.)
+AC_DEFUN([OVS_CHECK_RTNL_LINK_STATS64],
+  [AC_REQUIRE([OVS_CHECK_NETLINK])
+   if test $HAVE_NETLINK = yes; then
+     AC_CHECK_MEMBER(
+       [struct rtnl_link_stats64.tx_packets],
+       [AC_DEFINE([HAVE_RTNL_LINK_STATS64], [1],
+                  [Define to 1 if <linux/if_link.h> defines
+                   struct rtnl_link_stats64.])],
+       [], [#include <sys/socket.h>     /* Provides sa_family_t. */
+#include <linux/if_link.h>
+])
+   fi])
+
 dnl Checks for Netlink support.
 AC_DEFUN([OVS_CHECK_NETLINK],
   [AC_CHECK_HEADER([linux/netlink.h],
@@ -60,30 +79,34 @@ AC_DEFUN([OVS_CHECK_NETLINK],
                 [Define to 1 if Netlink protocol is available.])
    fi])
 
-dnl Checks for OpenSSL, if --enable-ssl is passed in.
+dnl Checks for OpenSSL.
 AC_DEFUN([OVS_CHECK_OPENSSL],
   [AC_ARG_ENABLE(
      [ssl],
-     [AC_HELP_STRING([--enable-ssl], 
-                     [Enable ssl support (requires libssl)])],
+     [AC_HELP_STRING([--disable-ssl], [Disable OpenSSL support])],
      [case "${enableval}" in
         (yes) ssl=true ;;
         (no)  ssl=false ;;
         (*) AC_MSG_ERROR([bad value ${enableval} for --enable-ssl]) ;;
       esac],
-     [ssl=false])
+     [ssl=check])
 
-   if test "$ssl" = true; then
+   if test "$ssl" != false; then
        dnl Make sure that pkg-config is installed.
        m4_pattern_forbid([PKG_CHECK_MODULES])
-       PKG_CHECK_MODULES([SSL], [libssl], 
+       PKG_CHECK_MODULES([SSL], [openssl], 
          [HAVE_OPENSSL=yes],
          [HAVE_OPENSSL=no
-          AC_MSG_WARN([Cannot find libssl:
+          if test "$ssl" = check; then
+            AC_MSG_WARN([Cannot find openssl:
 
 $SSL_PKG_ERRORS
 
-OpenFlow connections over SSL will not be supported.])])
+OpenFlow connections over SSL will not be supported.
+(You may use --disable-ssl to suppress this warning.)])
+          else
+            AC_MSG_ERROR([Cannot find openssl (use --disable-ssl to configure without SSL support)])
+          fi])
    else
        HAVE_OPENSSL=no
    fi
@@ -153,83 +176,6 @@ dnl Checks for valgrind/valgrind.h.
 AC_DEFUN([OVS_CHECK_VALGRIND], 
   [AC_CHECK_HEADERS([valgrind/valgrind.h])])
 
-dnl Searches for a directory to put lockfiles for tty devices.
-dnl Defines C preprocessor variable TTY_LOCK_DIR to a quoted string
-dnl for that directory.
-AC_DEFUN([OVS_CHECK_TTY_LOCK_DIR],
-  [AC_CACHE_CHECK([directory used for serial device lockfiles],
-                  [ovs_cv_path_tty_locks],
-                 [# This list of candidate directories is from minicom.
-                  ovs_cv_path_tty_locks=none
-                   for dir in /etc/locks /var/lock /usr/spool/locks \
-                              /var/spool/locks /var/spool/lock \
-                              /usr/spool/uucp /var/spool/uucp /var/run; do
-                    if test -d $dir; then
-                      ovs_cv_path_tty_locks=$dir
-                      break
-                    fi
-                   done])
-   if test "$ovs_cv_path_tty_locks" = none; then
-     AC_MSG_ERROR([cannot find a directory for tty locks])
-   fi
-   AC_DEFINE_UNQUOTED([TTY_LOCK_DIR], "$ovs_cv_path_tty_locks",
-                      [Directory used for serial device lockfiles])])
-
-dnl The following check is adapted from GNU PSPP.
-dnl It searches for the ncurses library.  If it finds it, it sets
-dnl HAVE_CURSES to yes and sets NCURSES_LIBS and NCURSES_CFLAGS
-dnl appropriate.  Otherwise, it sets HAVE_CURSES to no. 
-AC_DEFUN([OVS_CHECK_CURSES],
-  [if test "$cross_compiling" != yes; then
-     AC_CHECK_PROGS([NCURSES_CONFIG], [ncurses5-config ncurses8-config])
-   fi
-   if test "$NCURSES_CONFIG" = ""; then
-     AC_SEARCH_LIBS([tgetent], [ncurses],
-         [AC_CHECK_HEADERS([term.h curses.h], 
-                           [HAVE_CURSES=yes],
-                           [HAVE_CURSES=no])])
-   else
-     save_cflags=$CFLAGS
-     CFLAGS="$CFLAGS $($NCURSES_CONFIG --cflags)"
-     AC_CHECK_HEADERS([term.h curses.h], 
-                      [HAVE_CURSES=yes],
-                      [HAVE_CURSES=no])
-     CFLAGS=$save_cflags
-     if test "$HAVE_CURSES" = yes; then
-       NCURSES_LIBS=$($NCURSES_CONFIG --libs)
-       NCURSES_CFLAGS=$($NCURSES_CONFIG --cflags)
-       AC_SUBST(NCURSES_CFLAGS)
-       AC_SUBST(NCURSES_LIBS)
-     fi
-   fi
-   AM_CONDITIONAL([HAVE_CURSES], [test "$HAVE_CURSES" = yes])])
-
-dnl Checks for linux/vt.h.
-AC_DEFUN([OVS_CHECK_LINUX_VT_H],
-  [AC_CHECK_HEADER([linux/vt.h],
-                   [HAVE_LINUX_VT_H=yes],
-                   [HAVE_LINUX_VT_H=no])
-   AM_CONDITIONAL([HAVE_LINUX_VT_H], [test "$HAVE_LINUX_VT_H" = yes])
-   if test "$HAVE_LINUX_VT_H" = yes; then
-      AC_DEFINE([HAVE_LINUX_VT_H], [1],
-                [Define to 1 if linux/vt.h is available.])
-   fi])
-
-dnl Checks for libpcre.
-dnl
-dnl ezio-term wants libpcre that supports the PCRE_PARTIAL feature,
-dnl which is libpcre 7.2 or later.
-AC_DEFUN([OVS_CHECK_PCRE],
-  [dnl Make sure that pkg-config is installed.
-   m4_pattern_forbid([PKG_CHECK_MODULES])
-   PKG_CHECK_MODULES([PCRE],
-                     [libpcre >= 7.2], 
-                     [HAVE_PCRE_PARTIAL=yes],
-                     [HAVE_PCRE_PARTIAL=no])
-   AM_CONDITIONAL([HAVE_PCRE_PARTIAL], [test "$HAVE_PCRE_PARTIAL" = yes])
-   AC_SUBST([HAVE_PCRE_PARTIAL])
-])
-
 dnl Checks for Python 2.x, x >= 4.
 AC_DEFUN([OVS_CHECK_PYTHON],
   [AC_CACHE_CHECK(
@@ -271,25 +217,12 @@ AC_DEFUN([OVS_CHECK_DOT],
     [for dot],
     [ovs_cv_dot],
     [dnl "dot" writes -V output to stderr:
-     if (dot -V) 2>&1 | grep '^dot - [gG]raphviz version' >/dev/null 2>&1; then
+     if (dot -V) 2>&1 | grep '^dot - [[gG]]raphviz version' >/dev/null 2>&1; then
        ovs_cv_dot=yes
      else
        ovs_cv_dot=no
-     fi])])
-
-dnl Check whether to build E-R diagrams.
-AC_DEFUN([OVS_CHECK_ER_DIAGRAMS],
-  [AC_REQUIRE([OVS_CHECK_DOT])
-   AC_REQUIRE([OVS_CHECK_PYTHON])
-   AC_CACHE_CHECK(
-    [whether to build E-R diagrams for database],
-    [ovs_cv_er_diagrams],
-    [if test $ovs_cv_dot != no && test $ovs_cv_python != no; then
-       ovs_cv_er_diagrams=yes
-     else
-       ovs_cv_er_diagrams=no
      fi])
-   AM_CONDITIONAL([BUILD_ER_DIAGRAMS], [test $ovs_cv_er_diagrams = yes])])
+   AM_CONDITIONAL([HAVE_DOT], [test "$ovs_cv_dot" = yes])])
 
 dnl Checks for pyuic4.
 AC_DEFUN([OVS_CHECK_PYUIC4],
@@ -421,4 +354,6 @@ AC_DEFUN([OVS_CHECK_LINKER_SECTIONS],
                 into sections with user-defined names and the linker
                 automatically defines __start_SECNAME and __stop_SECNAME
                 symbols that designate the start and end of the section.])
-   fi])
+   fi
+   AM_CONDITIONAL(
+     [USE_LINKER_SECTIONS], [test $ovs_cv_use_linker_sections = yes])])