Hi again Carlo, 2008/7/22 carlo.bramix <carlo.bra...@libero.it>: > Hello. > > Into pthread.h of pthread-win32 package there is this code: > > #ifndef HAVE_STRUCT_TIMESPEC > #define HAVE_STRUCT_TIMESPEC 1 > struct timespec { > long tv_sec; > long tv_nsec; > }; > #endif /* HAVE_STRUCT_TIMESPEC */ > > When configure tries to search if struct timespec exists in pthread.h, the > HAVE_STRUCT_TIMESPEC is undefined, so the #ifndef is positive and pthread.h > defines the structure. > At the end, config.h defines HAVE_STRUCT_TIMESPEC. > When doing the make, since config.h has HAVE_STRUCT_TIMESPEC, when pthread.h > is included it finds that the macro is already defined, so the #ifndef fails > and the structure timespec remains undeclared.
I finally got round to fixing this; please see http://git.savannah.gnu.org/gitweb/?p=guile.git;a=commit;h=d6818567553aafdbbbca327d4a1b1289a6816858. > I think configure should not test if timespec exists into pthread.h for win32. > That structure has been added into pthread.h only for compatibility with some > pthread function prototypes. > In other words, this code into configure.in: > > # On mingw, struct timespec is in <pthread.h>. > # > AC_MSG_CHECKING(for struct timespec) > AC_CACHE_VAL(scm_cv_struct_timespec, > AC_TRY_COMPILE([ > #include <time.h> > #if HAVE_PTHREAD_H // <-- REMOVE! > #include <pthread.h> // <-- REMOVE! > #endif], // <-- REMOVE! > [struct timespec t; t.tv_nsec = 100], > scm_cv_struct_timespec="yes", > scm_cv_struct_timespec="no")) I didn't do it that way, as it wasn't so long ago that those lines were added [1], and I'm sure there must have been a good reason for that. [1] http://git.savannah.gnu.org/gitweb/?p=guile.git;a=commit;h=80134d3973249c1e06d393e8936fb15e3c03265f My guess is that MinGW at that time defined struct timespec without checking HAVE_STRUCT_TIMESPEC first. If so, I think the fix that I've done should allow both that old MinGW and the current one to work. Regards, Neil