aboutsummaryrefslogtreecommitdiff
path: root/build2/cxx/utility.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'build2/cxx/utility.cxx')
-rw-r--r--build2/cxx/utility.cxx18
1 files changed, 12 insertions, 6 deletions
diff --git a/build2/cxx/utility.cxx b/build2/cxx/utility.cxx
index cf9c4d0..7aae6ac 100644
--- a/build2/cxx/utility.cxx
+++ b/build2/cxx/utility.cxx
@@ -73,28 +73,34 @@ namespace build2
}
void
- append_lib_options (cstrings& args, target& l, const char* var)
+ append_lib_options (cstrings& args, target& l, const char* var, lorder lo)
{
using namespace bin;
for (target* t: l.prerequisite_targets)
{
- if (t->is_a<lib> () || t->is_a<liba> () || t->is_a<libs> ())
- append_lib_options (args, *t, var);
+ if (lib* l = t->is_a<lib> ())
+ t = &link_member (*l, lo); // Pick one of the members.
+
+ if (t->is_a<liba> () || t->is_a<libs> ())
+ append_lib_options (args, *t, var, lo);
}
append_options (args, l, var);
}
void
- hash_lib_options (sha256& csum, target& l, const char* var)
+ hash_lib_options (sha256& csum, target& l, const char* var, lorder lo)
{
using namespace bin;
for (target* t: l.prerequisite_targets)
{
- if (t->is_a<lib> () || t->is_a<liba> () || t->is_a<libs> ())
- hash_lib_options (csum, *t, var);
+ if (lib* l = t->is_a<lib> ())
+ t = &link_member (*l, lo); // Pick one of the members.
+
+ if (t->is_a<liba> () || t->is_a<libs> ())
+ hash_lib_options (csum, *t, var, lo);
}
hash_options (csum, l, var);