Modify vdev_elevator_switch() to use elevator_change()
[zfs.git] / config / kernel.m4
1 dnl #
2 dnl # Default ZFS kernel configuration 
3 dnl #
4 AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
5         ZFS_AC_KERNEL
6         ZFS_AC_SPL
7         ZFS_AC_TEST_MODULE
8         ZFS_AC_KERNEL_CONFIG
9         ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS
10         ZFS_AC_KERNEL_TYPE_FMODE_T
11         ZFS_AC_KERNEL_KOBJ_NAME_LEN
12         ZFS_AC_KERNEL_3ARG_BLKDEV_GET
13         ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
14         ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE
15         ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS
16         ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE
17         ZFS_AC_KERNEL_BIO_EMPTY_BARRIER
18         ZFS_AC_KERNEL_BIO_FAILFAST
19         ZFS_AC_KERNEL_BIO_FAILFAST_DTD
20         ZFS_AC_KERNEL_REQ_FAILFAST_MASK
21         ZFS_AC_KERNEL_BIO_END_IO_T_ARGS
22         ZFS_AC_KERNEL_BIO_RW_SYNC
23         ZFS_AC_KERNEL_BIO_RW_SYNCIO
24         ZFS_AC_KERNEL_REQ_SYNC
25         ZFS_AC_KERNEL_BLK_END_REQUEST
26         ZFS_AC_KERNEL_BLK_QUEUE_FLUSH
27         ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS
28         ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS
29         ZFS_AC_KERNEL_BLK_QUEUE_PHYSICAL_BLOCK_SIZE
30         ZFS_AC_KERNEL_BLK_QUEUE_IO_OPT
31         ZFS_AC_KERNEL_BLK_QUEUE_NONROT
32         ZFS_AC_KERNEL_BLK_QUEUE_DISCARD
33         ZFS_AC_KERNEL_BLK_FETCH_REQUEST
34         ZFS_AC_KERNEL_BLK_REQUEUE_REQUEST
35         ZFS_AC_KERNEL_BLK_RQ_BYTES
36         ZFS_AC_KERNEL_BLK_RQ_POS
37         ZFS_AC_KERNEL_BLK_RQ_SECTORS
38         ZFS_AC_KERNEL_GET_DISK_RO
39         ZFS_AC_KERNEL_GET_GENDISK
40         ZFS_AC_KERNEL_RQ_IS_SYNC
41         ZFS_AC_KERNEL_RQ_FOR_EACH_SEGMENT
42         ZFS_AC_KERNEL_DISCARD_GRANULARITY
43         ZFS_AC_KERNEL_CONST_XATTR_HANDLER
44         ZFS_AC_KERNEL_XATTR_HANDLER_GET
45         ZFS_AC_KERNEL_XATTR_HANDLER_SET
46         ZFS_AC_KERNEL_SHOW_OPTIONS
47         ZFS_AC_KERNEL_FSYNC
48         ZFS_AC_KERNEL_EVICT_INODE
49         ZFS_AC_KERNEL_NR_CACHED_OBJECTS
50         ZFS_AC_KERNEL_FREE_CACHED_OBJECTS
51         ZFS_AC_KERNEL_FALLOCATE
52         ZFS_AC_KERNEL_TRUNCATE_RANGE
53         ZFS_AC_KERNEL_CREATE_UMODE_T
54         ZFS_AC_KERNEL_AUTOMOUNT
55         ZFS_AC_KERNEL_ENCODE_FH_WITH_INODE
56         ZFS_AC_KERNEL_COMMIT_METADATA
57         ZFS_AC_KERNEL_CLEAR_INODE
58         ZFS_AC_KERNEL_INSERT_INODE_LOCKED
59         ZFS_AC_KERNEL_D_MAKE_ROOT
60         ZFS_AC_KERNEL_D_OBTAIN_ALIAS
61         ZFS_AC_KERNEL_CHECK_DISK_SIZE_CHANGE
62         ZFS_AC_KERNEL_TRUNCATE_SETSIZE
63         ZFS_AC_KERNEL_6ARGS_SECURITY_INODE_INIT_SECURITY
64         ZFS_AC_KERNEL_CALLBACK_SECURITY_INODE_INIT_SECURITY
65         ZFS_AC_KERNEL_MOUNT_NODEV
66         ZFS_AC_KERNEL_SHRINK
67         ZFS_AC_KERNEL_BDI
68         ZFS_AC_KERNEL_BDI_SETUP_AND_REGISTER
69         ZFS_AC_KERNEL_SET_NLINK
70         ZFS_AC_KERNEL_ELEVATOR_CHANGE
71
72         AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
73                 KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
74         ])
75         AC_SUBST(KERNELMAKE_PARAMS)
76
77
78         dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other
79         dnl # compiler options are added by the kernel build system.
80         KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_UNUSED_BUT_SET_VARIABLE"
81         KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL"
82         KERNELCPPFLAGS="$KERNELCPPFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\""
83
84         AC_SUBST(KERNELCPPFLAGS)
85 ])
86
87 dnl #
88 dnl # Detect name used for Module.symvers file in kernel
89 dnl #
90 AC_DEFUN([ZFS_AC_MODULE_SYMVERS], [
91         modpost=$LINUX/scripts/Makefile.modpost
92         AC_MSG_CHECKING([kernel file name for module symbols])
93         AS_IF([test "x$enable_linux_builtin" != xyes -a -f "$modpost"], [
94                 AS_IF([grep -q Modules.symvers $modpost], [
95                         LINUX_SYMBOLS=Modules.symvers
96                 ], [
97                         LINUX_SYMBOLS=Module.symvers
98                 ])
99
100                 AS_IF([test ! -f "$LINUX_OBJ/$LINUX_SYMBOLS"], [
101                         AC_MSG_ERROR([
102         *** Please make sure the kernel devel package for your distribution
103         *** is installed.  If your building with a custom kernel make sure the
104         *** kernel is configured, built, and the '--with-linux=PATH' configure
105         *** option refers to the location of the kernel source.])
106                 ])
107         ], [
108                 LINUX_SYMBOLS=NONE
109         ])
110         AC_MSG_RESULT($LINUX_SYMBOLS)
111         AC_SUBST(LINUX_SYMBOLS)
112 ])
113
114 dnl #
115 dnl # Detect the kernel to be built against
116 dnl #
117 AC_DEFUN([ZFS_AC_KERNEL], [
118         AC_ARG_WITH([linux],
119                 AS_HELP_STRING([--with-linux=PATH],
120                 [Path to kernel source]),
121                 [kernelsrc="$withval"])
122
123         AC_ARG_WITH(linux-obj,
124                 AS_HELP_STRING([--with-linux-obj=PATH],
125                 [Path to kernel build objects]),
126                 [kernelbuild="$withval"])
127
128         AC_MSG_CHECKING([kernel source directory])
129         AS_IF([test -z "$kernelsrc"], [
130                 AS_IF([test -e "/lib/modules/$(uname -r)/source"], [
131                         headersdir="/lib/modules/$(uname -r)/source"
132                         sourcelink=$(readlink -f "$headersdir")
133                 ], [test -e "/lib/modules/$(uname -r)/build"], [
134                         headersdir="/lib/modules/$(uname -r)/build"
135                         sourcelink=$(readlink -f "$headersdir")
136                 ], [
137                         sourcelink=$(ls -1d /usr/src/kernels/* \
138                                      /usr/src/linux-* \
139                                      2>/dev/null | grep -v obj | tail -1)
140                 ])
141
142                 AS_IF([test -n "$sourcelink" && test -e ${sourcelink}], [
143                         kernelsrc=`readlink -f ${sourcelink}`
144                 ], [
145                         AC_MSG_RESULT([Not found])
146                         AC_MSG_ERROR([
147         *** Please make sure the kernel devel package for your distribution
148         *** is installed then try again.  If that fails you can specify the
149         *** location of the kernel source with the '--with-linux=PATH' option.])
150                 ])
151         ], [
152                 AS_IF([test "$kernelsrc" = "NONE"], [
153                         kernsrcver=NONE
154                 ])
155         ])
156
157         AC_MSG_RESULT([$kernelsrc])
158         AC_MSG_CHECKING([kernel build directory])
159         AS_IF([test -z "$kernelbuild"], [
160                 AS_IF([test -e "/lib/modules/$(uname -r)/build"], [
161                         kernelbuild=`readlink -f /lib/modules/$(uname -r)/build`
162                 ], [test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}], [
163                         kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu}
164                 ], [test -d ${kernelsrc}-obj/${target_cpu}/default], [
165                         kernelbuild=${kernelsrc}-obj/${target_cpu}/default
166                 ], [test -d `dirname ${kernelsrc}`/build-${target_cpu}], [
167                         kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu}
168                 ], [
169                         kernelbuild=${kernelsrc}
170                 ])
171         ])
172         AC_MSG_RESULT([$kernelbuild])
173
174         AC_MSG_CHECKING([kernel source version])
175         utsrelease1=$kernelbuild/include/linux/version.h
176         utsrelease2=$kernelbuild/include/linux/utsrelease.h
177         utsrelease3=$kernelbuild/include/generated/utsrelease.h
178         AS_IF([test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1], [
179                 utsrelease=linux/version.h
180         ], [test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2], [
181                 utsrelease=linux/utsrelease.h
182         ], [test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3], [
183                 utsrelease=generated/utsrelease.h
184         ])
185
186         AS_IF([test "$utsrelease"], [
187                 kernsrcver=`(echo "#include <$utsrelease>";
188                              echo "kernsrcver=UTS_RELEASE") |
189                              cpp -I $kernelbuild/include |
190                              grep "^kernsrcver=" | cut -d \" -f 2`
191
192                 AS_IF([test -z "$kernsrcver"], [
193                         AC_MSG_RESULT([Not found])
194                         AC_MSG_ERROR([*** Cannot determine kernel version.])
195                 ])
196         ], [
197                 AC_MSG_RESULT([Not found])
198                 if test "x$enable_linux_builtin" != xyes; then
199                         AC_MSG_ERROR([*** Cannot find UTS_RELEASE definition.])
200                 else
201                         AC_MSG_ERROR([
202         *** Cannot find UTS_RELEASE definition.
203         *** Please run 'make prepare' inside the kernel source tree.])
204                 fi
205         ])
206
207         AC_MSG_RESULT([$kernsrcver])
208
209         LINUX=${kernelsrc}
210         LINUX_OBJ=${kernelbuild}
211         LINUX_VERSION=${kernsrcver}
212
213         AC_SUBST(LINUX)
214         AC_SUBST(LINUX_OBJ)
215         AC_SUBST(LINUX_VERSION)
216
217         ZFS_AC_MODULE_SYMVERS
218 ])
219
220 dnl #
221 dnl # Detect name used for the additional SPL Module.symvers file.  If one
222 dnl # does not exist this is likely because the SPL has been configured
223 dnl # but not built.  The '--with-spl-timeout' option can be passed
224 dnl # to pause here, waiting for the file to appear from a concurrently
225 dnl # building SPL package.  If the file does not appear in time, a good
226 dnl # guess is made as to what this file will be named based on what it
227 dnl # is named in the kernel build products.  This file will first be
228 dnl # used at link time so if the guess is wrong the build will fail
229 dnl # then.  This unfortunately means the ZFS package does not contain a
230 dnl # reliable mechanism to detect symbols exported by the SPL at
231 dnl # configure time.
232 dnl #
233 AC_DEFUN([ZFS_AC_SPL_MODULE_SYMVERS], [
234         AC_ARG_WITH([spl-timeout],
235                 AS_HELP_STRING([--with-spl-timeout=SECS],
236                 [Wait SECS for symvers file to appear  @<:@default=0@:>@]),
237                 [timeout="$withval"], [timeout=0])
238
239         AC_MSG_CHECKING([spl file name for module symbols])
240         SPL_SYMBOLS=NONE
241
242         while true; do
243                 AS_IF([test -r $SPL_OBJ/Module.symvers], [
244                         SPL_SYMBOLS=Module.symvers
245                 ], [test -r $SPL_OBJ/Modules.symvers], [
246                         SPL_SYMBOLS=Modules.symvers
247                 ], [test -r $SPL_OBJ/module/Module.symvers], [
248                         SPL_SYMBOLS=Module.symvers
249                 ], [test -r $SPL_OBJ/module/Modules.symvers], [
250                         SPL_SYMBOLS=Modules.symvers
251                 ])
252
253                 AS_IF([test $SPL_SYMBOLS != NONE -o $timeout -le 0], [
254                         break;
255                 ], [
256                         sleep 1
257                         timeout=$((timeout-1))
258                 ])
259         done
260
261         AS_IF([test "$SPL_SYMBOLS" = NONE], [
262                 SPL_SYMBOLS=$LINUX_SYMBOLS
263         ])
264
265         AC_MSG_RESULT([$SPL_SYMBOLS])
266         AC_SUBST(SPL_SYMBOLS)
267 ])
268
269 dnl #
270 dnl # Detect the SPL module to be built against
271 dnl #
272 AC_DEFUN([ZFS_AC_SPL], [
273         AC_ARG_WITH([spl],
274                 AS_HELP_STRING([--with-spl=PATH],
275                 [Path to spl source]),
276                 [splsrc="$withval"])
277
278         AC_ARG_WITH([spl-obj],
279                 AS_HELP_STRING([--with-spl-obj=PATH],
280                 [Path to spl build objects]),
281                 [splbuild="$withval"])
282
283
284         AC_MSG_CHECKING([spl source directory])
285         AS_IF([test -z "$splsrc"], [
286                 dnl #
287                 dnl # Look in the standard development package location
288                 dnl #
289                 sourcelink=`ls -1d /usr/src/spl-*/${LINUX_VERSION} \
290                             2>/dev/null | tail -1`
291
292                 dnl #
293                 dnl # Look in the DKMS source location
294                 dnl #
295                 AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
296                         sourcelink=`ls -1d /var/lib/dkms/spl/*/build \
297                                     2>/dev/null | tail -1`
298                 ])
299
300                 dnl #
301                 dnl # Look in the parent directory
302                 dnl #
303                 AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
304                         sourcelink=../spl
305                 ])
306
307                 dnl #
308                 dnl # Look in the kernel directory
309                 dnl #
310                 AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
311                         sourcelink="$LINUX"
312                 ])
313
314                 AS_IF([test -e $sourcelink/spl_config.h], [
315                         splsrc=`readlink -f ${sourcelink}`
316                 ], [
317                         AC_MSG_RESULT([Not found])
318                         AC_MSG_ERROR([
319         *** Please make sure the spl devel package for your distribution
320         *** is installed then try again.  If that fails you can specify the
321         *** location of the spl source with the '--with-spl=PATH' option.])
322                 ])
323         ], [
324                 AS_IF([test "$splsrc" = "NONE"], [
325                         splbuild=NONE
326                         splsrcver=NONE
327                 ])
328         ])
329
330         AC_MSG_RESULT([$splsrc])
331         AC_MSG_CHECKING([spl build directory])
332         AS_IF([test -z "$splbuild"], [
333                 splbuild=${splsrc}
334         ])
335         AC_MSG_RESULT([$splbuild])
336
337         AC_MSG_CHECKING([spl source version])
338         AS_IF([test -r $splbuild/spl_config.h &&
339                 fgrep -q SPL_META_VERSION $splbuild/spl_config.h], [
340
341                 splsrcver=`(echo "#include <spl_config.h>";
342                             echo "splsrcver=SPL_META_VERSION-SPL_META_RELEASE") |
343                             cpp -I $splbuild |
344                             grep "^splsrcver=" | tr -d \" | cut -d= -f2`
345         ])
346
347         AS_IF([test -z "$splsrcver"], [
348                 AC_MSG_RESULT([Not found])
349                 AC_MSG_ERROR([
350         *** Cannot determine the version of the spl source.
351         *** Please prepare the spl source before running this script])
352         ])
353
354         AC_MSG_RESULT([$splsrcver])
355
356         SPL=${splsrc}
357         SPL_OBJ=${splbuild}
358         SPL_VERSION=${splsrcver}
359
360         AC_SUBST(SPL)
361         AC_SUBST(SPL_OBJ)
362         AC_SUBST(SPL_VERSION)
363
364         ZFS_AC_SPL_MODULE_SYMVERS
365 ])
366
367 dnl #
368 dnl # Basic toolchain sanity check.
369 dnl #
370 AC_DEFUN([ZFS_AC_TEST_MODULE],
371         [AC_MSG_CHECKING([whether modules can be built])
372         ZFS_LINUX_TRY_COMPILE([],[],[
373                 AC_MSG_RESULT([yes])
374         ],[
375                 AC_MSG_RESULT([no])
376                 if test "x$enable_linux_builtin" != xyes; then
377                         AC_MSG_ERROR([*** Unable to build an empty module.])
378                 else
379                         AC_MSG_ERROR([
380         *** Unable to build an empty module.
381         *** Please run 'make scripts' inside the kernel source tree.])
382                 fi
383         ])
384 ])
385
386 dnl #
387 dnl # Certain kernel build options are not supported.  These must be
388 dnl # detected at configure time and cause a build failure.  Otherwise
389 dnl # modules may be successfully built that behave incorrectly.
390 dnl #
391 AC_DEFUN([ZFS_AC_KERNEL_CONFIG], [
392
393         AS_IF([test "$ZFS_META_LICENSE" = GPL], [
394                 AC_DEFINE([HAVE_GPL_ONLY_SYMBOLS], [1],
395                         [Define to 1 if licensed under the GPL])
396         ])
397
398         ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC
399 ])
400
401 dnl #
402 dnl # Check CONFIG_DEBUG_LOCK_ALLOC
403 dnl #
404 dnl # This is typically only set for debug kernels because it comes with
405 dnl # a performance penalty.  However, when it is set it maps the non-GPL
406 dnl # symbol mutex_lock() to the GPL-only mutex_lock_nested() symbol.
407 dnl # This will cause a failure at link time which we'd rather know about
408 dnl # at compile time.
409 dnl #
410 dnl # Since we plan to pursue making mutex_lock_nested() a non-GPL symbol
411 dnl # with the upstream community we add a check to detect this case.
412 dnl #
413 AC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC], [
414
415         ZFS_LINUX_CONFIG([DEBUG_LOCK_ALLOC], [
416                 AC_MSG_CHECKING([whether mutex_lock() is GPL-only])
417                 tmp_flags="$EXTRA_KCFLAGS"
418                 ZFS_LINUX_TRY_COMPILE([
419                         #include <linux/module.h>
420                         #include <linux/mutex.h>
421
422                         MODULE_LICENSE("$ZFS_META_LICENSE");
423                 ],[
424                         struct mutex lock;
425
426                         mutex_init(&lock);
427                         mutex_lock(&lock);
428                         mutex_unlock(&lock);
429                 ],[
430                         AC_MSG_RESULT(no)
431                 ],[
432                         AC_MSG_RESULT(yes)
433                         AC_MSG_ERROR([
434         *** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is incompatible
435         *** with the CDDL license and will prevent the module linking stage
436         *** from succeeding.  You must rebuild your kernel without this
437         *** option enabled.])
438                 ])
439                 EXTRA_KCFLAGS="$tmp_flags"
440         ], [])
441 ])
442
443 dnl #
444 dnl # ZFS_LINUX_CONFTEST
445 dnl #
446 AC_DEFUN([ZFS_LINUX_CONFTEST], [
447 cat confdefs.h - <<_ACEOF >conftest.c
448 $1
449 _ACEOF
450 ])
451
452 dnl #
453 dnl # ZFS_LANG_PROGRAM(C)([PROLOGUE], [BODY])
454 dnl #
455 m4_define([ZFS_LANG_PROGRAM], [
456 $1
457 int
458 main (void)
459 {
460 dnl Do *not* indent the following line: there may be CPP directives.
461 dnl Don't move the `;' right after for the same reason.
462 $2
463   ;
464   return 0;
465 }
466 ])
467
468 dnl #
469 dnl # ZFS_LINUX_COMPILE_IFELSE / like AC_COMPILE_IFELSE
470 dnl #
471 AC_DEFUN([ZFS_LINUX_COMPILE_IFELSE], [
472         m4_ifvaln([$1], [ZFS_LINUX_CONFTEST([$1])])
473         rm -Rf build && mkdir -p build && touch build/conftest.mod.c
474         echo "obj-m := conftest.o" >build/Makefile
475         modpost_flag=''
476         test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage
477         AS_IF(
478                 [AC_TRY_COMMAND(cp conftest.c build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])],
479                 [$4],
480                 [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])]
481         )
482         rm -Rf build
483 ])
484
485 dnl #
486 dnl # ZFS_LINUX_TRY_COMPILE like AC_TRY_COMPILE
487 dnl #
488 AC_DEFUN([ZFS_LINUX_TRY_COMPILE],
489         [ZFS_LINUX_COMPILE_IFELSE(
490         [AC_LANG_SOURCE([ZFS_LANG_PROGRAM([[$1]], [[$2]])])],
491         [modules],
492         [test -s build/conftest.o],
493         [$3], [$4])
494 ])
495
496 dnl #
497 dnl # ZFS_LINUX_CONFIG
498 dnl #
499 AC_DEFUN([ZFS_LINUX_CONFIG],
500         [AC_MSG_CHECKING([whether Linux was built with CONFIG_$1])
501         ZFS_LINUX_TRY_COMPILE([
502                 #include <linux/module.h>
503         ],[
504                 #ifndef CONFIG_$1
505                 #error CONFIG_$1 not #defined
506                 #endif
507         ],[
508                 AC_MSG_RESULT([yes])
509                 $2
510         ],[
511                 AC_MSG_RESULT([no])
512                 $3
513         ])
514 ])
515
516 dnl #
517 dnl # ZFS_CHECK_SYMBOL_EXPORT
518 dnl # check symbol exported or not
519 dnl #
520 AC_DEFUN([ZFS_CHECK_SYMBOL_EXPORT], [
521         grep -q -E '[[[:space:]]]$1[[[:space:]]]' \
522                 $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null
523         rc=$?
524         if test $rc -ne 0; then
525                 export=0
526                 for file in $2; do
527                         grep -q -E "EXPORT_SYMBOL.*($1)" \
528                                 "$LINUX/$file" 2>/dev/null
529                         rc=$?
530                         if test $rc -eq 0; then
531                                 export=1
532                                 break;
533                         fi
534                 done
535                 if test $export -eq 0; then :
536                         $4
537                 else :
538                         $3
539                 fi
540         else :
541                 $3
542         fi
543 ])
544
545 dnl #
546 dnl # ZFS_LINUX_TRY_COMPILE_SYMBOL
547 dnl # like ZFS_LINUX_TRY_COMPILE, except ZFS_CHECK_SYMBOL_EXPORT
548 dnl # is called if not compiling for builtin
549 dnl #
550 AC_DEFUN([ZFS_LINUX_TRY_COMPILE_SYMBOL], [
551         ZFS_LINUX_TRY_COMPILE([$1], [$2], [rc=0], [rc=1])
552         if test $rc -ne 0; then :
553                 $6
554         else
555                 if test "x$enable_linux_builtin" != xyes; then
556                         ZFS_CHECK_SYMBOL_EXPORT([$3], [$4], [rc=0], [rc=1])
557                 fi
558                 if test $rc -ne 0; then :
559                         $6
560                 else :
561                         $5
562                 fi
563         fi
564 ])