|
Boost-Build : |
Subject: Re: [Boost-build] multiple generated targets from a single source file
From: George Georgiev (george.georgiev.sf_at_[hidden])
Date: 2012-04-02 23:26:00
Thank you Steven,
This was helpful. There is only one think left.
I would like to be able to mix generated sources from different types
in the same library if possible. For example what I need to do now is:
lib shared-main :
foo.compil
:
<compil-type>main
;
lib shared-partial :
foo.compil
:
<compil-type>partial
;
lib server :
foo.compil
shared-main
shared-partial
:
<compil-type>adapter
;
lib client :
foo.compil
shared-main
shared-partial
:
<compil-type>proxy
;
Is it possible some how I to be able to do (I tried this one it does not work):
lib shared :
<compil-type>main:foo.compil
<compil-type>partial:foo.compil
;
lib server :
foo.compil
shared
:
<compil-type>adapter
;
lib client :
foo.compil
shared
:
<compil-type>proxy
;
Thanks,
George
On Mon, Apr 2, 2012 at 5:41 AM, Steven Watanabe <watanabesj_at_[hidden]> wrote:
> AMDG
>
> On 04/01/2012 01:13 PM, George Georgiev wrote:
>> Hi,
>>
>> I am tying to resolve something that looks a corner case for the Boost
>> Build system.
>>
>> The end goal I want to accomplish is I to be able to use more than one
>> generation process for the same input file that will result in
>> different files.
>>
>> For example if I have foo.compil I can use it to create foo.cpp and
>> foo.h, but also I can use the same file to create foo-proxy.h and
>> foo-proxy.cpp or foo-adapter.h and foo-adapter.cpp. Note the number of
>> output files needs to be flexible and it needs to be controlled from
>> the jamfile. For example I should be able to do something similar to
>> this:
>>
>> lib shared :
>> <compil-generator>impl:foo.compil
>> ;
>>
>> lib server :
>> <compil-generator>adapter:foo.compil
>>
>> shared
>> ;
>>
>> lib client :
>> <compil-generator>proxy:foo.compil
>>
>> shared
>> ;
>>
>> What will be the right way to go here - generator that accept
>> arguments, multiple generators for single extension or something else.
>
> Both options work.
>
> If you use a single generator, you'll need to define
> a feature to control it:
>
> # in compil.jam
> feature.feature compil-type : impl adapter proxy : optional ;
> toolset.flags compil OPTIONS <compil-type>impl : -generate-impl ;
> toolset.flags compil OPTIONS <compil-type>adapter : -generate-adapter ;
> toolset.flags compil OPTIONS <compil-type>proxy : -generate-proxy ;
> # Expand $(OPTIONS) in the action
>
> lib client : foo.compil : <compil-type>proxy ;
>
> This is probably the best solution if the
> generating actions only differ by a command
> line option. If they're totally different,
> you'll want to use multiple generators.
>
> If you have multiple generators, you have two
> choices. You can distinguish them with
> a feature. I believe that one of the parameters
> of class_at_generator.__init__ allows you to restrict
> the generator with a feature. The generator
> definition would end up looking like
>
> generators.register
> [ new compil-generator generate-impl : <compil-type>impl ] ;
> generators.register
> [ new compil-generator generate-adapter : <compil-type>adapter ] ;
> generators.register
> [ new compil-generator generate-proxy : <compil-type>proxy ] ;
>
> (Warning, this is off the top of my head and not tested.
> I probably don't have the syntax exactly right.)
>
> The user code in this case is identical to using
> a single generator.
>
> Finally, you can distinguish the different outputs
> as different types:
>
> type.type COMPIL_IMPL : : CPP ;
> type.type COMPIL_ADAPTER : : CPP ;
> type.type COMPIL_PROXY : : CPP ;
>
> Now the Jamfiles will look like
>
> lib client [ compil-impl _ : foo.compil ] ;
>
>> If you can point me to example for something similar already done it
>> will be perfect.
>>
>
> In Christ,
> Steven Watanabe
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
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