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