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
This commit is contained in:
2026-07-17 00:13:33 +08:00
parent 4a4dcae580
commit ac10bf83a3
2 changed files with 16 additions and 2 deletions
+13 -1
View File
@@ -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
+3 -1
View File
@@ -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