aboutsummaryrefslogtreecommitdiff
path: root/build/test
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-08-27 15:11:40 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-08-27 15:11:40 +0200
commitfd689eb883655dcb29e505b041cd02fac01f0bac (patch)
tree0d85ec32d95a1c96eaa7eff28734b900c44dd3ca /build/test
parent7f2d06258d57e39940e8fa959336da0ea66fe37f (diff)
Dist module/meta-operation initial implementation
Diffstat (limited to 'build/test')
-rw-r--r--build/test/module.cxx12
-rw-r--r--build/test/rule.cxx24
2 files changed, 18 insertions, 18 deletions
diff --git a/build/test/module.cxx b/build/test/module.cxx
index 9495275..8c0df38 100644
--- a/build/test/module.cxx
+++ b/build/test/module.cxx
@@ -51,18 +51,20 @@ namespace build
{
auto& rs (r.rules);
- // Register the standard alias rule for the test operation.
+ // Register our test running rule.
//
- rs.insert<alias> (test_id, "alias", alias_rule::instance);
+ rs.insert<target> (perform_id, test_id, "test", rule_);
- // Register our test running rule.
+ // Register our rule for the dist meta-operation. We need
+ // to do this because we have "ad-hoc prerequisites", test
+ // input/output files, that need to be entered into the
+ // target list.
//
- rs.insert<target> (test_id, "test", rule_);
+ rs.insert<target> (dist_id, test_id, "test", rule_);
}
// Enter module variables.
//
- if (first)
{
variable_pool.find ("test", bool_type);
variable_pool.find ("test.input", name_type);
diff --git a/build/test/rule.cxx b/build/test/rule.cxx
index eecd613..25baaa7 100644
--- a/build/test/rule.cxx
+++ b/build/test/rule.cxx
@@ -113,11 +113,6 @@ namespace build
if (!mr.bvalue) // Not a test.
return noop_recipe;
- // In case of test, we don't do anything for other meta-operations.
- //
- if (a.operation () == test_id && a.meta_operation () != perform_id)
- return noop_recipe;
-
// Ok, if we are here, then this means:
//
// 1. This target is a test.
@@ -218,18 +213,21 @@ namespace build
}
}
- if (ot != nullptr && in == on)
+ if (ot != nullptr)
{
- build::match (a, *ot);
-
- if (ot->state () == target_state::unchanged)
+ if (in != on)
{
- unmatch (a, *ot);
- ot = nullptr;
+ build::match (a, *ot);
+
+ if (ot->state () == target_state::unchanged)
+ {
+ unmatch (a, *ot);
+ ot = nullptr;
+ }
}
+ else
+ ot = it;
}
- else
- ot = it;
// Find the "real" update rule, that is, the rule that would