All submissions to this site are governed by the Second Life Viewer Contribution Agreement. By submitting patches and other information using this site, you acknowledge that you have read, understood, and agreed to those terms.

Review Board 1.6.11

Welcome to the Second Life Viewer Code Review tool.
See the documentation on our wiki for how to use this site.

VWR-24366: CMAKE_EXE_LINKER_FLAGS not honored when linking the viewer binary if -DLL_TESTS:BOOL=ON

Review Request #95 - Created Jan. 14, 2011 and submitted

Aleric Inglewood Reviewers
viewer
VWR-24366
None viewer-development
Setting CMAKE_EXE_LINKER_FLAGS to "" because the tests "need" that is pretty
hard measure. Not only is it not necessary to do so, it also changes how
the viewer is linked depending on a whether or not the tests are compiled
and that is not good.

The reason that this was needed is that libgmock is underlinked
(see http://wiki.mandriva.com/en/Underlinking), which is not compatible
with -Wl,--as-needed that is being used on linux. libgmock.so.0 needs
a symbol that is defined in libgtest.so.o, but -lgtest was not passed
to the linker when creating libgmock.so.0:

Underlinked (no libgtest.so.o):
$ objdump -p /usr/lib/libgmock.so.0 | grep NEEDED
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libc.so.6
NEEDED libgcc_s.so.1

The solution is to wrap between -Wl,--no-as-needed -lgtest -Wl,--as-needed
causing it to be added again. This is only needed on linux, since that
the only platform that we use -Wl,--as-needed on. Moreover, we can just
set GOOGLEMOCK_LIBRARIES to "gmock -Wl,--no-as-needed gtest -Wl,--as-needed"
since that is only passed to TARGET_LINK_LIBRARIES which only adds -l
in front of 'things' that don't start with '-', to allow you do pass
special flags like this.

 
Ship it!
Posted (Jan. 14, 2011, 2:46 p.m.)
Looks sane and your explanation makes sense.
Ship it!
Posted (Jan. 14, 2011, 5:27 p.m.)
Makes sense.
  1. *bump*
    
    Can this patch please be added to viewer-development soon? It's annoying that I can't even compile the viewer without having to apply local patches :/ (I just lost an hour because I didn't realize that this patch still wasn't in v-d and waited and waited and waited and waited an waited for the viewer to link, until I finally just hit control-C.)