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}/source
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}/source
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 spldkms="/var/lib/dkms/spl/${splver}"
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 "${spldkms}/source/spl.release.in"], [
84 splsrc=${spldkms}/source
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 "${splsrc}" = "${spldkms}/source"], [
113 AS_IF([test -e "${spldkms}/${LINUXRELEASE}/${target_cpu}/spl_config.h"], [
114 splobj=${spldkms}/${LINUXRELEASE}/${target_cpu}
118 ],[test -e "${splsrc}/${LINUXRELEASE}/spl_config.h"], [
119 splobj="${splsrc}/${LINUXRELEASE}"
120 ], [test -e "${splsrc}/spl_config.h"], [
126 AC_MSG_RESULT([$splobj])
128 AS_IF([test ! -e "$splobj/spl_config.h"], [
133 dnl # Verify the source version using SPL_META_VERSION in spl_config.h
135 AS_IF([test x$enable_zfs = xyes], [
136 AC_MSG_CHECKING([spl source version])
137 AS_IF([fgrep -q SPL_META_VERSION $splobj/spl_config.h], [
138 splver=$((echo "#include <spl_config.h>";
139 echo "splver=SPL_META_VERSION-SPL_META_RELEASE") |
141 grep "^splver=" | tr -d \" | cut -d= -f2)
146 AC_MSG_RESULT([$splver])
150 dnl # Verify the modules systems exist by the expect name.
152 AS_IF([test x$enable_zfs = xyes], [
153 AC_MSG_CHECKING([spl file name for module symbols])
154 AS_IF([test -r $splobj/$SYMVERFILE], [
156 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $splobj/$SYMVERFILE"
157 ], [test -r $splobj/module/$SYMVERFILE], [
159 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $splobj/module/$SYMVERFILE"
164 AC_MSG_RESULT([$splsym])
169 SPL_VERSION=${splver}
173 AC_SUBST(SPL_VERSION)
174 AC_SUBST(EXTRA_SYMBOLS)
178 AC_ARG_WITH([zfs-obj],
179 AS_HELP_STRING([--with-zfs-obj=PATH],
180 [Path to zfs build objects]),
184 dnl # The existence of zfs.release[.in] is used to identify a valid
185 dnl # source directory. In order of preference:
187 zfsver=$(ls -1 /usr/src/ | grep -m1 zfs | cut -f2 -d'-')
188 zfsdkms="/var/lib/dkms/zfs/${zfsver}"
189 zfssrc1="/usr/src/zfs-${zfsver}/${LINUXRELEASE}"
190 zfssrc2="/usr/src/zfs-${zfsver}"
194 AC_MSG_CHECKING([zfs source directory])
195 AS_IF([test -z "${zfssrc}"], [
196 AS_IF([test -e "${zfsdkms}/source/zfs.release.in"], [
197 zfssrc=${zfsdkms}/source
198 ], [test -e "${zfssrc1}/zfs.release.in"], [
200 ], [test -e "${zfssrc2}/zfs.release.in"], [
202 ], [test -e "${zfssrc3}/zfs.release.in"], [
203 zfssrc=$(readlink -f "${zfssrc3}")
204 ], [test -e "${zfssrc4}/zfs.release.in"], [
210 AC_MSG_RESULT([$zfssrc])
212 AS_IF([test ! -e "$zfssrc/zfs.release.in" &&
213 test ! -e "$zfssrc/zfs.release"], [
218 dnl # The existence of the zfs_config.h is used to identify a valid
219 dnl # zfs object directory. In many cases the object and source
220 dnl # directory are the same, however the objects may also reside
221 dnl # is a subdirectory named after the kernel version.
223 AC_MSG_CHECKING([zfs build directory])
224 AS_IF([test -z "$zfsobj"], [
225 AS_IF([test "${zfssrc}" = "${zfsdkms}/source"], [
226 AS_IF([test -e "${zfsdkms}/${LINUXRELEASE}/${target_cpu}/zfs_config.h"], [
227 zfsobj=${zfsdkms}/${LINUXRELEASE}/${target_cpu}
231 ], [test -e "${zfssrc}/${LINUXRELEASE}/zfs_config.h"], [
232 zfsobj="${zfssrc}/${LINUXRELEASE}"
233 ], [test -e "${zfssrc}/zfs_config.h"], [
240 AC_MSG_RESULT([$zfsobj])
241 AS_IF([test ! -e "$zfsobj/zfs_config.h"], [
246 dnl # Verify the source version using SPL_META_VERSION in spl_config.h
248 AS_IF([test x$enable_zfs = xyes], [
249 AC_MSG_CHECKING([zfs source version])
250 AS_IF([fgrep -q ZFS_META_VERSION $zfsobj/zfs_config.h], [
251 zfsver=$((echo "#include <zfs_config.h>";
252 echo "zfsver=ZFS_META_VERSION-ZFS_META_RELEASE") |
254 grep "^zfsver=" | tr -d \" | cut -d= -f2)
259 AC_MSG_RESULT([$zfsver])
263 dnl # Verify the modules systems exist by the expect name.
265 AS_IF([test x$enable_zfs = xyes], [
266 AC_MSG_CHECKING([zfs file name for module symbols])
267 AS_IF([test -r $zfsobj/$SYMVERFILE], [
269 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $zfsobj/$SYMVERFILE"
270 ], [test -r $zfsobj/module/$SYMVERFILE], [
272 EXTRA_SYMBOLS="$EXTRA_SYMBOLS $zfsobj/module/$SYMVERFILE"
277 AC_MSG_RESULT([$zfssym])
282 ZFS_VERSION=${zfsver}
286 AC_SUBST(ZFS_VERSION)
287 AC_SUBST(EXTRA_SYMBOLS)
290 AC_DEFUN([LB_ZFS_DEVEL], [
291 AC_ARG_WITH([zfs-devel],
292 [AS_HELP_STRING([--with-zfs-devel=PATH],
293 [Path to zfs development headers])],
294 [zfsdevel="$withval"])
296 AC_MSG_CHECKING([user provided zfs devel headers])
297 AS_IF([test ! -z "${zfsdevel}"], [
298 AS_IF([test -d "${zfsdevel}/usr/include/libspl" && test -d "${zfsdevel}/usr/include/libzfs"], [
299 zfsinc="-I $zfsdevel/usr/include/libspl -I $zfsdevel/usr/include/libzfs"
300 zfslib="-L$zfsdevel/usr/lib64 -L$zfsdevel/usr/lib -L$zfsdevel/lib64 -L$zfsdevel/lib"
302 AC_MSG_ERROR([Path to development headers directory does not exist])
305 AC_MSG_RESULT([$zfsinc])
308 AC_DEFUN([LB_ZFS_USER], [
310 dnl # Detect user space zfs development headers.
312 AC_MSG_CHECKING([zfs devel headers])
313 AS_IF([test -z "${zfsinc}"], [
314 AS_IF([test -e "${zfssrc}/include/libzfs.h" && test -e "${zfssrc}/lib/libspl/include"], [
315 zfsinc="-I $zfssrc/lib/libspl/include -I $zfssrc/include"
316 zfslib="-L$zfssrc/lib/libzfs/.libs/"
317 ], [test -d /usr/include/libzfs && test -d /usr/include/libspl], [
318 zfsinc="-I/usr/include/libspl -I /usr/include/libzfs"
326 AC_MSG_RESULT([$zfsinc])
328 ZFS_LIBZFS_INCLUDE=${zfsinc}
329 ZFS_LIBZFS_LDFLAGS="-lzfs ${zfslib}"
330 AC_SUBST(ZFS_LIBZFS_INCLUDE)
331 AC_SUBST(ZFS_LIBZFS_LDFLAGS)
334 AC_DEFUN([LB_CONFIG_ZFS], [
336 [AS_HELP_STRING([--with-zfs=PATH], [Path to zfs source])],
338 AS_IF([test x$withval = xno], [
341 ], [test x$withval = xyes], [
350 AS_IF([test x$enable_server != xno], [
359 AC_MSG_CHECKING([whether to enable zfs])
360 AC_MSG_RESULT([$enable_zfs])
362 AS_IF([test x$enable_zfs = xyes], [
363 AS_IF([test x$enable_modules = xyes], [
371 dnl # enable_zfs will be set to no in LB_SPL or LB_ZFS if
372 dnl # one of more of the build requirements is not met.
374 AS_IF([test x$enable_zfs = xyes], [
375 AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd)
377 AS_IF([test x$require_zfs = xyes], [
380 Required zfs osd cannot be built due to missing zfs development headers.
382 Support for zfs can be enabled by downloading the required packages for your
383 distribution. See http://zfsonlinux.org/ to determine is zfs is supported by
389 Disabling optional zfs osd due to missing development headers.
391 Support for zfs can be enabled by downloading the required packages for your
392 distribution. See http://zfsonlinux.org/ to determine is zfs is supported by
399 AS_IF([test "x$enable_zfs" = xyes], [
400 LB_CHECK_COMPILE([if zfs defines dsl_pool_config_enter/exit],
401 dsl_pool_config_enter, [
402 #include <sys/dsl_pool.h>
404 dsl_pool_config_enter(NULL, FTAG);
406 AC_DEFINE(HAVE_DSL_POOL_CONFIG, 1,
407 [Have dsl_pool_config_enter/exit in ZFS])
409 LB_CHECK_COMPILE([if zfs defines dsl_sync_task_do_nowait],
410 dsl_sync_task_do_nowait, [
411 #include <sys/dsl_synctask.h>
413 dsl_sync_task_do_nowait(NULL, NULL, NULL, NULL, NULL, 0, NULL);
415 AC_DEFINE(HAVE_DSL_SYNC_TASK_DO_NOWAIT, 1,
416 [Have dsl_sync_task_do_nowait in ZFS])
418 LB_CHECK_COMPILE([if zfs defines sa_spill_alloc],
420 #include <sys/kmem.h>
425 ptr = sa_spill_alloc(KM_SLEEP);
428 AC_DEFINE(HAVE_SA_SPILL_ALLOC, 1,
429 [Have sa_spill_alloc in ZFS])
431 LB_CHECK_COMPILE([if zfs defines spa_maxblocksize],
438 size = spa_maxblocksize(spa);
440 AC_DEFINE(HAVE_SPA_MAXBLOCKSIZE, 1,
441 [Have spa_maxblocksize in ZFS])
445 AM_CONDITIONAL(ZFS_ENABLED, [test "x$enable_zfs" = xyes])