On Thu, 10 Oct 2024, Julian Waters wrote:

Ah, you're right. It is indeed the PKGBUILD that deletes the pthread headers
wheninstallinghttps://github.com/msys2/MINGW-packages/blob/16721b39ef3cd7089d73
04324d6afc051008772a/mingw-w64-headers-git/PKGBUILD#L60

I do wonder if winpthreads and the mingw-w64-headers do install the headers
in the exact same location. Then it might be safe to remove the lines that
delete the pthread headers if one is planning to use a different thread
model. That would solve the issue with win32 and mcfgthreads in a different
way and this patch would be obsolete

I think they probably are installing the headers in the same location; otherwise you'd have to make sure that it does prefer the winpthreads version of the header anyway.

If we could require reasonably recent compilers for accessing things like clock_gettime() and nanosleep() etc, we could remove the dummy headers from mingw-w64-headers, and use __has_include() instead. From a quick browsing of GCC docs, it's available since GCC 9.

We can check for #ifdef __has_include, to see if the compiler supports it - and then we could fall back to not including pthread_time.h if using an older compiler. It's not the best solution, but could maybe be a reasonable way to get the setup with dummy/overwritten/conflicting headers improved.

That said - for a non-pthreads thread model GCC, or with Clang, one has to manually link against winpthread to practically use nanosleep() or clock_gettime(), as that's not linked implicitly except for when GCC uses it for the libgcc thread model.

One may wonder why those functions are in winpthread at all, rather than in e.g. libmingwex like many other compatibility additions we have. I think there may be some interaction with other pthread facilities though... Not sure if this is a direction worth going into, or if it just changes things that already have got an established way of working.

// Martin

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to