You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An unoptimized shared Linux build of libmeta-gl.so (Debug, or no CMAKE_BUILD_TYPE)
exported fourteen weak libstdc++ template instantiations, such as std::copy and std::__niter_base over std::vector<metagl::ContextListener*>, alongside the metagl::
API. The version script cmake/metagl.version exported extern "C++" { metagl::*; }, which
the linker matches against demangled names, and a demangled function template specialization
starts with its return type, so metagl::ContextListener** std::copy<...>(...) matched. It
now matches the mangled prefix _ZN6metagl, which every function in namespace metagl has
and no std:: symbol does. An optimized build never emitted these instantiations, so its
exports, and those of the 0.4.0 packages, are unchanged at 394 symbols.
Changed
CI runs all eleven registered CTest tests instead of five: the release-contract, thread,
desktop-tier and version tests on every leg, and the SONAME and exported-symbol tests on the
Linux shared leg. Until now they ran only in the tag-triggered release workflow, so a failure
in one of them, like the leak above, first showed up when a version tag was pushed.
Verification
11/11 CTest tests pass on a shared Release build with tests, examples, GPU (EGL surfaceless)
tests and docs enabled, including API consistency (358 wrappers). The build is
warning-free.
The exported-symbol policy test passes on an unoptimized Clang shared build as well: 394
exports, the same as Release. Before the fix it failed there with the fourteen std::
symbols. CI passes every test on Linux GCC static, Linux Clang shared, Windows MSVC shared and
Linux Clang ASan/UBSan.
Verified on Debian GNU/Linux 13 with GCC 14.2.0, Clang 19.1.7, CMake 3.31.6, Ninja and Mesa
EGL 25.0.7. The Khronos GLES headers are vendored in third_party/Khronos, so the tag selects
them; the EGL implementation is a system package used only by the optional GPU smoke test.