diff options
author | Bernhard Burgermeister <bburgerm@googlemail.com> | 2017-05-04 15:57:20 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2017-05-09 15:34:42 (GMT) |
commit | 5e0e03d953c03e1703708f4f579d903990edecb9 (patch) | |
tree | a3d5b73b4bf1bce7f97689d222adf81e356d9925 /Source/cmLocalNinjaGenerator.cxx | |
parent | a83250880ad511d92d96bfd860873b9c79c0f462 (diff) | |
download | CMake-5e0e03d953c03e1703708f4f579d903990edecb9.zip CMake-5e0e03d953c03e1703708f4f579d903990edecb9.tar.gz CMake-5e0e03d953c03e1703708f4f579d903990edecb9.tar.bz2 |
Ninja: Fix command concatenation on Windows
Put commands that contain `||` into brackets to avoid early abort of
execution by `cmd.exe` because `||` has higher precedence than `&&` in
`cmd.exe`.
Add test to check for command execution after `||` as part of a
parameter and as command separator.
Fixes: #16850
Diffstat (limited to 'Source/cmLocalNinjaGenerator.cxx')
-rw-r--r-- | Source/cmLocalNinjaGenerator.cxx | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx index e0e3e54..124bd80 100644 --- a/Source/cmLocalNinjaGenerator.cxx +++ b/Source/cmLocalNinjaGenerator.cxx @@ -322,7 +322,13 @@ std::string cmLocalNinjaGenerator::BuildCommandLine( } else if (cmdLines.size() > 1) { cmd << "cmd.exe /C \""; } - cmd << *li; + // Put current cmdLine in brackets if it contains "||" because it has + // higher precedence than "&&" in cmd.exe + if (li->find("||") != std::string::npos) { + cmd << "( " << *li << " )"; + } else { + cmd << *li; + } } if (cmdLines.size() > 1) { cmd << "\""; |