aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2022-08-17 14:46:08 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2022-08-17 14:46:08 +0200
commitfe94baf3fe7b7d6d4f97c9e6841c0d9b2915d810 (patch)
tree3a4a4882f6b6c8a41c35fb040a4d3e6e98015881
parenta62e014060770f478216cc5c18416fb5d5df9eb4 (diff)
Fix bug in handling of "in *.export.libs but not in prerequisites" case
-rw-r--r--libbuild2/cc/common.cxx21
1 files changed, 16 insertions, 5 deletions
diff --git a/libbuild2/cc/common.cxx b/libbuild2/cc/common.cxx
index ded2902..9b82572 100644
--- a/libbuild2/cc/common.cxx
+++ b/libbuild2/cc/common.cxx
@@ -611,25 +611,36 @@ namespace build2
; // See above.
else if (l.ctx.phase == run_phase::match)
{
- if (!t->matched (a))
- w = "not matched";
+ // We allow not matching installed libraries if all we need
+ // is their options (see compile_rule::apply()).
+ //
+ if (proc_lib || t->base_scope ().root_scope () != nullptr)
+ {
+ if (!t->matched (a))
+ w = "not matched";
+ }
}
- else if (proc_lib)
+ else
{
// Note that this check we only do if there is proc_lib
// (since it's valid to process library's options before
// updating it).
//
- if (t->mtime () == timestamp_unknown)
- w = "out of date";
+ if (proc_lib)
+ {
+ if (t->mtime () == timestamp_unknown)
+ w = "out of date";
+ }
}
if (w != nullptr)
+ {
fail << (impl ? "implementation" : "interface")
<< " dependency " << *t << " is " << w <<
info << "mentioned in *.export." << (impl ? "impl_" : "")
<< "libs of target " << l <<
info << "is it a prerequisite of " << l << "?";
+ }
// Process it recursively.
//