Rob,

   The defines should be in the generated H5pubconf.h file. However, because I 
could only successfully test CMake on MinGW, I did not want to insert MinGW 
checks into configure and not be able to verify them. End result is that those 
defines must be added to your H5pubconf.h.  Also those defines are needed by 
src/H5win32defs.h so that all the proper defines are set before the defines in  
H5private.h/H5public.h.

Allen

On Wednesday, April 25, 2012 12:26:27 PM Sisyphus wrote:
> ----- Original Message -----
> From: "Allen D Byrne" <[email protected]>
> To: <[email protected]>
> Cc: "Sisyphus" <[email protected]>
> Sent: Tuesday, April 24, 2012 11:41 PM
> Subject: Re: [Hdf-forum] Problems compiling hdf5 under MingW:
> undefinedreference to 'ftruncated64'
> 
> (I build with configure, not cmake.)
> 
> >I checked the code, there is an define H5_HAVE_MINGW that must be set.
> 
> Should H5_HAVE_WIN32_API also be set for MinGW ? I gather it *should* be
> defined, but I don't know whether it is. How do I check ?
> 
> Similarly, how do I tell whether H5_HAVE_MINGW is defined for my build ?
> "H5_HAVE_MINGW" is a bit of a mystery - I can't find it in any of the source
> header files, and the only src/*.c file that references it is H5FDstdio.c.
> In that file we find:
> 
> #ifdef H5_HAVE_WIN32_API
> #ifndef H5_HAVE_MINGW
>     #define file_fseek      _fseeki64
>     #define file_offset_t   __int64
>     #define file_ftruncate  _chsize_s   /* Supported in VS 2005 or newer */
>     #define file_ftell      _ftelli64
> #endif /* H5_HAVE_MINGW */
> #endif /* H5_HAVE_WIN32_API */
> 
> Quite clearly, if we're running MinGW then the intention is that none of
> those defines should be set - and I find that none of those defines are set.
> So that part is fine. (Mind you, I presently don't know if they're unset
> because H5_HAVE_WIN32_API is not defined for me, or because H5_HAVE_MINGW
> *is* defined for me.)
> 
> The problem with H5FDstdio.c occurs in the very next block of defines:
> 
> #ifndef file_fseek
>     #ifdef H5_HAVE_FSEEKO64
>         #define file_fseek      fseeko64
>         #define file_offset_t   off64_t
>         #define file_ftruncate  ftruncate64
>         #define file_ftell      ftello64
>     #else
>         #define file_fseek      fseeko
>         #define file_offset_t   off_t
>         #define file_ftruncate  ftruncate
>         #define file_ftell      ftello
>     #endif /* H5_HAVE_FSEEKO64 */
> #endif /* file_fseek */
> 
> It assumes that if H5_HAVE_FSEEKO64 is defined, then H5_HAVE_FTRUNCATE64 is
> also defined.
> 
> The assumption is correct for my 64-bit MinGW (gcc-4.7.0), but not for my
> 32-bit MinGW (gcc-4.5.2).
> 
> Similarly, both H5FDdirect.c and H5FDmpiposix.c assume that if
> H5_HAVE_LSEEK64 is defined, then H5_HAVE_FTRUNCATE64 is also defined - which
> is again true for my 64-bit MinGW, but not for my 32-bit MinGW.
> 
> Cheers,
> Rob

_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to