1# serial 27 2# How to list mounted file systems. 3 4# Copyright (C) 1998-2004, 2006, 2009 Free Software Foundation, Inc. 5# 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. 9 10dnl From Jim Meyering. 11dnl 12dnl This is not pretty. I've just taken the autoconf code and wrapped 13dnl it in an AC_DEFUN and made some other fixes. 14dnl 15 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. 19AC_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. 22AC_SEARCH_LIBS([getmntent], [sun seq gen]) 23AC_CHECK_FUNCS([getmntent]) 24]) 25 26# gl_LIST_MOUNTED_FILE_SYSTEMS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) 27AC_DEFUN([gl_LIST_MOUNTED_FILE_SYSTEMS], 28 [ 29AC_CHECK_FUNCS([listmntent getmntinfo]) 30AC_CHECK_HEADERS_ONCE([sys/param.h sys/statvfs.h]) 31 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. 34AC_CHECK_HEADERS([sys/ucred.h], [], [], [#include <grp.h>]) 35 36AC_CHECK_HEADERS([sys/mount.h], [], [], 37 [AC_INCLUDES_DEFAULT 38 [#if HAVE_SYS_PARAM_H 39 #include <sys/param.h> 40 #endif]]) 41 42AC_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 58" 59AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes]) 60 61# Determine how to get the list of mounted file systems. 62ac_list_mounted_fs= 63 64# If the getmntent function is available but not in the standard library, 65# make sure LIBS contains the appropriate -l option. 66AC_FUNC_GETMNTENT 67 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. 71 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. 76 77if 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 84yes 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 98fi 99 100if 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_TRY_CPP([#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 115fi 116 117if test $ac_cv_func_getmntent = yes; then 118 119 # This system has the getmntent function. 120 # Determine whether it's the one-argument variant or the two-argument one. 121 122 if test -z "$ac_list_mounted_fs"; then 123 # 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_TRY_COMPILE([ 127/* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */ 128#include <stdio.h> 129 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 142], 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 fi 155 fi 156 157 if test -z "$ac_list_mounted_fs"; then 158 # SVR4 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)]) 170 AC_CHECK_FUNCS([hasmntopt]) 171 fi 172 fi 173 174fi 175 176if test -z "$ac_list_mounted_fs"; then 177 # DEC Alpha running OSF/1, and Apple Darwin 1.3. 178 # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h 179 180 AC_MSG_CHECKING([for getfsstat function]) 181 AC_CACHE_VAL([fu_cv_sys_mounted_getfsstat], 182 [AC_TRY_LINK([ 183#include <sys/types.h> 184#if HAVE_STRUCT_FSSTAT_F_FSTYPENAME 185# define FS_TYPE(Ent) ((Ent).f_fstypename) 186#else 187# define FS_TYPE(Ent) mnt_names[(Ent).f_type] 188#endif 189]$getfsstat_includes 190, 191 [struct statfs *stats; 192 int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT); 193 char *t = FS_TYPE (*stats); ], 194 fu_cv_sys_mounted_getfsstat=yes, 195 fu_cv_sys_mounted_getfsstat=no)]) 196 AC_MSG_RESULT([$fu_cv_sys_mounted_getfsstat]) 197 if test $fu_cv_sys_mounted_getfsstat = yes; then 198 ac_list_mounted_fs=found 199 AC_DEFINE([MOUNTED_GETFSSTAT], [1], 200 [Define if there is a function named getfsstat for reading the 201 list of mounted file systems. (DEC Alpha running OSF/1)]) 202 fi 203fi 204 205if test -z "$ac_list_mounted_fs"; then 206 # SVR3 207 AC_MSG_CHECKING([for FIXME existence of three headers]) 208 AC_CACHE_VAL([fu_cv_sys_mounted_fread_fstyp], 209 [AC_TRY_CPP([ 210#include <sys/statfs.h> 211#include <sys/fstyp.h> 212#include <mnttab.h>], 213 fu_cv_sys_mounted_fread_fstyp=yes, 214 fu_cv_sys_mounted_fread_fstyp=no)]) 215 AC_MSG_RESULT([$fu_cv_sys_mounted_fread_fstyp]) 216 if test $fu_cv_sys_mounted_fread_fstyp = yes; then 217 ac_list_mounted_fs=found 218 AC_DEFINE([MOUNTED_FREAD_FSTYP], [1], 219 [Define if (like SVR2) there is no specific function for reading the 220 list of mounted file systems, and your system has these header files: 221 <sys/fstyp.h> and <sys/statfs.h>. (SVR3)]) 222 fi 223fi 224 225if test -z "$ac_list_mounted_fs"; then 226 # 4.4BSD and DEC OSF/1. 227 AC_MSG_CHECKING([for getmntinfo function]) 228 AC_CACHE_VAL([fu_cv_sys_mounted_getmntinfo], 229 [ 230 test "$ac_cv_func_getmntinfo" = yes \ 231 && fu_cv_sys_mounted_getmntinfo=yes \ 232 || fu_cv_sys_mounted_getmntinfo=no 233 ]) 234 AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo]) 235 if test $fu_cv_sys_mounted_getmntinfo = yes; then 236 AC_MSG_CHECKING([whether getmntinfo returns statvfs structures]) 237 AC_CACHE_VAL([fu_cv_sys_mounted_getmntinfo2], 238 [ 239 AC_TRY_COMPILE([ 240#if HAVE_SYS_PARAM_H 241# include <sys/param.h> 242#endif 243#include <sys/types.h> 244#if HAVE_SYS_MOUNT_H 245# include <sys/mount.h> 246#endif 247#if HAVE_SYS_STATVFS_H 248# include <sys/statvfs.h> 249#endif 250extern int getmntinfo (struct statfs **, int); 251 ], [], 252 [fu_cv_sys_mounted_getmntinfo2=no], 253 [fu_cv_sys_mounted_getmntinfo2=yes]) 254 ]) 255 AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo2]) 256 if test $fu_cv_sys_mounted_getmntinfo2 = no; then 257 ac_list_mounted_fs=found 258 AC_DEFINE([MOUNTED_GETMNTINFO], [1], 259 [Define if there is a function named getmntinfo for reading the 260 list of mounted file systems and it returns an array of 261 'struct statfs'. (4.4BSD, Darwin)]) 262 else 263 ac_list_mounted_fs=found 264 AC_DEFINE([MOUNTED_GETMNTINFO2], [1], 265 [Define if there is a function named getmntinfo for reading the 266 list of mounted file systems and it returns an array of 267 'struct statvfs'. (NetBSD 3.0)]) 268 fi 269 fi 270fi 271 272if test -z "$ac_list_mounted_fs"; then 273 # Ultrix 274 AC_MSG_CHECKING([for getmnt function]) 275 AC_CACHE_VAL([fu_cv_sys_mounted_getmnt], 276 [AC_TRY_CPP([ 277#include <sys/fs_types.h> 278#include <sys/mount.h>], 279 fu_cv_sys_mounted_getmnt=yes, 280 fu_cv_sys_mounted_getmnt=no)]) 281 AC_MSG_RESULT([$fu_cv_sys_mounted_getmnt]) 282 if test $fu_cv_sys_mounted_getmnt = yes; then 283 ac_list_mounted_fs=found 284 AC_DEFINE([MOUNTED_GETMNT], [1], 285 [Define if there is a function named getmnt for reading the list of 286 mounted file systems. (Ultrix)]) 287 fi 288fi 289 290if test -z "$ac_list_mounted_fs"; then 291 # BeOS 292 AC_CHECK_FUNCS([next_dev fs_stat_dev]) 293 AC_CHECK_HEADERS([fs_info.h]) 294 AC_MSG_CHECKING([for BEOS mounted file system support functions]) 295 if test $ac_cv_header_fs_info_h = yes \ 296 && test $ac_cv_func_next_dev = yes \ 297 && test $ac_cv_func_fs_stat_dev = yes; then 298 fu_result=yes 299 else 300 fu_result=no 301 fi 302 AC_MSG_RESULT([$fu_result]) 303 if test $fu_result = yes; then 304 ac_list_mounted_fs=found 305 AC_DEFINE([MOUNTED_FS_STAT_DEV], [1], 306 [Define if there are functions named next_dev and fs_stat_dev for 307 reading the list of mounted file systems. (BeOS)]) 308 fi 309fi 310 311if test -z "$ac_list_mounted_fs"; then 312 # SVR2 313 AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab]) 314 AC_CACHE_VAL([fu_cv_sys_mounted_fread], 315 [AC_TRY_CPP([#include <mnttab.h>], 316 fu_cv_sys_mounted_fread=yes, 317 fu_cv_sys_mounted_fread=no)]) 318 AC_MSG_RESULT([$fu_cv_sys_mounted_fread]) 319 if test $fu_cv_sys_mounted_fread = yes; then 320 ac_list_mounted_fs=found 321 AC_DEFINE([MOUNTED_FREAD], [1], 322 [Define if there is no specific function for reading the list of 323 mounted file systems. fread will be used to read /etc/mnttab. 324 (SVR2) ]) 325 fi 326fi 327 328dnl if test -z "$ac_list_mounted_fs"; then 329dnl AC_MSG_ERROR([could not determine how to read list of mounted file systems]) 330dnl # FIXME -- no need to abort building the whole package 331dnl # Can't build mountlist.c or anything that needs its functions 332dnl fi 333 334AS_IF([test $ac_list_mounted_fs = found], [$1], [$2]) 335 336 ]) 337