Configure --with-spl{-obj} auto-detect cleanup
[zfs.git] / config / kernel.m4
index 58a8080..88590be 100644 (file)
@@ -12,10 +12,10 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_3ARG_BLKDEV_GET
        ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
        ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE
+       ZFS_AC_KERNEL_LOOKUP_BDEV
        ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS
        ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE
        ZFS_AC_KERNEL_BDEV_PHYSICAL_BLOCK_SIZE
-       ZFS_AC_KERNEL_BIO_EMPTY_BARRIER
        ZFS_AC_KERNEL_BIO_FAILFAST
        ZFS_AC_KERNEL_BIO_FAILFAST_DTD
        ZFS_AC_KERNEL_REQ_FAILFAST_MASK
@@ -71,6 +71,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_CALLBACK_SECURITY_INODE_INIT_SECURITY
        ZFS_AC_KERNEL_MOUNT_NODEV
        ZFS_AC_KERNEL_SHRINK
+       ZFS_AC_KERNEL_S_D_OP
        ZFS_AC_KERNEL_BDI
        ZFS_AC_KERNEL_BDI_SETUP_AND_REGISTER
        ZFS_AC_KERNEL_SET_NLINK
@@ -291,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"], [
@@ -339,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 &&
@@ -486,7 +499,7 @@ AC_DEFUN([ZFS_LINUX_COMPILE_IFELSE], [
        modpost_flag=''
        test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
        AS_IF(
-               [AC_TRY_COMMAND(cp conftest.c build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])],
+               [AC_TRY_COMMAND(cp conftest.c build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])],
                [$4],
                [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])]
        )