List Info

Thread: Problem with ambiguity error




Problem with ambiguity error
user name
2006-03-13 15:21:17
"Vladimir Prus" <ghostcs.msu.su> wrote in
message 
news:200603131220.05610.ghostcs.msu.su...
> Boost.Build will find all generator invocation
sequences from INI to CPP,
> subject to restriction that no generator can be invoked
twice. This gives:
>   (1)  INI -> CPP
>   (2)  INI -> CPP -> CPP
> and it's an ambiguity. The possible solution is to
make CPP -> CPP 
> generator
> run only when explicitly needed. For example:
>
> 2. You can make customerinfo-generator demand a very
specific source type, 
> and
> use cast. Basically, that's what you tried to did, but
you should not 
> derive
> CUSTOMERINFO from CPP. If you do, then sequence (2)
above will still be
> found, because CUSTOMERINFO types inherits all
generators for from type 
> CPP.

This was exactly the problem.  Making CUSTOMERINFO not
inherit from CPP 
makes the generators work regardless of import order.  I'm
sorry you had to 
struggle with me so long to get a clear explanation from me.

> 1. If the generator should be invoked only when some
property, say 
> <customer>
> is in build properties, use this:

In our case, <customer> is always in the build
properties.  It is a global 
feature that defaults to our "internal" customer
name if none were 
specified.


>  generators.register [ new customerinfo-generator
customerinfo.transform :
>       CUSTOMERINFO : CUSTOMERINFO :
<allow>customerinfo.transform ] ;
>
> and add <allow>customerinfo.transform to
requirements if you want this
> generator to run. The <allow> property is the
standard one. You can use a
> helper rule to automatically add this property when
declaring targets:
>
>   rule customerinfo-transformed ( name : sources * :
requirements * .. )
>   {
>        customerinfo $(name)
>           : $(sources)
>           : $(requirements)
<allow>customerinfo.transform
>           .........
>   }

This example of using <allow> is in my notebook as
being potentially useful. 
  I'm
not sure how the helper rule helps though.  Where would you
invoke 
the rule? In the requirements section of a target that
consumes the 
customerinfo.cpp file?


> I don't know which method is best for you, but all
should work.

To be completely frank, I acknowlege these generators are a
trifle 
over-engineered.  I could have easily done everything in
them with a simple 
make target.
I created them to both better my understanding of the BB
system and to 
demonstrate the power and flexibility of the system to our
dev team.


> Speaking about imports order -- that's still a bug in
Boost.Build, I'll 
> see
> into it.

Hopefully it will be a bug fix that enhances the reliability
of BB rather 
than just fixing this one nit. 

Thanks again for your persistent help with this issue.
Daniel Einspanjer 


_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )