summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalNinjaGenerator.cxx
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2012-02-19 01:50:53 (GMT)
committerPeter Collingbourne <peter@pcc.me.uk>2012-02-19 04:00:02 (GMT)
commitcea03e632b71589592660614a63ff102ba923de8 (patch)
tree2413c402f5880a595c05ae54e36be230c57497da /Source/cmGlobalNinjaGenerator.cxx
parent9362440a0b9193c417b42c50495d0a3ea6e098c4 (diff)
downloadCMake-cea03e632b71589592660614a63ff102ba923de8.zip
CMake-cea03e632b71589592660614a63ff102ba923de8.tar.gz
CMake-cea03e632b71589592660614a63ff102ba923de8.tar.bz2
Ninja: Backslash rules for Windows
Generally these are only required in build statements, as Ninja wants to be able to chop paths up. But it doesn't hurt to also try to use them in command line arguments.
Diffstat (limited to 'Source/cmGlobalNinjaGenerator.cxx')
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx17
1 files changed, 13 insertions, 4 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index e9264ec..b1d8e5b 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -84,6 +84,15 @@ std::string cmGlobalNinjaGenerator::EncodeLiteral(const std::string &lit)
return result;
}
+std::string cmGlobalNinjaGenerator::EncodePath(const std::string &path)
+{
+ std::string result = path;
+#ifdef _WIN32
+ cmSystemTools::ReplaceString(result, "/", "\\");
+#endif
+ return EncodeLiteral(result);
+}
+
void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
const std::string& comment,
const std::string& rule,
@@ -122,7 +131,7 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
for(cmNinjaDeps::const_iterator i = outputs.begin();
i != outputs.end();
++i)
- builds << " " << EncodeIdent(*i, os);
+ builds << " " << EncodeIdent(EncodePath(*i), os);
builds << ":";
// Write the rule.
@@ -132,7 +141,7 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
for(cmNinjaDeps::const_iterator i = explicitDeps.begin();
i != explicitDeps.end();
++i)
- builds << " " << EncodeIdent(*i, os);
+ builds << " " << EncodeIdent(EncodePath(*i), os);
// Write implicit dependencies.
if(!implicitDeps.empty())
@@ -141,7 +150,7 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
for(cmNinjaDeps::const_iterator i = implicitDeps.begin();
i != implicitDeps.end();
++i)
- builds << " " << EncodeIdent(*i, os);
+ builds << " " << EncodeIdent(EncodePath(*i), os);
}
// Write order-only dependencies.
@@ -151,7 +160,7 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
for(cmNinjaDeps::const_iterator i = orderOnlyDeps.begin();
i != orderOnlyDeps.end();
++i)
- builds << " " << EncodeIdent(*i, os);
+ builds << " " << EncodeIdent(EncodePath(*i), os);
}
builds << "\n";