diff options
-rw-r--r-- | aclocal/libblkid.m4 | 20 | ||||
-rw-r--r-- | configure.ac | 24 |
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) |