pthread: work around winpthread header pollution on mingw
authorEric Blake <eblake@redhat.com>
Thu, 23 Jan 2014 03:39:45 +0000 (20:39 -0700)
committerEric Blake <eblake@redhat.com>
Thu, 23 Jan 2014 17:55:02 +0000 (10:55 -0700)
commitd5fec6c22f03c6a73d62260c9ce091c10c0a9cbd
treea304179bfe7a9672b8fe527a92bb337081e8794d
parent751494621c1d38c012a170d5eb557637ae9179f2
pthread: work around winpthread header pollution on mingw

Dan Berrange reported compilation failure of libvirt on Fedora 20
when cross-compiling to mingw; the problem was traced to bogus
macros in the winpthreads <pthread.h> header shipped as part of
mingw-headers 3.0.

  CC       util/libvirt_util_la-virerror.lo
In file included from /usr/i686-w64-mingw32/sys-root/mingw/include/sys/time.h:10:0,
                 from ../gnulib/lib/sys/time.h:39,
                 from ../gnulib/lib/sys/select.h:117,
                 from util/virutil.h:31,
                 from util/virerror.c:35:
../gnulib/lib/time.h:468:21: error: expected identifier or '(' before '{' token
 _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
                     ^

Gnulib's time.h was already working around the pthread.h pollution,
but now that newer mingw has started providing struct timespec,
the workaround was no longer being hit.  Moving the pollution
workaround to the wrapper around the broken header solves the problem.

* lib/time.in.h: Move pthread workarounds...
* lib/pthread.in.h: ...here.
* m4/pthread.m4 (gl_PTHREAD_CHECK): Also build pthread.h when we
detect macro pollution on mingw.
* doc/posix-headers/pthread.texi (pthread.h): Document the problems.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
doc/posix-headers/pthread.texi
lib/pthread.in.h
lib/time.in.h
m4/pthread.m4