Story: Windows portability fixes
Table of Contents
This page documents a story in Sprint 16. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
Goal
Long sweep of cross-platform fixes surfaced by Windows builds: MSYS2 path mangling, NATS cert generation, strptime, stack overflow, MOC dllimport, _wfopen_s, SIGQUIT, /FS, DLL export limit, MSVC PDB, xsd::vector, etc.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 16 |
| Now | Completed 2026-04-11. |
| Waiting on | None. |
| Next | None. |
| Last touched | 2026-04-11 |
Acceptance
- All tasks complete; PR-by-PR breakdown in
git log.
Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Add /FS to serialise MSVC PDB writes under parallel Ninja builds | DONE | 2026-05-20 | 2026-04-11 | Add /FS compiler option to Windows build configuration to prevent C1041 errors during parallel builds with Ninja. |
| Add shutdown_signals abstraction; fix Windows SIGQUIT build | DONE | 2026-05-20 | 2026-04-11 | signals.hpp defines platform-specific shutdown signals (excludes SIGQUIT on Windows); domain_service_runner_impl.hpp uses centralised list. |
| Build as static library on Windows to avoid DLL export limit | DONE | 2026-05-20 | 2026-04-11 | Build trading.core as static library on Windows to address 65535 symbol DLL limit; update installation command for static archives. |
| Fix uninitialised member UB and GLib dl-init suppression | DONE | 2026-05-20 | 2026-04-11 | Broaden Valgrind suppression rule for call_init to allow intermediate stack frames; xsdcpp bool serialisation suppressions; regenerate domain files. |
| Fix Windows build error in http_client path conversion | DONE | 2026-05-20 | 2026-04-11 | Use path::string().c_str() instead of path::c_str() in http_client.cpp. |
| Fix Windows MOC dllimport conflict on AddItemDialog and TagSelectorWidget | DONE | 2026-05-20 | 2026-04-11 | Remove ORES_QT_API export macro from AddItemDialog + TagSelectorWidget classes + their header includes. |
| Fix MSYS2 path mangling of openssl -subj on Windows | DONE | 2026-05-20 | 2026-04-11 | Export MSYS_NO_PATHCONV + MSYS2_ARG_CONV_EXCL to prevent path conversion in generate_nats_certs.sh on Windows / Git Bash. |
| Fix NATS cert SAN generation on Windows | DONE | 2026-05-20 | 2026-04-11 | Replace process substitution with temporary file for OpenSSL SAN extension; ensure compatibility with MSYS2/Git Bash; cleanup on openssl failure. |
| Fix NATS cert generation on Windows | DONE | 2026-05-20 | 2026-04-11 | Use double-slash prefix for OpenSSL subject strings on MSYS2; later replaced with MSYS2_ARG_CONV_EXCL. |
| Fix Windows linker error on PasswordMatchIndicator | DONE | 2026-05-20 | 2026-04-11 | Remove ORES_QT_API export macro + associated ores.qt/export.hpp include from PasswordMatchIndicator. |
| Fix Windows Clang build: replace SIGQUIT with platform shutdown_signals | DONE | 2026-05-20 | 2026-04-11 | Use centralised ores::platform::process::shutdown_signals list in domain_service_runner_impl.hpp + signing_service_runner_impl.hpp. |
| Windows: Fix stack flag syntax for Clang and WiX 2GB lib limit | DONE | 2026-05-20 | 2026-04-11 | Update CMake configurations to handle linker stack sizes across compiler drivers; restrict installation of internal static library to non-Windows to avoid 2GB size limitations. |
| Windows: replace strptime with portable std::get_time | DONE | 2026-05-20 | 2026-04-11 | Replace POSIX-specific strptime with portable parse_time helper using std::get_time; explicit C locale + REQUIRE check. |
| Remove unused unistd.h include breaking Windows builds | DONE | 2026-05-20 | 2026-04-11 | Remove unused #include <unistd.h> from process_supervisor.cpp. |
| Replace _wfopen with _wfopen_s to fix Windows Clang build | DONE | 2026-05-20 | 2026-04-11 | Use _wfopen_s instead of deprecated _wfopen in Windows implementation of open_c_file. |
| Fix Windows CI packaging and stack overflow failures | DONE | 2026-05-20 | 2026-04-11 | Handle large cabinet files in WiX; increase stack size for test executables to 8MB to prevent stack overflows during deep XML parsing recursion. |
| Fix xsd::vector to use alias for non-bool to support incomplete types | DONE | 2026-05-20 | 2026-04-11 | Replace previous xsd::vector<T> wrapper class with template alias + type trait selector; std::vector<T> for most types, custom char-backed bool_vector for bool. |
| Move PasswordMatchIndicator::connectFields out of header | DONE | 2026-05-20 | 2026-04-11 | Move connectFields implementation from header to source file; add ORES_QT_API macro to struct definition. |
| Split registrar.cpp to fix MSVC C1202 constexpr depth limit | DONE | 2026-05-20 | 2026-04-11 | Split NATS handler registration logic into multiple translation units to prevent MSVC C1202 caused by excessive template instantiations. |
| cmake: Switch MSVC debug info to Embedded (/Z7) | DONE | 2026-05-20 | 2026-04-11 | Switch MSVC debug information format from external PDB to embedded; /FS flag removed in consequence. |
Decisions
- Final v0 sprint
- capture everything landed under v0 honestly; this is the closing chapter of v0.
Out of scope
- Anything explicitly carried forward to v1.
See also
None.