diff options
Diffstat (limited to 'libbuild2/bin/rule.hxx')
-rw-r--r-- | libbuild2/bin/rule.hxx | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/libbuild2/bin/rule.hxx b/libbuild2/bin/rule.hxx index 51693a7..9dd1d14 100644 --- a/libbuild2/bin/rule.hxx +++ b/libbuild2/bin/rule.hxx @@ -9,22 +9,52 @@ #include <libbuild2/rule.hxx> +#include <libbuild2/dist/rule.hxx> + #include <libbuild2/bin/export.hxx> namespace build2 { namespace bin { - // "Fail rule" for obj{}, [h]bmi{}, and libu{} that issues diagnostics if - // someone tries to build any of these groups directly. + // "Fail rule" for obj{} and [h]bmi{} that issues diagnostics if someone + // tries to build these groups directly. + // + // Note that for dist it acts as a pass-through to all existing (declared) + // members. // - class fail_rule: public simple_rule + class obj_rule: public dist::rule { public: - fail_rule () {} + obj_rule () {} virtual bool - match (action, target&, const string&) const override; + match (action, target&) const override; + + virtual recipe + apply (action, target&) const override; + }; + + // This rule picks, matches, and unmatches (if possible) a member for the + // purpose of making its metadata (for example, library's poptions, if + // it's one of the cc libraries) available. + // + // The underlying idea here is that someone else (e.g., cc::link_rule) + // makes a more informed choice and we piggy back on that decision, + // falling back to making our own based on bin.lib and bin.exe.lib. Note + // that for update this rule always returns target_state::unchanged. + // + // Note also that for dist it acts as a pass-through to all existing + // (declared) members. + // + class libul_rule: public dist::rule + { + public: + explicit + libul_rule () {} + + virtual bool + match (action, target&) const override; virtual recipe apply (action, target&) const override; @@ -32,13 +62,15 @@ namespace build2 // Pass-through to group members rule, similar to alias. // + // Note that for dist it always passes to both members. + // class LIBBUILD2_BIN_SYMEXPORT lib_rule: public simple_rule { public: lib_rule () {} virtual bool - match (action, target&, const string&) const override; + match (action, target&) const override; virtual recipe apply (action, target&) const override; |