GNU make version

Michael Meeks michael.meeks at suse.com
Thu Feb 9 13:23:56 PST 2012


On Thu, 2012-02-09 at 20:35 +0100, Jan Holesovsky wrote:
> > Also check the version of make. make 3.81 shipped with cygwin is buggy. 
> > Use make 3.82 from http://dev-www.libreoffice.org/bin/cygwin/make
> 
> Actually, I am not really happy with stock 3.82 either; on my Linux box,
> it adds 5 unnecessary minutes when building, and then another 5 for make
> dev-install (it spends them doing noting, with 100% cpu load).

	Ho hum; I was wondering why it was so slow again to run 'make' - so I
ran my old test in tail_build:

	$ strace -f make 2>&1 | grep 'stat64' /tmp/slog | sed 's|.*/home/opt/libreoffice/||' | sed 's/".*$//' | sort | uniq -c | sort -n

	Which yields the depressingly familiar:
...
   5164 master/solver/unxlngi6.pro/inc/rtl/string.hxx
   5165 master/solver/unxlngi6.pro/inc/sal/log.hxx
   5166 master/solver/unxlngi6.pro/inc/rtl/ustring.h
   5168 master/solver/unxlngi6.pro/inc/rtl/string.h
   5168 master/solver/unxlngi6.pro/inc/rtl/textcvt.h
   5172 master/solver/unxlngi6.pro/inc/rtl/textenc.h
   5175 master/solver/unxlngi6.pro/inc/osl/interlck.h
   5194 master/solver/unxlngi6.pro/inc/osl/diagnose.h
   5200 master/solver/unxlngi6.pro/inc/sal/detail/log.h
   5233 master/solver/unxlngi6.pro/inc/sal/saldllapi.h
   5233 master/solver/unxlngi6.pro/inc/sal/types.h
   5233 master/solver/unxlngi6.pro/inc/sal/typesizes.h
   5234 master/solver/unxlngi6.pro/inc/sal/macros.h
   5235 master/solver/unxlngi6.pro/inc/sal/config.h

	On first glance it looks like the glob speedup horribly regressed. Then
I did a bit more digging inside the running 'make' and ended up with
things like:

(gdb) up
#5  func_wildcard (o=0xd2046d0 "", argv=0xbfff7df0, funcname=0x80696f4 "wildcard") at function.c:1342
1342	   char *p = string_glob (argv[0]);
(gdb) l
1337	func_wildcard (char *o, char **argv, const char *funcname UNUSED)
1338	{
1342	   char *p = string_glob (argv[0]);
1343	   o = variable_buffer_output (o, p, strlen (p));
1345	   return o;
1346	}
(gdb) p argv[0]
$2 = 0xd2047e0 "/data/opt/libreoffice/devel/sw/source/filter/rtf/rtffly.cxx"

	Interestingly though this call site is responsible only for around 6000
calls to glob (and hence stat) itself, almost all of them equivalently
banal - calling 'glob' on a single file-name that we know must exist ;-)
I imagine this is some gnu-maker's fault ...

commit 6055a5df7b6e7452987a9584d10f436ca2d349fd
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date:   Fri Oct 7 16:40:22 2011 +0200

    no more gbuild loops: break early on nonexistent objects (this commit
    breaks multi-repo support)

	could it be this one ? that introduces a good few wildcards ? it's odd -
by the time we get to here:

strace -o /tmp/slog -f make
/data/opt/libreoffice/devel/desktop/Library_sofficeapp.mk:91: 
[ WARN   ] !!!
[ WARN   ] !!! desktop/source/app/main is linked in by Executable/soffice.bin Library/libsofficeapp.so
[ WARN   ] !!!
/data/opt/libreoffice/devel/desktop/Library_unopkgapp.mk:59: 
[ WARN   ] !!!
[ WARN   ] !!! desktop/source/app/lockfile is linked in by Library/libsofficeapp.so Library/libunopkgapp.so
[ WARN   ] !!!

	I get nearly a million stats:

grep stat64 /tmp/slog | wc -l
979220

	No doubt all of the same files :-)

	running with a debug build of make inside gdb:

catch syscall stat64
continue 100000

	exits before we get near that stat count; most odd.

	So - the wildcard stuff is just a clue I suppose, someone with more
time should re-investigate I guess; I had wondered why tail_build was so
slow again :-)

	All the best,

		Michael.

-- 
michael.meeks at suse.com  <><, Pseudo Engineer, itinerant idiot



More information about the LibreOffice mailing list