]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
Detect version of libblkid and act accordingly.
authorNeil Brown <neilb@suse.de>
Thu, 3 May 2007 00:46:02 +0000 (10:46 +1000)
committerNeil Brown <neilb@suse.de>
Thu, 3 May 2007 00:46:02 +0000 (10:46 +1000)
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.

aclocal/libblkid.m4 [new file with mode: 0644]
configure.ac

diff --git a/aclocal/libblkid.m4 b/aclocal/libblkid.m4
new file mode 100644 (file)
index 0000000..d751a8c
--- /dev/null
@@ -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
index 37572083e6433163abeadd5d1253af12663a6d2b..2c905a5a17e68719b1887d15339d2e796e92f18a 100644 (file)
@@ -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)