Ninja: Fix POST_BUILD noop on Windows

Use `cd .` instead of `:` in a Windows shell.

Closes: #16393
This commit is contained in:
Brad King
2016-10-28 15:39:56 -04:00
parent ee0f2d23fc
commit 353f6362ba
4 changed files with 11 additions and 7 deletions

View File

@@ -34,6 +34,11 @@
const char* cmGlobalNinjaGenerator::NINJA_BUILD_FILE = "build.ninja";
const char* cmGlobalNinjaGenerator::NINJA_RULES_FILE = "rules.ninja";
const char* cmGlobalNinjaGenerator::INDENT = " ";
#ifdef _WIN32
std::string const cmGlobalNinjaGenerator::SHELL_NOOP = "cd .";
#else
std::string const cmGlobalNinjaGenerator::SHELL_NOOP = ":";
#endif
void cmGlobalNinjaGenerator::Indent(std::ostream& os, int count)
{

View File

@@ -58,6 +58,9 @@ public:
/// The indentation string used when generating Ninja's build file.
static const char* INDENT;
/// The shell command used for a no-op.
static std::string const SHELL_NOOP;
/// Write @a count times INDENT level to output stream @a os.
static void Indent(std::ostream& os, int count);

View File

@@ -299,15 +299,11 @@ void cmLocalNinjaGenerator::AppendCustomCommandDeps(
std::string cmLocalNinjaGenerator::BuildCommandLine(
const std::vector<std::string>& cmdLines)
{
// If we have no commands but we need to build a command anyway, use ":".
// If we have no commands but we need to build a command anyway, use noop.
// This happens when building a POST_BUILD value for link targets that
// don't use POST_BUILD.
if (cmdLines.empty()) {
#ifdef _WIN32
return "cd .";
#else
return ":";
#endif
return cmGlobalNinjaGenerator::SHELL_NOOP;
}
std::ostringstream cmd;

View File

@@ -675,7 +675,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
if (!symlinkNeeded) {
vars["POST_BUILD"] = postBuildCmdLine;
} else {
vars["POST_BUILD"] = ":";
vars["POST_BUILD"] = cmGlobalNinjaGenerator::SHELL_NOOP;
symlinkVars["POST_BUILD"] = postBuildCmdLine;
}
cmGlobalNinjaGenerator& globalGen = *this->GetGlobalGenerator();