MingwSysroot stages a prefix shaped like a Linux system's /usr with a mingw-w64 cross toolchain in it, without needing a real one: glibc's <sys/single_threaded.h> in include/, gcc's per-target directory, and a stand-in mingw-w64 tree whose libstdc++ has an empty std module. A static library for x86_64-w64-mingw32, so that nothing is linked, compiles a C++ and a C source that stop with #error when they see the prefix's include/ or miss mingw-w64's or libstdc++'s headers. Against the library before the fix, the C++ source stopped on <sys/single_threaded.h>. The test also checks that the std module is not cached in the directory older releases built it in against the prefix itself. It needs only clang, so it runs in CI too, where no mingw-w64 is installed. The stand-in std module's source is written through std::format: the build's import scanner reads string literals as code, and the literal "export module std;" made the test itself a unit of a module std. VariantId checks that a prefix gives a mingw configuration a variant of its own, that two prefixes give two, and that other targets ignore it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 lines
473 B
C
13 lines
473 B
C
// SPDX-License-Identifier: LGPL-3.0-only
|
|
// SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
|
|
|
// probe.cpp's checks for the C sources, which are compiled by a command of
|
|
// their own.
|
|
#if __has_include(<sys/single_threaded.h>)
|
|
#error the include/ of the prefix is on the C include path: a Windows build sees the headers of the Linux system
|
|
#endif
|
|
#if !__has_include(<_mingw.h>)
|
|
#error the mingw-w64 headers are not on the C include path
|
|
#endif
|
|
|
|
void CProbe(void) {}
|