Skip to content

Commit

Permalink
configure: Try to extract kernel source directory from build Makefile.
Browse files Browse the repository at this point in the history
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: [email protected]
Reported-by: Thomas Goirand <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
blp committed Feb 17, 2012
1 parent 2c99977 commit fe0731b
Showing 1 changed file with 17 additions and 10 deletions.
27 changes: 17 additions & 10 deletions acinclude.m4
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit fe0731b

Please sign in to comment.