[CMake] Deal with semicolons in ENV passed to RootTestDriver
#21074
+52
−14
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The processing of the environment variables in the RootTestDriver used excessive CMake string-to-list parsing, and the semicolons would have to be escaped for each of these parsings. That means the RootTestDriver command needed to include a magic number amount of escape characters to propagate semicolons to the final environment variables.
The fix is to escape semicolons once in the beginning, and then re-escape them after each step that involves list parsing.
Like this, the command can contain just bare semicolons without having to escape anything.
In a next step, one can consider giving the same treatment to the
ROOT_ADD_TESTmacro, which also does excessive list parsing. Then we don't need tricks like the$<SEMICOLON>generator expression anymore to propagate semicolons into the final command.Follows up on a comment by @pcanal: #21056 (comment)