On Fri, Dec 4, 2015 at 3:06 PM, Jason Gerecke <killert...@gmail.com> wrote: > 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>
This patch makes compilation across versions a lot easier! The whole set is: Tested-by: Ping Cheng <pi...@wacom.com> Ping > --- > 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 > ------------------------------------------------------------------------------ _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel