backported configure test for WX_STATVFS_T.

(Adding some braces as newer autoconf version love them, IIRC).


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@19081 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Neis
2003-02-02 19:56:39 +00:00
parent b7c2485e31
commit 69cddbaab2
3 changed files with 92 additions and 29 deletions

View File

@@ -3286,20 +3286,17 @@ AC_CACHE_CHECK(for statfs, wx_cv_func_statfs,
)
if test "$wx_cv_func_statfs" = "yes"; then
wx_cv_type_statvfs_t="struct statfs"
AC_DEFINE(HAVE_STATFS)
else
AC_CACHE_CHECK(for statvfs, wx_cv_func_statvfs,
AC_TRY_COMPILE(
[
#include <sys/statvfs.h>
#include <stddef.h>
#include <sys/statvfs.h>
],
[
long l;
struct statvfs fs;
statvfs("/", &fs);
l = fs.f_bsize;
l += fs.f_blocks;
l += fs.f_bavail;
statvfs("/", NULL);
],
[
wx_cv_func_statvfs=yes
@@ -3311,12 +3308,73 @@ else
)
if test "$wx_cv_func_statvfs" = "yes"; then
AC_DEFINE(HAVE_STATVFS)
dnl we also have to check whether we should use statvfs_t (works under
dnl Solaris 8, doesn't work under Solaris 7) or "struct statvfs" (vice
dnl versa) as the argument for statvfs in 64 bit off_t mode (in 32 bit
dnl mode both work fine)
dnl
dnl for this check C++ compiler has to be used as passing incompatible
dnl pointers is just a warning and not an error in C
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_CACHE_CHECK(for statvfs argument type, wx_cv_type_statvfs_t,
AC_TRY_COMPILE(
[
#include <sys/statvfs.h>
],
[
long l;
statvfs_t fs;
statvfs("/", &fs);
l = fs.f_bsize;
l += fs.f_blocks;
l += fs.f_bavail;
],
[
wx_cv_type_statvfs_t=statvfs_t
],
[
AC_TRY_COMPILE(
[
#include <sys/statvfs.h>
],
[
long l;
struct statvfs fs;
statvfs("/", &fs);
l = fs.f_bsize;
l += fs.f_blocks;
l += fs.f_bavail;
],
[
wx_cv_type_statvfs_t="struct statvfs"
],
[
wx_cv_type_statvfs_t="unknown"
]
)
]
)
)
AC_LANG_RESTORE
if test "$wx_cv_type_statvfs_t" != "unknown"; then
AC_DEFINE(HAVE_STATVFS)
fi
else
AC_MSG_WARN([wxGetDiskSpace() function won't work without statfs()])
dnl set it for the test below
wx_cv_type_statvfs_t="unknown"
fi
fi
if test "$wx_cv_type_statvfs_t" != "unknown"; then
AC_DEFINE_UNQUOTED(WX_STATFS_T, $wx_cv_type_statvfs_t)
else
AC_MSG_WARN([wxGetDiskSpace() function won't work without statfs()])
fi
dnl check for fcntl() or at least flock() needed by Unix implementation of
dnl wxSingleInstanceChecker
if test "$wxUSE_SNGLINST_CHECKER" = "yes"; then

View File

@@ -881,6 +881,9 @@
/* The type of 3rd argument to getsockname() - usually size_t or int */
#undef SOCKLEN_T
/* The type of statvfs(2) argument */
#undef WX_STATFS_T
/* The signal handler prototype */
#undef wxTYPE_SA_HANDLER

View File

@@ -28,30 +28,32 @@
#include "wx/wfstream.h"
// not only the statfs syscall is called differently depending on platform, but
// one of its incarnations, statvfs(), takes different arguments under
// different platforms and even different versions of the same system (Solaris
// 7 and 8): if you want to test for this, don't forget that the problems only
// appear if the large files support is enabled
#ifdef HAVE_STATFS
# ifdef __BSD__
# include <sys/param.h>
# include <sys/mount.h>
# else
# include <sys/vfs.h>
# endif
#ifdef __BSD__
#include <sys/param.h>
#include <sys/mount.h>
#else // !__BSD__
#include <sys/vfs.h>
#endif // __BSD__/!__BSD__
#define wxStatfs statfs
#endif // HAVE_STATFS
// not only the statfs syscall is called differently depending on platform, but
// we also can't use "struct statvfs" under Solaris because it breaks down if
// HAVE_LARGEFILE_SUPPORT == 1 and we must use statvfs_t instead
#ifdef HAVE_STATVFS
#include <sys/statvfs.h>
#define statfs statvfs
# ifdef __HPUX__
#define wxStatFs struct statvfs
# else
#define wxStatFs statvfs_t
# endif
#elif HAVE_STATFS
#define wxStatFs struct statfs
#endif // HAVE_STAT[V]FS
#define wxStatfs statvfs
#endif // HAVE_STATVFS
#if defined(HAVE_STATFS) || defined(HAVE_STATVFS)
// WX_STATFS_T is detected by configure
#define wxStatfs_t WX_STATFS_T
#endif
#if wxUSE_GUI
#include "wx/unix/execute.h"
@@ -1024,8 +1026,8 @@ bool wxGetDiskSpace(const wxString& path, wxLongLong *pTotal, wxLongLong *pFree)
{
#if defined(HAVE_STATFS) || defined(HAVE_STATVFS)
// the case to "char *" is needed for AIX 4.3
wxStatFs fs;
if ( statfs((char *)(const char*)path.fn_str(), &fs) != 0 )
wxStatfs_t fs;
if ( wxStatfs((char *)(const char*)path.fn_str(), &fs) != 0 )
{
wxLogSysError( wxT("Failed to get file system statistics") );