[CMake] CMake Coverage broken with Ninja

Gerhard Gappmeier gerhard.gappmeier at ascolab.com
Sat Sep 2 03:14:16 EDT 2017


Hi Haocheng,

thanks for helping.
I guess this has to do with another issue. The Ninja generator generates
different paths then the default Unix Makefile generator.

This leads to the following behavior in normal build operations:
I introduced a warning in the printf line to demonstrate this.

With Makefiles: mkdir bld && cd bld && cmake ..
Build inside Vim using ":make"

[ 50%] Building C object CMakeFiles/demo.dir/main.c.o
/home/gergap/tmp/demo/main.c: In function ‘main’:
/home/gergap/tmp/demo/main.c:5:12: warning: format ‘%i’ expects a
matching ‘int’ argument [-Wformat=]
     printf("Hello World %i\n");
            ^
[100%] Linking C executable demo
[100%] Built target demo

Press ENTER or type command to continue

as you can see the warning message contains the absolute path, so
parsing the errors works for Vim (Emacs, or whatever tool),
and you can jump to the error location.

Now the same with Ninja: mkdir bld && cd bld && cmake -GNinja ..
Build inside Vim using ":make" (use ":set makeprg=ninja" first)

cd into build dir '/home/gergap/tmp/demo/bld/../bld'...
executing ninja...
[1/2] Building C object CMakeFiles/demo.dir/main.c.o
../main.c: In function ‘main’:
../main.c:5:12: warning: format ‘%i’ expects a matching ‘int’ argument
[-Wformat=]
     printf("Hello World %i\n");
            ^
[2/2] Linking C executable demo
cd back
/home/gergap/tmp/demo/bld

Press ENTER or type command to continue

As you can see now the paths are relative to the build folder, thus
jumping to the error location only works when Vim has the build folder
set as working dir,
and this is typically not the case.
This is quite annoying, inconsistent with Makefiles and was already
reported once here: https://cmake.org/Bug/print_bug_page.php?bug_id=13894
AFAIK this was never fixed.

Now I suspect this to be also the reason for the coverage issues.
I hope this helps.


On 09/01/2017 04:09 PM, Haocheng Liu wrote:
>
>
> On Fri, Sep 1, 2017 at 9:41 AM, Gerhard Gappmeier
> <gerhard.gappmeier at ascolab.com <mailto:gerhard.gappmeier at ascolab.com>>
> wrote:
>
>     Hi Haocheng,
>
>     `chcp` seems to be a Windows command.
>     I'm talking about Linux, which is UTF-8 by default:
>
>     $> locale
>     LANG=en_US.utf8
>     LC_CTYPE="en_US.utf8"
>     LC_NUMERIC="en_US.utf8"
>     LC_TIME="en_US.utf8"
>     LC_COLLATE="en_US.utf8"
>     LC_MONETARY="en_US.utf8"
>     LC_MESSAGES="en_US.utf8"
>     LC_PAPER="en_US.utf8"
>     LC_NAME="en_US.utf8"
>     LC_ADDRESS="en_US.utf8"
>     LC_TELEPHONE="en_US.utf8"
>     LC_MEASUREMENT="en_US.utf8"
>     LC_IDENTIFICATION="en_US.utf8"
>     LC_ALL=
>
>     any ideas for the Linux platform?
>
> Hum, I tried your example, the problem is
> that ${CMAKE_BUILD_DIRECTORY}/testing is missing a main.c file. If I
> create a fake file and the coverage reports 100%. I've Cc Brad King
> since He is most familiar with Ninja related issues.
>
>
>     mit freundlichen Grüßen / best regards
>
>     *Gerhard Gappmeier*
>     ascolab GmbH - automation systems communication laboratory
>     Tel.: +49 911 569846 203 <tel:+49%20911%20569846203>
>     Fax: +49 911 569846 400 <tel:+49%20911%20569846400>
>     Web: http://www.ascolab.com
>     GPG-KeyId: 7A78B0A7
>     GPG-Fingerprint: A964 56A2 32E9 A537 AB7E EBD6 8D09 0D72 7A78 B0A7
>
>     --
>     *ascolab GmbH*
>     Geschäftsführer: Gerhard Gappmeier, Matthias Damm, Uwe Steinkrauß
>     Sitz der Gesellschaft: An der Kaufleite 34 • 90562 Kalchreuth •
>     Germany
>     Registernummer: HRB 9360
>     Registergericht: Amtsgericht Fürth
>
>     On 09/01/2017 02:49 PM, Haocheng Liu wrote:
>>     chcp 65001
>
>
>
>
> -- 
> Best regards
> Haocheng
>
> Haocheng LIU
> Kitware, Inc.
> R&D Engineer
> 21 Corporate Drive
> Clifton Park, NY 12065-8662
> Phone: 518-881-4421 <tel:%28518%29%20881-4421>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20170902/b29997fb/attachment.html>


More information about the CMake mailing list