summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalNinjaGenerator.cxx
diff options
context:
space:
mode:
authorBernhard Burgermeister <bburgerm@googlemail.com>2017-05-04 15:57:20 (GMT)
committerBrad King <brad.king@kitware.com>2017-05-09 15:34:42 (GMT)
commit5e0e03d953c03e1703708f4f579d903990edecb9 (patch)
treea3d5b73b4bf1bce7f97689d222adf81e356d9925 /Source/cmLocalNinjaGenerator.cxx
parenta83250880ad511d92d96bfd860873b9c79c0f462 (diff)
downloadCMake-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.cxx8
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 << "\"";