Fix quoting when writing defines on Windows.
For the following string-valued define:
defines = [ "CR_CLANG_REVISION=\"$clang_revision\"" ]
this was outputting the following on Windows:
-D"CR_CLANG_REVISION=\"332838-1\""
The Windows shell can't handle the extra quotes, and so the following
macro was being written:
#define "CR_CLANG_REVISION "332838-1""
This change moves the first quote to before the -D, allowing Windows to
correctly handle the define parameter.
R=brettw@chromium.org
Bug: 396230
Change-Id: I4f6f70acf775577ff9b3077eba9ebf7f8d002da1
Reviewed-on: https://chromium-review.googlesource.com/1071274
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Joey Scarr <jsca@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#565117}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 44054a1e89063bf0063cfc4d72632c2f1589ee8b
diff --git a/tools/gn/ninja_binary_target_writer.cc b/tools/gn/ninja_binary_target_writer.cc
index 1711ad2..fb2fcf8 100644
--- a/tools/gn/ninja_binary_target_writer.cc
+++ b/tools/gn/ninja_binary_target_writer.cc
@@ -60,8 +60,8 @@
}
void operator()(const std::string& s, std::ostream& out) const {
- out << " -D";
- EscapeStringToStream(out, s, options);
+ out << " ";
+ EscapeStringToStream(out, "-D" + s, options);
}
EscapeOptions options;
diff --git a/tools/gn/ninja_binary_target_writer_unittest.cc b/tools/gn/ninja_binary_target_writer_unittest.cc
index 20239b0..acbd88b 100644
--- a/tools/gn/ninja_binary_target_writer_unittest.cc
+++ b/tools/gn/ninja_binary_target_writer_unittest.cc
@@ -8,6 +8,7 @@
#include <sstream>
#include <utility>
+#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "tools/gn/config.h"
#include "tools/gn/scheduler.h"
@@ -150,6 +151,30 @@
}
}
+TEST_F(NinjaBinaryTargetWriterTest, EscapeDefines) {
+ TestWithScope setup;
+ Err err;
+
+ TestTarget target(setup, "//foo:bar", Target::STATIC_LIBRARY);
+ target.config_values().defines().push_back("BOOL_DEF");
+ target.config_values().defines().push_back("INT_DEF=123");
+ target.config_values().defines().push_back("STR_DEF=\"ABCD-1\"");
+ ASSERT_TRUE(target.OnResolved(&err));
+
+ std::ostringstream out;
+ NinjaBinaryTargetWriter writer(&target, out);
+ writer.Run();
+
+ const char expectedSubstr[] =
+#if defined(OS_WIN)
+ "defines = -DBOOL_DEF -DINT_DEF=123 \"-DSTR_DEF=\\\"ABCD-1\\\"\"";
+#else
+ "defines = -DBOOL_DEF -DINT_DEF=123 -DSTR_DEF=\\\"ABCD-1\\\"";
+#endif
+ std::string out_str = out.str();
+ EXPECT_PRED_FORMAT2(testing::IsSubstring, expectedSubstr, out_str);
+}
+
TEST_F(NinjaBinaryTargetWriterTest, StaticLibrary) {
TestWithScope setup;
Err err;