diff options
author | Brad King <brad.king@kitware.com> | 2015-07-13 19:25:50 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-02-03 14:37:17 (GMT) |
commit | cc39240a10fb040fca80bf3669245f2f2d5736c5 (patch) | |
tree | 0b26230a0dd1dde9514dbbe7d6f06a3402c6e8b3 /src/build_test.cc | |
parent | f1f3f494f5f67a4cd64b0cddaad472b070f6db07 (diff) | |
download | Ninja-cc39240a10fb040fca80bf3669245f2f2d5736c5.zip Ninja-cc39240a10fb040fca80bf3669245f2f2d5736c5.tar.gz Ninja-cc39240a10fb040fca80bf3669245f2f2d5736c5.tar.bz2 |
Add support for build statement implicit outputs
Some build rules produce outputs that are not mentioned on the command
line but that should be part of the build graph. Such outputs should
not be named in the `$out` variable. Extend the build statement syntax
to support specification of implicit outputs using the syntax
`| out1 out2` after the explicit outputs and before the `:`.
For example, compilation of a Fortran source file `foo.f90` that defines
`MODULE FOO` may now be specified as:
rule fc
command = f95 -c $in -o $out
build foo.o | foo.mod: fc foo.f90
The `foo.mod` file is an implicit output generated by the compiler based
on the content of the source file and not mentioned on the command line.
Diffstat (limited to 'src/build_test.cc')
-rw-r--r-- | src/build_test.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/build_test.cc b/src/build_test.cc index 20fb664..7c6060d 100644 --- a/src/build_test.cc +++ b/src/build_test.cc @@ -717,6 +717,22 @@ TEST_F(BuildTest, TwoOutputs) { EXPECT_EQ("touch out1 out2", command_runner_.commands_ran_[0]); } +TEST_F(BuildTest, ImplicitOutput) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"rule touch\n" +" command = touch $out $out.imp\n" +"build out | out.imp: touch in.txt\n")); + fs_.Create("in.txt", ""); + + string err; + EXPECT_TRUE(builder_.AddTarget("out.imp", &err)); + ASSERT_EQ("", err); + EXPECT_TRUE(builder_.Build(&err)); + EXPECT_EQ("", err); + ASSERT_EQ(1u, command_runner_.commands_ran_.size()); + EXPECT_EQ("touch out out.imp", command_runner_.commands_ran_[0]); +} + // Test case from // https://github.com/ninja-build/ninja/issues/148 TEST_F(BuildTest, MultiOutIn) { |