95 lines
2.4 KiB
Plaintext
95 lines
2.4 KiB
Plaintext
|
dnl #
|
||
|
dnl # Check for ZFS support in libblkid. This test needs to check
|
||
|
dnl # more than if the library exists because we expect there are
|
||
|
dnl # at least 3 flavors of the library out in the wild:
|
||
|
dnl #
|
||
|
dnl # 1) blkid which has no ZFS support
|
||
|
dnl # 2) blkid with ZFS support and a flawed method of probing
|
||
|
dnl # 3) blkid with ZFS support and a working method of probing
|
||
|
dnl #
|
||
|
dnl # To handle this the check first validates that there is a version
|
||
|
dnl # of the library installed. If there is it creates a simulated
|
||
|
dnl # ZFS filesystem and then links a small test app which attempts
|
||
|
dnl # to detect the simualated filesystem type. If it correctly
|
||
|
dnl # identifies the filesystem as ZFS we can safely assume case 3).
|
||
|
dnl # Otherwise we disable blkid support and resort to manual probing.
|
||
|
dnl #
|
||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [
|
||
|
AC_ARG_WITH([blkid],
|
||
|
[AS_HELP_STRING([--with-blkid],
|
||
|
[support blkid caching @<:@default=check@:>@])],
|
||
|
[],
|
||
|
[with_blkid=check])
|
||
|
|
||
|
LIBBLKID=
|
||
|
AS_IF([test "x$with_blkid" != xno],
|
||
|
[
|
||
|
AC_CHECK_LIB([blkid], [blkid_get_cache],
|
||
|
[
|
||
|
AC_MSG_CHECKING([for blkid zfs support])
|
||
|
|
||
|
ZFS_DEV=`mktemp`
|
||
|
dd if=/dev/zero of=$ZFS_DEV bs=1024k count=8 \
|
||
|
>/dev/null 2>/dev/null
|
||
|
echo -en "\x0c\xb1\xba\0\0\0\0\0" | \
|
||
|
dd of=$ZFS_DEV bs=1k count=8 \
|
||
|
seek=132 conv=notrunc &>/dev/null \
|
||
|
>/dev/null 2>/dev/null
|
||
|
|
||
|
saved_LDFLAGS="$LDFLAGS"
|
||
|
LDFLAGS="-lblkid"
|
||
|
|
||
|
AC_RUN_IFELSE(AC_LANG_PROGRAM(
|
||
|
[
|
||
|
#include <stdio.h>
|
||
|
#include <blkid/blkid.h>
|
||
|
],
|
||
|
[
|
||
|
blkid_cache cache;
|
||
|
char *value;
|
||
|
|
||
|
if (blkid_get_cache(&cache, NULL) < 0)
|
||
|
return 1;
|
||
|
|
||
|
value = blkid_get_tag_value(cache, "TYPE",
|
||
|
"$ZFS_DEV");
|
||
|
if (!value) {
|
||
|
blkid_put_cache(cache);
|
||
|
return 2;
|
||
|
}
|
||
|
|
||
|
if (strcmp(value, "zfs")) {
|
||
|
free(value);
|
||
|
blkid_put_cache(cache);
|
||
|
return 3;
|
||
|
}
|
||
|
|
||
|
free(value);
|
||
|
blkid_put_cache(cache);
|
||
|
]),
|
||
|
[
|
||
|
rm -f $ZFS_DEV
|
||
|
AC_MSG_RESULT([yes])
|
||
|
AC_SUBST([LIBBLKID], ["-lblkid"])
|
||
|
AC_DEFINE([HAVE_LIBBLKID], 1,
|
||
|
[Define if you have libblkid])
|
||
|
],
|
||
|
[
|
||
|
rm -f $ZFS_DEV
|
||
|
AC_MSG_RESULT([no])
|
||
|
AS_IF([test "x$with_blkid" != xcheck],
|
||
|
[AC_MSG_FAILURE(
|
||
|
[--with-blkid given but unavailable])])
|
||
|
])
|
||
|
|
||
|
LDFLAGS="$saved_LDFLAGS"
|
||
|
],
|
||
|
[
|
||
|
AS_IF([test "x$with_blkid" != xcheck],
|
||
|
[AC_MSG_FAILURE(
|
||
|
[--with-blkid given but unavailable])])
|
||
|
]
|
||
|
[])
|
||
|
])
|
||
|
])
|