.
authorJim Meyering <jim@meyering.net>
Sun, 28 Jun 1998 23:12:10 +0000 (23:12 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 28 Jun 1998 23:12:10 +0000 (23:12 +0000)
m4/ls-mntd-fs.m4 [new file with mode: 0644]

diff --git a/m4/ls-mntd-fs.m4 b/m4/ls-mntd-fs.m4
new file mode 100644 (file)
index 0000000..79bcb06
--- /dev/null
@@ -0,0 +1,201 @@
+#serial 1
+
+dnl From Jim Meyering.
+dnl
+dnl This is not pretty.  I've just taken the autoconf code and wrapped
+dnl it in an AC_DEFUN.
+dnl
+dnl CAUTION: This is very fragile.  It relies on several checks that
+dnl are still in fileutils' configure.in:
+dnl FIXME: add AC_REQUIRE uses to pull in all definitions required
+dnl for all uses of $ac_cv_func_* and $ac_cv_header_* variables below.
+dnl
+
+AC_DEFUN(jm_LIST_MOUNTED_FILESYSTEMS,
+  [
+# Determine how to get the list of mounted filesystems.
+list_mounted_fs=
+
+# If the getmntent function is available but not in the standard library,
+# make sure LIBS contains -lsun (on Irix4) or -lseq (on PTX).
+AC_FUNC_GETMNTENT
+
+# This test must precede the ones for getmntent because Unicos-9 is
+# reported to have the getmntent function, but its support is incompatible
+# with other getmntent implementations.
+
+# NOTE: Normally, I wouldn't use a check for system type as I've done for
+# `CRAY' below since that goes against the whole autoconf philosophy.  But
+# I think there is too great a chance that some non-Cray system has a
+# function named listmntent to risk the false positive.
+
+if test -z "$list_mounted_fs"; then
+  # Cray UNICOS 9
+  AC_MSG_CHECKING([for listmntent of Cray/Unicos-9])
+  AC_CACHE_VAL(fu_cv_sys_mounted_cray_listmntent,
+    [fu_cv_sys_mounted_cray_listmntent=no
+      AC_EGREP_CPP(yes,
+        [#ifdef _CRAY
+yes
+#endif
+        ], [test $ac_cv_func_listmntent = yes \
+           && fu_cv_sys_mounted_cray_listmntent=yes]
+      )
+    ]
+  )
+  AC_MSG_RESULT($fu_cv_sys_mounted_cray_listmntent)
+  if test $fu_cv_sys_mounted_cray_listmntent = yes; then
+    list_mounted_fs=found
+    AC_DEFINE(MOUNTED_LISTMNTENT)
+  fi
+fi
+
+if test $ac_cv_func_getmntent = yes; then
+
+  # This system has the getmntent function.
+  # Determine whether it's the one-argument variant or the two-argument one.
+
+  if test -z "$list_mounted_fs"; then
+    # 4.3BSD, SunOS, HP-UX, Dynix, Irix
+    AC_MSG_CHECKING([for one-argument getmntent function])
+    AC_CACHE_VAL(fu_cv_sys_mounted_getmntent1,
+                [test $ac_cv_header_mntent_h = yes \
+                  && fu_cv_sys_mounted_getmntent1=yes \
+                  || fu_cv_sys_mounted_getmntent1=no])
+    AC_MSG_RESULT($fu_cv_sys_mounted_getmntent1)
+    if test $fu_cv_sys_mounted_getmntent1 = yes; then
+      list_mounted_fs=found
+      AC_DEFINE(MOUNTED_GETMNTENT1)
+    fi
+  fi
+
+  if test -z "$list_mounted_fs"; then
+    # SVR4
+    AC_MSG_CHECKING([for two-argument getmntent function])
+    AC_CACHE_VAL(fu_cv_sys_mounted_getmntent2,
+    [AC_EGREP_HEADER(getmntent, sys/mnttab.h,
+      fu_cv_sys_mounted_getmntent2=yes,
+      fu_cv_sys_mounted_getmntent2=no)])
+    AC_MSG_RESULT($fu_cv_sys_mounted_getmntent2)
+    if test $fu_cv_sys_mounted_getmntent2 = yes; then
+      list_mounted_fs=found
+      AC_DEFINE(MOUNTED_GETMNTENT2)
+    fi
+  fi
+
+  if test -z "$list_mounted_fs"; then
+    AC_MSG_ERROR([could not determine how to read list of mounted filesystems])
+  fi
+
+fi
+
+if test -z "$list_mounted_fs"; then
+  # DEC Alpha running OSF/1.
+  AC_MSG_CHECKING([for getfsstat function])
+  AC_CACHE_VAL(fu_cv_sys_mounted_getsstat,
+  [AC_TRY_LINK([
+#include <sys/types.h>
+#include <sys/mount.h>
+#include <sys/fs_types.h>],
+  [struct statfs *stats;
+  int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT); ],
+    fu_cv_sys_mounted_getsstat=yes,
+    fu_cv_sys_mounted_getsstat=no)])
+  AC_MSG_RESULT($fu_cv_sys_mounted_getsstat)
+  if test $fu_cv_sys_mounted_getsstat = yes; then
+    list_mounted_fs=found
+    AC_DEFINE(MOUNTED_GETFSSTAT)
+  fi
+fi
+
+if test -z "$list_mounted_fs"; then
+  # AIX.
+  AC_MSG_CHECKING([for mntctl function and struct vmount])
+  AC_CACHE_VAL(fu_cv_sys_mounted_vmount,
+  [AC_TRY_CPP([#include <fshelp.h>],
+    fu_cv_sys_mounted_vmount=yes,
+    fu_cv_sys_mounted_vmount=no)])
+  AC_MSG_RESULT($fu_cv_sys_mounted_vmount)
+  if test $fu_cv_sys_mounted_vmount = yes; then
+    list_mounted_fs=found
+    AC_DEFINE(MOUNTED_VMOUNT)
+  fi
+fi
+
+if test -z "$list_mounted_fs"; then
+  # SVR3
+  AC_MSG_CHECKING([for FIXME existence of three headers])
+  AC_CACHE_VAL(fu_cv_sys_mounted_fread_fstyp,
+    [AC_TRY_CPP([
+#include <sys/statfs.h>
+#include <sys/fstyp.h>
+#include <mnttab.h>],
+               fu_cv_sys_mounted_fread_fstyp=yes,
+               fu_cv_sys_mounted_fread_fstyp=no)])
+  AC_MSG_RESULT($fu_cv_sys_mounted_fread_fstyp)
+  if test $fu_cv_sys_mounted_fread_fstyp = yes; then
+    list_mounted_fs=found
+    AC_DEFINE(MOUNTED_FREAD_FSTYP)
+  fi
+fi
+
+if test -z "$list_mounted_fs"; then
+  # 4.4BSD and DEC OSF/1.
+  AC_MSG_CHECKING([for getmntinfo function])
+  AC_CACHE_VAL(fu_cv_sys_mounted_getmntinfo,
+    [
+      ok=
+      if test $ac_cv_func_getmntinfo = yes; then
+       AC_EGREP_HEADER(f_type;, sys/mount.h,
+                       ok=yes)
+      fi
+      test -n "$ok" \
+         && fu_cv_sys_mounted_getmntinfo=yes \
+         || fu_cv_sys_mounted_getmntinfo=no
+    ])
+  AC_MSG_RESULT($fu_cv_sys_mounted_getmntinfo)
+  if test $fu_cv_sys_mounted_getmntinfo = yes; then
+    list_mounted_fs=found
+    AC_DEFINE(MOUNTED_GETMNTINFO)
+  fi
+fi
+
+# FIXME: add a test for netbsd-1.1 here
+
+if test -z "$list_mounted_fs"; then
+  # Ultrix
+  AC_MSG_CHECKING([for getmnt function])
+  AC_CACHE_VAL(fu_cv_sys_mounted_getmnt,
+    [AC_TRY_CPP([
+#include <sys/fs_types.h>
+#include <sys/mount.h>],
+               fu_cv_sys_mounted_getmnt=yes,
+               fu_cv_sys_mounted_getmnt=no)])
+  AC_MSG_RESULT($fu_cv_sys_mounted_getmnt)
+  if test $fu_cv_sys_mounted_getmnt = yes; then
+    list_mounted_fs=found
+    AC_DEFINE(MOUNTED_GETMNT)
+  fi
+fi
+
+if test -z "$list_mounted_fs"; then
+  # SVR2
+  AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab])
+  AC_CACHE_VAL(fu_cv_sys_mounted_fread,
+    [AC_TRY_CPP([#include <mnttab.h>],
+               fu_cv_sys_mounted_fread=yes,
+               fu_cv_sys_mounted_fread=no)])
+  AC_MSG_RESULT($fu_cv_sys_mounted_fread)
+  if test $fu_cv_sys_mounted_fread = yes; then
+    list_mounted_fs=found
+    AC_DEFINE(MOUNTED_FREAD)
+  fi
+fi
+
+if test -z "$list_mounted_fs"; then
+  AC_MSG_ERROR([could not determine how to read list of mounted filesystems])
+  # FIXME -- no need to abort building the whole package
+  # Can't build mountlist.c or anything that needs its functions
+fi
+
+  ])