From 73131735a276e49ed7dac933f958103c16fc1637 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Fri, 14 Aug 2026 13:25:29 +0800 Subject: [PATCH] Fix Linux unit tests loading deps-built FFmpeg libraries The test executables that link libslic3r_gui (which links PkgConfig::LIBAV) have a load-time dependency on the deps-built FFmpeg shared libraries. The CI unit-test runner only receives the tests artifact, so those libraries were unresolvable there (Ubuntu 24.04 ships libavcodec.so.60, not .61). Copy the libraries next to each affected test executable and give it an $ORIGIN rpath, mirroring the Windows branch that copies DLLs next to every test executable. orcaslicer_copy_sos now places the copies in the per-config output directory for multi-config generators, like orcaslicer_copy_dlls does. Co-Authored-By: Claude --- CMakeLists.txt | 14 +++++++++++--- tests/CMakeLists.txt | 24 +++++++----------------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c66c099023..1e65dc5132 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1097,8 +1097,16 @@ endfunction() function(orcaslicer_copy_sos target config postfix output_sos) - set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}") - message ("set out_dir to CMAKE_CURRENT_BINARY_DIR: ${_out_dir}") + get_property(_is_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + get_target_property(_alt_out_dir ${target} RUNTIME_OUTPUT_DIRECTORY) + + if (_alt_out_dir) + set(_out_dir "${_alt_out_dir}") + elseif (_is_multi) + set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}/${config}") + else () + set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}") + endif () file(COPY ${CMAKE_PREFIX_PATH}/lib/libavcodec.so ${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61 @@ -1114,7 +1122,7 @@ function(orcaslicer_copy_sos target config postfix output_sos) ${CMAKE_PREFIX_PATH}/lib/libswresample.so.5.1.100 DESTINATION ${_out_dir}) - set(${output_dlls} + set(${output_sos} ${_out_dir}/libavcodec.so ${_out_dir}/libavcodec.so.61 ${_out_dir}/libavcodec.so.61.3.100 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 28818a5ee1..c403152c4e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -63,23 +63,13 @@ function(orcaslicer_copy_test_dlls) endif() set_property(TARGET ${_TEST_NAME}_tests PROPERTY BUILD_RPATH "$ORIGIN") - add_custom_command(TARGET ${_TEST_NAME}_tests POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_PREFIX_PATH}/lib/libavcodec.so - ${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61 - ${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61.3.100 - ${CMAKE_PREFIX_PATH}/lib/libavutil.so - ${CMAKE_PREFIX_PATH}/lib/libavutil.so.59 - ${CMAKE_PREFIX_PATH}/lib/libavutil.so.59.8.100 - ${CMAKE_PREFIX_PATH}/lib/libswscale.so - ${CMAKE_PREFIX_PATH}/lib/libswscale.so.8 - ${CMAKE_PREFIX_PATH}/lib/libswscale.so.8.1.100 - ${CMAKE_PREFIX_PATH}/lib/libswresample.so - ${CMAKE_PREFIX_PATH}/lib/libswresample.so.5 - ${CMAKE_PREFIX_PATH}/lib/libswresample.so.5.1.100 - "$" - COMMENT "Copying FFmpeg libraries next to test executable" - VERBATIM) + set(_configs ${CMAKE_CONFIGURATION_TYPES}) + if (NOT _configs) + set(_configs "${CMAKE_BUILD_TYPE}") + endif() + foreach(_cfg IN LISTS _configs) + orcaslicer_copy_sos(${_TEST_NAME}_tests "${_cfg}" "" _unused_sos) + endforeach() endif() endfunction()