mc.ext: add View action for initrd.
[midnight-commander.git] / m4.include / ls-mntd-fs.m4
blob7e4aa192a7e4cf6573e2c2b5d79398119a46fc09
1 # serial 32
2 # How to list mounted file systems.
4 # Copyright (C) 1998-2004, 2006, 2009-2015 Free Software Foundation, Inc.
6 # This file is free software; the Free Software Foundation
7 # gives unlimited permission to copy and/or distribute it,
8 # with or without modifications, as long as this notice is preserved.
10 dnl From Jim Meyering.
11 dnl
12 dnl This is not pretty.  I've just taken the autoconf code and wrapped
13 dnl it in an AC_DEFUN and made some other fixes.
14 dnl
16 # Replace Autoconf's AC_FUNC_GETMNTENT to work around a bug in Autoconf
17 # through Autoconf 2.59.  We can remove this once we assume Autoconf 2.60
18 # or later.
19 AC_DEFUN([AC_FUNC_GETMNTENT],
20 [# getmntent is in the standard C library on UNICOS, in -lsun on Irix 4,
21 # -lseq on Dynix/PTX, -lgen on Unixware.
22 AC_SEARCH_LIBS([getmntent], [sun seq gen])
23 AC_CHECK_FUNCS([getmntent])
26 # gl_LIST_MOUNTED_FILE_SYSTEMS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
27 AC_DEFUN([gl_LIST_MOUNTED_FILE_SYSTEMS],
28   [
29 AC_CHECK_FUNCS([listmntent getmntinfo])
30 AC_CHECK_HEADERS_ONCE([sys/param.h sys/statvfs.h])
32 # We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses
33 # NGROUPS (as the array dimension for a struct member) without a definition.
34 AC_CHECK_HEADERS([sys/ucred.h], [], [], [#include <grp.h>])
36 AC_CHECK_HEADERS([sys/mount.h], [], [],
37   [AC_INCLUDES_DEFAULT
38    [#if HAVE_SYS_PARAM_H
39      #include <sys/param.h>
40     #endif]])
42 AC_CHECK_HEADERS([mntent.h sys/fs_types.h])
43     getfsstat_includes="\
44 $ac_includes_default
45 #if HAVE_SYS_PARAM_H
46 # include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */
47 #endif
48 #if HAVE_SYS_UCRED_H
49 # include <grp.h> /* needed for definition of NGROUPS */
50 # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */
51 #endif
52 #if HAVE_SYS_MOUNT_H
53 # include <sys/mount.h>
54 #endif
55 #if HAVE_SYS_FS_TYPES_H
56 # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */
57 #endif
59 AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes])
61 # Determine how to get the list of mounted file systems.
62 ac_list_mounted_fs=
64 # If the getmntent function is available but not in the standard library,
65 # make sure LIBS contains the appropriate -l option.
66 AC_FUNC_GETMNTENT
68 # This test must precede the ones for getmntent because Unicos-9 is
69 # reported to have the getmntent function, but its support is incompatible
70 # with other getmntent implementations.
72 # NOTE: Normally, I wouldn't use a check for system type as I've done for
73 # 'CRAY' below since that goes against the whole autoconf philosophy.  But
74 # I think there is too great a chance that some non-Cray system has a
75 # function named listmntent to risk the false positive.
77 if test -z "$ac_list_mounted_fs"; then
78   # Cray UNICOS 9
79   AC_MSG_CHECKING([for listmntent of Cray/Unicos-9])
80   AC_CACHE_VAL([fu_cv_sys_mounted_cray_listmntent],
81     [fu_cv_sys_mounted_cray_listmntent=no
82       AC_EGREP_CPP([yes],
83         [#ifdef _CRAY
84 yes
85 #endif
86         ], [test $ac_cv_func_listmntent = yes \
87             && fu_cv_sys_mounted_cray_listmntent=yes]
88       )
89     ]
90   )
91   AC_MSG_RESULT([$fu_cv_sys_mounted_cray_listmntent])
92   if test $fu_cv_sys_mounted_cray_listmntent = yes; then
93     ac_list_mounted_fs=found
94     AC_DEFINE([MOUNTED_LISTMNTENT], [1],
95       [Define if there is a function named listmntent that can be used to
96        list all mounted file systems.  (UNICOS)])
97   fi
100 if test -z "$ac_list_mounted_fs"; then
101   # AIX.
102   AC_MSG_CHECKING([for mntctl function and struct vmount])
103   AC_CACHE_VAL([fu_cv_sys_mounted_vmount],
104   [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <fshelp.h>]])],
105     [fu_cv_sys_mounted_vmount=yes],
106     [fu_cv_sys_mounted_vmount=no])])
107   AC_MSG_RESULT([$fu_cv_sys_mounted_vmount])
108   if test $fu_cv_sys_mounted_vmount = yes; then
109     ac_list_mounted_fs=found
110     AC_DEFINE([MOUNTED_VMOUNT], [1],
111         [Define if there is a function named mntctl that can be used to read
112          the list of mounted file systems, and there is a system header file
113          that declares 'struct vmount'.  (AIX)])
114   fi
117 if test $ac_cv_func_getmntent = yes; then
119   # This system has the getmntent function.
120   # Determine whether it's the one-argument variant or the two-argument one.
122   if test -z "$ac_list_mounted_fs"; then
123     # GNU/Linux, 4.3BSD, SunOS, HP-UX, Dynix, Irix
124     AC_MSG_CHECKING([for one-argument getmntent function])
125     AC_CACHE_VAL([fu_cv_sys_mounted_getmntent1],
126                  [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
127 /* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */
128 #include <stdio.h>
130 #include <mntent.h>
131 #if !defined MOUNTED
132 # if defined _PATH_MOUNTED      /* GNU libc  */
133 #  define MOUNTED _PATH_MOUNTED
134 # endif
135 # if defined MNT_MNTTAB /* HP-UX.  */
136 #  define MOUNTED MNT_MNTTAB
137 # endif
138 # if defined MNTTABNAME /* Dynix.  */
139 #  define MOUNTED MNTTABNAME
140 # endif
141 #endif
143                       [[ struct mntent *mnt = 0; char *table = MOUNTED;
144                          if (sizeof mnt && sizeof table) return 0;]])],
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)])
154       AC_CHECK_FUNCS([hasmntopt])
155     fi
156   fi
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
177 if 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
181   AC_MSG_CHECKING([for getfsstat function])
182   AC_CACHE_VAL([fu_cv_sys_mounted_getfsstat],
183   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
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]]
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
206 if 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_PREPROC_IFELSE([AC_LANG_SOURCE([[
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
226 if 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_COMPILE_IFELSE([AC_LANG_PROGRAM([[
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
251 extern
252 #ifdef __cplusplus
254 #endif
255 int getmntinfo (struct statfs **, int);
256             ]], [])],
257           [fu_cv_sys_mounted_getmntinfo2=no],
258           [fu_cv_sys_mounted_getmntinfo2=yes])
259       ])
260     AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo2])
261     if test $fu_cv_sys_mounted_getmntinfo2 = no; then
262       ac_list_mounted_fs=found
263       AC_DEFINE([MOUNTED_GETMNTINFO], [1],
264                 [Define if there is a function named getmntinfo for reading the
265                  list of mounted file systems and it returns an array of
266                  'struct statfs'.  (4.4BSD, Darwin)])
267     else
268       ac_list_mounted_fs=found
269       AC_DEFINE([MOUNTED_GETMNTINFO2], [1],
270                 [Define if there is a function named getmntinfo for reading the
271                  list of mounted file systems and it returns an array of
272                  'struct statvfs'.  (NetBSD 3.0)])
273     fi
274   fi
277 if test -z "$ac_list_mounted_fs"; then
278   # Ultrix
279   AC_MSG_CHECKING([for getmnt function])
280   AC_CACHE_VAL([fu_cv_sys_mounted_getmnt],
281     [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
282 #include <sys/fs_types.h>
283 #include <sys/mount.h>]])],
284                        [fu_cv_sys_mounted_getmnt=yes],
285                        [fu_cv_sys_mounted_getmnt=no])])
286   AC_MSG_RESULT([$fu_cv_sys_mounted_getmnt])
287   if test $fu_cv_sys_mounted_getmnt = yes; then
288     ac_list_mounted_fs=found
289     AC_DEFINE([MOUNTED_GETMNT], [1],
290       [Define if there is a function named getmnt for reading the list of
291        mounted file systems.  (Ultrix)])
292   fi
295 if test -z "$ac_list_mounted_fs"; then
296   # BeOS
297   AC_CHECK_FUNCS([next_dev fs_stat_dev])
298   AC_CHECK_HEADERS([fs_info.h])
299   AC_MSG_CHECKING([for BEOS mounted file system support functions])
300   if test $ac_cv_header_fs_info_h = yes \
301       && test $ac_cv_func_next_dev = yes \
302         && test $ac_cv_func_fs_stat_dev = yes; then
303     fu_result=yes
304   else
305     fu_result=no
306   fi
307   AC_MSG_RESULT([$fu_result])
308   if test $fu_result = yes; then
309     ac_list_mounted_fs=found
310     AC_DEFINE([MOUNTED_FS_STAT_DEV], [1],
311       [Define if there are functions named next_dev and fs_stat_dev for
312        reading the list of mounted file systems.  (BeOS)])
313   fi
316 if test -z "$ac_list_mounted_fs"; then
317   # SVR2
318   AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab])
319   AC_CACHE_VAL([fu_cv_sys_mounted_fread],
320     [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <mnttab.h>]])],
321                        [fu_cv_sys_mounted_fread=yes],
322                        [fu_cv_sys_mounted_fread=no])])
323   AC_MSG_RESULT([$fu_cv_sys_mounted_fread])
324   if test $fu_cv_sys_mounted_fread = yes; then
325     ac_list_mounted_fs=found
326     AC_DEFINE([MOUNTED_FREAD], [1],
327               [Define if there is no specific function for reading the list of
328                mounted file systems.  fread will be used to read /etc/mnttab.
329                (SVR2) ])
330   fi
333 if test -z "$ac_list_mounted_fs"; then
334   # Interix / BSD alike statvfs
335   # the code is really interix specific, so make sure, we're on it.
336   case "$host" in
337   *-interix*)
338     AC_CHECK_FUNCS([statvfs])
339     if test $ac_cv_func_statvfs = yes; then
340       ac_list_mounted_fs=found
341       AC_DEFINE([MOUNTED_INTERIX_STATVFS], [1],
342                 [Define if we are on interix, and ought to use statvfs plus
343                  some special knowledge on where mounted file systems can be
344                  found. (Interix)])
345     fi
346     ;;
347   esac
350 if test -z "$ac_list_mounted_fs"; then
351   AC_MSG_ERROR([could not determine how to read list of mounted file systems])
352   # FIXME -- no need to abort building the whole package
353   # Can't build mountlist.c or anything that needs its functions
356 AS_IF([test $ac_list_mounted_fs = found], [$1], [$2])
358   ])