Hi!
On Tue, 2020-08-25 at 09:53:32 +0200, Jakub Wilk wrote:
> * Jakub Wilk <[email protected]>, 2020-08-24, 18:41:
> > /usr/share/dpkg/architecture.mk is very slow:
> >
> > $ time printf 'include /usr/share/dpkg/architecture.mk\nall:\n\ttrue\n' |
> > make -f - > /dev/null
> >
> > real 0m1.161s
> > user 0m1.009s
> > sys 0m0.127s
> >
> > strace tells me this is because it spawns dpkg-architecture 33(!) times.
>
> This is probably fallout after fixing #888964: lazy evaluation of the
> variables doesn't quite work when they are exported.
This seems to be an increasing regression in make:
$ cat a.mk
include /usr/share/dpkg/architecture.mk
all:
true
(sid)$ time make -f a.mk
real 0m0.824s
user 0m0.702s
sys 0m0.131s
(buster)$ time make -f a.mk
real 0m0.396s
user 0m0.351s
sys 0m0.054s
(stretch)$ time make -f a.mk
real 0m0.007s
user 0m0.008s
sys 0m0.000s
> You could use something like this to set all variables with only single
> dpkg-architecture call:
>
> $(foreach var,$(shell dpkg-architecture),$(eval export $(var)))
>
> But it would need a guard to skip the call if all the variables were already
> set in environment.
Yes or add a new --print-make command or similar, but meh. I think
this might ideally need fixing in make?
Thanks,
Guillem