https://gitlab.synchro.net/main/sbbs/-/commit/d0804f39011c0a0d9e571c51
Added Files:
src/doors/syncrpg/COMPILING.md build.bat src/doors/syncrpg/easyrpg/resources/windows/player.manifest player.rc.in src/doors/syncrpg/easyrpg/src/platform/windows/midiout_device_win32.cpp midiout_device_win32.h utils.cpp utils.h
Modified Files:
src/doors/syncrpg/.gitignore CMakeLists.txt PROVENANCE.md README.md src/doors/syncrpg/door/CMakeLists.txt
Log Message:
syncrpg: build the door for Win32/MSVC (build.bat + COMPILING.md)
SyncRPG shipped *nix-only in a2047e6cd3 (fiber-33-with); its README said a Windows build.bat and MSVC verification were "not yet confirmed on this
host". Add them. Unlike SyncSCUMM's ScummVM, EasyRPG Player is CMake on
every platform, so build.bat runs the SAME two stages as build.sh -- the termgfx/xpdev/inih static libs, then the vendored engine as an OBJECT
library plus the door's own sources -- driven by CMake + Ninja under MSVC
with the dependencies from vcpkg (x86-windows-static-md, the sibling
termgfx doors' triplet). Output: build-msvc\Release\syncrpg.exe, where exec/load/door_deploy.js looks for it.
What the MSVC path needed, each commented where it lives and collected in
the new COMPILING.md:
- VsDevCmd.bat OVERWRITES VCPKG_ROOT with VS 2022's own bundled vcpkg, and
the failure is silent: CMake configures fine and merely records libjxl /
libsndfile as NOTFOUND, quietly degrading the door to the sixel + raw-PCM
tiers. build.bat stashes the caller's value and restores it after.
- EasyRPG's PlayerConfigureWindows.cmake derives CMAKE_MSVC_RUNTIME_LIBRARY
from VCPKG_CRT_LINKAGE, undefined when its CMakeLists.txt is
add_subdirectory'd rather than top-level, so the generator expression
collapsed to /MT against a /MD triplet -- ~76 unresolved __imp__*
externals from every vcpkg archive. Force the cache entry first.
- Without /Zc:__cplusplus, MSVC reports __cplusplus as 199711L, so xpdev's
gen_defs.h concluded there was no <stdint.h> and rolled its own
int8_t/int32_t/uint32_t -> C2371. Same flag SyncConquer's MSVC build uses.
- Un-prune src/platform/windows/ and resources/windows/player.{rc.in,
manifest}: Player's CMakeLists.txt compiles/configure_file()s them
unconditionally on WIN32, and player.cpp + audio_generic_midiout.cpp
reference them. Neither PLAYER_BUILD_EXECUTABLE nor PLAYER_CONSOLE_PORT
can skip that block -- both are plain set()s, not cache options. Restored
verbatim from the pinned upstream SHA; PROVENANCE.md records it.
- libjxl's static closure (jxl_cms, hwy, brotli*, lcms2) does not survive
the Stage-1 -> Stage-2 absolute-path seam, and there is no pkg-config
here to read libjxl.pc's Requires.private, so door/CMakeLists.txt
resolves the companions explicitly into jxl_libs.txt. The same seam
needed IMPORTED_LOCATION_RELEASE for libsndfile, plus a parent-scope
find_package -- IMPORTED targets are directory-scoped.
- /FI rather than -include for the ui_term.h force-include; xpdev's Win32
system libs restated; winmm linked because midiout_device_win32.cpp
compiles even with PLAYER_WITH_NATIVE_MIDI=OFF -- kept off deliberately,
since a door must never play game MIDI out of the BBS host's sound card.
Stage 1 also grows an inih target, so the MSVC build gets the archive
build.sh hand-compiles with cc; build.sh never requests it. No *nix
behavior changes.
Verified on Windows 11 / VS 2022, Win32 Release: clean build.bat run,
PE32 console binary, JXL and libsndfile tiers both linked in, and a live
sysop play-test of Yume Nikki over the terminal.
Co-Authored-By: Claude Opus 4.8 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net