Stop set_tests_properties from eating the test environment lists
The example games failed on the CI runner with "ALSA: Couldn't open audio device" despite SDL_AUDIODRIVER=dummy sitting right there in their CMake -- because it never reached the process. set_tests_properties parses its PROPERTIES arguments as name/value pairs, so a semicolon-separated value list is split and every element after the first is consumed as a bogus property name: ENVIRONMENT kept only SDL_VIDEODRIVER=dummy, and the LD_LIBRARY_PATH prepend list kept only its first directory. ctest --show-only=json-v1 shows the truncation plainly. Nobody could see it. Video survived because SDL3 falls through its driver list to dummy on a headless machine with no hint at all; audio survived on every developer machine because the real device works there; the library paths survived because RPATH covered them. A runner with no sound card was the first environment where any of it mattered. Every list-valued test property now goes through set_property(TEST ...), which takes real list arguments -- the examples' ENVIRONMENT triplets and vendored-path modifications, the suites' LD_LIBRARY_PATH prepends, and the docs harness's driver variables. Verified by property dump (3 environment entries and all 7 prepends present) and by running the example tests with ALSA_CONFIG_PATH=/dev/null, which now pass where a real ALSA open would fail: the dummy driver is finally the one being asked. Co-Authored-By: Claude Code (Claude Fable 5, claude-fable-5) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KzBDV2fqgnUAcqCKqKvc71
This commit is contained in:
@@ -662,20 +662,26 @@ if(AKGL_VENDORED_DEPENDENCIES)
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/deps/libakerror"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/deps/libakstdlib"
|
||||
)
|
||||
# set_property rather than set_tests_properties for the list-valued
|
||||
# property: set_tests_properties parses its PROPERTIES arguments as
|
||||
# name/value pairs, so a semicolon-separated value is split and every
|
||||
# element after the first is consumed as a bogus property name -- which
|
||||
# silently reduced this prepend list to its first directory for as long as
|
||||
# it existed. RPATH covered for it locally; a runner found it.
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.22")
|
||||
set(AKGL_TEST_ENV_MOD "")
|
||||
foreach(dir IN LISTS AKGL_TEST_LIBPATH)
|
||||
list(APPEND AKGL_TEST_ENV_MOD "LD_LIBRARY_PATH=path_list_prepend:${dir}")
|
||||
endforeach()
|
||||
set_tests_properties(
|
||||
${AKGL_TEST_SUITES} ${AKGL_PERF_SUITES}
|
||||
PROPERTIES ENVIRONMENT_MODIFICATION "${AKGL_TEST_ENV_MOD}"
|
||||
set_property(
|
||||
TEST ${AKGL_TEST_SUITES} ${AKGL_PERF_SUITES}
|
||||
PROPERTY ENVIRONMENT_MODIFICATION ${AKGL_TEST_ENV_MOD}
|
||||
)
|
||||
else()
|
||||
string(REPLACE ";" ":" AKGL_TEST_LIBPATH_JOINED "${AKGL_TEST_LIBPATH}")
|
||||
set_tests_properties(
|
||||
${AKGL_TEST_SUITES} ${AKGL_PERF_SUITES}
|
||||
PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${AKGL_TEST_LIBPATH_JOINED}:$ENV{LD_LIBRARY_PATH}"
|
||||
set_property(
|
||||
TEST ${AKGL_TEST_SUITES} ${AKGL_PERF_SUITES}
|
||||
PROPERTY ENVIRONMENT "LD_LIBRARY_PATH=${AKGL_TEST_LIBPATH_JOINED}:$ENV{LD_LIBRARY_PATH}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -783,7 +789,12 @@ add_test(
|
||||
set_tests_properties(docs_examples PROPERTIES
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
TIMEOUT 900
|
||||
ENVIRONMENT "SDL_VIDEODRIVER=dummy;SDL_AUDIODRIVER=dummy;SDL_RENDER_DRIVER=software"
|
||||
)
|
||||
# set_property for the same pair-splitting reason as the suites above.
|
||||
set_property(TEST docs_examples PROPERTY ENVIRONMENT
|
||||
"SDL_VIDEODRIVER=dummy"
|
||||
"SDL_AUDIODRIVER=dummy"
|
||||
"SDL_RENDER_DRIVER=software"
|
||||
)
|
||||
|
||||
# Every figure in docs/ re-rendered and byte-compared against the tracked copy.
|
||||
@@ -808,7 +819,11 @@ add_test(
|
||||
set_tests_properties(docs_screenshots PROPERTIES
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
TIMEOUT 900
|
||||
ENVIRONMENT "SDL_VIDEODRIVER=dummy;SDL_AUDIODRIVER=dummy;SDL_RENDER_DRIVER=software"
|
||||
)
|
||||
set_property(TEST docs_screenshots PROPERTY ENVIRONMENT
|
||||
"SDL_VIDEODRIVER=dummy"
|
||||
"SDL_AUDIODRIVER=dummy"
|
||||
"SDL_RENDER_DRIVER=software"
|
||||
)
|
||||
|
||||
# Regenerating the figures is a deliberate act, never part of a build: the PNGs
|
||||
|
||||
Reference in New Issue
Block a user