2 # How to list mounted file systems.
4 # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 Free Software
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.
11 dnl From Jim Meyering.
13 dnl This is not pretty. I've just taken the autoconf code and wrapped
14 dnl it in an AC_DEFUN and made some other fixes.
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
20 AC_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.
23 AC_SEARCH_LIBS(getmntent, [sun seq gen])
24 AC_CHECK_FUNCS(getmntent)
27 # gl_LIST_MOUNTED_FILE_SYSTEMS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
28 AC_DEFUN([gl_LIST_MOUNTED_FILE_SYSTEMS],
30 AC_CHECK_FUNCS(listmntent getmntinfo)
31 AC_CHECK_HEADERS_ONCE(sys/param.h sys/statvfs.h)
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.
35 AC_CHECK_HEADERS(sys/ucred.h, [], [], [#include <grp.h>])
37 AC_CHECK_HEADERS(sys/mount.h, [], [],
40 #include <sys/param.h>
43 AC_CHECK_HEADERS(mntent.h sys/fs_types.h)
47 # include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */
50 # include <grp.h> /* needed for definition of NGROUPS */
51 # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */
54 # include <sys/mount.h>
56 #if HAVE_SYS_FS_TYPES_H
57 # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */
60 AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes])
62 # Determine how to get the list of mounted file systems.
65 # If the getmntent function is available but not in the standard library,
66 # make sure LIBS contains the appropriate -l option.
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.
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.
78 if test -z "$ac_list_mounted_fs"; then
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
87 ], [test $ac_cv_func_listmntent = yes \
88 && fu_cv_sys_mounted_cray_listmntent=yes]
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)])
101 if test -z "$ac_list_mounted_fs"; then
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)])
118 if test $ac_cv_func_getmntent = yes; then
120 # This system has the getmntent function.
121 # Determine whether it's the one-argument variant or the two-argument one.
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,
128 /* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */
133 # if defined _PATH_MOUNTED /* GNU libc */
134 # define MOUNTED _PATH_MOUNTED
136 # if defined MNT_MNTTAB /* HP-UX. */
137 # define MOUNTED MNT_MNTTAB
139 # if defined MNTTABNAME /* Dynix. */
140 # define MOUNTED MNTTABNAME
144 [ struct mntent *mnt = 0; char *table = MOUNTED; ],
145 fu_cv_sys_mounted_getmntent1=yes,
146 fu_cv_sys_mounted_getmntent1=no)])
147 AC_MSG_RESULT($fu_cv_sys_mounted_getmntent1)
148 if test $fu_cv_sys_mounted_getmntent1 = yes; then
149 ac_list_mounted_fs=found
150 AC_DEFINE(MOUNTED_GETMNTENT1, 1,
151 [Define if there is a function named getmntent for reading the list
152 of mounted file systems, and that function takes a single argument.
153 (4.3BSD, SunOS, HP-UX, Dynix, Irix)])
157 if test -z "$ac_list_mounted_fs"; then
159 AC_MSG_CHECKING([for two-argument getmntent function])
160 AC_CACHE_VAL(fu_cv_sys_mounted_getmntent2,
161 [AC_EGREP_HEADER(getmntent, sys/mnttab.h,
162 fu_cv_sys_mounted_getmntent2=yes,
163 fu_cv_sys_mounted_getmntent2=no)])
164 AC_MSG_RESULT($fu_cv_sys_mounted_getmntent2)
165 if test $fu_cv_sys_mounted_getmntent2 = yes; then
166 ac_list_mounted_fs=found
167 AC_DEFINE(MOUNTED_GETMNTENT2, 1,
168 [Define if there is a function named getmntent for reading the list of
169 mounted file systems, and that function takes two arguments. (SVR4)])
175 if test -z "$ac_list_mounted_fs"; then
176 # DEC Alpha running OSF/1, and Apple Darwin 1.3.
177 # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h
179 AC_MSG_CHECKING([for getfsstat function])
180 AC_CACHE_VAL(fu_cv_sys_mounted_getfsstat,
182 #include <sys/types.h>
183 #if HAVE_STRUCT_FSSTAT_F_FSTYPENAME
184 # define FS_TYPE(Ent) ((Ent).f_fstypename)
186 # define FS_TYPE(Ent) mnt_names[(Ent).f_type]
190 [struct statfs *stats;
191 int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT);
192 char *t = FS_TYPE (*stats); ],
193 fu_cv_sys_mounted_getfsstat=yes,
194 fu_cv_sys_mounted_getfsstat=no)])
195 AC_MSG_RESULT($fu_cv_sys_mounted_getfsstat)
196 if test $fu_cv_sys_mounted_getfsstat = yes; then
197 ac_list_mounted_fs=found
198 AC_DEFINE(MOUNTED_GETFSSTAT, 1,
199 [Define if there is a function named getfsstat for reading the
200 list of mounted file systems. (DEC Alpha running OSF/1)])
204 if test -z "$ac_list_mounted_fs"; then
206 AC_MSG_CHECKING([for FIXME existence of three headers])
207 AC_CACHE_VAL(fu_cv_sys_mounted_fread_fstyp,
209 #include <sys/statfs.h>
210 #include <sys/fstyp.h>
211 #include <mnttab.h>],
212 fu_cv_sys_mounted_fread_fstyp=yes,
213 fu_cv_sys_mounted_fread_fstyp=no)])
214 AC_MSG_RESULT($fu_cv_sys_mounted_fread_fstyp)
215 if test $fu_cv_sys_mounted_fread_fstyp = yes; then
216 ac_list_mounted_fs=found
217 AC_DEFINE(MOUNTED_FREAD_FSTYP, 1,
218 [Define if (like SVR2) there is no specific function for reading the
219 list of mounted file systems, and your system has these header files:
220 <sys/fstyp.h> and <sys/statfs.h>. (SVR3)])
224 if test -z "$ac_list_mounted_fs"; then
225 # 4.4BSD and DEC OSF/1.
226 AC_MSG_CHECKING([for getmntinfo function])
227 AC_CACHE_VAL(fu_cv_sys_mounted_getmntinfo,
229 test "$ac_cv_func_getmntinfo" = yes \
230 && fu_cv_sys_mounted_getmntinfo=yes \
231 || fu_cv_sys_mounted_getmntinfo=no
233 AC_MSG_RESULT($fu_cv_sys_mounted_getmntinfo)
234 if test $fu_cv_sys_mounted_getmntinfo = yes; then
235 AC_MSG_CHECKING([whether getmntinfo returns statvfs structures])
236 AC_CACHE_VAL(fu_cv_sys_mounted_getmntinfo2,
239 #include <sys/types.h>
241 # include <sys/mount.h>
243 #if HAVE_SYS_STATVFS_H
244 # include <sys/statvfs.h>
246 extern int getmntinfo (struct statfs **, int);
248 [fu_cv_sys_mounted_getmntinfo2=no],
249 [fu_cv_sys_mounted_getmntinfo2=yes])
251 AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo2])
252 if test $fu_cv_sys_mounted_getmntinfo2 = no; then
253 ac_list_mounted_fs=found
254 AC_DEFINE(MOUNTED_GETMNTINFO, 1,
255 [Define if there is a function named getmntinfo for reading the
256 list of mounted file systems and it returns an array of
257 'struct statfs'. (4.4BSD, Darwin)])
259 ac_list_mounted_fs=found
260 AC_DEFINE(MOUNTED_GETMNTINFO2, 1,
261 [Define if there is a function named getmntinfo for reading the
262 list of mounted file systems and it returns an array of
263 'struct statvfs'. (NetBSD 3.0)])
268 if test -z "$ac_list_mounted_fs"; then
270 AC_MSG_CHECKING([for getmnt function])
271 AC_CACHE_VAL(fu_cv_sys_mounted_getmnt,
273 #include <sys/fs_types.h>
274 #include <sys/mount.h>],
275 fu_cv_sys_mounted_getmnt=yes,
276 fu_cv_sys_mounted_getmnt=no)])
277 AC_MSG_RESULT($fu_cv_sys_mounted_getmnt)
278 if test $fu_cv_sys_mounted_getmnt = yes; then
279 ac_list_mounted_fs=found
280 AC_DEFINE(MOUNTED_GETMNT, 1,
281 [Define if there is a function named getmnt for reading the list of
282 mounted file systems. (Ultrix)])
286 if test -z "$ac_list_mounted_fs"; then
288 AC_CHECK_FUNCS(next_dev fs_stat_dev)
289 AC_CHECK_HEADERS(fs_info.h)
290 AC_MSG_CHECKING([for BEOS mounted file system support functions])
291 if test $ac_cv_header_fs_info_h = yes \
292 && test $ac_cv_func_next_dev = yes \
293 && test $ac_cv_func_fs_stat_dev = yes; then
298 AC_MSG_RESULT($fu_result)
299 if test $fu_result = yes; then
300 ac_list_mounted_fs=found
301 AC_DEFINE(MOUNTED_FS_STAT_DEV, 1,
302 [Define if there are functions named next_dev and fs_stat_dev for
303 reading the list of mounted file systems. (BeOS)])
307 if test -z "$ac_list_mounted_fs"; then
309 AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab])
310 AC_CACHE_VAL(fu_cv_sys_mounted_fread,
311 [AC_TRY_CPP([#include <mnttab.h>],
312 fu_cv_sys_mounted_fread=yes,
313 fu_cv_sys_mounted_fread=no)])
314 AC_MSG_RESULT($fu_cv_sys_mounted_fread)
315 if test $fu_cv_sys_mounted_fread = yes; then
316 ac_list_mounted_fs=found
317 AC_DEFINE(MOUNTED_FREAD, 1,
318 [Define if there is no specific function for reading the list of
319 mounted file systems. fread will be used to read /etc/mnttab.
324 if test -z "$ac_list_mounted_fs"; then
325 AC_MSG_ERROR([could not determine how to read list of mounted file systems])
326 # FIXME -- no need to abort building the whole package
327 # Can't build mountlist.c or anything that needs its functions
330 AS_IF([test $ac_list_mounted_fs = found], [$1], [$2])