fix: unbreak mingw build of Crafter.Build-Clang
Some checks failed
CI / build-test-release (pull_request) Has been cancelled
Some checks failed
CI / build-test-release (pull_request) Has been cancelled
Two Windows-only compile errors blocked the mingw cross-compile: * `<winsock2.h>` transitively includes `<rpc.h>`, which defines `#define interface struct`. The file uses `interface` as a loop variable name in three for-loops, so on mingw it expanded into `for(... struct : ...)` and cascaded into a wall of unrelated parse errors. Undefine the macro right after the Windows headers in the global module fragment. * `static_cast<uint16_t>` in the port-probe helper failed because mingw's `<stdint.h>` typedefs are in the global module fragment and the C-namespace `::uint16_t` isn't anchored into the module purview on this toolchain. `import std;` does export `std::uint16_t`, so qualify the cast. Verified by running `crafter-build --target=x86_64-w64-mingw32` end to end and the full test suite (13 passed, 5 environment-skipped).
This commit is contained in:
parent
60131b5cc7
commit
47b886602a
1 changed files with 4 additions and 1 deletions
|
|
@ -21,6 +21,9 @@ module;
|
|||
#if defined(CRAFTER_BUILD_CONFIGURATION_TARGET_x86_64_pc_windows_msvc) || defined(CRAFTER_BUILD_CONFIGURATION_TARGET_x86_64_w64_mingw32)
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
// <rpc.h> (pulled in transitively) defines `interface` as a macro for `struct`,
|
||||
// which collides with local variables named `interface` in this TU.
|
||||
#undef interface
|
||||
#else
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
|
@ -1471,7 +1474,7 @@ int Crafter::Run(int argc, char** argv) {
|
|||
sockaddr_in addr{};
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
addr.sin_port = htons(static_cast<uint16_t>(p));
|
||||
addr.sin_port = htons(static_cast<std::uint16_t>(p));
|
||||
bool ok = ::bind(s, reinterpret_cast<sockaddr*>(&addr), sizeof(addr)) == 0;
|
||||
closesock(s);
|
||||
if (ok) return p;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue