Jose Alberto Fernandez wrote:

> First I do not think I have all the answers, just to keep things in
> perspective. What I think I have is a set of principles that I think any
> viable solution should provide. Lets see if I can put them into words: ;-|
> 
> 1) I should be able to determine the correctness (loosely used here) of a
> buildfile by looking at that buildfile (and its dependencies) in
> isolation. This means that the fact that I am imported by someone else
> should not affect my correctness (modulo overriden targets).
> 
> Rewriting of targets, may attempt at this correctness.
> 
> How can we get something more interesting out of that principle above, I
> agree is quite generic. Lets see...

Does it mean the imported buildfile needs to behave in the same way if it
is used standalone or imported ? ( which implies all resolutions should
be based on the imported file, etc ) ?


> 2) It would seem we need to be able to specify whether a target can be
> overriden or not. We need to be able to define if a target is: private,
> final, or overidable. Notice that this is a property of the target and not
> of the way the target is imported.

Can you explain a bit more why a build file needs private or final ?
I think if the syntax/semantic for the build file gets more complicated than 
the syntax for java, we are in trouble :-)



> The meanings are:
>  private ==> other targets with same name on other files will not
>  override;
>              any mention on dependencies on this file for that target will
>              use this private version;
> the target is not visible from outside the file.
> 
>  final ==> target visible from other files but not overidable, it is an
>  error;
>            any mention on dependencies on any file (without a private def)
>            uses this version.
> 
>  overridable ==> target visible from other files, and overridable;
>                  any mention on dependencies on any file will use top
>                  level available version.
> 
> this are just suggestions, other levels of protection may be possible.

I hope not. This sounds far too complicated, close to a "flexibility
syndrome". 

One think I don't understand is why the import should be used as a OO 
substitute. Most languages I know define the import in a much simpler
way. Maybe I'm missing too much of the context, I'm still trying to get
updated with the mailing lists.



Costin


> On a project-fragment, any target dependency not defined in the fragment
> will be picked up from the visible targets, following the rules above.
> 
> I would suggest an attribute like:
> 
> visibility="final|private|overridable"
> 
> you may decide what should be the default.
> 
> 3) targets can be overriden using <target/> which replaces the target
> completely. Or using <override-target> which allows expressing
> dependencies on the overriden target. The syntax in the dependency list is
> to mention the name of the target itself n the list.
> 
>    <override-target name="compile" depends="precompile, compile,
>    postcompile"/>
> 
> The "compile" target in the dependency list refers to the overriden
> target. Notice that <override-target> requires target name to already
> exist and be overridable.
> 
> 4) To support multiple inheritance, I would allow defining a name for an
> import. This name is only visible locally and can be used to specify in a
> dependency list a target comming from an specific import. You can refer
> that way to any target visible from that <import> but you cannot refer to
> inner <imports> of those that have been overriden. You cannot use the
> notation to break the visibility rules.
> 
>   <import file="xyz" name="a"/>
>   <import file="qrs" name="b"/>
> 
>   <target name="compile" depends="a->precompile, b->precompile">
>     ....
>   </target>
> 
> If xyz uses some other import that it names q, I canot say
> a->q->precompile, because that violates the visibility rules defined in
> xyz that provided its own target a->precompile.
> 
> Ok, I will stop now, we can talk about implementation later.
> 
> Jose Alberto



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to