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
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!