summaryrefslogtreecommitdiffstats
path: root/gl/m4/ls-mntd-fs.m4
diff options
context:
space:
mode:
Diffstat (limited to 'gl/m4/ls-mntd-fs.m4')
-rw-r--r--gl/m4/ls-mntd-fs.m4337
1 files changed, 337 insertions, 0 deletions
diff --git a/gl/m4/ls-mntd-fs.m4 b/gl/m4/ls-mntd-fs.m4
new file mode 100644
index 00000000..21ac4e74
--- /dev/null
+++ b/gl/m4/ls-mntd-fs.m4
@@ -0,0 +1,337 @@
1#serial 26
2# How to list mounted file systems.
3
4# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 Free Software
5# Foundation, Inc.
6#
7# This file is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11dnl From Jim Meyering.
12dnl
13dnl This is not pretty. I've just taken the autoconf code and wrapped
14dnl it in an AC_DEFUN and made some other fixes.
15dnl
16
17# Replace Autoconf's AC_FUNC_GETMNTENT to work around a bug in Autoconf
18# through Autoconf 2.59. We can remove this once we assume Autoconf 2.60
19# or later.
20AC_DEFUN([AC_FUNC_GETMNTENT],
21[# getmntent is in the standard C library on UNICOS, in -lsun on Irix 4,
22# -lseq on Dynix/PTX, -lgen on Unixware.
23AC_SEARCH_LIBS(getmntent, [sun seq gen])
24AC_CHECK_FUNCS(getmntent)
25])
26
27# gl_LIST_MOUNTED_FILE_SYSTEMS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
28AC_DEFUN([gl_LIST_MOUNTED_FILE_SYSTEMS],
29 [
30AC_CHECK_FUNCS(listmntent getmntinfo)
31AC_CHECK_HEADERS_ONCE(sys/param.h sys/statvfs.h)
32
33# We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses
34# NGROUPS (as the array dimension for a struct member) without a definition.
35AC_CHECK_HEADERS(sys/ucred.h, [], [], [#include <grp.h>])
36
37AC_CHECK_HEADERS(sys/mount.h, [], [],
38 [AC_INCLUDES_DEFAULT
39 [#if HAVE_SYS_PARAM_H
40 #include <sys/param.h>
41 #endif]])
42
43AC_CHECK_HEADERS(mntent.h sys/fs_types.h)
44 getfsstat_includes="\
45$ac_includes_default
46#if HAVE_SYS_PARAM_H
47# include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */
48#endif
49#if HAVE_SYS_UCRED_H
50# include <grp.h> /* needed for definition of NGROUPS */
51# include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */
52#endif
53#if HAVE_SYS_MOUNT_H
54# include <sys/mount.h>
55#endif
56#if HAVE_SYS_FS_TYPES_H
57# include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */
58#endif
59"
60AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes])
61
62# Determine how to get the list of mounted file systems.
63ac_list_mounted_fs=
64
65# If the getmntent function is available but not in the standard library,
66# make sure LIBS contains the appropriate -l option.
67AC_FUNC_GETMNTENT
68
69# This test must precede the ones for getmntent because Unicos-9 is
70# reported to have the getmntent function, but its support is incompatible
71# with other getmntent implementations.
72
73# NOTE: Normally, I wouldn't use a check for system type as I've done for
74# `CRAY' below since that goes against the whole autoconf philosophy. But
75# I think there is too great a chance that some non-Cray system has a
76# function named listmntent to risk the false positive.
77
78if test -z "$ac_list_mounted_fs"; then
79 # Cray UNICOS 9
80 AC_MSG_CHECKING([for listmntent of Cray/Unicos-9])
81 AC_CACHE_VAL(fu_cv_sys_mounted_cray_listmntent,
82 [fu_cv_sys_mounted_cray_listmntent=no
83 AC_EGREP_CPP(yes,
84 [#ifdef _CRAY
85yes
86#endif
87 ], [test $ac_cv_func_listmntent = yes \
88 && fu_cv_sys_mounted_cray_listmntent=yes]
89 )
90 ]
91 )
92 AC_MSG_RESULT($fu_cv_sys_mounted_cray_listmntent)
93 if test $fu_cv_sys_mounted_cray_listmntent = yes; then
94 ac_list_mounted_fs=found
95 AC_DEFINE(MOUNTED_LISTMNTENT, 1,
96 [Define if there is a function named listmntent that can be used to
97 list all mounted file systems. (UNICOS)])
98 fi
99fi
100
101if test -z "$ac_list_mounted_fs"; then
102 # AIX.
103 AC_MSG_CHECKING([for mntctl function and struct vmount])
104 AC_CACHE_VAL(fu_cv_sys_mounted_vmount,
105 [AC_TRY_CPP([#include <fshelp.h>],
106 fu_cv_sys_mounted_vmount=yes,
107 fu_cv_sys_mounted_vmount=no)])
108 AC_MSG_RESULT($fu_cv_sys_mounted_vmount)
109 if test $fu_cv_sys_mounted_vmount = yes; then
110 ac_list_mounted_fs=found
111 AC_DEFINE(MOUNTED_VMOUNT, 1,
112 [Define if there is a function named mntctl that can be used to read
113 the list of mounted file systems, and there is a system header file
114 that declares `struct vmount.' (AIX)])
115 fi
116fi
117
118if test $ac_cv_func_getmntent = yes; then
119
120 # This system has the getmntent function.
121 # Determine whether it's the one-argument variant or the two-argument one.
122
123 if test -z "$ac_list_mounted_fs"; then
124 # 4.3BSD, SunOS, HP-UX, Dynix, Irix
125 AC_MSG_CHECKING([for one-argument getmntent function])
126 AC_CACHE_VAL(fu_cv_sys_mounted_getmntent1,
127 [AC_TRY_COMPILE([
128/* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */
129#include <stdio.h>
130
131#include <mntent.h>
132#if !defined MOUNTED
133# if defined _PATH_MOUNTED /* GNU libc */
134# define MOUNTED _PATH_MOUNTED
135# endif
136# if defined MNT_MNTTAB /* HP-UX. */
137# define MOUNTED MNT_MNTTAB
138# endif
139# if defined MNTTABNAME /* Dynix. */
140# define MOUNTED MNTTABNAME
141# endif
142#endif
143],
144 [ struct mntent *mnt = 0; char *table = MOUNTED;
145 if (sizeof mnt && sizeof table) return 0;],
146 fu_cv_sys_mounted_getmntent1=yes,
147 fu_cv_sys_mounted_getmntent1=no)])
148 AC_MSG_RESULT($fu_cv_sys_mounted_getmntent1)
149 if test $fu_cv_sys_mounted_getmntent1 = yes; then
150 ac_list_mounted_fs=found
151 AC_DEFINE(MOUNTED_GETMNTENT1, 1,
152 [Define if there is a function named getmntent for reading the list
153 of mounted file systems, and that function takes a single argument.
154 (4.3BSD, SunOS, HP-UX, Dynix, Irix)])
155 fi
156 fi
157
158 if test -z "$ac_list_mounted_fs"; then
159 # SVR4
160 AC_MSG_CHECKING([for two-argument getmntent function])
161 AC_CACHE_VAL(fu_cv_sys_mounted_getmntent2,
162 [AC_EGREP_HEADER(getmntent, sys/mnttab.h,
163 fu_cv_sys_mounted_getmntent2=yes,
164 fu_cv_sys_mounted_getmntent2=no)])
165 AC_MSG_RESULT($fu_cv_sys_mounted_getmntent2)
166 if test $fu_cv_sys_mounted_getmntent2 = yes; then
167 ac_list_mounted_fs=found
168 AC_DEFINE(MOUNTED_GETMNTENT2, 1,
169 [Define if there is a function named getmntent for reading the list of
170 mounted file systems, and that function takes two arguments. (SVR4)])
171 AC_CHECK_FUNCS(hasmntopt)
172 fi
173 fi
174
175fi
176
177if test -z "$ac_list_mounted_fs"; then
178 # DEC Alpha running OSF/1, and Apple Darwin 1.3.
179 # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h
180
181 AC_MSG_CHECKING([for getfsstat function])
182 AC_CACHE_VAL(fu_cv_sys_mounted_getfsstat,
183 [AC_TRY_LINK([
184#include <sys/types.h>
185#if HAVE_STRUCT_FSSTAT_F_FSTYPENAME
186# define FS_TYPE(Ent) ((Ent).f_fstypename)
187#else
188# define FS_TYPE(Ent) mnt_names[(Ent).f_type]
189#endif
190]$getfsstat_includes
191,
192 [struct statfs *stats;
193 int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT);
194 char *t = FS_TYPE (*stats); ],
195 fu_cv_sys_mounted_getfsstat=yes,
196 fu_cv_sys_mounted_getfsstat=no)])
197 AC_MSG_RESULT($fu_cv_sys_mounted_getfsstat)
198 if test $fu_cv_sys_mounted_getfsstat = yes; then
199 ac_list_mounted_fs=found
200 AC_DEFINE(MOUNTED_GETFSSTAT, 1,
201 [Define if there is a function named getfsstat for reading the
202 list of mounted file systems. (DEC Alpha running OSF/1)])
203 fi
204fi
205
206if test -z "$ac_list_mounted_fs"; then
207 # SVR3
208 AC_MSG_CHECKING([for FIXME existence of three headers])
209 AC_CACHE_VAL(fu_cv_sys_mounted_fread_fstyp,
210 [AC_TRY_CPP([
211#include <sys/statfs.h>
212#include <sys/fstyp.h>
213#include <mnttab.h>],
214 fu_cv_sys_mounted_fread_fstyp=yes,
215 fu_cv_sys_mounted_fread_fstyp=no)])
216 AC_MSG_RESULT($fu_cv_sys_mounted_fread_fstyp)
217 if test $fu_cv_sys_mounted_fread_fstyp = yes; then
218 ac_list_mounted_fs=found
219 AC_DEFINE(MOUNTED_FREAD_FSTYP, 1,
220 [Define if (like SVR2) there is no specific function for reading the
221 list of mounted file systems, and your system has these header files:
222 <sys/fstyp.h> and <sys/statfs.h>. (SVR3)])
223 fi
224fi
225
226if test -z "$ac_list_mounted_fs"; then
227 # 4.4BSD and DEC OSF/1.
228 AC_MSG_CHECKING([for getmntinfo function])
229 AC_CACHE_VAL(fu_cv_sys_mounted_getmntinfo,
230 [
231 test "$ac_cv_func_getmntinfo" = yes \
232 && fu_cv_sys_mounted_getmntinfo=yes \
233 || fu_cv_sys_mounted_getmntinfo=no
234 ])
235 AC_MSG_RESULT($fu_cv_sys_mounted_getmntinfo)
236 if test $fu_cv_sys_mounted_getmntinfo = yes; then
237 AC_MSG_CHECKING([whether getmntinfo returns statvfs structures])
238 AC_CACHE_VAL(fu_cv_sys_mounted_getmntinfo2,
239 [
240 AC_TRY_COMPILE([
241#if HAVE_SYS_PARAM_H
242# include <sys/param.h>
243#endif
244#include <sys/types.h>
245#if HAVE_SYS_MOUNT_H
246# include <sys/mount.h>
247#endif
248#if HAVE_SYS_STATVFS_H
249# include <sys/statvfs.h>
250#endif
251extern int getmntinfo (struct statfs **, int);
252 ], [],
253 [fu_cv_sys_mounted_getmntinfo2=no],
254 [fu_cv_sys_mounted_getmntinfo2=yes])
255 ])
256 AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo2])
257 if test $fu_cv_sys_mounted_getmntinfo2 = no; then
258 ac_list_mounted_fs=found
259 AC_DEFINE(MOUNTED_GETMNTINFO, 1,
260 [Define if there is a function named getmntinfo for reading the
261 list of mounted file systems and it returns an array of
262 'struct statfs'. (4.4BSD, Darwin)])
263 else
264 ac_list_mounted_fs=found
265 AC_DEFINE(MOUNTED_GETMNTINFO2, 1,
266 [Define if there is a function named getmntinfo for reading the
267 list of mounted file systems and it returns an array of
268 'struct statvfs'. (NetBSD 3.0)])
269 fi
270 fi
271fi
272
273if test -z "$ac_list_mounted_fs"; then
274 # Ultrix
275 AC_MSG_CHECKING([for getmnt function])
276 AC_CACHE_VAL(fu_cv_sys_mounted_getmnt,
277 [AC_TRY_CPP([
278#include <sys/fs_types.h>
279#include <sys/mount.h>],
280 fu_cv_sys_mounted_getmnt=yes,
281 fu_cv_sys_mounted_getmnt=no)])
282 AC_MSG_RESULT($fu_cv_sys_mounted_getmnt)
283 if test $fu_cv_sys_mounted_getmnt = yes; then
284 ac_list_mounted_fs=found
285 AC_DEFINE(MOUNTED_GETMNT, 1,
286 [Define if there is a function named getmnt for reading the list of
287 mounted file systems. (Ultrix)])
288 fi
289fi
290
291if test -z "$ac_list_mounted_fs"; then
292 # BeOS
293 AC_CHECK_FUNCS(next_dev fs_stat_dev)
294 AC_CHECK_HEADERS(fs_info.h)
295 AC_MSG_CHECKING([for BEOS mounted file system support functions])
296 if test $ac_cv_header_fs_info_h = yes \
297 && test $ac_cv_func_next_dev = yes \
298 && test $ac_cv_func_fs_stat_dev = yes; then
299 fu_result=yes
300 else
301 fu_result=no
302 fi
303 AC_MSG_RESULT($fu_result)
304 if test $fu_result = yes; then
305 ac_list_mounted_fs=found
306 AC_DEFINE(MOUNTED_FS_STAT_DEV, 1,
307 [Define if there are functions named next_dev and fs_stat_dev for
308 reading the list of mounted file systems. (BeOS)])
309 fi
310fi
311
312if test -z "$ac_list_mounted_fs"; then
313 # SVR2
314 AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab])
315 AC_CACHE_VAL(fu_cv_sys_mounted_fread,
316 [AC_TRY_CPP([#include <mnttab.h>],
317 fu_cv_sys_mounted_fread=yes,
318 fu_cv_sys_mounted_fread=no)])
319 AC_MSG_RESULT($fu_cv_sys_mounted_fread)
320 if test $fu_cv_sys_mounted_fread = yes; then
321 ac_list_mounted_fs=found
322 AC_DEFINE(MOUNTED_FREAD, 1,
323 [Define if there is no specific function for reading the list of
324 mounted file systems. fread will be used to read /etc/mnttab.
325 (SVR2) ])
326 fi
327fi
328
329if test -z "$ac_list_mounted_fs"; then
330 AC_MSG_ERROR([could not determine how to read list of mounted file systems])
331 # FIXME -- no need to abort building the whole package
332 # Can't build mountlist.c or anything that needs its functions
333fi
334
335AS_IF([test $ac_list_mounted_fs = found], [$1], [$2])
336
337 ])