summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2013-02-22 15:50:00 -0800
committerBrian Behlendorf <[email protected]>2013-03-13 13:42:16 -0700
commit9b2af9a097c119b818bd584eb89ca51ba475c7f2 (patch)
treea101a421948a6629af20c8746828c96522565003 /config
parent775f2d34a3ccd5f866cfa04be76f83cb562f3881 (diff)
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 <[email protected]>
Diffstat (limited to 'config')
-rw-r--r--config/kernel.m486
1 files changed, 49 insertions, 37 deletions
diff --git a/config/kernel.m4 b/config/kernel.m4
index 9d5aa4621..88590be7a 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 <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 &&