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.

Emacs 29.1 (Org mode 9.6.6)