diff options
author | Brian Behlendorf <[email protected]> | 2013-02-22 15:50:00 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2013-03-13 13:42:16 -0700 |
commit | 9b2af9a097c119b818bd584eb89ca51ba475c7f2 (patch) | |
tree | a101a421948a6629af20c8746828c96522565003 | |
parent | 775f2d34a3ccd5f866cfa04be76f83cb562f3881 (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]>
-rw-r--r-- | config/kernel.m4 | 86 |
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 && |