From 9b2af9a097c119b818bd584eb89ca51ba475c7f2 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Fri, 22 Feb 2013 15:50:00 -0800 Subject: [PATCH] Configure --with-spl{-obj} auto-detect cleanup Because the install location for the spl/zfs-devel headers was changed we need to refresh the auto-detect code. Note that for packaging which already explicitly calls --with-spl{-obj} nothing has changed. The updated code is now structured like that in ZFS_AC_KERNEL and should be cleaner and easier to maintain. In addition, it's stricter about detecting a valid source and object directory. It requires: * The source directory contains the file 'spl.release' * The object directory contains the file 'spl_config.h' * The following paths will be checked. Notice the /var/lib/ and /usr/src paths require that the spl and zfs version be matched. This is done to prevent accidentally mixing releases. dnl # 1) /var/lib/dkms/spl//build dnl # 2) /usr/src/spl-/ dnl # 3) /usr/src/spl- dnl # 4) ../spl dnl # 5) /usr/src/kernels/ Signed-off-by: Brian Behlendorf --- config/kernel.m4 | 86 +++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/config/kernel.m4 b/config/kernel.m4 index 9d5aa46215..88590be7af 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -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 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 &&