summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2007-05-03 10:46:02 +1000
committerNeil Brown <neilb@suse.de>2007-05-03 10:46:02 +1000
commitde6497fce274e35a0c7aeac14dbfff476b012e37 (patch)
treeca5f92269fce08f8f3abe4df76d7eacc23e060ba
parent4cfb608c949d3f38d9d5bc2c3c8aef268b88a697 (diff)
downloadnfs-utils-de6497fce274e35a0c7aeac14dbfff476b012e37.tar.gz
nfs-utils-de6497fce274e35a0c7aeac14dbfff476b012e37.tar.xz
nfs-utils-de6497fce274e35a0c7aeac14dbfff476b012e37.zip
Detect version of libblkid and act accordingly.
libblkid earlier than 1.40 has a memory leak bug that make it unsuitable for use in mountd. So detect the version and default to not using it if too old. Give appropriate warnings in various cases.
-rw-r--r--aclocal/libblkid.m420
-rw-r--r--configure.ac24
2 files changed, 38 insertions, 6 deletions
diff --git a/aclocal/libblkid.m4 b/aclocal/libblkid.m4
new file mode 100644
index 0000000..d751a8c
--- /dev/null
+++ b/aclocal/libblkid.m4
@@ -0,0 +1,20 @@
+dnl *************************** libblkid needs version 1.40 or later ***********************
+AC_DEFUN([AC_BLKID_VERS], [
+ AC_MSG_CHECKING(for suitable libblkid version)
+ AC_CACHE_VAL(libblkid_is_recent,
+ [
+ saved_LIBS="$LIBS"
+ LIBS=-lblkid
+ AC_TRY_RUN([
+ #include <blkid/blkid.h>
+ int main()
+ {
+ int vers = blkid_get_library_version(0, 0);
+ return vers >= 140 ? 0 : 1;
+ }
+ ], libblkid_is_recent=yes, libblkid_is_recent=no,
+ libblkid_is_recent=unknown)
+ LIBS="$saved_LIBS"
+ ])dnl
+ AC_MSG_RESULT($libblkid_is_recent)
+])dnl
diff --git a/configure.ac b/configure.ac
index 3757208..2c905a5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -130,9 +130,8 @@ AC_ARG_WITH(rpcgen,
AM_CONDITIONAL(CONFIG_RPCGEN, [test "$RPCGEN_PATH" == ""])
AC_ARG_ENABLE(uuid,
[AC_HELP_STRING([--without-uuid], [Exclude uuid support and so avoid possibly buggy libblkid])],
- if test "$enableval" = "yes" ; then use_blkid=1; else use_blkid=0; fi,
- use_blkid=1)
- AC_DEFINE_UNQUOTED(USE_BLKID, $use_blkid, [Define if you want to use blkid to find uuid of filesystems])
+ if test "$enableval" = "yes" ; then choose_blkid=yes; else choose_blkid=no; fi,
+ choose_blkid=default)
AC_ARG_ENABLE(mount,
[AC_HELP_STRING([--enable-mount],
[Create mount.nfs and don't use the util-linux mount(8) functionality. @<:@default=no@:>@])],
@@ -204,9 +203,22 @@ fi
if test "$knfsd_cv_glibc2" = no; then
AC_CHECK_LIB(bsd, daemon, [LIBBSD="-lbsd"])
fi
-if test "$use_blkid" = 1; then
- AC_CHECK_LIB(blkid, blkid_get_cache, [LIBBLKID="-lblkid"], AC_MSG_ERROR([libblkid needed]))
- AC_CHECK_HEADER(blkid/blkid.h, , AC_MSG_ERROR([Cannot file libblkid header file blkid/blkid.h]))
+
+if test "$choose_blkid" != no; then
+ AC_CHECK_LIB(blkid, blkid_get_library_version, [LIBBLKID="-lblkid"], AC_MSG_ERROR([libblkid needed]))
+ AC_CHECK_HEADER(blkid/blkid.h, , AC_MSG_ERROR([Cannot find libblkid header file blkid/blkid.h]))
+ AC_BLKID_VERS
+ if test $choose_blkid = yes; then
+ use_blkid=1
+ test $libblkid_is_recent = no && AC_MSG_WARN([libblkid is old and may cause mountd to leak memory])
+ else
+ if test $libblkid_is_recent = yes
+ then use_blkid=1
+ else use_blkid=0
+ AC_MSG_WARN([uuid support disabled as libblkid is too old])
+ fi
+ fi
+ AC_DEFINE_UNQUOTED(USE_BLKID, $use_blkid, [Define if you want to use blkid to find uuid of filesystems])
fi
AC_SUBST(LIBSOCKET)
AC_SUBST(LIBCRYPT)