diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-31 12:52:20 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-31 12:52:20 +0200 |
commit | bbd0f3bb21442a2833916110cbe8e9a07e9f4c1f (patch) | |
tree | d25de6f2bcfa4b6cabe1fd55a1b8f508005de4c1 /build/rule | |
parent | 729b56300c441a0d63c7d2013eb5a881211d352b (diff) |
Essential install module functionality
Diffstat (limited to 'build/rule')
-rw-r--r-- | build/rule | 27 |
1 files changed, 10 insertions, 17 deletions
@@ -23,20 +23,22 @@ namespace build // Can contain neither (both are NULL), one of, or both. If both // are NULL, then it is a "no match" indicator. // - // Note that if the "payload" is stored in value instead of + // Note that if the "payload" is stored in *value instead of // prerequisite, then target must not be NULL. // union { prerequisite_type* prerequisite; - bool value; + + bool bvalue; + void* pvalue; + const void* cpvalue; }; target_type* target; action recipe_action = action (); // Used as recipe's action if set. - match_result (target_type& t, bool v): value (v), target (&t) {} match_result (std::nullptr_t v = nullptr): prerequisite (v), target (v) {} match_result (prerequisite_type& p): prerequisite (&p), target (nullptr) {} match_result (prerequisite_type* p): prerequisite (p), target (nullptr) {} @@ -45,6 +47,11 @@ namespace build match_result (const prerequisite_member& pm) : prerequisite (&pm.prerequisite.get ()), target (pm.target) {} + match_result (target_type& t, bool v): bvalue (v), target (&t) {} + match_result (target_type& t, void* v): pvalue (v), target (&t) {} + match_result (target_type& t, const void* v): cpvalue (v), target (&t) {} + match_result (target_type& t, std::nullptr_t v): pvalue (v), target (&t) {} + explicit operator bool () const { @@ -77,20 +84,6 @@ namespace build static target_state perform_update (action, target&); - // Sometimes it is useful, normally as an optimization, to check - // if the file target is up to date. In particular, if the rule - // that matched a target is this fallback rule and the target - // has no prerequisites, then it means it is up to date. - // - static bool - uptodate (action a, target& t) - { - recipe_function* const* r (t.recipe (a).target<recipe_function*> ()); - return r != nullptr && *r == &perform_update && - t.prerequisites.empty () && - (t.group == nullptr || t.group->prerequisites.empty ()); - } - static file_rule instance; }; |