It should be possible to point the ./configure script at a kernel source tree and have it work without needing to also specifiy exactly what kernel version its looking at. This patch modifies configure.ac so that the MODUTS is only set to the output of `uname -r` if neither a kernel location nor version is given, and so the "sanity check" process which compares the kernel version is able to set MODUTS if it hasn't already been.
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com> --- configure.ac | 138 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 75 insertions(+), 63 deletions(-) diff --git a/configure.ac b/configure.ac index cad0258..2e3af9d 100644 --- a/configure.ac +++ b/configure.ac @@ -24,48 +24,11 @@ fi AC_MSG_RESULT($WCM_ISLINUX) dnl kernel source, module versioning, etc -WCM_ENV_KERNEL=no +WCM_ENV_KERNEL= WCM_KERNEL_DIR= WCM_KERNEL_VER= MODUTS= -dnl Check which version of the driver we should compile -AC_ARG_WITH(kernel-version, - AS_HELP_STRING([--with-kernel-version=version], [Specify kernel version]), - [MODUTS="$withval"], - [MODUTS=`uname -r`]) - -AC_MSG_CHECKING(kernel version) -AC_MSG_RESULT([$MODUTS]) -MINOR=`echo $MODUTS | sed 's/[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\).*/\1/'` -if echo $MODUTS | grep "^2.4" >/dev/null; then - AC_MSG_ERROR([kernel 2.4.x is not supported]) -elif echo $MODUTS | grep "^2.6" >/dev/null; then - if test $MINOR -ge 26; then - case $MINOR in - 26|27|28|29|30|31|32|33|34|35) WCM_KERNEL_VER="2.6.30";; - 36|37) WCM_KERNEL_VER="2.6.36";; - *) WCM_KERNEL_VER="2.6.38";; - esac - else - AC_MSG_ERROR([use the kernel driver included in the 'linuxwacom' package for kernels older than 2.6.26]) - fi -elif echo $MODUTS | grep "^3." >/dev/null; then - MINOR=`echo $MODUTS | sed 's/[[0-9]]*\.\([[0-9]]*\).*/\1/'` - if test $MINOR -ge 17; then - WCM_KERNEL_VER="3.17" - elif test $MINOR -ge 7; then - WCM_KERNEL_VER="3.7" - else - WCM_KERNEL_VER="2.6.38" - fi -elif echo $MODUTS | grep "^4." >/dev/null; then - WCM_KERNEL_VER="3.17" -else - AC_MSG_ERROR(kernel version $MODUTS not supported) -fi - -dnl Check for kernel build environment AC_DEFUN([WCM_ISBUILDDIR], [\ \( -f "$1/.config" -o \ -f "$1/include/config/auto.conf" -o \ @@ -76,13 +39,28 @@ AC_ARG_WITH(kernel, AS_HELP_STRING([--with-kernel=dir], [Specify kernel source directory]), [WCM_KERNEL_DIR="$withval"]) +AC_ARG_WITH(kernel-version, + AS_HELP_STRING([--with-kernel-version=version], [Specify kernel version]), + [MODUTS="$withval"]) + + +dnl Assume the user wants to build for the running kernel version if neither +dnl the kernel directory nor version has been specified +if test "$WCM_KERNEL_DIR" = "yes" -o -z "$WCM_KERNEL_DIR"; then + if test "$MODUTS" = "yes" -o -z "$MODUTS"; then + MODUTS=`uname -r` + fi +fi + +dnl Discover the kernel source location if not already set AC_MSG_CHECKING(for kernel source/headers) if test "$WCM_KERNEL_DIR" = "yes" -o -z "$WCM_KERNEL_DIR"; then + if test "$MODUTS" = "yes" -o -z "$MODUTS"; then X=`uname -r`; else X="$MODUTS"; fi AC_DEFUN([SEARCH_DIRECTORIES], [[ - [/lib/modules/$MODUTS/source], - [/lib/modules/$MODUTS/build], + [/lib/modules/$X/source], + [/lib/modules/$X/build], [/usr/src/linux], - [/usr/src/linux-$MODUTS], + [/usr/src/linux-$X], [/usr/src/linux-2.6] ]]) WCM_KERNEL_DIR= @@ -91,37 +69,71 @@ if test "$WCM_KERNEL_DIR" = "yes" -o -z "$WCM_KERNEL_DIR"; then if test -z "$WCM_KERNEL_DIR"; then if test WCM_ISBUILDDIR(ROOTDIR); then WCM_KERNEL_DIR="ROOTDIR" - AC_MSG_RESULT($WCM_KERNEL_DIR) fi fi ]) +fi +if test -z "$WCM_KERNEL_DIR"; then + AC_MSG_RESULT([not found]) + AC_MSG_WARN([Unable to find build config in any of: SEARCH_DIRECTORIES]) +fi +AC_MSG_RESULT([$WCM_KERNEL_DIR]) +if test \! WCM_ISBUILDDIR($WCM_KERNEL_DIR); then + AC_MSG_WARN([Kernel directory does not appear to have needed config files]) + WCM_ENV_KERNEL="no" +fi - if test -z "$WCM_KERNEL_DIR"; then - AC_MSG_RESULT([not found]) - AC_MSG_NOTICE([Unable to find build config in any of: SEARCH_DIRECTORIES]) - fi -elif test "$WCM_KERNEL_DIR" != "no"; then - AC_MSG_RESULT([$WCM_KERNEL_DIR]) - if test \! WCM_ISBUILDDIR($WCM_KERNEL_DIR); then - AC_MSG_NOTICE([Kernel directory does not appear to have needed config files]) - fi +dnl Discover the kernel source version if not already set +AC_MSG_CHECKING(kernel version) +SRC_VERSION=[$(sed -n '/UTS_RELEASE/ s/^[^"]*"\([^"]*\).*$/\1/gp' \ + "$WCM_KERNEL_DIR/include/linux/version.h" \ + "$WCM_KERNEL_DIR/include/generated/utsrelease.h" \ + "$WCM_KERNEL_DIR/include/linux/utsrelease.h" 2> /dev/null | head -n1)] +AC_MSG_RESULT([$SRC_VERSION]) +if test "$MODUTS" = "yes" -o -z "$MODUTS"; then + MODUTS="$SRC_VERSION" +elif test "$SRC_VERSION" != "$MODUTS"; then + AC_MSG_WARN([Spcified '$MODUTS' kernel, but found '$SRC_VERSION' instead]) + WCM_ENV_KERNEL="no" fi -dnl Final sanity check to make sure the kernel versions match -for F in "$WCM_KERNEL_DIR/include/linux/version.h" \ - "$WCM_KERNEL_DIR/include/generated/utsrelease.h" \ - "$WCM_KERNEL_DIR/include/linux/utsrelease.h"; do - if test -f $F; then - if test "$MODUTS" = "`grep UTS_RELEASE $F | sed -e 's/^[[^"]]*"\([[^"]]*\).*$/\1/g'`"; then - WCM_ENV_KERNEL=yes - fi - fi -done if test "$WCM_ENV_KERNEL" = "no"; then AC_MSG_ERROR([We could not find the development environment to dnl -build modules for the '$MODUTS' kernel. Please install the kernel source or dnl -the kernel development package and try again.]) +build modules for the '$MODUTS' kernel within the '$WCM_KERNEL_DIR' dnl +directory. Please install the kernel source or the kernel development dnl +package and try again.]) +fi +WCM_ENV_KERNEL="yes" + + +dnl Check which version of the driver we should compile +MINOR=`echo $MODUTS | sed 's/[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\).*/\1/'` +if echo $MODUTS | grep "^2.4" >/dev/null; then + AC_MSG_ERROR([kernel 2.4.x is not supported]) +elif echo $MODUTS | grep "^2.6" >/dev/null; then + if test $MINOR -ge 26; then + case $MINOR in + 26|27|28|29|30|31|32|33|34|35) WCM_KERNEL_VER="2.6.30";; + 36|37) WCM_KERNEL_VER="2.6.36";; + *) WCM_KERNEL_VER="2.6.38";; + esac + else + AC_MSG_ERROR([use the kernel driver included in the 'linuxwacom' package for kernels older than 2.6.26]) + fi +elif echo $MODUTS | grep "^3." >/dev/null; then + MINOR=`echo $MODUTS | sed 's/[[0-9]]*\.\([[0-9]]*\).*/\1/'` + if test $MINOR -ge 17; then + WCM_KERNEL_VER="3.17" + elif test $MINOR -ge 7; then + WCM_KERNEL_VER="3.7" + else + WCM_KERNEL_VER="2.6.38" + fi +elif echo $MODUTS | grep "^4." >/dev/null; then + WCM_KERNEL_VER="3.17" +else + AC_MSG_ERROR(kernel version $MODUTS not supported) fi dnl Separate test output from file-generation output -- 2.6.2 ------------------------------------------------------------------------------ Go from Idea to Many App Stores Faster with Intel(R) XDK Give your users amazing mobile app experiences with Intel(R) XDK. Use one codebase in this all-in-one HTML5 development environment. Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs. http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140 _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel