Configure --with-spl{-obj} auto-detect cleanup
[zfs.git] / config / kernel.m4
index 9d5aa46..88590be 100644 (file)
@@ -292,45 +292,30 @@ AC_DEFUN([ZFS_AC_SPL], [
                [Path to spl build objects]),
                [splbuild="$withval"])
 
+       dnl #
+       dnl # The existence of spl.release.in is used to identify a valid
+       dnl # source directory.  In order of preference:
+       dnl #
+       splsrc0="/var/lib/dkms/spl/${VERSION}/build"
+       splsrc1="/usr/src/spl-${VERSION}/${LINUX_VERSION}"
+       splsrc2="/usr/src/spl-${VERSION}"
+       splsrc3="../spl/"
+       splsrc4="$LINUX"
 
        AC_MSG_CHECKING([spl source directory])
-       AS_IF([test -z "$splsrc"], [
-               dnl #
-               dnl # Look in the standard development package location
-               dnl #
-               sourcelink=`ls -1d /usr/src/spl-*/${LINUX_VERSION} \
-                           2>/dev/null | tail -1`
-
-               dnl #
-               dnl # Look in the DKMS source location
-               dnl #
-               AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
-                       sourcelink=`ls -1d /var/lib/dkms/spl/*/build \
-                                   2>/dev/null | tail -1`
-               ])
-
-               dnl #
-               dnl # Look in the parent directory
-               dnl #
-               AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
-                       sourcelink=../spl
-               ])
-
-               dnl #
-               dnl # Look in the kernel directory
-               dnl #
-               AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
-                       sourcelink="$LINUX"
-               ])
-
-               AS_IF([test -e $sourcelink/spl_config.h], [
-                       splsrc=`readlink -f ${sourcelink}`
+       AS_IF([test -z "${splsrc}"], [
+               AS_IF([ test -e "${splsrc0}/spl.release.in"], [
+                       splsrc=${splsrc0}
+               ], [ test -e "${splsrc1}/spl.release.in"], [
+                       splsrc=${splsrc1}
+               ], [ test -e "${splsrc2}/spl.release.in"], [
+                       splsrc=${splsrc2}
+               ], [ test -e "${splsrc3}/spl.release.in"], [
+                       splsrc=$(readlink -f "${splsrc3}")
+               ], [ test -e "${splsrc4}/spl.release.in" ], [
+                       splsrc=${splsrc4}
                ], [
-                       AC_MSG_RESULT([Not found])
-                       AC_MSG_ERROR([
-       *** Please make sure the spl devel package for your distribution
-       *** is installed then try again.  If that fails you can specify the
-       *** location of the spl source with the '--with-spl=PATH' option.])
+                       splsrc="[Not found]"
                ])
        ], [
                AS_IF([test "$splsrc" = "NONE"], [
@@ -340,11 +325,38 @@ AC_DEFUN([ZFS_AC_SPL], [
        ])
 
        AC_MSG_RESULT([$splsrc])
+       AS_IF([ test ! -e "$splsrc/spl.release.in"], [
+               AC_MSG_ERROR([
+       *** Please make sure the kmod spl devel package for your distribution
+       *** is installed then try again.  If that fails you can specify the
+       *** location of the spl source with the '--with-spl=PATH' option.])
+       ])
+
+       dnl #
+       dnl # The existence of the spl_config.h is used to identify a valid
+       dnl # spl object directory.  In many cases the object and source
+       dnl # directory are the same, however the objects may also reside
+       dnl # is a subdirectory named after the kernel version.
+       dnl #
        AC_MSG_CHECKING([spl build directory])
        AS_IF([test -z "$splbuild"], [
-               splbuild=${splsrc}
+               AS_IF([ test -e "${splsrc}/${LINUX_VERSION}/spl_config.h" ], [
+                       splbuild="${splsrc}/${LINUX_VERSION}"
+               ], [ test -e "${splsrc}/spl_config.h" ], [
+                       splbuild="${splsrc}"
+               ], [
+                       splbuild="[Not found]"
+               ])
        ])
+
        AC_MSG_RESULT([$splbuild])
+       AS_IF([ ! test -e "$splbuild/spl_config.h"], [
+               AC_MSG_ERROR([
+       *** Please make sure the kmod spl devel <kernel> package for your
+       *** distribution is installed then try again.  If that fails you
+       *** can specify the location of the spl objects with the
+       *** '--with-spl-obj=PATH' option.])
+       ])
 
        AC_MSG_CHECKING([spl source version])
        AS_IF([test -r $splbuild/spl_config.h &&