aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2012-02-16 10:34:55 -0800
committerBen Pfaff <blp@nicira.com>2012-02-16 16:43:40 -0800
commitc81a588c44f46e9f2eb6b4fe2f27338747c924cd (patch)
treedc6df9ea0161c5eecc1ed8502a420f52a376d82a
parent34988a47f3bcd7f75a1dc632a8872b5ae1211bc1 (diff)
configure: Try to extract kernel source directory from build Makefile.
OVS needs to inspect the headers in the kernel source directory at build time. Debian keeps moving the source directory relative to the build directory and doesn't provide an obvious way to find the source directory, so in the past we've used some name-based heuristics to essentially guess where it is. This commit introduces a new heuristic that I hope will be more reliable: extracting the source directory from the Makefile in the build directory. In Debian's case, it looks like the Makefile generally contains a line of the form "MAKEARGS := -C <srcdir> O=<outdir>". This commit extracts the source directory from that line. To avoid regressions this commit retains the older heuristics as fallbacks. CC: 659685@bugs.debian.org Reported-by: Thomas Goirand <zigo@debian.org> Signed-off-by: Ben Pfaff <blp@nicira.com>
-rw-r--r--acinclude.m427
1 files changed, 17 insertions, 10 deletions
diff --git a/acinclude.m4 b/acinclude.m4
index 4c1b0654..69bb7727 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,6 +1,6 @@
# -*- 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.
@@ -98,16 +98,23 @@ AC_DEFUN([OVS_CHECK_LINUX], [
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