Attempt to fix Linux unit test

This commit is contained in:
Noisyfox
2026-08-13 23:40:37 +08:00
parent 41c107d4f7
commit e9ca9d41d1

View File

@@ -30,25 +30,57 @@ if (APPLE)
target_link_libraries(test_common INTERFACE "-liconv -framework IOKit" "-framework CoreFoundation" -lc++) target_link_libraries(test_common INTERFACE "-liconv -framework IOKit" "-framework CoreFoundation" -lc++)
endif() endif()
# Copies runtime DLLs next to each test executable. Handles both single-config # Copies runtime shared libraries next to each test executable. Handles both
# generators (CMAKE_BUILD_TYPE set) and multi-config generators (Ninja # single-config generators (CMAKE_BUILD_TYPE set) and multi-config generators
# Multi-Config, Visual Studio) where CMAKE_BUILD_TYPE is empty and DLLs must # (Ninja Multi-Config, Visual Studio) where CMAKE_BUILD_TYPE is empty and DLLs
# land in every per-config output directory. # must land in every per-config output directory. On Windows the loader finds
# DLLs in the executable's directory; the Linux branch below does the same for
# the deps-built FFmpeg libraries and adds an $ORIGIN rpath, since the ELF
# loader does not search the executable's directory and the CI unit-test runner
# only receives the tests artifact (no deps install).
function(orcaslicer_copy_test_dlls) function(orcaslicer_copy_test_dlls)
if (NOT WIN32) if (WIN32)
return() set(_configs ${CMAKE_CONFIGURATION_TYPES})
endif() if (NOT _configs)
set(_configs ${CMAKE_CONFIGURATION_TYPES}) set(_configs "${CMAKE_BUILD_TYPE}")
if (NOT _configs)
set(_configs "${CMAKE_BUILD_TYPE}")
endif()
foreach(_cfg IN LISTS _configs)
if (_cfg STREQUAL "Debug")
orcaslicer_copy_dlls(COPY_DLLS "Debug" "d" _unused_dlls)
else()
orcaslicer_copy_dlls(COPY_DLLS "${_cfg}" "" _unused_dlls)
endif() endif()
endforeach() foreach(_cfg IN LISTS _configs)
if (_cfg STREQUAL "Debug")
orcaslicer_copy_dlls(COPY_DLLS "Debug" "d" _unused_dlls)
else()
orcaslicer_copy_dlls(COPY_DLLS "${_cfg}" "" _unused_dlls)
endif()
endforeach()
elseif (UNIX AND NOT APPLE)
# Only test executables that link libslic3r_gui pull in the FFmpeg
# shared libraries (src/slic3r/CMakeLists.txt links PkgConfig::LIBAV
# into it). Copy them next to the executable and give it an $ORIGIN
# rpath so the loader finds them when the tests run on the CI unit-test
# runner, which only receives this build/tests tree.
get_target_property(_linked_libs ${_TEST_NAME}_tests LINK_LIBRARIES)
if (NOT "libslic3r_gui" IN_LIST _linked_libs)
return()
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
"$<TARGET_FILE_DIR:${_TEST_NAME}_tests>"
COMMENT "Copying FFmpeg libraries next to test executable"
VERBATIM)
endif()
endfunction() endfunction()
# Register Catch2 tags as CTest labels so `ctest -L`/`-LE` can filter by tag. # Register Catch2 tags as CTest labels so `ctest -L`/`-LE` can filter by tag.