Skip to content

sheenbidi-m: SheenBidi 3.0.0 as C++23 modules (mcpplibs.mwrap.sheenbidi) - #1

Merged
Sunrisepeak merged 3 commits into
mainfrom
sheenbidi-m-3.0.0
Oct 28, 2026
Merged

Sunrisepeak merged 3 commits into
mainfrom
sheenbidi-m-3.0.0

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

SheenBidi 3.0.0 (Unicode 17.0.0, Apache-2.0) as C++23 modules over compat.sheenbidi 3.0.0 (mcpplibs/mcpp-index#607).

  • mcpplibs.mwrap.sheenbidi: every type (32), struct tag (11) and SB_PUBLIC function (51) of the installed headers by export using, generated from the pinned headers (tools/gen_exports.py); re-exports the module below.
  • mcpplibs.mwrap.sheenbidi.macros: 12 object-like macros as inline constexpr of their own type, 16 function-like macros as constexpr function templates whose body is the macro, and the 236 enumerators of the headers' unnamed enums (TU-local, not exportable as they are) as constants of the typedef the header gives them (SBBidiType, SBGeneralCategory, SBScript, SBStringEncoding, SBBoolean).
  • Stay macros in <mwrap/sheenbidi/macros.hpp> (= <SheenBidi/SheenBidi.h>): SB_PUBLIC, SB_DEPRECATED, SB_EXTERN_C_BEGIN/END.
  • Not exported: the experimental text API (SB_CONFIG_EXPERIMENTAL_TEXT_API is off in compat.sheenbidi, as upstream's default).

Checks (all in CI: Linux x86_64 GCC 16.1 and LLVM 23.1.3, Linux arm64 GCC, macOS LLVM, Windows LLVM)

  • mcpp test: API test (module only), generated macro/enumerator mapping test against the raw header, header-mixing test, macros-module compile-time test.
  • tools/check_exports.py: generated sources fresh; every declaration exported, every enumerator mapped, every macro mapped / kept / include guard.
  • tools/run_conformance.py: Unicode 17.0.0 conformance on examples/sheenbidi (programs written against the module), files from the release checked byte-for-byte against unicode.org's: BidiTest.txt 770,241 cases, 0 errors; BidiCharacterTest.txt 91,707 cases, 0 errors (paragraph level, levels after L1, visual order, and mirrored characters vs BidiMirroring.txt).
  • templates job: scaffolds the default bidi template as an installed package, strict build and run.

Until mcpp-index publishes compat.sheenbidi, tools/candidate_index.py resolves the compat namespace from the index PR's branch in CI only; it becomes a no-op once the descriptor is on the index's main.

Upstream note: in 3.0.0 releasing an SBMirrorLocator that never loaded a line crashes (its finalizer calls SBLineRelease(NULL)); documented in docs/usage.md and avoided in the tests and examples.

…es, generated from the pinned headers; API, macro and header-mixing tests; export audit
…ers on the module; tools/run_conformance.py runs BidiTest.txt and BidiCharacterTest.txt (17.0.0) on them
…ntation, CI (Linux x86_64 GCC/LLVM, Linux arm64, macOS, Windows), release and template workflows; the candidate compat index while compat.sheenbidi is unpublished
@Sunrisepeak
Sunrisepeak merged commit ff3484f into main Oct 28, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant