Re: _WIN32_WINNT redefined?

Eli Zaretskii via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
> Date: Wed, 02 Nov 2022 14:13:13 +0000
> From: [email protected]
> 
> 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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.