On 03/05/2012 02:13 PM, Eric Blake wrote: > On 03/05/2012 01:21 PM, Bdale Garbee wrote: >> Is there a fix or workaround for this error when cross-compiling gzip >> with i686-w64-mingw32-gcc? We build such an executable in the Debian >> package build to support the debian-installer team. A quick scan >> through the gzip and gnulib git repositories didn't point to anything >> obvious. > > Yes - the fix is to upgrade to newer gnulib.
[hit send too soon] In particular, gnulib commit 253e7e986 fixes the problem for the mingw64 compiler. It may be possible to backport just that patch to lib/sys_stat.in.h on the gzip tarball, while you wait for a new gzip release that officially pulls in newer gnulib sources: commit 253e7e986ecff5d39654a22259b4e5018d71643b Author: Bruno Haible <br...@clisp.org> Date: Mon Jan 30 21:43:40 2012 +0100 sys_stat: Fix support for mingw64 and MSVC. * lib/sys_stat.in.h (stat) [AIX]: Don't redefine 'stat' if the system header files already do it. (stat) [mingw, msvc]: Redefine the symbol to which stat is defined, not stat itself. Reported by Marc-André Lureau <marcandre.lur...@redhat.com>. diff --git a/ChangeLog b/ChangeLog index d387408..2f5e234 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2012-01-29 Bruno Haible <br...@clisp.org> + sys_stat: Fix support for mingw64 and MSVC. + * lib/sys_stat.in.h (stat) [AIX]: Don't redefine 'stat' if the system + header files already do it. + (stat) [mingw, msvc]: Redefine the symbol to which stat is defined, not + stat itself. + Reported by Marc-André Lureau <marcandre.lur...@redhat.com>. + +2012-01-29 Bruno Haible <br...@clisp.org> + wcwidth: Work around bug in UTF-8 locale on OpenBSD 5.0. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Test also wcwidth of U+05B0. * doc/posix-functions/wcwidth.texi: Mention the OpenBSD 5.0 bug. diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h index 005ad2d..36c4189 100644 --- a/lib/sys_stat.in.h +++ b/lib/sys_stat.in.h @@ -616,14 +616,33 @@ _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " /* We can't use the object-like #define stat rpl_stat, because of struct stat. This means that rpl_stat will not be used if the user does (stat)(a,b). Oh well. */ -# undef stat -# ifdef _LARGE_FILES +# if defined _AIX && defined stat && defined _LARGE_FILES /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, so we have to replace stat64() instead of stat(). */ -# define stat stat64 # undef stat64 # define stat64(name, st) rpl_stat (name, st) -# else /* !_LARGE_FILES */ +# elif defined __MINGW32__ && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32. */ +# undef _stat32 +# define _stat32(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64i32. */ +# undef _stat64i32 +# define _stat64i32(name, st) rpl_stat (name, st) +# endif +# else /* !(_AIX ||__MINGW32__ || _MSC_VER) */ +# undef stat # define stat(name, st) rpl_stat (name, st) # endif /* !_LARGE_FILES */ _GL_EXTERN_C int stat (const char *name, struct stat *buf) -- Eric Blake ebl...@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature