# -*- autoconf -*-
-# Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
+# Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
elif test X"$with_l26_source" != X; then
KSRC=$with_l26_source
AC_MSG_WARN([--with-l26-source is deprecated, please use --with-linux-source instead])
+ else
+ KSRC=
fi
elif test X"$with_linux_source" != X || test X"$with_l26_source" != X; then
AC_MSG_ERROR([Linux source directory may not be specified without Linux build directory])
*) KSRC=`pwd`/$KSRC ;;
esac
if test ! -e $KSRC/include/linux/kernel.h; then
- AC_MSG_ERROR([$KSRC is not a kernel source directory)])
+ AC_MSG_ERROR([$KSRC is not a kernel source directory])
fi
else
KSRC=$KBUILD
if test ! -e $KSRC/include/linux/kernel.h; then
- case `echo "$KBUILD" | sed 's,/*$,,'` in # (
- */build)
- KSRC=`echo "$KBUILD" | sed 's,/build/*$,/source,'`
- ;; # (
- *)
- KSRC=`(cd $KBUILD && pwd -P) | sed 's,-[[^-]]*$,-common,'`
- ;;
- esac
+ # Debian kernel build Makefiles tend to include a line of the form:
+ # MAKEARGS := -C /usr/src/linux-headers-3.2.0-1-common O=/usr/src/linux-headers-3.2.0-1-486
+ # First try to extract the source directory from this line.
+ KSRC=`sed -n 's/.*-C \([[^ ]]*\).*/\1/p' "$KBUILD"/Makefile`
+ if test ! -e "$KSRC"/include/linux/kernel.h; then
+ # Didn't work. Fall back to name-based heuristics that used to work.
+ case `echo "$KBUILD" | sed 's,/*$,,'` in # (
+ */build)
+ KSRC=`echo "$KBUILD" | sed 's,/build/*$,/source,'`
+ ;; # (
+ *)
+ KSRC=`(cd $KBUILD && pwd -P) | sed 's,-[[^-]]*$,-common,'`
+ ;;
+ esac
+ fi
fi
- if test ! -e $KSRC/include/linux/kernel.h; then
+ if test ! -e "$KSRC"/include/linux/kernel.h; then
AC_MSG_ERROR([cannot find source directory (please use --with-linux-source)])
fi
fi
dnl
dnl Defines NAME to 1 in kcompat.h.
AC_DEFUN([OVS_DEFINE], [
- echo '#define $1 1' >> datapath/linux-2.6/kcompat.h.new
+ echo '#define $1 1' >> datapath/linux/kcompat.h.new
])
AC_DEFUN([OVS_CHECK_LOG2_H], [
dnl Runs various Autoconf checks on the Linux 2.6 kernel source in
dnl the directory in $KBUILD.
AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
- rm -f datapath/linux-2.6/kcompat.h.new
- mkdir -p datapath/linux-2.6
- : > datapath/linux-2.6/kcompat.h.new
+ rm -f datapath/linux/kcompat.h.new
+ mkdir -p datapath/linux
+ : > datapath/linux/kcompat.h.new
OVS_GREP_IFELSE([$KSRC/arch/x86/include/asm/checksum_32.h], [src_err,],
[OVS_DEFINE([HAVE_CSUM_COPY_DBG])])
[OVS_DEFINE([HAVE_SKB_DST_ACCESSOR_FUNCS])])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
[skb_copy_from_linear_data_offset])
+ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+ [skb_reset_tail_pointer])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_cow_head])
OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_transport_header],
[OVS_DEFINE([HAVE_SKBUFF_HEADER_HELPERS])])
OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_get_be16])
OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_find_nested])
- OVS_GREP_IFELSE([$KSRC/include/linux/if_link.h], [rtnl_link_stats64])
-
OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [ADD_ALL_VLANS_CMD],
[OVS_DEFINE([HAVE_VLAN_BUG_WORKAROUND])])
OVS_CHECK_LOG2_H
- if cmp -s datapath/linux-2.6/kcompat.h.new \
- datapath/linux-2.6/kcompat.h >/dev/null 2>&1; then
- rm datapath/linux-2.6/kcompat.h.new
+ if cmp -s datapath/linux/kcompat.h.new \
+ datapath/linux/kcompat.h >/dev/null 2>&1; then
+ rm datapath/linux/kcompat.h.new
else
- mv datapath/linux-2.6/kcompat.h.new datapath/linux-2.6/kcompat.h
+ mv datapath/linux/kcompat.h.new datapath/linux/kcompat.h
fi
])
fi])
AS_IF([test $ovs_cv_gnu_make_if = yes], [$1], [$2])])
+dnl OVS_CHECK_SPARSE_TARGET
+dnl
+dnl The "cgcc" script from "sparse" isn't very good at detecting the
+dnl target for which the code is being built. This helps it out.
+AC_DEFUN([OVS_CHECK_SPARSE_TARGET],
+ [AC_CACHE_CHECK(
+ [target hint for cgcc],
+ [ac_cv_sparse_target],
+ [AS_CASE([`$CC -dumpmachine 2>/dev/null`],
+ [i?86-* | athlon-*], [ac_cv_sparse_target=x86],
+ [x86_64-*], [ac_cv_sparse_target=x86_64],
+ [ac_cv_sparse_target=other])])
+ AS_CASE([$ac_cv_sparse_target],
+ [x86], [SPARSEFLAGS= CGCCFLAGS=-target=i86],
+ [x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS=-target=x86_64],
+ [SPARSEFLAGS= CGCCFLAGS=])
+ AC_SUBST([SPARSEFLAGS])
+ AC_SUBST([CGCCFLAGS])])
+
dnl OVS_ENABLE_SPARSE
AC_DEFUN([OVS_ENABLE_SPARSE],
- [OVS_MAKE_HAS_IF(
+ [AC_REQUIRE([OVS_CHECK_SPARSE_TARGET])
+ OVS_MAKE_HAS_IF(
[AC_CONFIG_COMMANDS_PRE(
[: ${SPARSE=sparse}
AC_SUBST([SPARSE])
- CC='$(if $(C),REAL_CC="'"$CC"'" CHECK="$(SPARSE) -I $(top_srcdir)/include/sparse" cgcc,'"$CC"')'])])])
+ CC='$(if $(C),REAL_CC="'"$CC"'" CHECK="$(SPARSE) -I $(top_srcdir)/include/sparse $(SPARSEFLAGS)" cgcc $(CGCCFLAGS),'"$CC"')'])])])