[GNC-dev] Rework GoogleTest integration

Christian Gruber christian.gruber at posteo.de
Thu Aug 15 18:22:25 EDT 2019

Am 15.08.19 um 00:23 schrieb Christian Gruber:
>> I think our distro packagers would object to any option other than 
>> relying on tools outside of the build system to provide the 
>> googletest sources and maybe a prebuilt static lib. It's a one-off 
>> for the casual builder and easily scripted for everyone else. 
>> Building gtest is also sufficiently trivial that it's not all that 
>> interesting to call out to guests own CMakeLists.txt instead of just 
>> building the two libraries in ours. OTOH it's possible that might 
>> change at some point, so
> Ok, so you want to keep build process as it is at the moment. In this 
> case at least bug 797344 should be fixed. I'll provide a PR. And I 
> recommend to use library target gtest directly instead of variables 
> GTEST_LIB, GTEST_INCLUDE_DIR as stated above. The same I recommend for 
> library target gmock. I'll add this to the same PR.
> Finally I recommend to add a few more notes on the Wiki page 
> https://wiki.gnucash.org/wiki/Google_Test. For me not familiar with 
> the GnuCash build system it was not obvious at the beginning, that 
> gtest is built inside GnuCash build system, because this is a little 
> bit unusual. It could for instance be explained, how to build gtest 
> and gmock from inside GnuCash build system via "make gtest" and "make 
> gmock" and that this way one can test the correct CMake configuration 
> for GnuCash regarding variables GTEST_ROOT and GMOCK_ROOT. The Wiki 
> page only explains how to "test the installation" from inside the 
> GoogleTest build system and tells that this is "not used in practice". 
> But this doesn't really test the CMake configuration for GnuCash.
>> I don't think anyone's actually tried doing a mock with GMock yet. 
>> There are hand-rolled ones in the QOF tests, but they use the old 
>> Glib test facility. Most of the C++ work so far has been at the 
>> lowest levels so that the C++ classes don't have any mockable 
>> dependencies. That will change when we get to redoing the engine as 
>> we'll want to use mock for at least the backend. We don't want to 
>> remove GMock from the dependencies.
>> I agree about libgtest_main.a. Would you like to make a PR to remove 
>> all of the inclusion of gtest_main.cc and GTEST_SRC?
> I opened PR https://github.com/Gnucash/gnucash/pull/552.
>> Regards,
>> John Ralls
> Regards,
> Christian
I just realized now, after PR 
https://github.com/Gnucash/gnucash/pull/552 failed to build, that there 
is a significant difference between using prebuilt GoogleTest libraries 
and building GoogleTest from source repository. In the latter case 
libgtest_main.a doesn't exist at all, it isn't built anywhere. And 
GTEST_LIB contains only libgtest.a in this case. Therefore I created a 
new pull request https://github.com/Gnucash/gnucash/pull/555, which 
removes GTEST_SRC and additionally adds source file gtest_main.cc to the 
sources of libgtest.a. I also thought about creating a second target 
gtest_main for building libgtest_main.a as in GoogleTest source 
repository, but in the end I thought that's exaggerated, because both 
libraries are always used in combination in GnuCash.


More information about the gnucash-devel mailing list