2 dnl # Supported configure options. When no options are specified support
3 dnl # for ZFS OSDs will be autodetected assuming server support is enabled.
4 dnl # If the ZFS OSD cannot be built support for it is disabled and a
5 dnl # warning is issued but the configure process is allowed to continue.
7 dnl # --without-zfs - Disable zfs support.
10 dnl # --with-zfs - Enable zfs support and attempt to autodetect the zfs
11 dnl # --with-zfs=yes headers in one of the following places. Because zfs
12 dnl # support was explicitly required if the headers cannot
13 dnl # be located it is treated as a fatal error.
15 dnl # * /var/lib/dkms/zfs/${VERSION}/build
16 dnl # * /usr/src/zfs-${VERSION}/${LINUXRELEASE}
17 dnl # * /usr/src/zfs-${VERSION}
21 dnl # --with-zfs-devel=path
22 dnl # - User provided directory where zfs development headers
23 dnl # are located. This option is typically used when user
24 dnl # uses rpm2cpio to unpack src rpm.
25 dnl # Assumes layout of:
26 dnl # ${zfs-devel-path}/usr/include/libzfs
27 dnl # ${zfs-devel-path}/usr/include/libspl
28 dnl # ${zfs-devel-path}/lib64/libzfs.so.* or
29 dnl # ${zfs-devel-path}/lib/libzfs.so.*
31 dnl # --with-zfs=path - Enable zfs support and use the zfs headers in the
32 dnl # provided path. No autodetection is performed and
33 dnl # if no headers are found this is a fatal error.
35 dnl # --with-zfs-obj - When zfs support is enabled the object directory
36 dnl # will be based on the --with-zfs directory. If this
37 dnl # is detected incorrectly it can be explicitly
38 dnl # specified using this option.
40 dnl # --without-spl - Disable spl support.
43 dnl # --with-spl - Enable spl support and attempt to autodetect the spl
44 dnl # --with-spl=yes headers in one of the following places in this order:
45 dnl # * /var/lib/dkms/spl/${VERSION}/build
46 dnl # * /usr/src/spl-${VERSION}/${LINUXRELEASE}
47 dnl # * /usr/src/spl-${VERSION}
51 dnl # --with-spl=path - Enable spl support and use the spl headers in the
52 dnl # provided path. No autodetection is performed.
54 dnl # --with-spl-obj - When spl support is enabled the object directory
55 dnl # will be based on the --with-spl directory. If this
56 dnl # is detected incorrectly it can be explicitly
57 dnl # specified using this option.
61 AS_HELP_STRING([--with-spl=PATH],
62 [Path to spl source]),
65 AC_ARG_WITH([spl-obj],
66 AS_HELP_STRING([--with-spl-obj=PATH],
67 [Path to spl build objects]),
71 dnl # The existence of spl.release[.in] is used to identify a valid
72 dnl # source directory. In order of preference:
74 splver=$(ls -1 /usr/src/ | grep -m1 spl | cut -f2 -d'-')
75 splsrc0="/var/lib/dkms/spl/${splver}/build"
76 splsrc1="/usr/src/spl-${splver}/${LINUXRELEASE}"
77 splsrc2="/usr/src/spl-${splver}"
81 AC_MSG_CHECKING([spl source directory])
82 AS_IF([test -z "${splsrc}"], [
83 AS_IF([test -e "${splsrc0}/spl.release.in"], [
85 ], [test -e "${splsrc1}/spl.release.in"], [
87 ], [test -e "${splsrc2}/spl.release.in"], [
89 ], [test -e "${splsrc3}/spl.release.in"], [
90 splsrc=$(readlink -f "${splsrc3}")
91 ], [test -e "${splsrc4}/spl.release.in"], [
97 AC_MSG_RESULT([$splsrc])
99 AS_IF([test ! -e "$splsrc/spl.release" &&
100 test ! -e "$splsrc/spl.release.in"], [
105 dnl # The existence of the spl_config.h is used to identify a valid
106 dnl # spl object directory. In many cases the object and source
107 dnl # directory are the same, however the objects may also reside
108 dnl # is a subdirectory named after the kernel version.
110 AC_MSG_CHECKING([spl build directory])
111 AS_IF([test -z "$splobj"], [
112 AS_IF([test -e "${splsrc}/${LINUXRELEASE}/spl_config.h"], [
113 splobj="${splsrc}/${LINUXRELEASE}"
114 ], [test -e "${splsrc}/spl_config.h"], [
120 AC_MSG_RESULT([$splobj])
122 AS_IF([test ! -e "$splobj/spl_config.h"], [
127 dnl # Verify the source version using SPL_META_VERSION in spl_config.h
129 AS_IF([test x$enable_zfs = xyes], [
130 AC_MSG_CHECKING([spl source version])
131 AS_IF([fgrep -q SPL_META_VERSION $splobj/spl_config.h], [
132 splver=$((echo "#include <spl_config.h>";
133 echo "splver=SPL_META_VERSION-SPL_META_RELEASE") |
135 grep "^splver=" | tr -d \" | cut -d= -f2)
140 AC_MSG_RESULT([$splver])
144 dnl # Verify the modules systems exist by the expect name.
146 AS_IF([test x$enable_zfs = xyes], [
147 AC_MSG_CHECKING([spl file name for module symbols])
148 AS_IF([test -r $splobj/$SYMVERFILE], [
150 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $splobj/$SYMVERFILE"
151 ], [test -r $splobj/module/$SYMVERFILE], [
153 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $splobj/module/$SYMVERFILE"
158 AC_MSG_RESULT([$splsym])
163 SPL_VERSION=${splver}
167 AC_SUBST(SPL_VERSION)
168 AC_SUBST(EXTRA_SYMBOLS)
172 AC_ARG_WITH([zfs-obj],
173 AS_HELP_STRING([--with-zfs-obj=PATH],
174 [Path to zfs build objects]),
178 dnl # The existence of zfs.release[.in] is used to identify a valid
179 dnl # source directory. In order of preference:
181 zfsver=$(ls -1 /usr/src/ | grep -m1 zfs | cut -f2 -d'-')
182 zfssrc0="/var/lib/dkms/zfs/${zfsver}/build"
183 zfssrc1="/usr/src/zfs-${zfsver}/${LINUXRELEASE}"
184 zfssrc2="/usr/src/zfs-${zfsver}"
188 AC_MSG_CHECKING([zfs source directory])
189 AS_IF([test -z "${zfssrc}"], [
190 AS_IF([test -e "${zfssrc0}/zfs.release.in"], [
192 ], [test -e "${zfssrc1}/zfs.release.in"], [
194 ], [test -e "${zfssrc2}/zfs.release.in"], [
196 ], [test -e "${zfssrc3}/zfs.release.in"], [
197 zfssrc=$(readlink -f "${zfssrc3}")
198 ], [test -e "${zfssrc4}/zfs.release.in"], [
204 AC_MSG_RESULT([$zfssrc])
206 AS_IF([test ! -e "$zfssrc/zfs.release.in" &&
207 test ! -e "$zfssrc/zfs.release"], [
212 dnl # The existence of the zfs_config.h is used to identify a valid
213 dnl # zfs object directory. In many cases the object and source
214 dnl # directory are the same, however the objects may also reside
215 dnl # is a subdirectory named after the kernel version.
217 AC_MSG_CHECKING([zfs build directory])
218 AS_IF([test -z "$zfsobj"], [
219 AS_IF([test -e "${zfssrc}/${LINUXRELEASE}/zfs_config.h"], [
220 zfsobj="${zfssrc}/${LINUXRELEASE}"
221 ], [test -e "${zfssrc}/zfs_config.h"], [
228 AC_MSG_RESULT([$zfsobj])
229 AS_IF([test ! -e "$zfsobj/zfs_config.h"], [
234 dnl # Verify the source version using SPL_META_VERSION in spl_config.h
236 AS_IF([test x$enable_zfs = xyes], [
237 AC_MSG_CHECKING([zfs source version])
238 AS_IF([fgrep -q ZFS_META_VERSION $zfsobj/zfs_config.h], [
239 zfsver=$((echo "#include <zfs_config.h>";
240 echo "zfsver=ZFS_META_VERSION-ZFS_META_RELEASE") |
242 grep "^zfsver=" | tr -d \" | cut -d= -f2)
247 AC_MSG_RESULT([$zfsver])
251 dnl # Verify the modules systems exist by the expect name.
253 AS_IF([test x$enable_zfs = xyes], [
254 AC_MSG_CHECKING([zfs file name for module symbols])
255 AS_IF([test -r $zfsobj/$SYMVERFILE], [
257 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $zfsobj/$SYMVERFILE"
258 ], [test -r $zfsobj/module/$SYMVERFILE], [
260 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $zfsobj/module/$SYMVERFILE"
265 AC_MSG_RESULT([$zfssym])
270 ZFS_VERSION=${zfsver}
274 AC_SUBST(ZFS_VERSION)
275 AC_SUBST(EXTRA_SYMBOLS)
278 AC_DEFUN([LB_ZFS_DEVEL], [
279 AC_ARG_WITH([zfs-devel],
280 [AS_HELP_STRING([--with-zfs-devel=PATH],
281 [Path to zfs development headers])],
282 [zfsdevel="$withval"])
284 AC_MSG_CHECKING([user provided zfs devel headers])
285 AS_IF([test ! -z "${zfsdevel}"], [
286 AS_IF([test -d "${zfsdevel}/usr/include/libspl" && test -d "${zfsdevel}/usr/include/libzfs"], [
287 zfsinc="-I $zfsdevel/usr/include/libspl -I $zfsdevel/usr/include/libzfs"
288 zfslib="-L$zfsdevel/usr/lib64 -L$zfsdevel/usr/lib -L$zfsdevel/lib64 -L$zfsdevel/lib"
290 AC_MSG_ERROR([Path to development headers directory does not exist])
293 AC_MSG_RESULT([$zfsinc])
296 AC_DEFUN([LB_ZFS_USER], [
298 dnl # Detect user space zfs development headers.
300 AC_MSG_CHECKING([zfs devel headers])
301 AS_IF([test -z "${zfsinc}"], [
302 AS_IF([test -e "${zfssrc}/include/libzfs.h" && test -e "${zfssrc}/lib/libspl/include"], [
303 zfsinc="-I $zfssrc/lib/libspl/include -I $zfssrc/include"
304 zfslib="-L$zfssrc/lib/libzfs/.libs/"
305 ], [test -d /usr/include/libzfs && test -d /usr/include/libspl], [
306 zfsinc="-I/usr/include/libspl -I /usr/include/libzfs"
314 AC_MSG_RESULT([$zfsinc])
316 ZFS_LIBZFS_INCLUDE=${zfsinc}
317 ZFS_LIBZFS_LDFLAGS="-lzfs ${zfslib}"
318 AC_SUBST(ZFS_LIBZFS_INCLUDE)
319 AC_SUBST(ZFS_LIBZFS_LDFLAGS)
322 AC_DEFUN([LB_CONFIG_ZFS], [
324 [AS_HELP_STRING([--with-zfs=PATH], [Path to zfs source])],
326 AS_IF([test x$withval = xno], [
329 ], [test x$withval = xyes], [
338 AS_IF([test x$enable_server != xno], [
347 AC_MSG_CHECKING([whether to enable zfs])
348 AC_MSG_RESULT([$enable_zfs])
350 AS_IF([test x$enable_zfs = xyes], [
351 AS_IF([test x$enable_modules = xyes], [
359 dnl # enable_zfs will be set to no in LB_SPL or LB_ZFS if
360 dnl # one of more of the build requirements is not met.
362 AS_IF([test x$enable_zfs = xyes], [
363 AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd)
365 AS_IF([test x$require_zfs = xyes], [
368 Required zfs osd cannot be built due to missing zfs development headers.
370 Support for zfs can be enabled by downloading the required packages for your
371 distribution. See http://zfsonlinux.org/ to determine is zfs is supported by
377 Disabling optional zfs osd due to missing development headers.
379 Support for zfs can be enabled by downloading the required packages for your
380 distribution. See http://zfsonlinux.org/ to determine is zfs is supported by
387 AS_IF([test "x$enable_zfs" = xyes], [
388 LB_CHECK_COMPILE([if zfs defines dsl_pool_config_enter/exit],
389 dsl_pool_config_enter, [
390 #include <sys/dsl_pool.h>
392 dsl_pool_config_enter(NULL, FTAG);
394 AC_DEFINE(HAVE_DSL_POOL_CONFIG, 1,
395 [Have dsl_pool_config_enter/exit in ZFS])
397 LB_CHECK_COMPILE([if zfs defines dsl_sync_task_do_nowait],
398 dsl_sync_task_do_nowait, [
399 #include <sys/dsl_synctask.h>
401 dsl_sync_task_do_nowait(NULL, NULL, NULL, NULL, NULL, 0, NULL);
403 AC_DEFINE(HAVE_DSL_SYNC_TASK_DO_NOWAIT, 1,
404 [Have dsl_sync_task_do_nowait in ZFS])
406 LB_CHECK_COMPILE([if zfs defines sa_spill_alloc],
408 #include <sys/kmem.h>
413 ptr = sa_spill_alloc(KM_SLEEP);
416 AC_DEFINE(HAVE_SA_SPILL_ALLOC, 1,
417 [Have sa_spill_alloc in ZFS])
419 LB_CHECK_COMPILE([if zfs defines spa_maxblocksize],
426 size = spa_maxblocksize(spa);
428 AC_DEFINE(HAVE_SPA_MAXBLOCKSIZE, 1,
429 [Have spa_maxblocksize in ZFS])
433 AM_CONDITIONAL(ZFS_ENABLED, [test "x$enable_zfs" = xyes])