CNA-BUG-279: The sibling version check accepts sharp-runtime's v0.1.0 tag, but this snapshot needs a FileStream constructor added after it, so such a build fails to compile instead of failing configuration
Evidence basis: source-verified at the pinned commit. Claims on this page were checked by reading the CNA source at commit c6dec91f; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
cmake/DependencyVersions.cmake requires sharp-runtime 0.1.0 or a later 0.1.x patch, which the v0.1.0 tag satisfies, yet StorageContainer.cpp calls FileStream(path, mode, access, share), which sharp-runtime gained in c6984ece after that tag.
- Identifier
CNA-BUG-279- Category
- Bug
- Subsystem
- Build & CI
- Status
- Open
- Verified against
- CNA
c6dec91f(c6dec91fbf3ef5440f60e5329e4a4758b2d80c22) - Severity
- Low (a triage suggestion, not a project priority)
- Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- None
- Affected contract
- Configuring and building CNA at this snapshot against a sharp-runtime checkout that declares version 0.1.0 (CNA_CHECK_DEPENDENCY_VERSIONS, on by default)
Expected behaviour
The configure-time version check exists so that a sibling checkout CNA cannot build against is refused before compilation, with the git checkout that fixes it. A sharp-runtime checkout it accepts should provide every API this CNA revision calls.
Actual behaviour at TARGET
DependencyVersions.cmake sets CNA_REQUIRED_SHARP_RUNTIME_VERSION to 0.1.0, and sharp-runtime's v0.1.0 tag declares exactly that, so configuration passes. StorageContainer.cpp opens container files through System::IO::FileStream(path, mode, access, share) (the FileShare honouring of CNA-DEMOS-ISSUE-152); that four-argument constructor is not in sharp-runtime's v0.1.0 (its FileStream.hpp has the one- and two-argument forms) and arrived in sharp-runtime commit c6984ece, which is on its next branch. A build against the tag therefore fails in the compiler with no configure-time message. The version stayed 0.1.0 on sharp-runtime's next, so the check cannot tell the two apart.
Source locations
cmake/DependencyVersions.cmake— CNA_REQUIRED_SHARP_RUNTIME_VERSION 0.1.0; a later 0.1.x patch also satisfies itmodules/storage/src/StorageContainer.cpp— FileStream(path, mode, access, share) calls
Evidence
Read at c6dec91f, and in the sharp-runtime repository: git diff v0.1.0 c6984ece -- modules/io/include/System/IO/FileStream.hpp adds the four-argument constructor, and c6984ece is not an ancestor of v0.1.0. Nothing was built for this entry.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
CI clones sharp-runtime's next (or the matching branch), which has the constructor, so no workflow builds against the tag.
Regression test
A configure check (or a CI job) that builds CNA against the oldest sharp-runtime revision the version check accepts, or a version bump of sharp-runtime's next together with a raised requirement in DependencyVersions.cmake.
Blast radius
Anyone who follows the “0.1.x” rule literally and builds this snapshot with sharp-runtime's v0.1.0 tag. CNA's own 0.1.0 release is unaffected.
Workaround
Build this snapshot with sharp-runtime's next branch, as CNA's CI does (see the Building guide).
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- User guide
- Building
- Internals
- Storage internals
- Deep dives
- Third-party dependencies
- Known issues
- Bug index