Files
CMake/Tests/RunCMake/string/GenexpStrip.cmake
Martin Duffy 8227028e49 string(GENEX_STRIP): Fix regression on nested generator expressions
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
2025-08-13 15:52:16 -04:00

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"
)