From ac10bf83a3e10b064de3f1d1a6166cda8093acf5 Mon Sep 17 00:00:00 2001 From: Mike Solar Date: Fri, 17 Jul 2026 00:13:33 +0800 Subject: [PATCH] packaging: ship render worker on Linux, ffmpeg_bridge.dll on Windows - Linux: olive-render-worker had no install rule, so it was missing from the AppImage, deb, rpm and Arch packages even though RenderWorkerPool spawns it from applicationDirPath(); install it next to oak-editor (verified: RPATH resolution of libffmpeg_bridge works for editor, worker and liboakgl from the installed layout) - Windows: ffmpeg_bridge.dll is built outside app/ and is invisible to the ntldd dependency walk, so the NSIS installer shipped without it (and without the av*.dll it pulls in); copy it explicitly and include it in the dependency loop - AppImage verification now also checks oak-render-worker, liboakgl.so, libffmpeg_bridge.so and ldd resolution of all shipped binaries --- .github/workflows/cd.yml | 14 +++++++++++++- app/CMakeLists.txt | 4 +++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 3fa3bf1cd..d7d03d729 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -64,10 +64,13 @@ jobs: if [ -f build/app/oakvulkan.dll ]; then cp build/app/oakvulkan.dll app/packaging/windows/nsis/oak-editor/ fi + # The FFmpeg bridge DLL is built outside app/ and is not reachable + # via PATH, so ntldd cannot discover it from the executables alone + cp build/ffmpeg_bridge/bin/ffmpeg_bridge.dll app/packaging/windows/nsis/oak-editor/ windeployqt6 app/packaging/windows/nsis/oak-editor/oak-editor.exe # Copy all non-Qt MSYS2 DLLs recursively for every binary we ship cd app/packaging/windows/nsis/oak-editor - for binary in oak-editor.exe oak-render-worker.exe oakgl.dll oakvulkan.dll; do + for binary in oak-editor.exe oak-render-worker.exe oakgl.dll oakvulkan.dll ffmpeg_bridge.dll; do [ -f "$binary" ] || continue for l in $(ntldd -R "$binary" | grep -E 'mingw64|ucrt64|clang64' | sed 's/^[ \t]*//' | cut -d' ' -f3); do cp -v "$l" . @@ -350,6 +353,15 @@ jobs: ls AppDir/usr/lib/libOpenColorIO.so* || (echo "Missing libOpenColorIO" && exit 1) ls AppDir/usr/lib/libportaudio.so* || (echo "Missing libportaudio" && exit 1) ls AppDir/usr/lib/libOpenEXR*.so* || (echo "Missing libOpenEXR" && exit 1) + # Ensure Oak's own binaries and shared libraries are present + ls AppDir/usr/bin/oak-editor || (echo "Missing oak-editor" && exit 1) + ls AppDir/usr/bin/oak-render-worker || (echo "Missing oak-render-worker" && exit 1) + ls AppDir/usr/lib/liboakgl.so || (echo "Missing liboakgl.so" && exit 1) + ls AppDir/usr/ffmpeg_bridge/bin/libffmpeg_bridge.so || (echo "Missing libffmpeg_bridge.so" && exit 1) + # Ensure every shipped binary resolves all of its dependencies + ! ldd AppDir/usr/bin/oak-editor | grep "not found" + ! ldd AppDir/usr/bin/oak-render-worker | grep "not found" + ! ldd AppDir/usr/lib/liboakgl.so | grep "not found" - name: Upload artifact uses: actions/upload-artifact@v4 diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 54f1fdf30..2c62f6088 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -331,7 +331,9 @@ elseif (APPLE) endif () elseif (UNIX) # Set Linux-specific properties for application - install(TARGETS olive-editor RUNTIME DESTINATION bin) + # The render worker must ship next to oak-editor: RenderWorkerPool spawns + # it from QCoreApplication::applicationDirPath() + install(TARGETS olive-editor olive-render-worker RUNTIME DESTINATION bin) endif () # Set link libraries