2026-11-06 15:20:20 +01:00
|
|
|
# Release Preparation (0.1.0 Development Prototype)
|
2026-10-27 01:21:04 +01:00
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
Source packaging, staged install/uninstall and repeatable builds are testable.
|
|
|
|
|
It does not turn the prototype into a production-qualified DAW. The version
|
|
|
|
|
remains 0.1.0; no tag, external release or binary publication is created by
|
2026-11-06 19:05:14 +01:00
|
|
|
`cmake --build build --target dist` or `cmake --build build --target release`.
|
2026-10-27 01:21:04 +01:00
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Build and Package
|
2026-10-27 01:21:04 +01:00
|
|
|
|
|
|
|
|
```sh
|
2026-11-06 19:05:14 +01:00
|
|
|
cmake --preset release
|
|
|
|
|
cmake --build --preset release --parallel
|
|
|
|
|
ctest --preset release
|
|
|
|
|
cmake --build build/release --target test-install test-install-layout
|
|
|
|
|
cmake --build build/release --target dist test-release
|
|
|
|
|
cmake --build build/release --target test-package
|
2026-10-27 01:21:04 +01:00
|
|
|
```
|
|
|
|
|
|
2026-11-06 19:05:14 +01:00
|
|
|
The release preset builds optimized, warning-enabled C/C++ code, test binaries
|
|
|
|
|
and the available GUI in `build/release`, with source/binary prefix maps,
|
|
|
|
|
no debug information, deterministic archive metadata and assertions retained.
|
|
|
|
|
FLTK discovery takes include/define flags without overriding the project's
|
|
|
|
|
optimization settings. `dist` creates `xtc-0.1.0.tar.gz` below the binary
|
|
|
|
|
directory using Python's standard library. It includes only Git-indexed regular
|
|
|
|
|
files (working-tree contents, including staged new files), plus a source
|
|
|
|
|
manifest; stage intended files first and check `git diff --cached`. Untracked
|
|
|
|
|
files, ignored build output and .git are excluded. Exported archives reproduce
|
|
|
|
|
themselves without Git using SOURCE_MANIFEST.json. The `test-release` tool uses
|
|
|
|
|
CMake and CTest in two independent exported trees, without invoking Make.
|
2026-10-27 01:21:04 +01:00
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
Archive order, permissions, ownership, gzip filename and timestamps are
|
|
|
|
|
normalized. SOURCE_DATE_EPOCH defaults to 0; set an unsigned 32-bit epoch
|
|
|
|
|
explicitly if desired. The archive does not claim to identify a commit: release
|
|
|
|
|
from a clean checkout and record its commit/hash externally. Do not treat a
|
|
|
|
|
dirty-tree archive as an attested release. No artifact is uploaded by these
|
|
|
|
|
targets.
|
2026-10-27 01:21:04 +01:00
|
|
|
|
2026-11-06 19:05:14 +01:00
|
|
|
test-release unpacks the source into two different temporary paths, configures
|
|
|
|
|
a reproducible Release build and runs CTest in each, compares libxtc.a/xtc-check/optional xtc SHA-256 values, and repacks
|
2026-11-06 15:20:20 +01:00
|
|
|
each export to compare archive bytes. This verifies reproducibility for the same
|
|
|
|
|
host, compiler, flags and dependency versions. It does not promise bit-identical
|
|
|
|
|
output across distributions, compilers or library updates.
|
|
|
|
|
Compiler/debug/sanitizer build directories are intentionally separate; changing
|
|
|
|
|
toolchain/flags in place requires a clean directory. Python release tests
|
|
|
|
|
require version 3.12+.
|
2026-10-27 01:21:04 +01:00
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Qualification Record
|
2026-10-27 01:21:04 +01:00
|
|
|
|
|
|
|
|
Run normal core/GUI and live software JACK tests, no-JACK builds and ASan/UBSan.
|
2026-11-06 15:20:20 +01:00
|
|
|
GUI leak tests retain the narrow fontconfig suppression; core tests do not. TSan
|
|
|
|
|
recorder/publication tests complement lifecycle tests. Native API tests verify
|
|
|
|
|
callback failures, cleanup and retirement; they cannot certify arbitrary
|
2026-10-27 01:21:04 +01:00
|
|
|
extensions. See BUILD.md and tests/integration/README.md for commands.
|
|
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
Record versions, archive hashes, installation/consumer checks and measured
|
|
|
|
|
timing. Use LICENSES.md for dependency/license review and PLUGIN_HOSTING.md for
|
|
|
|
|
the external-hosting decision. Review RECOVERY.md for migration and
|
|
|
|
|
process-crash semantics. Physical devices, power loss, sustained
|
|
|
|
|
recording/performance, user acceptance on other distributions and binary
|
|
|
|
|
redistribution are still separate qualification work. There is no
|
|
|
|
|
DEB/RPM/AppImage, bundled runtime, autosave, external plugin host or stable
|
|
|
|
|
shared-library extension ABI in this release.
|
2026-10-27 06:44:22 +01:00
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Local Binary Packaging and Installed Workflow
|
2026-10-27 06:44:22 +01:00
|
|
|
|
2026-11-06 19:05:14 +01:00
|
|
|
`cmake --build build/release --target test-package` uses the selected build and stages installation only in a temporary
|
2026-11-06 15:20:20 +01:00
|
|
|
DESTDIR, writes a normalized Linux binary/development archive, checks its
|
|
|
|
|
SHA-256 sidecar and per-file manifest, relocatable pkg-config paths and headless
|
|
|
|
|
commands. Same-host repeated packaging is byte-identical; dependency versions
|
2026-11-06 19:05:14 +01:00
|
|
|
and toolchain still determine binary compatibility. `cmake --build build --target test-install` now
|
2026-11-06 15:20:20 +01:00
|
|
|
repeats installation to verify repair/upgrade of owned files while preserving an
|
|
|
|
|
unrelated sentinel, then compiles both C99 and C++17 installed consumers that
|
|
|
|
|
create MIDI, save/reopen and compare nonzero exact rendering. Removal remains
|
|
|
|
|
exact and idempotent.
|
2026-10-27 06:44:22 +01:00
|
|
|
|
|
|
|
|
USER_MANUAL.md consolidates operation; KNOWN_LIMITATIONS.md lists qualification
|
|
|
|
|
gaps; MAINTENANCE.md defines the release checklist, regression and compatibility
|
|
|
|
|
policy. Build diagnostics make no server/plugin calls. There is no asynchronous
|
|
|
|
|
crash uploader or signal-handler cleanup: inspect OS core/debugger evidence on
|
2026-11-06 15:20:20 +01:00
|
|
|
the control side, preserving project/media recovery paths. No release is
|
|
|
|
|
publicly published by these commands, and human/device/listening checks remain
|
|
|
|
|
pending.
|
2026-10-27 17:13:09 +01:00
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
---
|
2026-10-27 17:13:09 +01:00
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
## Release Workflow
|
|
|
|
|
|
2026-11-06 19:05:14 +01:00
|
|
|
Installation shares the existing explicit owned-file inventory with removal.
|
|
|
|
|
Use CMake's `CMAKE_INSTALL_PREFIX`, `CMAKE_INSTALL_BINDIR`,
|
|
|
|
|
`CMAKE_INSTALL_LIBDIR`, `CMAKE_INSTALL_INCLUDEDIR`, `CMAKE_INSTALL_DATAROOTDIR`
|
|
|
|
|
and `CMAKE_INSTALL_DOCDIR`. xtc-specific cache entries are
|
|
|
|
|
`XTC_INSTALL_LICENSEDIR`, `XTC_INSTALL_EXAMPLESDIR`, `XTC_INSTALL_DESKTOPDIR`
|
|
|
|
|
and `XTC_INSTALL_PKGCONFIGDIR`. Relative directories resolve beneath the prefix;
|
|
|
|
|
absolute directories are supported. Spaces work; control characters, quotes,
|
|
|
|
|
dollar signs, backslashes and `..` are rejected by the audited layout helper.
|
|
|
|
|
`DESTDIR` is a separate staging environment variable. The same cache and prefix
|
|
|
|
|
must be used for uninstall; a `cmake --install --prefix` override is temporary.
|
|
|
|
|
The internal `XTC_INSTALL_BUILD_DIR` setting lets packaging/test drivers stage
|
|
|
|
|
already-built inputs using a temporary configuration without modifying the
|
|
|
|
|
caller's cache. SDK products are never in this inventory.
|
2026-10-27 17:13:09 +01:00
|
|
|
|
|
|
|
|
```sh
|
2026-11-06 19:05:14 +01:00
|
|
|
cmake -S . -B build/release-check -DCMAKE_BUILD_TYPE=Release \
|
|
|
|
|
-DXTC_REPRODUCIBLE=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib64
|
|
|
|
|
cmake --build build/release-check --parallel
|
|
|
|
|
ctest --test-dir build/release-check --output-on-failure
|
|
|
|
|
cmake --build build/release-check --target test-install test-install-layout
|
|
|
|
|
DESTDIR=/tmp/xtc-stage cmake --install build/release-check
|
|
|
|
|
DESTDIR=/tmp/xtc-stage cmake --build build/release-check --target uninstall
|
2026-10-27 17:13:09 +01:00
|
|
|
```
|
|
|
|
|
|
2026-11-06 15:20:20 +01:00
|
|
|
Core install includes the static library, public headers, `xtc-check`,
|
|
|
|
|
pkg-config metadata, Markdown documentation, all checked-in performance reports,
|
|
|
|
|
license and `share/xtc/examples` (a media/plugin-free MIDI demo). GUI install
|
|
|
|
|
adds the desktop entry and `xtc`. No desktop MIME association is claimed.
|
|
|
|
|
Package archives keep their fixed `/usr` layout and relocatable pkg-config
|
|
|
|
|
metadata; custom live layouts are tested separately. Existing owned file
|
|
|
|
|
symlinks are replaced, not followed; installation is atomic per file, not a
|
|
|
|
|
transaction over the entire prefix.
|
2026-10-27 17:13:09 +01:00
|
|
|
|
2026-11-06 19:05:14 +01:00
|
|
|
`cmake --build build --target dist` now writes a `.sha256` sidecar as well as the normalized source
|
2026-11-06 15:20:20 +01:00
|
|
|
archive. Record that hash, the reviewed commit, version and build/dependency
|
|
|
|
|
conditions with release logs. `test-release` verifies the hash, builds/tests two
|
|
|
|
|
fresh source exports and compares artifacts and repacks. It validates exported
|
|
|
|
|
tracked content, including staged work; it does not attest that the caller's Git
|
|
|
|
|
tree is clean. For public release use a clean reviewed checkout and inspect
|
|
|
|
|
`git status` first. RELEASE_NOTES.md supplies upgrade guidance and remaining
|
|
|
|
|
qualification limits.
|