summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2010-12-19 23:02:22 (GMT)
committerEvan Martin <martine@danga.com>2010-12-19 23:02:22 (GMT)
commit2449472941530bbe82a80e734261e312a76df56a (patch)
treecbf4cff91c51918dfdb170efa26973150c400180 /src
parentb942fd3762a20f136346b47de015e02a92ebaa32 (diff)
downloadNinja-2449472941530bbe82a80e734261e312a76df56a.zip
Ninja-2449472941530bbe82a80e734261e312a76df56a.tar.gz
Ninja-2449472941530bbe82a80e734261e312a76df56a.tar.bz2
remove special builddir
Diffstat (limited to 'src')
-rw-r--r--src/ninja.cc1
-rw-r--r--src/parsers.cc28
-rw-r--r--src/parsers.h4
-rw-r--r--src/parsers_test.cc34
4 files changed, 5 insertions, 62 deletions
diff --git a/src/ninja.cc b/src/ninja.cc
index 8376d9a..5392fb3 100644
--- a/src/ninja.cc
+++ b/src/ninja.cc
@@ -74,7 +74,6 @@ int main(int argc, char** argv) {
State state;
RealFileReader file_reader;
ManifestParser parser(&state, &file_reader);
- parser.set_root(cwd);
string err;
if (!parser.Load(input_file, &err)) {
fprintf(stderr, "error loading '%s': %s\n", input_file, err.c_str());
diff --git a/src/parsers.cc b/src/parsers.cc
index c66b91b..0fbbec7 100644
--- a/src/parsers.cc
+++ b/src/parsers.cc
@@ -82,7 +82,7 @@ static bool IsIdentChar(char c) {
('a' <= c && c <= 'z') ||
('+' <= c && c <= '9') || // +,-./ and numbers
('A' <= c && c <= 'Z') ||
- (c == '_') || (c == '@') || (c == '$');
+ (c == '_') || (c == '$');
}
bool Tokenizer::ExpectToken(Token::Type expected, string* err) {
@@ -255,16 +255,7 @@ bool ManifestParser::Parse(const string& input, string* err) {
string name, value;
if (!ParseLet(&name, &value, err))
return false;
-
env_->AddBinding(name, value);
- if (name == "builddir") {
- builddir_ = value;
- if (builddir_.substr(0, 5) == "$root") {
- builddir_ = root_ + builddir_.substr(5);
- }
- if (!builddir_.empty() && builddir_[builddir_.size() - 1] != '/')
- builddir_.push_back('/');
- }
break;
}
case Token::TEOF:
@@ -341,13 +332,6 @@ bool ManifestParser::ParseLet(string* name, string* value, string* err) {
if (!tokenizer_.ReadToNewline(value, err))
return false;
- // Do @ -> builddir substitution.
- size_t ofs;
- while ((ofs = value->find('@')) != string::npos) {
- value->replace(ofs, 1, builddir_);
- ofs += builddir_.size();
- }
-
return true;
}
@@ -450,7 +434,7 @@ bool ManifestParser::ParseEdge(string* err) {
string eval_err;
if (!eval.Parse(*i, &eval_err))
return tokenizer_.Error(eval_err, err);
- *i = ExpandFile(eval.Evaluate(env));
+ *i = CanonicalizePath(eval.Evaluate(env));
}
}
@@ -489,11 +473,3 @@ bool ManifestParser::ParseSubNinja(string* err) {
return true;
}
-
-string ManifestParser::ExpandFile(const string& file) {
- string out = file;
- if (!file.empty() && file[0] == '@')
- out = builddir_ + file.substr(1);
- return CanonicalizePath(out);
-}
-
diff --git a/src/parsers.h b/src/parsers.h
index fc20436..e3505c9 100644
--- a/src/parsers.h
+++ b/src/parsers.h
@@ -78,7 +78,6 @@ struct ManifestParser {
};
ManifestParser(State* state, FileReader* file_reader);
- void set_root(const string& root) { root_ = root; }
bool Load(const string& filename, string* err);
bool Parse(const string& input, string* err);
@@ -88,14 +87,11 @@ struct ManifestParser {
bool ParseEdge(string* err);
bool ParseSubNinja(string* err);
- string ExpandFile(const string& file);
-
State* state_;
BindingEnv* env_;
FileReader* file_reader_;
Tokenizer tokenizer_;
string builddir_;
- string root_; // Absolute path to root ninja file.
};
#endif // NINJA_PARSERS_H_
diff --git a/src/parsers_test.cc b/src/parsers_test.cc
index f38e6dc..b1f58b4 100644
--- a/src/parsers_test.cc
+++ b/src/parsers_test.cc
@@ -241,46 +241,18 @@ TEST_F(ParserTest, Errors) {
}
}
-TEST_F(ParserTest, BuildDir) {
- ASSERT_NO_FATAL_FAILURE(AssertParse(
-"default_test = @foo\n"
-"builddir = out\n"
-"rule cat\n"
-" command = cat @otherfile $in > $out\n"
-"build @bin: cat @a.o\n"
-"build @a.o: cat a.cc\n"));
- EXPECT_EQ("foo", state.bindings_.LookupVariable("default_test"));
- ASSERT_TRUE(state.LookupNode("out/a.o"));
- const Rule* rule = state.LookupRule("cat");
- ASSERT_TRUE(rule);
- EXPECT_EQ("cat out/otherfile $in > $out", rule->command_.unparsed());
-}
-
-TEST_F(ParserTest, BuildDirRoot) {
- ManifestParser parser(&state, this);
- parser.set_root("/root_test");
- string err;
- ASSERT_TRUE(parser.Parse(
-"builddir = $root/out\n"
-"rule cat\n"
-" command = cat @otherfile $in > $out\n"
-"build @a.o: cat a.cc\n", &err));
- ASSERT_EQ("", err);
- ASSERT_TRUE(state.LookupNode("/root_test/out/a.o"));
-}
-
TEST_F(ParserTest, SubNinja) {
files_["test.ninja"] =
"var = inner\n"
- "build @inner: varref\n";
+ "build $builddir/inner: varref\n";
ASSERT_NO_FATAL_FAILURE(AssertParse(
"builddir = some_dir/\n"
"rule varref\n"
" command = varref $var\n"
"var = outer\n"
-"build @outer: varref\n"
+"build $builddir/outer: varref\n"
"subninja test.ninja\n"
-"build @outer2: varref\n"));
+"build $builddir/outer2: varref\n"));
ASSERT_EQ(1, files_read_.size());
EXPECT_EQ("test.ninja", files_read_[0]);