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 | ]) | ||
