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/<version>/build
        dnl # 2) /usr/src/spl-<version>/<kernel-version>
        dnl # 3) /usr/src/spl-<version>
        dnl # 4) ../spl
        dnl # 5) /usr/src/kernels/<kernel-version>

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
Brian Behlendorf 2013-02-22 15:50:00 -08:00
parent 775f2d34a3
commit 9b2af9a097
1 changed files with 49 additions and 37 deletions

View File

@ -292,45 +292,30 @@ AC_DEFUN([ZFS_AC_SPL], [
[Path to spl build objects]), [Path to spl build objects]),
[splbuild="$withval"]) [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]) AC_MSG_CHECKING([spl source directory])
AS_IF([test -z "$splsrc"], [ AS_IF([test -z "${splsrc}"], [
dnl # AS_IF([ test -e "${splsrc0}/spl.release.in"], [
dnl # Look in the standard development package location splsrc=${splsrc0}
dnl # ], [ test -e "${splsrc1}/spl.release.in"], [
sourcelink=`ls -1d /usr/src/spl-*/${LINUX_VERSION} \ splsrc=${splsrc1}
2>/dev/null | tail -1` ], [ test -e "${splsrc2}/spl.release.in"], [
splsrc=${splsrc2}
dnl # ], [ test -e "${splsrc3}/spl.release.in"], [
dnl # Look in the DKMS source location splsrc=$(readlink -f "${splsrc3}")
dnl # ], [ test -e "${splsrc4}/spl.release.in" ], [
AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [ splsrc=${splsrc4}
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}`
], [ ], [
AC_MSG_RESULT([Not found]) splsrc="[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.])
]) ])
], [ ], [
AS_IF([test "$splsrc" = "NONE"], [ AS_IF([test "$splsrc" = "NONE"], [
@ -340,11 +325,38 @@ AC_DEFUN([ZFS_AC_SPL], [
]) ])
AC_MSG_RESULT([$splsrc]) 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]) AC_MSG_CHECKING([spl build directory])
AS_IF([test -z "$splbuild"], [ 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]) 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]) AC_MSG_CHECKING([spl source version])
AS_IF([test -r $splbuild/spl_config.h && AS_IF([test -r $splbuild/spl_config.h &&