tags:

views:

364

answers:

1

On HPUX I need to use the +h link option to get the boost 1.39.0 shared libraries to contain correct paths.

-Wl,+h$(SPACE)-Wl,$(<[-1]:D=)

(From http://www.nabble.com/HPUX-aCC:-Howto-avoid-building-boost-libraries-containing-absolute-library-path-references-when-calling-bjam-install-td17619511.html)

I've tested that this works by hacking the gcc.jam toolset file:

796c796
<     "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS)
---
>     "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,+h$(SPACE)-Wl,$(<[-1]:D=) -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS)

But now I want a permanent solution, and I can't work out how.

First I tried putting a bjam conditional in the actions link.dll section, but that section contains shell commands.

Then I tried adding the extra section to the OPTIONS variable for those targets. But that didn't seem to have any effect on the link.

Finally I tried creating a separate toolset as a copy of gcc.jam (hpuxgcc.jam), but I couldn't get that to work at all. I guess there are more places I need to change variable names, but the Jam syntax is beyond what I understand.

Does anyone have some better idea how to get this to work? Or should I just convert the hacky version into a patch I run before building Boost? Surely there's a better way?

Are guess the question is either:

a) How do I (conditional on the platform) add the text to the linker command in the gcc.jam

Or:

b) How do I create a new toolset based on gcc.jam?

Which ever is easier...

+1  A: 

What does -h option do? Does it set the "soname"? If so, note the HAVE_SONAME and SONAME_OPTION use in the same action. Then, note the block of code in gcc.jam where it is set:

if [ os.name ] != NT && [ os.name ] != OSF && [ os.name ] != HPUX && [ os.name ] != AIX
{
    # OSF does have an option called -soname but it does not seem to work as
    # expected, therefore it has been disabled.
    HAVE_SONAME   = "" ;
    SONAME_OPTION = -h ;
}

You can tweak this according to your platform.

I suggest you follow up with this on [email protected], which is much better place for Boost.Build questions than stack overflow.

Vladimir Prus
A added a block that set the HAVE_SONAME and SONAME_OPTION on HP-UX and that solved the problem. Thanks.
Douglas Leeder
Please drop the patch (svn diff output) to [email protected] so that it can be included in the official version. Thanks.
Vladimir Prus