_WIN32_WINNT redefined?

Eli Zaretskii eliz@gnu.org
Wed Nov 2 15:18:44 GMT 2022

> Date: Wed, 02 Nov 2022 14:13:13 +0000
> From: i.nixman@autistici.org
> the root of the issue: GDB wan't build using MinGW-W64 toolchain uses 
> this patch: 
> https://gcc.gnu.org/pipermail/libstdc++/2022-October/054895.html
> (for short, the patch provides the ability to libstdc++ to enable the 
> support for std-threads and so on but without the need to use 
> libwinpthreads: 
> https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-libraries/winpthreads/)
> next, as I wrote earlier, I have faced with a trouble I can't build GDB 
> using that path:
> ```
> In file included from 
> mingw64/lib/gcc/x86_64-w64-mingw32/13.0.0/include/c++/mutex:45,
>                   from 
> ../src/gdb-11.2/gdbsupport/../gdbsupport/thread-pool.h:27,
>                   from ../src/gdb-11.2/gdbsupport/thread-pool.cc:24:
> mingw64/lib/gcc/x86_64-w64-mingw32/13.0.0/include/c++/bits/std_mutex.h:163:5: 
> error: '__gthread_cond_t' does not name a type; did you mean 
> '__gthread_once_t'?
>    163 |     __gthread_cond_t* native_handle() noexcept { return 
> &_M_cond; }
>        |     ^~~~~~~~~~~~~~~~
> ```
> because the patch requires the _WIN32_WINNT will be set to 0x0600 or 
> greater.

Then the stuff in common-defs.h should be augmented to define
_WIN32_WINNT to the value 0x0600 or greater, if it isn't already high
enough, but only if the patch for gthreads is being used.  How exactly
to write the cpp conditional for that, I don't know, but hopefully you
will be able to figure that out.

Or maybe you should do that in gdbsupport/thread-pool.cc instead.
Whatever is easier.

One thing is certain: GDB builds on Windows that don't use the gthread
patch should not be broken by increasing the minimum value of
_WIN32_WINNT with which GDB can be built on Windows.

> as solution I see two ways:
> 1) to remove that PP block completely, because as I wrote earlier - no 
> one in the GDB sources refers to it.
> 2) to hide that PP block so that it cannot "infect" other code by by 
> getting into public headers.

I think the right solution is:

3) amend the cpp block to define _WIN32_WINNT to 0x0600 if the threads
patch is being used.

More information about the Gdb mailing list