Repository navigation
Releases: libcna/meta-gl
Releases · libcna/meta-gl
Release list
meta-gl v0.4.1
Fixed
- An unoptimized shared Linux build of
libmeta-gl.so(Debug, or noCMAKE_BUILD_TYPE)
exported fourteen weak libstdc++ template instantiations, such asstd::copyand
std::__niter_baseoverstd::vector<metagl::ContextListener*>, alongside themetagl::
API. The version scriptcmake/metagl.versionexportedextern "C++" { metagl::*; }, which
the linker matches against demangled names, and a demangled function template specialization
starts with its return type, sometagl::ContextListener** std::copy<...>(...)matched. It
now matches the mangled prefix_ZN6metagl, which every function in namespacemetaglhas
and nostd::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 fourteenstd::
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 inthird_party/Khronos, so the tag selects
them; the EGL implementation is a system package used only by the optional GPU smoke test.
meta-gl v0.4.0
First tagged release. The 0.1.0, 0.2.0 and 0.3.0 entries below were recorded as development
milestones but never tagged or published, so this is the first version available as a tag; it
contains everything listed under them as well. See docs/releasing.md.
Added
- Release identity:
metagl/Version.hpp, generated bycmake/Version.cmakefrom
project(meta-gl VERSION ...)andMETAGL_VERSION_PRERELEASE, installed with the package and
included bymetagl.hpp. It providesmetagl::GetVersionString(),
GetVersionMajor/Minor/Patch(),GetVersionPreRelease(),IsPreReleaseVersion()and the
preprocessor-testableMETAGL_VERSION_*macros. Covered bymetagl-version-test; the
installed-package consumer checks the installed header againstmeta-gl_VERSION. docs/releasing.md: where the version lives, the numbers that are not the product version,
and the release checklist.- Internal-only desktop OpenGL ES-tier equivalence diagnostic
(metagl::detail::GetDesktopEsTier()inDesktopEsTier.hpp, R76–R78):
checks the same mandatory-function lists used for native OpenGL ES against
a desktop 3.3+ context, withGL_ARB_ES3_1_compatibility/
GL_ARB_ES3_2_compatibilityas a fast additional signal. It never affects
CapabilitiesorInitialize()'s success/failure, and is not part of the
stable public API surface. metagl-export-symbols-test(tests/test_export_symbols.py, R47): an
automated Unix exported-symbol policy check enforcing the R44 ABI surface
decision vianm -D— every exported dynamic symbol must be a function in
themetagl::namespace, anymetagl::detail::symbol must be on a small
explicit allowlist, and a set of landmark public entry points must remain
present.- A GNU ld/lld version script (
cmake/metagl.version) applied on ELF
(Unix, non-Apple) shared builds, keeping the dynamic symbol table limited
to themetagl::namespace even when internal implementation details pull
in vague-linkagelibstdc++template symbols.
Changed
- The package version moves from 0.3.0 to 0.4.0. The package version file keeps
SameMinorVersioncompatibility, so consumers that wrotefind_package(meta-gl 0.3 ...)must
request0.4. The SONAME stayslibmeta-gl.so.0. - Doxygen's
PROJECT_NUMBERis derived from the same version string instead of
PROJECT_VERSION, and the generatedVersion.hppis part of the API documentation.
Fixed
- A
METAGLDEBUG-only use-after-free: the process-wide, non-thread-local
guard that flushed the buffered debug log on exit could be destroyed
after a thread's log buffer, corrupting or crashing the program during
normal shutdown. The flush guard is now itselfthread_localand is
first touched strictly after the buffer it flushes, guaranteeing correct
destruction order on every supported platform except Windows (which
already flushes explicitly to avoid the DLL loader-lock deadlock). include/metagl/Functions.hppwas missing#include <exception>for its
std::terminate()calls (R07–R11's Invalid Input Contract). This was
masked on GCC/libstdc++, where<exception>is pulled in transitively by
other standard headers, but broke the Emscripten/libc++ toolchain with
"no member named 'terminate' in namespace 'std'"; found while building
easy-gl's downstreamemscriptenCMake preset against this library.- The release workflow looked for the tag name, with its leading
v, in theCHANGELOG.md
headers, which never carry one, so every GitHub release would have been published with the
fallback text instead of its changelog section. It now matches[<version>]and stops at the
next level-2 header.
Verification
- 11/11 CTest tests pass on a shared Release build with tests, examples, GPU (EGL surfaceless)
tests and docs enabled: compile, mock-loader, release-contract, thread, desktop-tier,
version, SONAME, exported-symbol policy, API consistency (358 wrappers), installed package
and EGL smoke. The build is warning-free. - A static
add_subdirectoryconsumer — the way easy-gl consumes its sibling../meta-gl—
builds and reports0.4.0. The Linux static and Windows shared packages are built only by
the release workflow. - Verified on Debian GNU/Linux 13 with GCC 14.2.0, CMake 3.31.6, Ninja and Mesa EGL 25.0.7.
The Khronos GLES headers are vendored inthird_party/Khronos, so the tag selects them; the
EGL implementation is a system package used only by the optional GPU smoke test.