diff options
Diffstat (limited to 'gl/m4/mountlist.m4')
-rw-r--r-- | gl/m4/mountlist.m4 | 331 |
1 files changed, 325 insertions, 6 deletions
diff --git a/gl/m4/mountlist.m4 b/gl/m4/mountlist.m4 index cd137c91..a9b4edb9 100644 --- a/gl/m4/mountlist.m4 +++ b/gl/m4/mountlist.m4 | |||
@@ -1,19 +1,338 @@ | |||
1 | # serial 11 | 1 | # serial 15 |
2 | dnl Copyright (C) 2002-2006, 2009-2013 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | dnl From Jim Meyering. | ||
8 | |||
9 | AC_PREREQ([2.60]) | ||
10 | |||
7 | AC_DEFUN([gl_MOUNTLIST], | 11 | AC_DEFUN([gl_MOUNTLIST], |
8 | [ | 12 | [ |
9 | gl_LIST_MOUNTED_FILE_SYSTEMS([gl_cv_list_mounted_fs=yes], | 13 | AC_REQUIRE([AC_CANONICAL_HOST]) |
10 | [gl_cv_list_mounted_fs=no]) | 14 | AC_CHECK_FUNCS([listmntent]) |
15 | AC_CHECK_HEADERS_ONCE([sys/param.h sys/statvfs.h]) | ||
16 | |||
17 | # We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses | ||
18 | # NGROUPS (as the array dimension for a struct member) without a definition. | ||
19 | AC_CHECK_HEADERS([sys/ucred.h], [], [], [#include <grp.h>]) | ||
20 | |||
21 | AC_CHECK_HEADERS([sys/mount.h], [], [], | ||
22 | [AC_INCLUDES_DEFAULT | ||
23 | [#if HAVE_SYS_PARAM_H | ||
24 | #include <sys/param.h> | ||
25 | #endif | ||
26 | ]]) | ||
27 | |||
28 | AC_CHECK_HEADERS([mntent.h sys/fs_types.h]) | ||
29 | getfsstat_includes="\ | ||
30 | $ac_includes_default | ||
31 | #if HAVE_SYS_PARAM_H | ||
32 | # include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */ | ||
33 | #endif | ||
34 | #if HAVE_SYS_UCRED_H | ||
35 | # include <grp.h> /* needed for definition of NGROUPS */ | ||
36 | # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */ | ||
37 | #endif | ||
38 | #if HAVE_SYS_MOUNT_H | ||
39 | # include <sys/mount.h> | ||
40 | #endif | ||
41 | #if HAVE_SYS_FS_TYPES_H | ||
42 | # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */ | ||
43 | #endif | ||
44 | " | ||
45 | AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes]) | ||
46 | |||
47 | # Determine how to get the list of mounted file systems. | ||
48 | ac_list_mounted_fs= | ||
49 | |||
50 | # If the getmntent function is available but not in the standard library, | ||
51 | # make sure LIBS contains the appropriate -l option. | ||
52 | AC_FUNC_GETMNTENT | ||
53 | |||
54 | if test -z "$ac_list_mounted_fs"; then | ||
55 | # AIX. | ||
56 | AC_CACHE_CHECK([for mntctl function and struct vmount], | ||
57 | [fu_cv_sys_mounted_vmount], | ||
58 | [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <fshelp.h>]])], | ||
59 | [fu_cv_sys_mounted_vmount=yes], | ||
60 | [fu_cv_sys_mounted_vmount=no])]) | ||
61 | if test $fu_cv_sys_mounted_vmount = yes; then | ||
62 | ac_list_mounted_fs=found | ||
63 | AC_DEFINE([MOUNTED_VMOUNT], [1], | ||
64 | [Define if there is a function named mntctl that can be used to read | ||
65 | the list of mounted file systems, and there is a system header file | ||
66 | that declares 'struct vmount'. (AIX)]) | ||
67 | fi | ||
68 | fi | ||
69 | |||
70 | if test $ac_cv_func_getmntent = yes; then | ||
71 | |||
72 | # This system has the getmntent function. | ||
73 | # Determine whether it's the one-argument variant or the two-argument one. | ||
74 | |||
75 | if test -z "$ac_list_mounted_fs"; then | ||
76 | # glibc, HP-UX, IRIX, Cygwin, Android, also (obsolete) 4.3BSD, SunOS. | ||
77 | AC_CACHE_CHECK([for one-argument getmntent function], | ||
78 | [fu_cv_sys_mounted_getmntent1], | ||
79 | [AC_COMPILE_IFELSE( | ||
80 | [AC_LANG_PROGRAM([[ | ||
81 | /* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */ | ||
82 | #include <stdio.h> | ||
83 | |||
84 | #include <mntent.h> | ||
85 | #if defined __ANDROID__ /* Android */ | ||
86 | # undef MOUNTED | ||
87 | # define MOUNTED "/proc/mounts" | ||
88 | #elif !defined MOUNTED | ||
89 | # if defined _PATH_MOUNTED /* GNU libc */ | ||
90 | # define MOUNTED _PATH_MOUNTED | ||
91 | # endif | ||
92 | # if defined MNT_MNTTAB /* HP-UX. */ | ||
93 | # define MOUNTED MNT_MNTTAB | ||
94 | # endif | ||
95 | #endif | ||
96 | ]], | ||
97 | [[struct mntent *mnt = 0; char *table = MOUNTED; | ||
98 | if (sizeof mnt && sizeof table) return 0; | ||
99 | ]])], | ||
100 | [fu_cv_sys_mounted_getmntent1=yes], | ||
101 | [fu_cv_sys_mounted_getmntent1=no]) | ||
102 | ]) | ||
103 | if test $fu_cv_sys_mounted_getmntent1 = yes; then | ||
104 | ac_list_mounted_fs=found | ||
105 | AC_DEFINE([MOUNTED_GETMNTENT1], [1], | ||
106 | [Define if there is a function named getmntent for reading the list | ||
107 | of mounted file systems, and that function takes a single argument. | ||
108 | (4.3BSD, SunOS, HP-UX, Irix)]) | ||
109 | AC_CHECK_FUNCS([setmntent endmntent hasmntopt]) | ||
110 | fi | ||
111 | fi | ||
112 | |||
113 | if test -z "$ac_list_mounted_fs"; then | ||
114 | # Solaris >= 8. | ||
115 | AC_CACHE_CHECK([for getextmntent function], | ||
116 | [fu_cv_sys_mounted_getextmntent], | ||
117 | [AC_EGREP_HEADER([getextmntent], [sys/mnttab.h], | ||
118 | [fu_cv_sys_mounted_getextmntent=yes], | ||
119 | [fu_cv_sys_mounted_getextmntent=no])]) | ||
120 | if test $fu_cv_sys_mounted_getextmntent = yes; then | ||
121 | ac_list_mounted_fs=found | ||
122 | AC_DEFINE([MOUNTED_GETEXTMNTENT], [1], | ||
123 | [Define if there is a function named getextmntent for reading the list | ||
124 | of mounted file systems. (Solaris)]) | ||
125 | fi | ||
126 | fi | ||
127 | |||
128 | if test -z "$ac_list_mounted_fs"; then | ||
129 | # Solaris < 8, also (obsolete) SVR4. | ||
130 | # Solaris >= 8 has the two-argument getmntent but is already handled above. | ||
131 | AC_CACHE_CHECK([for two-argument getmntent function], | ||
132 | [fu_cv_sys_mounted_getmntent2], | ||
133 | [AC_EGREP_HEADER([getmntent], [sys/mnttab.h], | ||
134 | [fu_cv_sys_mounted_getmntent2=yes], | ||
135 | [fu_cv_sys_mounted_getmntent2=no]) | ||
136 | ]) | ||
137 | if test $fu_cv_sys_mounted_getmntent2 = yes; then | ||
138 | ac_list_mounted_fs=found | ||
139 | AC_DEFINE([MOUNTED_GETMNTENT2], [1], | ||
140 | [Define if there is a function named getmntent for reading the list of | ||
141 | mounted file systems, and that function takes two arguments. (SVR4)]) | ||
142 | AC_CHECK_FUNCS([hasmntopt]) | ||
143 | fi | ||
144 | fi | ||
145 | |||
146 | fi | ||
147 | |||
148 | if test -z "$ac_list_mounted_fs"; then | ||
149 | # OSF/1, also (obsolete) Apple Darwin 1.3. | ||
150 | # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h | ||
151 | |||
152 | AC_CACHE_CHECK([for getfsstat function], | ||
153 | [fu_cv_sys_mounted_getfsstat], | ||
154 | [AC_LINK_IFELSE( | ||
155 | [AC_LANG_PROGRAM([[ | ||
156 | #include <sys/types.h> | ||
157 | #if HAVE_STRUCT_FSSTAT_F_FSTYPENAME | ||
158 | # define FS_TYPE(Ent) ((Ent).f_fstypename) | ||
159 | #else | ||
160 | # define FS_TYPE(Ent) mnt_names[(Ent).f_type] | ||
161 | #endif | ||
162 | $getfsstat_includes | ||
163 | ]], | ||
164 | [[struct statfs *stats; | ||
165 | int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT); | ||
166 | char *t = FS_TYPE (*stats); | ||
167 | ]])], | ||
168 | [fu_cv_sys_mounted_getfsstat=yes], | ||
169 | [fu_cv_sys_mounted_getfsstat=no]) | ||
170 | ]) | ||
171 | if test $fu_cv_sys_mounted_getfsstat = yes; then | ||
172 | ac_list_mounted_fs=found | ||
173 | AC_DEFINE([MOUNTED_GETFSSTAT], [1], | ||
174 | [Define if there is a function named getfsstat for reading the | ||
175 | list of mounted file systems. (DEC Alpha running OSF/1)]) | ||
176 | fi | ||
177 | fi | ||
178 | |||
179 | if test -z "$ac_list_mounted_fs"; then | ||
180 | # (obsolete) SVR3 | ||
181 | AC_CACHE_CHECK([for FIXME existence of three headers], | ||
182 | [fu_cv_sys_mounted_fread_fstyp], | ||
183 | [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ | ||
184 | #include <sys/statfs.h> | ||
185 | #include <sys/fstyp.h> | ||
186 | #include <mnttab.h> | ||
187 | ]])], | ||
188 | [fu_cv_sys_mounted_fread_fstyp=yes], | ||
189 | [fu_cv_sys_mounted_fread_fstyp=no]) | ||
190 | ]) | ||
191 | if test $fu_cv_sys_mounted_fread_fstyp = yes; then | ||
192 | ac_list_mounted_fs=found | ||
193 | AC_DEFINE([MOUNTED_FREAD_FSTYP], [1], | ||
194 | [Define if (like SVR2) there is no specific function for reading the | ||
195 | list of mounted file systems, and your system has these header files: | ||
196 | <sys/fstyp.h> and <sys/statfs.h>. (SVR3)]) | ||
197 | fi | ||
198 | fi | ||
199 | |||
200 | if test -z "$ac_list_mounted_fs"; then | ||
201 | # Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, also (obsolete) 4.4BSD. | ||
202 | # OSF/1 also has getmntinfo but is already handled above. | ||
203 | # We cannot use AC_CHECK_FUNCS([getmntinfo]) here, because at the linker | ||
204 | # level the function is sometimes called getmntinfo64 or getmntinfo$INODE64 | ||
205 | # on Mac OS X, __getmntinfo13 on NetBSD and Minix, _F64_getmntinfo on OSF/1. | ||
206 | AC_CACHE_CHECK([for getmntinfo function], | ||
207 | [fu_cv_sys_mounted_getmntinfo], | ||
208 | [AC_LINK_IFELSE( | ||
209 | [AC_LANG_PROGRAM([[ | ||
210 | #if HAVE_SYS_PARAM_H | ||
211 | # include <sys/param.h> | ||
212 | #endif | ||
213 | #include <sys/types.h> | ||
214 | #if HAVE_SYS_MOUNT_H | ||
215 | # include <sys/mount.h> | ||
216 | #endif | ||
217 | #if HAVE_SYS_STATVFS_H | ||
218 | # include <sys/statvfs.h> | ||
219 | #endif | ||
220 | #include <stdlib.h> | ||
221 | ]], | ||
222 | [[int count = getmntinfo (NULL, MNT_WAIT); | ||
223 | ]])], | ||
224 | [fu_cv_sys_mounted_getmntinfo=yes], | ||
225 | [fu_cv_sys_mounted_getmntinfo=no]) | ||
226 | ]) | ||
227 | if test $fu_cv_sys_mounted_getmntinfo = yes; then | ||
228 | AC_CACHE_CHECK([whether getmntinfo returns statvfs structures], | ||
229 | [fu_cv_sys_mounted_getmntinfo2], | ||
230 | [AC_COMPILE_IFELSE( | ||
231 | [AC_LANG_PROGRAM([[ | ||
232 | #if HAVE_SYS_PARAM_H | ||
233 | # include <sys/param.h> | ||
234 | #endif | ||
235 | #include <sys/types.h> | ||
236 | #if HAVE_SYS_MOUNT_H | ||
237 | # include <sys/mount.h> | ||
238 | #endif | ||
239 | #if HAVE_SYS_STATVFS_H | ||
240 | # include <sys/statvfs.h> | ||
241 | #endif | ||
242 | extern | ||
243 | #ifdef __cplusplus | ||
244 | "C" | ||
245 | #endif | ||
246 | int getmntinfo (struct statfs **, int); | ||
247 | ]], [[]])], | ||
248 | [fu_cv_sys_mounted_getmntinfo2=no], | ||
249 | [fu_cv_sys_mounted_getmntinfo2=yes]) | ||
250 | ]) | ||
251 | if test $fu_cv_sys_mounted_getmntinfo2 = no; then | ||
252 | # Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD. | ||
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)]) | ||
258 | else | ||
259 | # NetBSD, Minix. | ||
260 | ac_list_mounted_fs=found | ||
261 | AC_DEFINE([MOUNTED_GETMNTINFO2], [1], | ||
262 | [Define if there is a function named getmntinfo for reading the | ||
263 | list of mounted file systems and it returns an array of | ||
264 | 'struct statvfs'. (NetBSD 3.0)]) | ||
265 | fi | ||
266 | fi | ||
267 | fi | ||
268 | |||
269 | if test -z "$ac_list_mounted_fs"; then | ||
270 | # Haiku, also (obsolete) BeOS. | ||
271 | AC_CHECK_FUNCS([next_dev fs_stat_dev]) | ||
272 | AC_CHECK_HEADERS([fs_info.h]) | ||
273 | AC_CACHE_CHECK([for BEOS mounted file system support functions], | ||
274 | [fu_cv_sys_mounted_fs_stat_dev], | ||
275 | [if test $ac_cv_header_fs_info_h = yes \ | ||
276 | && test $ac_cv_func_next_dev = yes \ | ||
277 | && test $ac_cv_func_fs_stat_dev = yes; then | ||
278 | fu_cv_sys_mounted_fs_stat_dev=yes | ||
279 | else | ||
280 | fu_cv_sys_mounted_fs_stat_dev=no | ||
281 | fi | ||
282 | ]) | ||
283 | if test $fu_cv_sys_mounted_fs_stat_dev = yes; then | ||
284 | ac_list_mounted_fs=found | ||
285 | AC_DEFINE([MOUNTED_FS_STAT_DEV], [1], | ||
286 | [Define if there are functions named next_dev and fs_stat_dev for | ||
287 | reading the list of mounted file systems. (BeOS)]) | ||
288 | fi | ||
289 | fi | ||
290 | |||
291 | if test -z "$ac_list_mounted_fs"; then | ||
292 | # Interix / BSD alike statvfs | ||
293 | # the code is really interix specific, so make sure, we're on it. | ||
294 | case "$host" in | ||
295 | *-interix*) | ||
296 | AC_CHECK_FUNCS([statvfs]) | ||
297 | if test $ac_cv_func_statvfs = yes; then | ||
298 | ac_list_mounted_fs=found | ||
299 | AC_DEFINE([MOUNTED_INTERIX_STATVFS], [1], | ||
300 | [Define if we are on interix, and ought to use statvfs plus | ||
301 | some special knowledge on where mounted file systems can be | ||
302 | found. (Interix)]) | ||
303 | fi | ||
304 | ;; | ||
305 | esac | ||
306 | fi | ||
307 | |||
308 | if test -z "$ac_list_mounted_fs"; then | ||
309 | AC_MSG_ERROR([could not determine how to read list of mounted file systems]) | ||
310 | # FIXME -- no need to abort building the whole package | ||
311 | # Can't build mountlist.c or anything that needs its functions | ||
312 | fi | ||
313 | |||
314 | if test $ac_list_mounted_fs = found; then | ||
315 | gl_cv_list_mounted_fs=yes | ||
316 | else | ||
317 | gl_cv_list_mounted_fs=no | ||
318 | fi | ||
11 | ]) | 319 | ]) |
12 | 320 | ||
13 | # Prerequisites of lib/mountlist.c not done by gl_LIST_MOUNTED_FILE_SYSTEMS. | 321 | # Prerequisites of lib/mountlist.c not done by gl_MOUNTLIST. |
14 | AC_DEFUN([gl_PREREQ_MOUNTLIST_EXTRA], | 322 | AC_DEFUN([gl_PREREQ_MOUNTLIST_EXTRA], |
15 | [ | 323 | [ |
16 | dnl Note gl_LIST_MOUNTED_FILE_SYSTEMS checks for mntent.h, not sys/mntent.h. | 324 | dnl Note gl_MOUNTLIST checks for mntent.h, not sys/mntent.h. |
17 | AC_CHECK_HEADERS([sys/mntent.h]) | 325 | AC_CHECK_HEADERS([sys/mntent.h]) |
326 | AC_HEADER_MAJOR()dnl for use of makedev () | ||
18 | gl_FSTYPENAME | 327 | gl_FSTYPENAME |
19 | ]) | 328 | ]) |
329 | |||
330 | # Replace Autoconf's AC_FUNC_GETMNTENT to omit checks that are unnecessary | ||
331 | # nowadays. | ||
332 | AC_DEFUN([AC_FUNC_GETMNTENT], | ||
333 | [ | ||
334 | # getmntent is in the standard C library on most systems, but in -lgen on | ||
335 | # Unixware. | ||
336 | AC_SEARCH_LIBS([getmntent], [gen]) | ||
337 | AC_CHECK_FUNCS([getmntent]) | ||
338 | ]) | ||