cli: add oak-cli, the first pure C ABI consumer of liboakengine

- oak-cli info prints project/sequence/footage details; oak-cli render
  writes PPM frames and a PCM WAV through the facade only - no engine
  C++ headers, no Qt headers, links just liboakengine
- exit code 2 marks rendering-unavailable so ctest can skip cleanly on
  machines without a GL render backend; info test runs everywhere
- facade fix uncovered by the CLI: project load now absolutizes the
  path, so relative footage paths can't be mistaken for a moved
  project; the fixture project now carries probed footage wired into
  its sequence so it renders real content
- packaged like the other binaries (Linux bin install, macOS bundle,
  Windows DLL copies); DESTDIR-verified
This commit is contained in:
2026-07-20 05:48:07 +08:00
parent b26ffb7d64
commit 009af0ff3f
5 changed files with 669 additions and 24 deletions
+6 -1
View File
@@ -193,7 +193,12 @@ int oakengine_project_load(OakEngineProject *self, const char *path,
return OAKENGINE_E_STATE;
}
const QString filename = QString::fromUtf8(path);
// Normalize to an absolute path so the stored filename matches the
// file's saved_url; otherwise the footage validator treats the project
// as moved (absolute saved_url vs. relative filename) and rewrites
// relative footage paths against the caller's cwd.
const QString filename =
QFileInfo(QString::fromUtf8(path)).absoluteFilePath();
project->set_filename(filename);
olive::ProjectSerializer::Result result = olive::ProjectSerializer::load(