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

CNA snapshot c6dec91f  ·  Known Issues › Current bugs  ·  source links pinned to c6dec91f

✓

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

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).

The same subject is explained at several altitudes. These are the neighbouring pages at each one.

User guide
Building
Known issues
Bug index