[CMake] Deal with semicolons in ENV passed to RootTestDriver#21074
Merged
guitargeek merged 3 commits intoroot-project:masterfrom Jan 30, 2026
Merged
[CMake] Deal with semicolons in ENV passed to RootTestDriver#21074guitargeek merged 3 commits intoroot-project:masterfrom
ENV passed to RootTestDriver#21074guitargeek merged 3 commits intoroot-project:masterfrom
Conversation
0ca587f to
c91ff12
Compare
Test Results 22 files 22 suites 3d 10h 14m 33s ⏱️ Results for commit fc60d55. ♻️ This comment has been updated with latest results. |
a0d94fe to
c392aba
Compare
This is important for Windows support.
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_TEST` macro, 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.
This is for correct Windows support.
c392aba to
fc60d55
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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)