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 if test "$wx_cv_func_statfs" = "yes"; then
wx_cv_type_statvfs_t="struct statfs"
AC_DEFINE(HAVE_STATFS) AC_DEFINE(HAVE_STATFS)
else else
AC_CACHE_CHECK(for statvfs, wx_cv_func_statvfs, AC_CACHE_CHECK(for statvfs, wx_cv_func_statvfs,
AC_TRY_COMPILE( AC_TRY_COMPILE(
[ [
#include <sys/statvfs.h> #include <stddef.h>
#include <sys/statvfs.h>
], ],
[ [
long l; statvfs("/", NULL);
struct statvfs fs;
statvfs("/", &fs);
l = fs.f_bsize;
l += fs.f_blocks;
l += fs.f_bavail;
], ],
[ [
wx_cv_func_statvfs=yes wx_cv_func_statvfs=yes
@@ -3311,12 +3308,73 @@ else
) )
if test "$wx_cv_func_statvfs" = "yes"; then 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 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
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 check for fcntl() or at least flock() needed by Unix implementation of
dnl wxSingleInstanceChecker dnl wxSingleInstanceChecker
if test "$wxUSE_SNGLINST_CHECKER" = "yes"; then 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 */ /* The type of 3rd argument to getsockname() - usually size_t or int */
#undef SOCKLEN_T #undef SOCKLEN_T
/* The type of statvfs(2) argument */
#undef WX_STATFS_T
/* The signal handler prototype */ /* The signal handler prototype */
#undef wxTYPE_SA_HANDLER #undef wxTYPE_SA_HANDLER

View File

@@ -28,30 +28,32 @@
#include "wx/wfstream.h" #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 HAVE_STATFS
# ifdef __BSD__ #ifdef __BSD__
# include <sys/param.h> #include <sys/param.h>
# include <sys/mount.h> #include <sys/mount.h>
# else #else // !__BSD__
# include <sys/vfs.h> #include <sys/vfs.h>
# endif #endif // __BSD__/!__BSD__
#define wxStatfs statfs
#endif // HAVE_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 #ifdef HAVE_STATVFS
#include <sys/statvfs.h> #include <sys/statvfs.h>
#define statfs statvfs #define wxStatfs statvfs
# ifdef __HPUX__ #endif // HAVE_STATVFS
#define wxStatFs struct statvfs
# else #if defined(HAVE_STATFS) || defined(HAVE_STATVFS)
#define wxStatFs statvfs_t // WX_STATFS_T is detected by configure
# endif #define wxStatfs_t WX_STATFS_T
#elif HAVE_STATFS #endif
#define wxStatFs struct statfs
#endif // HAVE_STAT[V]FS
#if wxUSE_GUI #if wxUSE_GUI
#include "wx/unix/execute.h" #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) #if defined(HAVE_STATFS) || defined(HAVE_STATVFS)
// the case to "char *" is needed for AIX 4.3 // the case to "char *" is needed for AIX 4.3
wxStatFs fs; wxStatfs_t fs;
if ( statfs((char *)(const char*)path.fn_str(), &fs) != 0 ) if ( wxStatfs((char *)(const char*)path.fn_str(), &fs) != 0 )
{ {
wxLogSysError( wxT("Failed to get file system statistics") ); wxLogSysError( wxT("Failed to get file system statistics") );