aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2021-10-06 08:49:56 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2021-10-06 08:49:56 +0200
commit9637eb583a4e2bc028b93d5b8f5ceb981402554d (patch)
tree788083324687b6fe4d4309c6f3521a4a10b123b5
parent2572a7015d9c2524a9d8299b2aa0b30ab8c880f5 (diff)
Do not install exe{} prerequisites of file targets
-rw-r--r--libbuild2/install/rule.cxx3
-rw-r--r--libbuild2/install/rule.hxx22
2 files changed, 18 insertions, 7 deletions
diff --git a/libbuild2/install/rule.cxx b/libbuild2/install/rule.cxx
index d678940..3543286 100644
--- a/libbuild2/install/rule.cxx
+++ b/libbuild2/install/rule.cxx
@@ -288,6 +288,9 @@ namespace build2
filter (const scope* is,
action, const target& t, const prerequisite& p) const
{
+ if (p.is_a<exe> ())
+ return nullptr;
+
const target& pt (search (t, p));
return is == nullptr || pt.in (*is) ? &pt : nullptr;
}
diff --git a/libbuild2/install/rule.hxx b/libbuild2/install/rule.hxx
index ce60bb9..2ed162e 100644
--- a/libbuild2/install/rule.hxx
+++ b/libbuild2/install/rule.hxx
@@ -25,9 +25,10 @@ namespace build2
match (action, target&, const string&) const override;
// Return NULL if this prerequisite should be ignored and pointer to its
- // target otherwise. The default implementation ignores prerequsites
- // that are outside of the installation scope (see install_scope() for
- // details).
+ // target otherwise.
+ //
+ // The default implementation ignores prerequsites that are outside of
+ // the installation scope (see install_scope() for details).
//
// The prerequisite is passed as an iterator allowing the filter to
// "see" inside groups.
@@ -80,7 +81,9 @@ namespace build2
match (action, target&, const string&) const override;
// Return NULL if this group member should be ignored and pointer to its
- // target otherwise. The default implementation accepts all members.
+ // target otherwise.
+ //
+ // The default implementation accepts all members.
//
virtual const target*
filter (action, const target&, const target& group_member) const;
@@ -105,9 +108,14 @@ namespace build2
match (action, target&, const string&) const override;
// Return NULL if this prerequisite should be ignored and pointer to its
- // target otherwise. The default implementation ignores prerequsites
- // that are outside of the installation scope (see install_scope() for
- // details).
+ // target otherwise.
+ //
+ // The default implementation ignores prerequsites that are outside of
+ // the installation scope (see install_scope() for details). It also
+ // ignores exe{} prerequisites assuming an exe{} listed for a file
+ // target is there to execute (e.g., to generate that target) and
+ // normally should not be installed (an exe{} would typically be
+ // installed via the dir{./} alias).
//
// The prerequisite is passed as an iterator allowing the filter to
// "see" inside groups.