diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2021-07-01 09:43:29 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2021-07-01 09:43:29 +0200 |
commit | c770f928c88950d9044167e2e2897a9ab18547cf (patch) | |
tree | 1d256fdfe378cd49254f6d8157f16ba76ec7c267 /libbuild2/cc/link-rule.hxx | |
parent | 17801b7da2103072ff6e83f855e85b3524c6de5d (diff) |
Suppress duplicate libraries in pkg-config files
Diffstat (limited to 'libbuild2/cc/link-rule.hxx')
-rw-r--r-- | libbuild2/cc/link-rule.hxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libbuild2/cc/link-rule.hxx b/libbuild2/cc/link-rule.hxx index c761d53..f990415 100644 --- a/libbuild2/cc/link-rule.hxx +++ b/libbuild2/cc/link-rule.hxx @@ -134,6 +134,40 @@ namespace build2 return &back (); } + + // Hoist the elements corresponding to the specified library to the + // end. + // + void + hoist (strings& args, appended_library& al) + { + if (al.begin != al.end) + { + // Rotate to the left the subrange starting from the first element + // of this library and until the end so that the element after the + // last element of this library becomes the first element of this + // subrange. We also need to adjust begin/end of libraries + // affected by the rotation. + // + rotate (args.begin () + al.begin, + args.begin () + al.end, + args.end ()); + + size_t n (al.end - al.begin); + + for (appended_library& al1: *this) + { + if (al1.begin >= al.end) + { + al1.begin -= n; + al1.end -= n; + } + } + + al.end = args.size (); + al.begin = al.end - n; + } + } }; void |