Compiling LO for lcov/gcov code coverage fails (gb_GCOV=YES)

Michael Stahl mst at libreoffice.org
Tue May 17 09:42:11 UTC 2022


On 13.05.22 16:42, Maarten Hoes wrote:
> So to sum it up, with only gcc installed, the gcov build works if I modify :
> 
> external/expat/ExternalProject_expat.mk
> external/liborcus/ExternalProject_liborcus.mk
> 
> and add :
> 
> CFLAGS += -fprofile-arcs -ftest-coverage
> CXXFLAGS += -fprofile-arcs -ftest-coverage
> LDFLAGS += -fprofile-arcs -lgcov
> 
> to the top of them. Of course, that does not seem to be a proper 
> permanent solution to the issue: the question remains why these *FLAGS 
> don't end up in these 2 files when you specify 'gb_GCOV=YES make'. 

also, there is another problem: setting global variables like this will 
affect *all* makefiles, which may or may not be what you intend - it's 
certainly bad style to do it from a local makefile.

> Pointers to where I should start looking in the build system in an 
> attempt to troubleshoot things are appreciated. I found the point where 
> the flags are supposed to be set conditionally in lines 112-117 in 
> 'solenv/gbuild/platform/com_GCC_defs.mk' , but don't really know how to 
> proceed from there. Perhaps the variables 
> "gb_CFLAGS_COMMON/gb_CXXFLAGS_COMMON/gb_LinkTarget_LDFLAGS" are not used 
> in the right places, or overwritten with something else ?

the global *FLAGS variables should be in config_host.mk, set from 
configure script.

often the best way to set *FLAGS locally is to pass them to the 
configure invocation in an ExternalProject*.mk, taking care not to mess 
up make's terrible syntax (like \ EOL escaping).

but the ExternalProject_expat.mk doesn't set *FLAGS variables - so the 
ones from config_host.mk should be in effect - and the 
ExternalProject_liborcus.mk sets them by "liborcus_CXXFLAGS=$(CXXFLAGS) 
..." so effectively appending.

ah, in LinkTarget.mk in the gb_GCOV case no CXXFLAGS are set, only 
gb_CXXFLAGS_COMMON etc - that explains the problems you see, these are 
only used for gbuild's native LinkTargets.

if you want coverage in externals, it might make sense to pass properly 
set *FLAGS variables to LO's configure - this will then override 
gbuild's optimization and debugging flags, so include "-g" in case it's 
needed for the converage (i don't know how that works).


More information about the LibreOffice mailing list