diff options
Diffstat (limited to 'm4/ls-mntd-fs.m4')
-rw-r--r-- | m4/ls-mntd-fs.m4 | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/m4/ls-mntd-fs.m4 b/m4/ls-mntd-fs.m4 new file mode 100644 index 000000000..79bcb069e --- /dev/null +++ b/m4/ls-mntd-fs.m4 @@ -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 + + ]) |