ls-mntd-fs.m4 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. # serial 29
  2. # How to list mounted file systems.
  3. # Copyright (C) 1998-2004, 2006, 2009-2011 Free Software Foundation, Inc.
  4. #
  5. # This file is free software; the Free Software Foundation
  6. # gives unlimited permission to copy and/or distribute it,
  7. # with or without modifications, as long as this notice is preserved.
  8. dnl From Jim Meyering.
  9. dnl
  10. dnl This is not pretty. I've just taken the autoconf code and wrapped
  11. dnl it in an AC_DEFUN and made some other fixes.
  12. dnl
  13. # Replace Autoconf's AC_FUNC_GETMNTENT to work around a bug in Autoconf
  14. # through Autoconf 2.59. We can remove this once we assume Autoconf 2.60
  15. # or later.
  16. AC_DEFUN([AC_FUNC_GETMNTENT],
  17. [# getmntent is in the standard C library on UNICOS, in -lsun on Irix 4,
  18. # -lseq on Dynix/PTX, -lgen on Unixware.
  19. AC_SEARCH_LIBS([getmntent], [sun seq gen])
  20. AC_CHECK_FUNCS([getmntent])
  21. ])
  22. # gl_LIST_MOUNTED_FILE_SYSTEMS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
  23. AC_DEFUN([gl_LIST_MOUNTED_FILE_SYSTEMS],
  24. [
  25. AC_CHECK_FUNCS([listmntent getmntinfo])
  26. AC_CHECK_HEADERS_ONCE([sys/param.h sys/statvfs.h])
  27. # We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses
  28. # NGROUPS (as the array dimension for a struct member) without a definition.
  29. AC_CHECK_HEADERS([sys/ucred.h], [], [], [#include <grp.h>])
  30. AC_CHECK_HEADERS([sys/mount.h], [], [],
  31. [AC_INCLUDES_DEFAULT
  32. [#if HAVE_SYS_PARAM_H
  33. #include <sys/param.h>
  34. #endif]])
  35. AC_CHECK_HEADERS([mntent.h sys/fs_types.h])
  36. getfsstat_includes="\
  37. $ac_includes_default
  38. #if HAVE_SYS_PARAM_H
  39. # include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */
  40. #endif
  41. #if HAVE_SYS_UCRED_H
  42. # include <grp.h> /* needed for definition of NGROUPS */
  43. # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */
  44. #endif
  45. #if HAVE_SYS_MOUNT_H
  46. # include <sys/mount.h>
  47. #endif
  48. #if HAVE_SYS_FS_TYPES_H
  49. # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */
  50. #endif
  51. "
  52. AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes])
  53. # Determine how to get the list of mounted file systems.
  54. ac_list_mounted_fs=
  55. # If the getmntent function is available but not in the standard library,
  56. # make sure LIBS contains the appropriate -l option.
  57. AC_FUNC_GETMNTENT
  58. # This test must precede the ones for getmntent because Unicos-9 is
  59. # reported to have the getmntent function, but its support is incompatible
  60. # with other getmntent implementations.
  61. # NOTE: Normally, I wouldn't use a check for system type as I've done for
  62. # 'CRAY' below since that goes against the whole autoconf philosophy. But
  63. # I think there is too great a chance that some non-Cray system has a
  64. # function named listmntent to risk the false positive.
  65. if test -z "$ac_list_mounted_fs"; then
  66. # Cray UNICOS 9
  67. AC_MSG_CHECKING([for listmntent of Cray/Unicos-9])
  68. AC_CACHE_VAL([fu_cv_sys_mounted_cray_listmntent],
  69. [fu_cv_sys_mounted_cray_listmntent=no
  70. AC_EGREP_CPP([yes],
  71. [#ifdef _CRAY
  72. yes
  73. #endif
  74. ], [test $ac_cv_func_listmntent = yes \
  75. && fu_cv_sys_mounted_cray_listmntent=yes]
  76. )
  77. ]
  78. )
  79. AC_MSG_RESULT([$fu_cv_sys_mounted_cray_listmntent])
  80. if test $fu_cv_sys_mounted_cray_listmntent = yes; then
  81. ac_list_mounted_fs=found
  82. AC_DEFINE([MOUNTED_LISTMNTENT], [1],
  83. [Define if there is a function named listmntent that can be used to
  84. list all mounted file systems. (UNICOS)])
  85. fi
  86. fi
  87. if test -z "$ac_list_mounted_fs"; then
  88. # AIX.
  89. AC_MSG_CHECKING([for mntctl function and struct vmount])
  90. AC_CACHE_VAL([fu_cv_sys_mounted_vmount],
  91. [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <fshelp.h>]])],
  92. [fu_cv_sys_mounted_vmount=yes],
  93. [fu_cv_sys_mounted_vmount=no])])
  94. AC_MSG_RESULT([$fu_cv_sys_mounted_vmount])
  95. if test $fu_cv_sys_mounted_vmount = yes; then
  96. ac_list_mounted_fs=found
  97. AC_DEFINE([MOUNTED_VMOUNT], [1],
  98. [Define if there is a function named mntctl that can be used to read
  99. the list of mounted file systems, and there is a system header file
  100. that declares 'struct vmount.' (AIX)])
  101. fi
  102. fi
  103. if test $ac_cv_func_getmntent = yes; then
  104. # This system has the getmntent function.
  105. # Determine whether it's the one-argument variant or the two-argument one.
  106. if test -z "$ac_list_mounted_fs"; then
  107. # 4.3BSD, SunOS, HP-UX, Dynix, Irix
  108. AC_MSG_CHECKING([for one-argument getmntent function])
  109. AC_CACHE_VAL([fu_cv_sys_mounted_getmntent1],
  110. [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  111. /* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */
  112. #include <stdio.h>
  113. #include <mntent.h>
  114. #if !defined MOUNTED
  115. # if defined _PATH_MOUNTED /* GNU libc */
  116. # define MOUNTED _PATH_MOUNTED
  117. # endif
  118. # if defined MNT_MNTTAB /* HP-UX. */
  119. # define MOUNTED MNT_MNTTAB
  120. # endif
  121. # if defined MNTTABNAME /* Dynix. */
  122. # define MOUNTED MNTTABNAME
  123. # endif
  124. #endif
  125. ]],
  126. [[ struct mntent *mnt = 0; char *table = MOUNTED;
  127. if (sizeof mnt && sizeof table) return 0;]])],
  128. [fu_cv_sys_mounted_getmntent1=yes],
  129. [fu_cv_sys_mounted_getmntent1=no])])
  130. AC_MSG_RESULT([$fu_cv_sys_mounted_getmntent1])
  131. if test $fu_cv_sys_mounted_getmntent1 = yes; then
  132. ac_list_mounted_fs=found
  133. AC_DEFINE([MOUNTED_GETMNTENT1], [1],
  134. [Define if there is a function named getmntent for reading the list
  135. of mounted file systems, and that function takes a single argument.
  136. (4.3BSD, SunOS, HP-UX, Dynix, Irix)])
  137. fi
  138. fi
  139. if test -z "$ac_list_mounted_fs"; then
  140. # SVR4
  141. AC_MSG_CHECKING([for two-argument getmntent function])
  142. AC_CACHE_VAL([fu_cv_sys_mounted_getmntent2],
  143. [AC_EGREP_HEADER([getmntent], [sys/mnttab.h],
  144. fu_cv_sys_mounted_getmntent2=yes,
  145. fu_cv_sys_mounted_getmntent2=no)])
  146. AC_MSG_RESULT([$fu_cv_sys_mounted_getmntent2])
  147. if test $fu_cv_sys_mounted_getmntent2 = yes; then
  148. ac_list_mounted_fs=found
  149. AC_DEFINE([MOUNTED_GETMNTENT2], [1],
  150. [Define if there is a function named getmntent for reading the list of
  151. mounted file systems, and that function takes two arguments. (SVR4)])
  152. AC_CHECK_FUNCS([hasmntopt])
  153. fi
  154. fi
  155. fi
  156. if test -z "$ac_list_mounted_fs"; then
  157. # DEC Alpha running OSF/1, and Apple Darwin 1.3.
  158. # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h
  159. AC_MSG_CHECKING([for getfsstat function])
  160. AC_CACHE_VAL([fu_cv_sys_mounted_getfsstat],
  161. [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  162. #include <sys/types.h>
  163. #if HAVE_STRUCT_FSSTAT_F_FSTYPENAME
  164. # define FS_TYPE(Ent) ((Ent).f_fstypename)
  165. #else
  166. # define FS_TYPE(Ent) mnt_names[(Ent).f_type]
  167. #endif
  168. $getfsstat_includes]]
  169. ,
  170. [[struct statfs *stats;
  171. int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT);
  172. char *t = FS_TYPE (*stats); ]])],
  173. [fu_cv_sys_mounted_getfsstat=yes],
  174. [fu_cv_sys_mounted_getfsstat=no])])
  175. AC_MSG_RESULT([$fu_cv_sys_mounted_getfsstat])
  176. if test $fu_cv_sys_mounted_getfsstat = yes; then
  177. ac_list_mounted_fs=found
  178. AC_DEFINE([MOUNTED_GETFSSTAT], [1],
  179. [Define if there is a function named getfsstat for reading the
  180. list of mounted file systems. (DEC Alpha running OSF/1)])
  181. fi
  182. fi
  183. if test -z "$ac_list_mounted_fs"; then
  184. # SVR3
  185. AC_MSG_CHECKING([for FIXME existence of three headers])
  186. AC_CACHE_VAL([fu_cv_sys_mounted_fread_fstyp],
  187. [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
  188. #include <sys/statfs.h>
  189. #include <sys/fstyp.h>
  190. #include <mnttab.h>]])],
  191. [fu_cv_sys_mounted_fread_fstyp=yes],
  192. [fu_cv_sys_mounted_fread_fstyp=no])])
  193. AC_MSG_RESULT([$fu_cv_sys_mounted_fread_fstyp])
  194. if test $fu_cv_sys_mounted_fread_fstyp = yes; then
  195. ac_list_mounted_fs=found
  196. AC_DEFINE([MOUNTED_FREAD_FSTYP], [1],
  197. [Define if (like SVR2) there is no specific function for reading the
  198. list of mounted file systems, and your system has these header files:
  199. <sys/fstyp.h> and <sys/statfs.h>. (SVR3)])
  200. fi
  201. fi
  202. if test -z "$ac_list_mounted_fs"; then
  203. # 4.4BSD and DEC OSF/1.
  204. AC_MSG_CHECKING([for getmntinfo function])
  205. AC_CACHE_VAL([fu_cv_sys_mounted_getmntinfo],
  206. [
  207. test "$ac_cv_func_getmntinfo" = yes \
  208. && fu_cv_sys_mounted_getmntinfo=yes \
  209. || fu_cv_sys_mounted_getmntinfo=no
  210. ])
  211. AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo])
  212. if test $fu_cv_sys_mounted_getmntinfo = yes; then
  213. AC_MSG_CHECKING([whether getmntinfo returns statvfs structures])
  214. AC_CACHE_VAL([fu_cv_sys_mounted_getmntinfo2],
  215. [
  216. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  217. #if HAVE_SYS_PARAM_H
  218. # include <sys/param.h>
  219. #endif
  220. #include <sys/types.h>
  221. #if HAVE_SYS_MOUNT_H
  222. # include <sys/mount.h>
  223. #endif
  224. #if HAVE_SYS_STATVFS_H
  225. # include <sys/statvfs.h>
  226. #endif
  227. extern
  228. #ifdef __cplusplus
  229. "C"
  230. #endif
  231. int getmntinfo (struct statfs **, int);
  232. ]], [])],
  233. [fu_cv_sys_mounted_getmntinfo2=no],
  234. [fu_cv_sys_mounted_getmntinfo2=yes])
  235. ])
  236. AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo2])
  237. if test $fu_cv_sys_mounted_getmntinfo2 = no; then
  238. ac_list_mounted_fs=found
  239. AC_DEFINE([MOUNTED_GETMNTINFO], [1],
  240. [Define if there is a function named getmntinfo for reading the
  241. list of mounted file systems and it returns an array of
  242. 'struct statfs'. (4.4BSD, Darwin)])
  243. else
  244. ac_list_mounted_fs=found
  245. AC_DEFINE([MOUNTED_GETMNTINFO2], [1],
  246. [Define if there is a function named getmntinfo for reading the
  247. list of mounted file systems and it returns an array of
  248. 'struct statvfs'. (NetBSD 3.0)])
  249. fi
  250. fi
  251. fi
  252. if test -z "$ac_list_mounted_fs"; then
  253. # Ultrix
  254. AC_MSG_CHECKING([for getmnt function])
  255. AC_CACHE_VAL([fu_cv_sys_mounted_getmnt],
  256. [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
  257. #include <sys/fs_types.h>
  258. #include <sys/mount.h>]])],
  259. [fu_cv_sys_mounted_getmnt=yes],
  260. [fu_cv_sys_mounted_getmnt=no])])
  261. AC_MSG_RESULT([$fu_cv_sys_mounted_getmnt])
  262. if test $fu_cv_sys_mounted_getmnt = yes; then
  263. ac_list_mounted_fs=found
  264. AC_DEFINE([MOUNTED_GETMNT], [1],
  265. [Define if there is a function named getmnt for reading the list of
  266. mounted file systems. (Ultrix)])
  267. fi
  268. fi
  269. if test -z "$ac_list_mounted_fs"; then
  270. # BeOS
  271. AC_CHECK_FUNCS([next_dev fs_stat_dev])
  272. AC_CHECK_HEADERS([fs_info.h])
  273. AC_MSG_CHECKING([for BEOS mounted file system support functions])
  274. if test $ac_cv_header_fs_info_h = yes \
  275. && test $ac_cv_func_next_dev = yes \
  276. && test $ac_cv_func_fs_stat_dev = yes; then
  277. fu_result=yes
  278. else
  279. fu_result=no
  280. fi
  281. AC_MSG_RESULT([$fu_result])
  282. if test $fu_result = yes; then
  283. ac_list_mounted_fs=found
  284. AC_DEFINE([MOUNTED_FS_STAT_DEV], [1],
  285. [Define if there are functions named next_dev and fs_stat_dev for
  286. reading the list of mounted file systems. (BeOS)])
  287. fi
  288. fi
  289. if test -z "$ac_list_mounted_fs"; then
  290. # SVR2
  291. AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab])
  292. AC_CACHE_VAL([fu_cv_sys_mounted_fread],
  293. [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <mnttab.h>]])],
  294. [fu_cv_sys_mounted_fread=yes],
  295. [fu_cv_sys_mounted_fread=no])])
  296. AC_MSG_RESULT([$fu_cv_sys_mounted_fread])
  297. if test $fu_cv_sys_mounted_fread = yes; then
  298. ac_list_mounted_fs=found
  299. AC_DEFINE([MOUNTED_FREAD], [1],
  300. [Define if there is no specific function for reading the list of
  301. mounted file systems. fread will be used to read /etc/mnttab.
  302. (SVR2) ])
  303. fi
  304. fi
  305. if test -z "$ac_list_mounted_fs"; then
  306. # Interix / BSD alike statvfs
  307. # the code is really interix specific, so make sure, we're on it.
  308. case "$host" in
  309. *-interix*)
  310. AC_CHECK_FUNCS([statvfs])
  311. if test $ac_cv_func_statvfs = yes; then
  312. ac_list_mounted_fs=found
  313. AC_DEFINE([MOUNTED_INTERIX_STATVFS], [1],
  314. [Define if we are on interix, and ought to use statvfs plus
  315. some special knowledge on where mounted filesystems can be
  316. found. (Interix)])
  317. fi
  318. ;;
  319. esac
  320. fi
  321. if test -z "$ac_list_mounted_fs"; then
  322. AC_MSG_ERROR([could not determine how to read list of mounted file systems])
  323. # FIXME -- no need to abort building the whole package
  324. # Can't build mountlist.c or anything that needs its functions
  325. fi
  326. AS_IF([test $ac_list_mounted_fs = found], [$1], [$2])
  327. ])