Developer Setup¶
Concise instructions to build, test, and develop YAMS locally.
Supported platforms¶
- macOS 12+ (Apple Silicon and x86_64)
- Linux x86_64 (glibc-based)
- Windows is not a primary target for development (WSL2 recommended)
Prerequisites¶
- Git
- C++ compiler: Clang 14+ or GCC 11+
- Meson 1.4+ and Ninja
- Python 3.8+ and pip (for Conan)
- Conan 2.x (package/dependency manager)
Install examples: - macOS (Homebrew) - brew install meson ninja python - pip3 install –upgrade conan - xcode-select –install (ensure Command Line Tools present) - Ubuntu/Debian - sudo apt-get update - sudo apt-get install -y build-essential meson ninja-build python3-pip - pip3 install –upgrade conan - Fedora - sudo dnf groupinstall -y “Development Tools” - sudo dnf install -y meson ninja-build python3-pip - pip3 install –upgrade conan
Initialize Conan profile (one-time):
conan profile detect --force
Quick start¶
Using setup script (recommended):
# Release build
./setup.sh Release
meson compile -C build/release
# Debug build (includes tests)
./setup.sh Debug
meson compile -C builddir
Manual Conan + Meson:
# Release
conan install . -of build/release -s build_type=Release -b missing
meson setup build/release \
--prefix /usr/local \
--native-file build/release/build-release/conan/conan_meson_native.ini \
--buildtype=release
meson compile -C build/release
# Debug
conan install . -of build/debug -s build_type=Debug -b missing
meson setup build/debug \
--prefix /usr/local \
--native-file build/debug/build-debug/conan/conan_meson_native.ini \
--buildtype=debug
meson compile -C build/debug
See setup.sh for environment variables (compiler override, C++ standard, cross-compilation, etc.).
Fast Mode¶
For quicker iteration (disables ONNX plugin/features & tests):
FAST_MODE=1 meson setup build/debug --reconfigure \
--native-file build/debug/build-debug/conan/conan_meson_native.ini
FAST_MODE=1 in CI (SourceHut manifest already respects it).
Overriding Display Version¶
Inject a runtime/display version distinct from the static project version:
meson setup build/release --reconfigure \
-Dyams-version="$(git describe --tags --always)" \
--native-file build/release/build-release/conan/conan_meson_native.ini
yams/version_generated.h provides YAMS_EFFECTIVE_VERSION, git describe, and build timestamp.
Run tests (Meson)¶
In Debug builds, tests are now enabled by default. For Release builds, pass -Dbuild-tests=true if you want to build tests.
meson compile -C build/debug
meson test -C build/debug # all suites
meson test -C build/debug -t unit # unit only
meson test -C build/debug -t integration # integration only
-Dbuild-tests=true.
Strict local builds (warnings-as-errors)¶
To stabilize warnings locally without blocking CI, use the helper script (strict by default):
# Debug strict build (no tests compiled or run)
bash scripts/dev/tidy_build.sh --no-test
# If you already ran `conan install` and want to skip it:
bash scripts/dev/tidy_build.sh --no-conan --no-test
# Release strict build
bash scripts/dev/tidy_build.sh --release --no-test
# Disable strict (temporarily)
bash scripts/dev/tidy_build.sh --no-strict --no-test
Developer loop¶
- Edit code
- Rebuild (incremental):
- cmake –build –preset yams-debug -j
- Smoke test CLI (example):
- ./yams –version (from install location) or from the built binary path inside the build tree
- Use a temporary data directory while developing:
- mkdir -p /tmp/yams-dev && export YAMS_STORAGE=/tmp/yams-dev
- yams init –non-interactive
- echo “dev” | yams add - –tags dev
- yams search dev
If YAMS_STORAGE is not supported in your version, run yams from a working directory you control (see docs for configuration and default paths).
Address/UB Sanitizers (Debug)¶
You can inject sanitizer flags via environment or Meson options if/when exposed. Example with environment flags:
CFLAGS='-fsanitize=address,undefined' CXXFLAGS='-fsanitize=address,undefined' \
meson setup build/debug --reconfigure
meson compile -C build/debug
meson test -C build/debug
Static analysis and formatting¶
- clang-format:
find src include -name '*.[ch]pp' -o -name '*.cc' -o -name '*.hh' | xargs clang-format -i - clang-tidy: integrate via your editor or invoke directly on changed files. Adjust targets/paths to your repository layout. If a .clang-format exists at repo root, it will be used.
CCache (optional)¶
Speed up rebuilds: - Install ccache (brew install ccache or apt/dnf install ccache) - Export CC/CXX wrappers or configure via CMake toolchain/profile as preferred
Docker (optional)¶
Use the published image for quick CLI checks or isolation:
docker run --rm -it ghcr.io/trvon/yams:latest --version
mkdir -p $HOME/yams-data
docker run --rm -it -v $HOME/yams-data:/var/lib/yams ghcr.io/trvon/yams:latest yams init --non-interactive
Documentation (MkDocs)¶
If you need to preview docs locally:
# Requires Python 3 and mkdocs-material
pip3 install mkdocs mkdocs-material
mkdocs serve -f yams/mkdocs.yml
Troubleshooting¶
- Compiler/toolchain not found: verify
conan profile detectand PATH for meson/ninja. - Link errors/missing deps: re-run
conan installwith--build=missing; clean the build folder if needed. - Tests not found: ensure you configured with
-Dbuild-tests=trueand recompiled; list tests withmeson test -C build/debug -l. - Install prefix: use
meson install -C build/<dir>and Meson install options as needed.
Notes¶
- Use Release for benchmarking and production builds; Debug + sanitizers for local development.
- Keep your build trees (build/debug, build/release) out of version control.
mediainfo+libmediainfo-dev(or distro equivalent) enables richer video metadata (YAMS_HAVE_MEDIAINFO).ffprobe(from FFmpeg) similarly enablesYAMS_HAVE_FFPROBE; either tool enables video handler compilation.- Provide exact compiler/Meson/Conan versions and commands you ran when filing issues for fast triage.