mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-12 01:59:43 -06:00
Since commit 13c7bb5b0c (cmGeneratorExpression: Update strip function to
collect parsed expressions, 2025-04-08), the logic to strip generator
expressions from a string made incorrect assumptions about the contents of
generator expressions, leading certain cases to be stripped incorrectly.
Clean up the logic and fix broken behavior, and add test coverage with
`string(GENEX_STRIP)`.
Fixes: #27133
38 lines
819 B
CMake
38 lines
819 B
CMake
function(test_strip input expected)
|
|
string(GENEX_STRIP "${input}" strip)
|
|
if (NOT strip STREQUAL expected)
|
|
message(FATAL_ERROR "message(GENEXP_STRIP \"${input}\")
|
|
evaluated to \"${strip}\"
|
|
expected \"${expected}\"")
|
|
endif()
|
|
endfunction()
|
|
|
|
test_strip( # Simple case
|
|
"$<BOOL:1>"
|
|
""
|
|
)
|
|
test_strip( # LHS contains generator expression
|
|
"$<$<CONFIG:Release>:NDEBUG>;DEBUG"
|
|
"DEBUG"
|
|
)
|
|
test_strip( # RHS contains generator expression
|
|
"$<AND:1,$<BOOL:TRUE>>"
|
|
""
|
|
)
|
|
test_strip( # Empty and unfinished expressions
|
|
"$<>$<$<>"
|
|
"$<$<>"
|
|
)
|
|
test_strip( # Multiple independent expressions
|
|
"$<IF:TRUE,TRUE,FALSE> / $<IF:TRUE,TRUE,FALSE>"
|
|
" / "
|
|
)
|
|
test_strip( # Multiple : in one expression
|
|
"$<1:2:3>"
|
|
""
|
|
)
|
|
test_strip( # Multiple case
|
|
"1$<AND:1,0>2$<IF:$<$<BOOL:1>:$<CONFIG:RELEASE>>,TRUE,FALSE>3"
|
|
"123"
|
|
)
|