So long ago already ... * Bob Friesenhahn wrote on Wed, Oct 21, 2009 at 10:26:14PM CEST: > On Wed, 21 Oct 2009, Ralf Wildenhues wrote: > >>Is there a way to make this quite a lot faster? > > > >The LTLIBRARIES bits: yes, noted. The PROGRAMS bits should be > >reasonably fast already, only forking a constant number of times. > > While clean is running, it is clear that the libraries bit is taking > most of the time. My package has quite a lot of these files to > remove, and the sequential nature of the removal process causes it > to be rather slow. > > The time to clean my package depends quite a lot on the OS: > > FreeBSD: 1.512 > OS-X Leopard: 3.575 > Solaris 10: 4.339 > Linux (under Solaris VirtualBox): 4.299 > MinGW: 6.656 > > For some of the OSs the time is about the same if the directory is > already cleaned, while for others (e.g. OS-X) the time improves > considerably if the directory is already clean.
Here's a first patch I'm merging to master. It speeds up removal of the "so_locations" files, getting me 30% faster 'make clean' overall with your package. It is not the whole story: object files are still cleaned in a slow way. For another patch. Cheers, Ralf Speed up removal of auxiliary linker output files for ltlibraries. * lib/am/ltlib.am (clean-%DIR%LTLIBRARIES): Rewrite using just one `rm' invocation. Report by Bob Friesenhahn. diff --git a/lib/am/ltlib.am b/lib/am/ltlib.am index 29aa00c..55e53e1 100644 --- a/lib/am/ltlib.am +++ b/lib/am/ltlib.am @@ -104,9 +104,11 @@ clean-%DIR%LTLIBRARIES: ## `so_locations' files are created by some linkers (IRIX, OSF) when ## building a shared object. Libtool places these files in the ## directory where the shared object is created. - @list='$(%DIR%_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done + @list='$(%DIR%_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + }