bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gettimeofday.c windows version?


From: Roger Pack
Subject: Re: gettimeofday.c windows version?
Date: Fri, 23 Dec 2022 01:38:01 -0700



On Sun, Dec 11, 2022 at 7:22 AM Bruno Haible <bruno@clisp.org> wrote:
Roger Pack wrote:
> I received some complaints saying in mingw it was"requiring windows 8" for
> a certain library.
>
> "Entry point not found, GetSystemTimePreciseAsFileTime could not be located
> in the dynamic link library KERNEL32.dll".

Indeed, according to <https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>
the function GetSystemTimePreciseAsFileTime is not present in Windows 7 and
older.

Looking at the table at
<https://en.wikipedia.org/wiki/Microsoft_Windows#Timeline_of_releases> I see
that Windows 7 is out of "extended support" already for more than 2 years.
That means, users with such machines (connected to the internet) live very
dangerously.

Eli: What are the current support statements of Emacs regarding Windows
XP/Vista/7 ?
And should Gnulib declare that the minimum supported version of Windows
is Windows 8?

> Perhaps the following patch?  Thanks! :)
>
> diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
> index 36c7920af..428cc4f30 100644
> --- a/lib/gettimeofday.c
> +++ b/lib/gettimeofday.c
> @@ -35,7 +35,7 @@
>  # undef LoadLibrary
>  # define LoadLibrary LoadLibraryA
>
> -# if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8)
> +# if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
>
>  /* Avoid warnings from gcc -Wcast-function-type.  */
>  #  define GetProcAddress \
>

Nope, this patch is not right.

> "Entry point not found, GetSystemTimePreciseAsFileTime could not be located
> in the dynamic link library KERNEL32.dll".

It looks like some code links directly to GetSystemTimePreciseAsFileTime, and
your user is running it under Windows 7 or older.

Which object file is it that links to GetSystemTimePreciseAsFileTime?
 - If it's not gettimeofday.c, it's not in Gnulib's responsibility.
 - If it is gettimeofday.c, this file must have been compiled with a
   _WIN32_WINNT value >= _WIN32_WINNT_WIN8. You need to look in your
   build files where this value come from. Maybe it is even the default
   with your compiler version; if that version is new enough, that would
   make sense.

OK it appears newer mingw have a default target of windows 10 for some reason.  gnutls embedded in this case:
$ x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H -I. -I../..   -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0  -mtune=generic -O3 -MT gettimeofday.o -MD -MP -MF $depbase.Tpo -c -o - -dM -E gettimeofday.c | grep WIN32_WINNT
#define _WIN32_WINNT 0xa00
https://www.mail-archive.com/mingw-w64-public@lists.sourceforge.net/msg18212.html

Maybe instead it could always call initialize and "prefer" GetSystemTimePreciseAsFileTime, then be compatible with < windows 8 without having to manually set _WIN32_WINNT.
Basically everything using Gnulib gettimeofday + mingw today might "accidentally" lose windows 7 compat without realizing it.  Though I guess you could call that Mingw's fault, it was a bit confusing.
Thanks, Merry Christmas!

reply via email to

[Prev in Thread] Current Thread [Next in Thread]