mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2026-10-02 23:45:08 -04:00
Every CI runner is 64bit, so nothing in CI exercised the 32bit SharedData layout that zmc/zma/zms, ZoneMinder::Memory and web/includes/Monitor.php all have to agree on. The i386 alignment divergence that broke the 32bit build was only caught downstream. utils/check-shareddata-abi.py lifts the struct body and its static_asserts out of zm_monitor.h, compiles them standalone at -m32 and -m64, and requires the size and every member offset to match. Compiling only the struct avoids needing a 32bit copy of the ffmpeg, mysql and curl headers; gcc-multilib alone is enough and the check takes about a second, so it runs before the build rather than after it. The expected size is never duplicated in the script. It comes from the assertions in the header, so there is one source of truth and the script cannot drift from it. Removing the assertions is itself reported as a failure, since deleting the guard is the tempting way to silence a 32bit build error. Verified by reverting the epadding members, which reproduces the original downstream failure (880 == 888) and additionally names capture_fps, startup_time and control_state, and by deleting the assertions, which is reported as a missing guard. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>