diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2011-09-22 16:04:03 (GMT) |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2011-10-15 19:23:50 (GMT) |
commit | 7cf2bdffe2a95ea5e30e9c3166ef4398add8e6b9 (patch) | |
tree | 2b8cd622a0fa858beb0b91da121255a82274272b /src/clean_test.cc | |
parent | 07c1f9b14b5f7071a5def7d09414ec852a4372ef (diff) | |
download | Ninja-7cf2bdffe2a95ea5e30e9c3166ef4398add8e6b9.zip Ninja-7cf2bdffe2a95ea5e30e9c3166ef4398add8e6b9.tar.gz Ninja-7cf2bdffe2a95ea5e30e9c3166ef4398add8e6b9.tar.bz2 |
Implement generator rules
Introduce a rule attribute "generator" which, if present, specifies
that this rule is used to re-invoke the generator program. Files built
using generator rules are treated specially in two ways: firstly,
they will not be rebuilt if the command line changes; and secondly,
they are not cleaned by default.
A command line flag "-g" is introduced for the clean tool, which
causes it to remove generator files.
Fixes issue #102.
Diffstat (limited to 'src/clean_test.cc')
-rw-r--r-- | src/clean_test.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/clean_test.cc b/src/clean_test.cc index f031dee..8606239 100644 --- a/src/clean_test.cc +++ b/src/clean_test.cc @@ -212,6 +212,28 @@ TEST_F(CleanTest, CleanRuleDryRun) { EXPECT_EQ(0u, fs_.files_removed_.size()); } +TEST_F(CleanTest, CleanRuleGenerator) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"rule regen\n" +" command = cat $in > $out\n" +" generator = 1\n" +"build out1: cat in1\n" +"build out2: regen in2\n")); + fs_.Create("out1", 1, ""); + fs_.Create("out2", 1, ""); + + Cleaner cleaner(&state_, config_, &fs_); + EXPECT_EQ(0, cleaner.CleanAll()); + EXPECT_EQ(1, cleaner.cleaned_files_count()); + EXPECT_EQ(1u, fs_.files_removed_.size()); + + fs_.Create("out1", 1, ""); + + EXPECT_EQ(0, cleaner.CleanAll(/*generator=*/true)); + EXPECT_EQ(2, cleaner.cleaned_files_count()); + EXPECT_EQ(2u, fs_.files_removed_.size()); +} + TEST_F(CleanTest, CleanFailure) { ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, "build dir: cat src1\n")); |