configure: speed up flatten_extralibs_wrapper()
authorAvi Halachmi (:avih) <avihpit@yahoo.com>
Mon, 30 Jul 2018 19:39:15 +0000 (22:39 +0300)
committerJames Almer <jamrial@gmail.com>
Mon, 8 Oct 2018 23:55:53 +0000 (20:55 -0300)
commit42355d12dbfd92b11fa6c28858ea041bcf94bd7b
tree386d9352fb7a4803ff423829f6cdda08294312ae
parenteb495b20e51fb7a5a02ca3004fd5a8ea359592f4
configure: speed up flatten_extralibs_wrapper()

x50 - x200 faster.

Currently configure spends 50-70% of its runtime inside a single
function: flatten_extralibs[_wrapper] - which does string processing.

During its run, nearly 20K command substitutions (subshells) are used,
including its callees unique() and resolve(), which is the reason
for its lengthy run.

This commit avoids all subshells during its execution, speeding it up
by about two orders of magnitude, and reducing the overall configure
runtime by 50-70% .

resolve() is rewritten to avoid subshells, and in unique() and
flatten_extralibs() we "inline" the filter[_out] functionality.

Note that logically, "unique" functionality has more than one possible
output (depending on which of the recurring items is kept). As it
turns out, other parts expect the last recurring item to be kept
(which was the original behavior of uniqie()). This patch preservs
its output order.

Tested-by: Michael Niedermayer <michael@niedermayer.cc>
Tested-by: Helmut K. C. Tessarek <tessarek@evermeet.cx>
Tested-by: Dave Yeo <daveryeo@telus.net>
Tested-by: Reino Wijnsma <rwijnsma@xs4all.nl>
Signed-off-by: James Almer <jamrial@gmail.com>
(cherry picked from commit 58b81ac621aea1428aa9e7ca20ad45fc18dba9f7)
configure