| # Check that dependency scanning order is respected. |
| # |
| # RUN: rm -rf %t.build |
| # RUN: mkdir -p %t.build |
| # RUN: echo "input" > %t.build/input |
| # RUN: cp %s %t.build/build.llbuild |
| |
| |
| # Run an initial build forces "generated-input" to be one of the first declared |
| # keys. This is explicitly checking against an implementation detail that, when |
| # written, the dependency scanning order could be tied to the database key |
| # identifier index. |
| # |
| # RUN: %{llbuild} buildsystem build --serial --chdir %t.build PREPARE > %t.prepare.out 2> %t.prepare.err || true |
| |
| |
| # Run the actual initial build. |
| # |
| # RUN: %{llbuild} buildsystem build --serial --chdir %t.build > %t.out |
| # RUN: %{FileCheck} --input-file=%t.out %s --check-prefix=CHECK-INITIAL |
| # RUN: diff %t.build/input %t.build/generated-input |
| # RUN: diff %t.build/input %t.build/output |
| # |
| # CHECK-INITIAL: CONSUMER |
| |
| |
| # Check that a null build does nothing. |
| # |
| # RUN: %{llbuild} buildsystem build --serial --chdir %t.build > %t2.out |
| # RUN: echo "END-OF-FILE" >> %t2.out |
| # RUN: %{FileCheck} --input-file=%t2.out %s --check-prefix=CHECK-REBUILD |
| # |
| # CHECK-REBUILD-NOT: GENERATOR |
| # CHECK-REBUILD-NOT: CONSUMER |
| |
| |
| # Check that a modification triggers both uses. |
| # |
| # RUN: echo "MOD" >> %t.build/input |
| # RUN: %{llbuild} buildsystem build --serial --chdir %t.build --trace /tmp/x.trace > %t3.out |
| # RUN: %{FileCheck} --input-file=%t3.out %s --check-prefix=CHECK-AFTER-MOD |
| # RUN: diff %t.build/input %t.build/generated-input |
| # RUN: diff %t.build/input %t.build/output |
| # |
| # CHECK-AFTER-MOD: GENERATOR |
| # CHECK-AFTER-MOD: CONSUMER |
| |
| |
| # Check that another null build does nothing. |
| # |
| # RUN: %{llbuild} buildsystem build --serial --chdir %t.build > %t4.out |
| # RUN: echo "END-OF-FILE" >> %t4.out |
| # RUN: %{FileCheck} --input-file=%t4.out %s --check-prefix=CHECK-REBUILD |
| |
| client: |
| name: basic |
| |
| targets: |
| "": ["output"] |
| PREPARE: ["generated-input"] |
| |
| commands: |
| # A command which consumes a generated input and reports it as a discovered dep. |
| C.consumer: |
| tool: shell |
| description: CONSUMER |
| inputs: ["<GENERATOR>"] |
| outputs: ["output"] |
| # We report the dependency twice just to cover the duplicate dependency scenario. |
| args: |
| "echo \"output: generated-input generated-input\" > output.d && |
| cp generated-input output" |
| deps: output.d |
| deps-style: makefile |
| |
| # A command which generates the discovered input. |
| # |
| # NOTE: The generated-input itself is intentionally never declared as an |
| # output here; this test is intentionally checking that we support a situation |
| # where the dependency edge is only valid due to some other explicit ordering |
| # in the build system, in this case the edge "C.consumer -> <GENERATOR>". |
| C.generator: |
| tool: shell |
| description: GENERATOR |
| inputs: ["input"] |
| outputs: ["<GENERATOR>"] |
| args: cp input generated-input |