From 9637eb583a4e2bc028b93d5b8f5ceb981402554d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 6 Oct 2021 08:49:56 +0200 Subject: Do not install exe{} prerequisites of file targets --- libbuild2/install/rule.cxx | 3 +++ libbuild2/install/rule.hxx | 22 +++++++++++++++------- 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 ()) + 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. -- cgit v1.1