From de6497fce274e35a0c7aeac14dbfff476b012e37 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Thu, 3 May 2007 10:46:02 +1000 Subject: [PATCH] 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. --- aclocal/libblkid.m4 | 20 ++++++++++++++++++++ configure.ac | 24 ++++++++++++++++++------ 2 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 aclocal/libblkid.m4 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 + 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) -- 2.39.5