7.2 KiB
Release Preparation (0.1.0 Development Prototype)
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
cmake --build build --target dist or cmake --build build --target release.
Build and Package
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
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.
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.
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 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+.
Qualification Record
Run normal core/GUI and live software JACK tests, no-JACK builds and ASan/UBSan. 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 extensions. See BUILD.md and tests/integration/README.md for commands.
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.
Local Binary Packaging and Installed Workflow
cmake --build build/release --target test-package uses the selected build and stages installation only in a temporary
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
and toolchain still determine binary compatibility. cmake --build build --target test-install now
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.
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 the control side, preserving project/media recovery paths. No release is publicly published by these commands, and human/device/listening checks remain pending.
Release Workflow
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.
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
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.
cmake --build build --target dist now writes a .sha256 sidecar as well as the normalized source
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.