Guard the add_test shadow on being top-level again
CMake chains command overrides one level deep: a second override rebinds
_add_test to the first and the builtin becomes unreachable to everyone. So two
projects in one tree cannot both shadow add_test, and akbasic has to shadow it
first for libakerror and libakstdlib -- which left its own registrations
recursing to CMake's depth limit.
The unconditional shadow arrived with the vendored-dependency fix in 18399f2.
That half stays; only the guard comes back.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -47,19 +47,33 @@ endif()
|
||||
|
||||
# Vendored projects own their test suites. Suppress their CTest registration so
|
||||
# the suite that runs contains only the targets built here. The override is
|
||||
# lifted again below, before this project registers its own tests, so an
|
||||
# embedding consumer's add_test() still reaches CTest.
|
||||
set(AKGL_SUPPRESS_DEPENDENCY_TESTS TRUE)
|
||||
function(add_test)
|
||||
if(NOT AKGL_SUPPRESS_DEPENDENCY_TESTS)
|
||||
_add_test(${ARGV})
|
||||
endif()
|
||||
endfunction()
|
||||
function(set_tests_properties)
|
||||
if(NOT AKGL_SUPPRESS_DEPENDENCY_TESTS)
|
||||
_set_tests_properties(${ARGV})
|
||||
endif()
|
||||
endfunction()
|
||||
# lifted again below, before this project registers its own tests.
|
||||
#
|
||||
# **Only when this project is top-level, and that guard is load-bearing.** CMake
|
||||
# exposes an overridden command as `_name` and chains exactly one level deep: a
|
||||
# second override rebinds `_add_test` to the *first* override and the builtin
|
||||
# becomes unreachable to everybody, forever. So two projects in one tree cannot
|
||||
# both shadow add_test() -- whoever goes second breaks, and an embedding
|
||||
# consumer that shadows it first sees its own registrations recurse until CMake
|
||||
# stops at depth 1000.
|
||||
#
|
||||
# An embedded libakgl therefore leaves the override alone and lets its consumer
|
||||
# suppress what it does not want; the consumer has to have that machinery
|
||||
# anyway, for libakerror and libakstdlib. libakstdlib guards its own shadow the
|
||||
# same way and for the same reason.
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
set(AKGL_SUPPRESS_DEPENDENCY_TESTS TRUE)
|
||||
function(add_test)
|
||||
if(NOT AKGL_SUPPRESS_DEPENDENCY_TESTS)
|
||||
_add_test(${ARGV})
|
||||
endif()
|
||||
endfunction()
|
||||
function(set_tests_properties)
|
||||
if(NOT AKGL_SUPPRESS_DEPENDENCY_TESTS)
|
||||
_set_tests_properties(${ARGV})
|
||||
endif()
|
||||
endfunction()
|
||||
endif()
|
||||
|
||||
set(JANSSON_WITHOUT_TESTS ON CACHE BOOL "Do not build vendored Jansson tests" FORCE)
|
||||
set(JANSSON_EXAMPLES OFF CACHE BOOL "Do not build vendored Jansson examples" FORCE)
|
||||
|
||||
Reference in New Issue
Block a user