Boost logo

Boost-Build :

Subject: Re: [Boost-build] BUMPITTY BUMP: [git] genrating forward headers
From: Dave Abrahams (dave_at_[hidden])
Date: 2013-08-22 09:01:59


on Wed Aug 21 2013, Steven Watanabe <watanabesj-AT-gmail.com> wrote:

> AMDG
>
> On 08/21/2013 07:12 PM, Dave Abrahams wrote:
>>
>> Perhaps, but these posts assume a great deal of background that I don't
>> have. I need details filled in, please.
>> For instance, in that post Steven says:
>>
>>> I've applied the Boost.Build changes.
>>
>> Applied them where? What do these changes do?
>>
>
> In Boost.Build. (mostly tools/build/v2/tools/link.jam).
> These changes specify /how/ to create the header links.
> The remaining changes are to create the link targets
> and modify the rest of Boost to get the dependencies right.

OK, but in trunk? release? somwehere else?

>>> I don't want to apply the changes to Boost proper in svn, since it'll
>>> break without the git layout.
>>>
>>> Here are the changes that need to happen in git:
>>
>> What does he mean by "need to happen in git?" We are not making any
>> git-specific commits.
>>
>>> - Use the original boost-root patch (i.e. no <dependency>)
>>
>> Sorry, which patch is that?
>>
>
> It's somewhere in the archives. I think Jürgen
> and Bjørn both posted it earlier in this thread.
>
>>> - Change all uses of boost//headers to
>>> <implicit-dependency>/boost//headers. <use> <source> and <library> do not
>>> work correctly for handling generated headers.
>>> This is the cause of the build problems with
>>> the original patch.
>>
>> Is this a simple search-and-replace, or does it require some specialized
>> knowledge?
>>
>
> A search and replace won't quite work. e.g.
>
> lib A : a.cpp boost//headers ;
> becomes
> lib A : a.cpp : <implicit-dependency>/boost//headers ;
>
> lib B : b.cpp : <library>/boost//headers ;
> becomes
> lib B : b.cpp : <implicit-dependency>/boost//headers ;
>
> <implicit-dependency> needs to be in the target requirements.

So, a regexp search. Is there any other relevant prefix other than
<library>?

>>> - Add <implicit-dependency>/boost//headers to all library and test
>>> targets.
>>
>> I /think/ I understand what that means.
>>
>
> It can be added at the project level:
>
> project : requirements <implicit-dependency>/boost//headers ;

Good to know, thaks.

>>> - Change the header install glob to search the correct include
>>> directories
>>
>> I have no idea what that means. Please explain.
>>
>
> The install target has to copy all the boost headers.
> Currently it looks something like:
> headers = [ path.glob-recursive boost : *.hpp *.ipp : .svn ]
> It will need to be changed to search the library specific
> include directories instead, under the git layout only.

What layout should the headers follow in this copy?

>>> The fact that we need to disable everything that is specific for the
>>> modularized layout when building in the monolithic layout complicates
>>> the process of proceeding.
>>
>> Huh; from what I'm reading here it seems like maybe it could be done
>> with a few project-wide bjam variables. Something like:
>>
>> if $(BOOST_SVNLAYOUT)
>> {
>> BOOST_HEADER_DEPENDENCY = boost//headers ;
>> }
>> else
>> {
>> BOOST_HEADER_DEPENDENCY = <implicit-dependency>boost//headers ;
>> }
>>
>> then replace uses of "boost//headers" with "$(BOOST_HEADER_DEPENDENCY)".
>> Is the problem more complicated than I'm guessing?
>>
>
> This doesn't need to be conditionalized.
> <implicit-dependency> will work correctly in svn.

Great.

>>> I imagine that some test may be used as a config step that allow new
>>> or changed rules to be conditioned or targets to be disabled.
>>
>> Sorry, I don't know what that means.
>>
>
> I think he means exactly what you just described
> (if $(BOOST_SVNLAYOUT)).
>
> BOOST_SVNLAYOUT = [ path.glob . :
> path/to/file/that/only/exists/in/git ] ;

OK, great.

Cheers,

-- 
Dave Abrahams

Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk