X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=config%2Flustre-build-zfs.m4;h=df78230761c555a4e73b6552439e9eab0b35855a;hp=bfc647f0df9a56f390480d18b0e4afded87de81b;hb=369e02e84f39565195e08f043ab0421d2d3bd185;hpb=25c93758d6b1136d268fe3fcc1c4979c17463c0b diff --git a/config/lustre-build-zfs.m4 b/config/lustre-build-zfs.m4 index bfc647f..df78230 100644 --- a/config/lustre-build-zfs.m4 +++ b/config/lustre-build-zfs.m4 @@ -1,445 +1,390 @@ -# -# LB_PATH_SPL -# -# --with-spl - Enable spl support and attempt to autodetect the spl -# --with-spl=yes headers in one of the following places in this order: -# * ./spl -# * /usr/src/spl-*/$LINUXRELEASE -# * ../spl -# -# --with-spl=path - Enable spl support and use the spl headers in the -# provided path. No autodetection is performed. -# -# --with-spl-obj - When spl support is enabled the object directory -# will be based on the --with-spl directory. If this -# is detected incorrectly it can be explicitly -# specified using this option. -# -# NOTE: As with all external packages spl is expected to already be -# configured and built. However, if the spl tree is located in-tree -# (./spl) then it will be configured and built recursively as part of -# the lustre build system. -# -AC_DEFUN([LB_PATH_SPL], -[ -AC_ARG_WITH([spl], - AC_HELP_STRING([--with-spl=path], [set path to spl sources]), - [],[ - if test x$enable_server = xyes && test x$enable_dist = xno; then - with_spl='yes' - else - with_spl='no' - fi +dnl # +dnl # Supported configure options. When no options are specified support +dnl # for ZFS OSDs will be autodetected assuming server support is enabled. +dnl # If the ZFS OSD cannot be built support for it is disabled and a +dnl # warning is issued but the configure process is allowed to continue. +dnl # +dnl # --without-zfs - Disable zfs support. +dnl # --with-zfs=no +dnl # +dnl # --with-zfs - Enable zfs support and attempt to autodetect the zfs +dnl # --with-zfs=yes headers in one of the following places. Because zfs +dnl # support was explicitly required if the headers cannot +dnl # be located it is treated as a fatal error. +dnl # +dnl # * /var/lib/dkms/zfs/${VERSION}/build +dnl # * /usr/src/zfs-${VERSION}/${LINUXRELEASE} +dnl # * /usr/src/zfs-${VERSION} +dnl # * ../spl/ +dnl # * $LINUX +dnl # +dnl # --with-zfs-devel=path +dnl # - User provided directory where zfs development headers +dnl # are located. This option is typically used when user +dnl # uses rpm2cpio to unpack src rpm. +dnl # +dnl # --with-zfs=path - Enable zfs support and use the zfs headers in the +dnl # provided path. No autodetection is performed and +dnl # if no headers are found this is a fatal error. +dnl # +dnl # --with-zfs-obj - When zfs support is enabled the object directory +dnl # will be based on the --with-zfs directory. If this +dnl # is detected incorrectly it can be explicitly +dnl # specified using this option. +dnl # +dnl # --without-spl - Disable spl support. +dnl # --with-spl=no +dnl # +dnl # --with-spl - Enable spl support and attempt to autodetect the spl +dnl # --with-spl=yes headers in one of the following places in this order: +dnl # * /var/lib/dkms/spl/${VERSION}/build +dnl # * /usr/src/spl-${VERSION}/${LINUXRELEASE} +dnl # * /usr/src/spl-${VERSION} +dnl # * ../spl/ +dnl # * $LINUX +dnl # +dnl # --with-spl=path - Enable spl support and use the spl headers in the +dnl # provided path. No autodetection is performed. +dnl # +dnl # --with-spl-obj - When spl support is enabled the object directory +dnl # will be based on the --with-spl directory. If this +dnl # is detected incorrectly it can be explicitly +dnl # specified using this option. +dnl # +AC_DEFUN([LB_SPL], [ + AC_ARG_WITH([spl], + AS_HELP_STRING([--with-spl=PATH], + [Path to spl source]), + [splsrc="$withval"]) + + AC_ARG_WITH([spl-obj], + AS_HELP_STRING([--with-spl-obj=PATH], + [Path to spl build objects]), + [splobj="$withval"]) + + dnl # + dnl # The existence of spl.release[.in] is used to identify a valid + dnl # source directory. In order of preference: + dnl # + splver=$(ls -1 /usr/src/ | grep -m1 spl | cut -f2 -d'-') + splsrc0="/var/lib/dkms/spl/${splver}/build" + splsrc1="/usr/src/spl-${splver}/${LINUXRELEASE}" + splsrc2="/usr/src/spl-${splver}" + splsrc3="../spl/" + splsrc4="$LINUX" + + AC_MSG_CHECKING([spl source directory]) + 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} + ], [ + splsrc="[Not found]" + ]) ]) + AC_MSG_RESULT([$splsrc]) -case x$with_spl in - xno) - AC_MSG_ERROR([spl must be enabled when building zfs.]) - ;; - xyes) - SPL_DIR= - - # Check ./spl - spl_src=$PWD/spl - if test -e "$spl_src"; then - SPL_DIR=$(readlink -f $spl_src) - else - # Check /usr/src/spl-*/$LINUXRELEASE - spl_src=$(ls -1d /usr/src/spl-*/$LINUXRELEASE \ - 2>/dev/null | tail -1) - if test -e "$spl_src"; then - SPL_DIR=$(readlink -f $spl_src) - else - # Check ../spl - spl_src=$PWD/../spl - if test -e "$spl_src"; then - SPL_DIR=$(readlink -f $spl_src) - else - # Fatal spl required for zfs builds - AC_MSG_ERROR([Could not locate spl.]) - fi - fi - fi - - ;; - *) - SPL_DIR=$(readlink -f $with_spl) - with_spl='yes' - ;; -esac - -AC_ARG_WITH([spl-obj], - AC_HELP_STRING([--with-spl-obj=path], [set path to spl objects]), - [ - if test x$with_spl = xyes; then - SPL_OBJ="$withval" - fi - ],[ - if test x$with_spl = xyes; then - SPL_OBJ=$SPL_DIR - fi + AS_IF([test ! -e "$splsrc/spl.release" && + test ! -e "$splsrc/spl.release.in"], [ + enable_zfs=no ]) -AC_MSG_CHECKING([spl source directory]) -AC_MSG_RESULT([$SPL_DIR]) -AC_SUBST(SPL_DIR) - -AC_MSG_CHECKING([spl object directory]) -AC_MSG_RESULT([$SPL_OBJ]) -AC_SUBST(SPL_OBJ) - -LB_SPL_SYMVERS -LB_SPL_RELEASE -]) + 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 "$splobj"], [ + AS_IF([test -e "${splsrc}/${LINUXRELEASE}/spl_config.h"], [ + splobj="${splsrc}/${LINUXRELEASE}" + ], [test -e "${splsrc}/spl_config.h"], [ + splobj="${splsrc}" + ], [ + splobj="[Not found]" + ]) + ]) + AC_MSG_RESULT([$splobj]) -# -# LB_SPL_BUILD -# -# Optionally configure/make the spl sources. If the sources are -# determined to reside in-tree this feature will automatically be -# enabled. If the sources are not in-tree it will be disabled. -# Use --enable-spl-build or --disable-spl-build if you need to -# override this behavior. -# -AC_DEFUN([LB_SPL_BUILD], -[ -AC_ARG_ENABLE([spl-build], - AC_HELP_STRING([--enable-spl-build], [enable spl configure/make]), - [], [ - SPL_DIR_INTREE=$(readlink -f $PWD/spl) - if test x$SPL_DIR = x$SPL_DIR_INTREE; then - enable_spl_build='yes' - else - enable_spl_build='no' - fi + AS_IF([test ! -e "$splobj/spl_config.h"], [ + enable_zfs=no ]) -AC_MSG_CHECKING([whether to build spl]) -if test x$enable_spl_build = xyes; then - AC_MSG_RESULT([$enable_spl_build]) + dnl # + dnl # Verify the source version using SPL_META_VERSION in spl_config.h + dnl # + AS_IF([test x$enable_zfs = xyes], [ + AC_MSG_CHECKING([spl source version]) + AS_IF([fgrep -q SPL_META_VERSION $splobj/spl_config.h], [ + splver=$((echo "#include "; + echo "splver=SPL_META_VERSION-SPL_META_RELEASE") | + cpp -I $splobj | + grep "^splver=" | tr -d \" | cut -d= -f2) + ], [ + splver="[Not found]" + enable_zfs=no + ]) + AC_MSG_RESULT([$splver]) + ]) - LB_CHECK_FILE([$SPL_DIR/module/spl/spl-generic.c], [], [ - AC_MSG_ERROR([Complete spl source must exist when building.])]) + dnl # + dnl # Verify the modules systems exist by the expect name. + dnl # + AS_IF([test x$enable_zfs = xyes], [ + AC_MSG_CHECKING([spl file name for module symbols]) + AS_IF([test -r $splobj/$SYMVERFILE], [ + splsym=$SYMVERFILE + ], [test -r $splobj/module/$SYMVERFILE], [ + splsym=$SYMVERFILE + ], [ + splsym="[Not found]" + enable_zfs=no + ]) + AC_MSG_RESULT([$splsym]) + ]) - LB_CHECK_FILE([$SPL_DIR/configure], [], [ - AC_MSG_ERROR([Complete spl source must exist when building.])]) + SPL=${splsrc} + SPL_OBJ=${splobj} + SPL_VERSION=${splver} + SPL_SYMBOLS=${splsym} - SPL_SUBDIR="$SPL_DIR" - AC_SUBST(SPL_SUBDIR) - AC_CONFIG_SUBDIRS("spl") -else - enable_spl_build='no' - AC_MSG_RESULT([$enable_spl_build]) -fi + AC_SUBST(SPL) + AC_SUBST(SPL_OBJ) + AC_SUBST(SPL_VERSION) + AC_SUBST(SPL_SYMBOLS) ]) -# -# LB_SPL_SYMVERS -# -AC_DEFUN([LB_SPL_SYMVERS], -[ -AC_MSG_CHECKING([spl module symbols]) -if test -r $SPL_OBJ/Module.symvers; then - SPL_SYMBOLS=Module.symvers -elif test -r $SPL_OBJ/Modules.symvers; then - SPL_SYMBOLS=Modules.symvers -elif test -r $SPL_OBJ/module/Module.symvers; then - SPL_SYMBOLS=Module.symvers -elif test -r $SPL_OBJ/module/Modules.symvers; then - SPL_SYMBOLS=Modules.symvers -else - SPL_SYMBOLS=$SYMVERFILE -fi - -AC_MSG_RESULT([$SPL_SYMBOLS]) -AC_SUBST(SPL_SYMBOLS) -]) +AC_DEFUN([LB_ZFS], [ + AC_ARG_WITH([zfs-obj], + AS_HELP_STRING([--with-zfs-obj=PATH], + [Path to zfs build objects]), + [zfsobj="$withval"]) + + dnl # + dnl # The existence of zfs.release[.in] is used to identify a valid + dnl # source directory. In order of preference: + dnl # + zfsver=$(ls -1 /usr/src/ | grep -m1 zfs | cut -f2 -d'-') + zfssrc0="/var/lib/dkms/zfs/${zfsver}/build" + zfssrc1="/usr/src/zfs-${zfsver}/${LINUXRELEASE}" + zfssrc2="/usr/src/zfs-${zfsver}" + zfssrc3="../zfs/" + zfssrc4="$LINUX" -# -# LB_SPL_RELEASE -# -AC_DEFUN([LB_SPL_RELEASE], -[ -AC_MSG_CHECKING([spl source release]) -if test -r $SPL_OBJ/spl_config.h; then - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="-I$SPL_DIR $EXTRA_KCFLAGS" - LB_LINUX_TRY_MAKE([ - #include <$SPL_OBJ/spl_config.h> - ],[ - char *SPL_RELEASE; - SPL_RELEASE=SPL_META_VERSION; - ],[ - $makerule LUSTRE_KERNEL_TEST=conftest.i - ],[ - test -s build/conftest.i - ],[ - eval $(grep "SPL_RELEASE=" build/conftest.i) - ],[ - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not preprocess test program.]) + AC_MSG_CHECKING([zfs source directory]) + AS_IF([test -z "${zfssrc}"], [ + AS_IF([test -e "${zfssrc0}/zfs.release.in"], [ + zfssrc=${zfssrc0} + ], [test -e "${zfssrc1}/zfs.release.in"], [ + zfssrc=${zfssrc1} + ], [test -e "${zfssrc2}/zfs.release.in"], [ + zfssrc=${zfssrc2} + ], [test -e "${zfssrc3}/zfs.release.in"], [ + zfssrc=$(readlink -f "${zfssrc3}") + ], [test -e "${zfssrc4}/zfs.release.in"], [ + zfssrc=${zfssrc4} + ], [ + zfssrc="[Not found]" + ]) ]) - EXTRA_KCFLAGS="$tmp_flags" - rm build/conftest.i -elif test -r $SPL_DIR/META; then - SPL_RELEASE=$(awk '/Version/ { print [$]2 }' $SPL_DIR/META) -else - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not locate spl_config.h or META to check release.]) -fi - -if test x$SPL_RELEASE = x; then - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not determine spl release.]) -fi - -AC_MSG_RESULT([$SPL_RELEASE]) -AC_SUBST(SPL_RELEASE) -]) - + AC_MSG_RESULT([$zfssrc]) -# -# LB_PATH_ZFS -# -# --without-zfs - Disable zfs support. -# --with-zfs=no -# -# --with-zfs - Enable zfs support and attempt to autodetect the zfs -# --with-zfs=yes headers in one of the following places in this order: -# * ./zfs -# * /usr/src/zfs-*/$LINUXRELEASE -# * ../zfs -# -# --with-zfs=path - Enable zfs support and use the zfs headers in the -# provided path. No autodetection is performed. -# -# --with-zfs-obj - When zfs support is enabled the object directory -# will be based on the --with-zfs directory. If this -# is detected incorrectly it can be explicitly -# specified using this option. -# -# NOTE: As with all external packages zfs is expected to already be -# configured and built. However, if the zfs tree is located in-tree -# (./zfs) then it will be configured and built recursively as part of -# the lustre build system. -# -AC_DEFUN([LB_PATH_ZFS], -[ -AC_ARG_WITH([zfs], - AC_HELP_STRING([--with-zfs=path], [set path to zfs sources]), - [],[ - if test x$enable_server = xyes && test x$enable_dist = xno; then - with_zfs='yes' - else - with_zfs='no' - fi + AS_IF([test ! -e "$zfssrc/zfs.release.in" && + test ! -e "$zfssrc/zfs.release"], [ + enable_zfs=no ]) -case x$with_zfs in - xno) - ZFS_DIR= - ;; - xyes) - ZFS_DIR= - - # Check ./zfs - zfs_src=$PWD/zfs - if test -e "$zfs_src"; then - ZFS_DIR=$(readlink -f $zfs_src) - else - # Check /usr/src/zfs-*/$LINUXRELEASE - zfs_src=$(ls -1d /usr/src/zfs-*/$LINUXRELEASE \ - 2>/dev/null|tail -1) - if test -e "$zfs_src"; then - ZFS_DIR=$(readlink -f $zfs_src) - else - # Check ../zfs - zfs_src=$PWD/../zfs - if test -e "$zfs_src"; then - ZFS_DIR=$(readlink -f $zfs_src) - else - # Disable zfs failed to detect sources - with_zfs='no' - fi - fi - fi - ;; - *) - ZFS_DIR=$(readlink -f $with_zfs) - with_zfs='yes' - ;; -esac - -AC_MSG_CHECKING([whether to enable zfs]) -AC_MSG_RESULT([$with_zfs]) - -if test x$with_zfs = xyes; then - AC_MSG_CHECKING([for location of zfs library headers]) - if test -e "$ZFS_DIR/include/libzfs.h"; then - EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I $ZFS_DIR/lib/libspl/include -I $ZFS_DIR/include" - AC_MSG_RESULT([$ZFS_DIR]) - elif test -e "$ZFS_DIR/libzfs/libzfs.h"; then - EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I $ZFS_DIR/libspl -I $ZFS_DIR/libzfs" - AC_MSG_RESULT([$ZFS_DIR]) - elif test -e "/usr/include/libzfs/libzfs.h"; then - AC_MSG_RESULT([/usr/include]) - EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I /usr/include/libspl -I /usr/include/libzfs" - else - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not locate zfs library headers.]) - fi - AC_SUBST(EXTRA_LIBZFS_INCLUDE) -fi - -AC_ARG_WITH([zfs-obj], - AC_HELP_STRING([--with-zfs-obj=path], [set path to zfs objects]), - [ - if test x$with_zfs = xyes; then - ZFS_OBJ="$withval" - fi - ],[ - if test x$with_zfs = xyes; then - ZFS_OBJ=$ZFS_DIR - fi + dnl # + dnl # The existence of the zfs_config.h is used to identify a valid + dnl # zfs 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([zfs build directory]) + AS_IF([test -z "$zfsobj"], [ + AS_IF([test -e "${zfssrc}/${LINUXRELEASE}/zfs_config.h"], [ + zfsobj="${zfssrc}/${LINUXRELEASE}" + ], [test -e "${zfssrc}/zfs_config.h"], [ + zfsobj="${zfssrc}" + ], [ + zfsobj="[Not found]" + ]) ]) -if test x$with_zfs = xyes; then - LB_ZFS_DEFINE_OPTIONS - - AC_MSG_CHECKING([zfs source directory]) - AC_MSG_RESULT([$ZFS_DIR]) - AC_SUBST(ZFS_DIR) - - AC_MSG_CHECKING([zfs object directory]) - AC_MSG_RESULT([$ZFS_OBJ]) - AC_SUBST(ZFS_OBJ) + AC_MSG_RESULT([$zfsobj]) + AS_IF([test ! -e "$zfsobj/zfs_config.h"], [ + enable_zfs=no + ]) - LB_ZFS_SYMVERS - LB_ZFS_RELEASE + dnl # + dnl # Verify the source version using SPL_META_VERSION in spl_config.h + dnl # + AS_IF([test x$enable_zfs = xyes], [ + AC_MSG_CHECKING([zfs source version]) + AS_IF([fgrep -q ZFS_META_VERSION $zfsobj/zfs_config.h], [ + zfsver=$((echo "#include "; + echo "zfsver=ZFS_META_VERSION-ZFS_META_RELEASE") | + cpp -I $zfsobj | + grep "^zfsver=" | tr -d \" | cut -d= -f2) + ],[ + zfsver="[Not found]" + enable_zfs=no + ]) + AC_MSG_RESULT([$zfsver]) + ]) - LB_PATH_SPL + dnl # + dnl # Verify the modules systems exist by the expect name. + dnl # + AS_IF([test x$enable_zfs = xyes], [ + AC_MSG_CHECKING([zfs file name for module symbols]) + AS_IF([test -r $zfsobj/$SYMVERFILE], [ + zfssym=$SYMVERFILE + ], [test -r $zfsobj/module/$SYMVERFILE], [ + zfssym=$SYMVERFILE + ], [ + zfssym="[Not found]" + enable_zfs=no + ]) + AC_MSG_RESULT([$zfssym]) + ]) - LB_SPL_BUILD - LB_ZFS_BUILD -fi + ZFS=${zfssrc} + ZFS_OBJ=${zfsobj} + ZFS_VERSION=${zfsver} + ZFS_SYMBOLS=${zfssym} -AM_CONDITIONAL(SPL_BUILD, test x$enable_spl_build = xyes) -AM_CONDITIONAL(ZFS_BUILD, test x$enable_zfs_build = xyes) -AM_CONDITIONAL(ZFS_ENABLED, test x$with_zfs = xyes) + AC_SUBST(ZFS) + AC_SUBST(ZFS_OBJ) + AC_SUBST(ZFS_VERSION) + AC_SUBST(ZFS_SYMBOLS) ]) -# -# LB_ZFS_BUILD -# -# Optionally configure/make the zfs sources. If the sources are -# determined to reside in-tree this feature will automatically be -# enabled. If the sources are not in-tree it will be disabled. -# Use --enable-zfs-build or --disable-zfs-build if you need to -# override this behavior. -# -AC_DEFUN([LB_ZFS_BUILD], -[ -AC_ARG_ENABLE([zfs-build], - AC_HELP_STRING([--enable-zfs-build], [enable zfs configure/make]), - [], [ - ZFS_DIR_INTREE=$(readlink -f $PWD/zfs) - if test x$ZFS_DIR = x$ZFS_DIR_INTREE; then - enable_zfs_build='yes' - else - enable_zfs_build='no' - fi +AC_DEFUN([LB_ZFS_DEVEL], [ + AC_ARG_WITH([zfs-devel], + [AS_HELP_STRING([--with-zfs-devel=PATH], + [Path to zfs development headers])], + [zfsdevel="$withval"]) + + AC_MSG_CHECKING([user provided zfs devel headers]) + AS_IF([test ! -z "${zfsdevel}"], [ + AS_IF([test -d "${zfsdevel}/usr/include/libspl" && test -d "${zfsdevel}/usr/include/libzfs"], [ + zfslib="-I $zfsdevel/usr/include/libspl -I $zfsdevel/usr/include/libzfs" + ], [ + AC_MSG_ERROR([Path to development headers directory does not exist]) + ]) ]) + AC_MSG_RESULT([$zfslib]) +]) -AC_MSG_CHECKING([whether to build zfs]) -if test x$enable_zfs_build = xyes; then - AC_MSG_RESULT([$enable_zfs_build]) - - LB_CHECK_FILE([$ZFS_DIR/module/zfs/dmu.c], [], [ - AC_MSG_ERROR([Complete zfs sources must exist when building.])]) - - LB_CHECK_FILE([$ZFS_DIR/configure], [], [ - AC_MSG_ERROR([Complete zfs sources must exist when building.])]) - - ZFS_SUBDIR="$ZFS_DIR" - AC_SUBST(ZFS_SUBDIR) - AC_CONFIG_SUBDIRS("zfs") +AC_DEFUN([LB_ZFS_USER], [ + dnl # + dnl # Detect user space zfs development headers. + dnl # + AC_MSG_CHECKING([zfs devel headers]) + AS_IF([test -z "${zfslib}"], [ + AS_IF([test -e "${zfssrc}/include/libzfs.h" && test -e "${zfssrc}/lib/libspl/include"], [ + zfslib="-I $zfssrc/lib/libspl/include -I $zfssrc/include" + ], [test -d /usr/include/libzfs && test -d /usr/include/libspl], [ + zfslib="-I /usr/include/libspl -I /usr/include/libzfs" + ], [ + zfslib="[Not Found]" + enable_zfs=no + ]) + ]) + AC_MSG_RESULT([$zfslib]) - ac_configure_args="$ac_configure_args --with-spl=$SPL_DIR" - ac_configure_args="$ac_configure_args --with-spl-obj=$SPL_OBJ" -else - enable_zfs_build='no' - AC_MSG_RESULT([$enable_zfs_build]) -fi + ZFS_LIBZFS_INCLUDE=${zfslib} + AC_SUBST(ZFS_LIBZFS_INCLUDE) ]) -# -# LB_ZFS_SYMVERS -# -AC_DEFUN([LB_ZFS_SYMVERS], -[ -AC_MSG_CHECKING([zfs module symbols]) -if test -r $ZFS_OBJ/Module.symvers; then - ZFS_SYMBOLS=Module.symvers -elif test -r $ZFS_OBJ/Modules.symvers; then - ZFS_SYMBOLS=Modules.symvers -elif test -r $ZFS_OBJ/module/Module.symvers; then - ZFS_SYMBOLS=Module.symvers -elif test -r $ZFS_OBJ/module/Modules.symvers; then - ZFS_SYMBOLS=Modules.symvers -else - ZFS_SYMBOLS=$SYMVERFILE -fi - -AC_MSG_RESULT([$ZFS_SYMBOLS]) -AC_SUBST(ZFS_SYMBOLS) -]) +AC_DEFUN([LB_CONFIG_ZFS], [ + AC_ARG_WITH([zfs], + [AS_HELP_STRING([--with-zfs=PATH], [Path to zfs source])], + [ + AS_IF([test x$withval = xno], [ + enable_zfs=no + require_zfs=no + ], [test x$withval = xyes], [ + enable_zfs=yes + require_zfs=yes + ], [ + enable_zfs=yes + require_zfs=yes + zfssrc="$withval" + ]) + ], [ + AS_IF([test x$enable_server != xno], [ + require_zfs=no + enable_zfs=yes + ], [ + require_zfs=no + enable_zfs=no + ]) + ]) + + AC_MSG_CHECKING([whether to enable zfs]) + AC_MSG_RESULT([$enable_zfs]) + + AS_IF([test x$enable_zfs = xyes], [ + AS_IF([test x$enable_modules = xyes], [ + LB_SPL + LB_ZFS + ]) + LB_ZFS_DEVEL + LB_ZFS_USER + + dnl # + dnl # enable_zfs will be set to no in LB_SPL or LB_ZFS if + dnl # one of more of the build requirements is not met. + dnl # + AS_IF([test x$enable_zfs = xyes], [ + AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd) + ],[ + AS_IF([test x$require_zfs = xyes], [ + AC_MSG_ERROR([ + +Required zfs osd cannot be built due to missing zfs development headers. + +Support for zfs can be enabled by downloading the required packages for your +distribution. See http://zfsonlinux.org/ to determine is zfs is supported by +your distribution. + ]) + ], [ + AC_MSG_WARN([ + +Disabling optional zfs osd due to missing development headers. + +Support for zfs can be enabled by downloading the required packages for your +distribution. See http://zfsonlinux.org/ to determine is zfs is supported by +your distribution. + ]) + ]) + ]) + ]) -# -# LB_ZFS_RELEASE -# -AC_DEFUN([LB_ZFS_RELEASE], -[ -AC_MSG_CHECKING([zfs source release]) -if test -r $ZFS_OBJ/zfs_config.h; then - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="-I$ZFS_OBJ $EXTRA_KCFLAGS" - LB_LINUX_TRY_MAKE([ - #include <$ZFS_OBJ/zfs_config.h> - ],[ - char *ZFS_RELEASE; - ZFS_RELEASE=ZFS_META_VERSION; - ],[ - $makerule LUSTRE_KERNEL_TEST=conftest.i - ],[ - test -s build/conftest.i - ],[ - eval $(grep "ZFS_RELEASE=" build/conftest.i) - ],[ - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not preprocess test program.]) + AS_IF([test x$enable_zfs = xyes], [ + AC_MSG_CHECKING([if zfs defines dsl_pool_config_enter/exit]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + dsl_pool_config_enter(NULL, FTAG); + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_DSL_POOL_CONFIG, 1, + [Have dsl_pool_config_enter/exit in ZFS]) + ],[ + AC_MSG_RESULT([no]) + ]) ]) - EXTRA_KCFLAGS="$tmp_flags" - rm build/conftest.i -elif test -r $ZFS_DIR/META; then - ZFS_RELEASE=$(awk '/Version/ { print [$]2 }' $ZFS_DIR/META) -else - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not locate zfs_config.h or META to check release.]) -fi - -if test x$ZFS_RELEASE = x; then - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not determine zfs release.]) -fi - -AC_MSG_RESULT([$ZFS_RELEASE]) -AC_SUBST(ZFS_RELEASE) -]) -# -# LB_ZFS_DEFINE_OPTIONS -# -AC_DEFUN([LB_ZFS_DEFINE_OPTIONS], -[ -AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd) + AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes) ])