aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/bin/rule.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libbuild2/bin/rule.hxx')
-rw-r--r--libbuild2/bin/rule.hxx44
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;