ls-mntd-fs.m4 12 KB

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