list: Unescaping of escaped semicolon when using list(JOIN) and list(REMOVE_AT)
Sample project:
cmake_minimum_required(VERSION 3.15.0)
project(list_escape_semicolon LANGUAGES C)
set(elem1 "Foo\;1")
set(elem2 "Bar\;1")
message("elem1 is: ${elem1}")
message("elem2 is: ${elem1}")
set(packages "${elem1};${elem2}")
message("packages is: ${packages}\n")
set(packages "")
list(APPEND packages "${elem1}")
list(APPEND packages "${elem2}")
message("packages is: ${packages}\n")
list(JOIN packages "#" packages_joined)
message("list(JOIN packages '#' packages_joined) is: ${packages_joined}\n")
set(packages "${elem1};${elem2}")
message("packages is: ${packages}")
list(REMOVE_AT packages 0)
message("list(REMOVE_AT 0) is: ${packages}\n")
Output:
elem1 is: Foo\;1
elem2 is: Foo\;1
packages is: Foo\;1;Bar\;1
packages is: Foo\;1;Bar\;1
list(JOIN packages '#' packages_joined) is: Foo;1#Bar;1
packages is: Foo\;1;Bar\;1
list(REMOVE_AT 0) is: Bar;1
Note that list(APPEND)
keeps the \;
fine, whereas when using list(JOIN)
the backslash disappears. Same unescaping happens when using list(REMOVE_AT 0)
Is this intended behavior, or an oversight? Is there a way to prevent that?
Edited by alcroito