xz/Windows: Ensure that clock_gettime() isn't used with MinGW-w64.

This commit alone doesn't change anything in the real-world:

  - configure.ac currently checks for clock_gettime() only
    when using pthreads.

  - CMakeLists.txt doesn't check for clock_gettime() on Windows.

So clock_gettime() wasn't used with MinGW-w64 before either.

clock_gettime() provides monotonic time and it's better than
gettimeofday() in this sense. But clock_gettime() is defined
in winpthreads, and liblzma or xz needs nothing else from
winpthreads. By avoiding clock_gettime(), we avoid the dependency on
libwinpthread-1.dll or the need to link against the static version.

As a bonus, GetTickCount64() and MinGW-w64's gettimeofday() can be
faster than clock_gettime(CLOCK_MONOTONIC, &tv). The resolution
is more than good enough for the progress indicator in xz.
This commit is contained in:
Lasse Collin 2023-09-24 22:58:53 +03:00
parent cdb4d91f24
commit 46fd991cd2
1 changed files with 7 additions and 2 deletions

View File

@ -14,7 +14,7 @@
#if defined(MYTHREAD_VISTA) || defined(_MSC_VER) #if defined(MYTHREAD_VISTA) || defined(_MSC_VER)
// Nothing // Nothing
#elif defined(HAVE_CLOCK_GETTIME) #elif defined(HAVE_CLOCK_GETTIME) && !defined(__MINGW32__)
# include <time.h> # include <time.h>
#else #else
# include <sys/time.h> # include <sys/time.h>
@ -59,7 +59,12 @@ mytime_now(void)
// there's no reason to avoid a WinVista API here either. // there's no reason to avoid a WinVista API here either.
return GetTickCount64(); return GetTickCount64();
#elif defined(HAVE_CLOCK_GETTIME) #elif defined(HAVE_CLOCK_GETTIME) && !defined(__MINGW32__)
// MinGW-w64: clock_gettime() is defined in winpthreads but we need
// nothing else from winpthreads. By avoiding clock_gettime(), we
// avoid the dependency on libwinpthread-1.dll or the need to link
// against the static version. The downside is that the fallback
// method, gettimeofday(), doesn't provide monotonic time.
struct timespec tv; struct timespec tv;
# ifdef HAVE_CLOCK_MONOTONIC # ifdef HAVE_CLOCK_MONOTONIC