> From: Gus Heck [mailto:[EMAIL PROTECTED] 
> 
> I'm not sure I buy your 3 things argument. In my mind there 
> are 2 things 
> in what is previously proposed...
> 
> properties and parameters
> 

The question is when expantions happen. We are here in the MACRO
world, and in that world there are ussually those three things.

> Templates appear to be something new, though I don't think I 
> like them 
> (see below)
> 
> >  (1) --> ${xyz}
> >  (2) --> ${macroattr:xyz}
> >  (3) --> ${macrotemplate:xyz}
> >

Well, as I said I use those terms above just as examples, I am not
hookup in words, 
I was just looking for some identifier to describe them. Still the
concepts
I am expressing are very clasical ones, these are not things out of the
blue.

> >So for a definition like:
> >
> >  <property name="xyz" value="true"/>
> >
> Now ${xyz}" is true forevermore because properties are immutable
> 
> >  <macrodef name="abc">
> >    <attribute name="pqr"/>
> >    <sequential>
> >      <javac debug="${xyz}" ... />
> >
> This line ${xyz} should get replaced
> 
> >      <javac debug="${macroattr:pqr}" ... />
> >      <javac debug="${macrotemplate:xyz}" ... />
> >    </sequential>
> >  </macrodef>
> >  
> >
> I'm not sure how you get a second level of expansion, or if 
> it is desireable
> 
> >After this definition the macro that is actually expanded will look 
> >something like:
> >
> >    <attribute name="pqr"/>
> >    <sequential>
> >      <javac debug="true" ... />
> >      <javac debug="${macroattr:pqr}" ... />
> >      <javac debug="${xyz}" ... />
> >    </sequential>
> >
> >which will be further expanded in a call frangment, maybe inside an 
> ><ant> call:
> >
> >  <property name="xyz" value="false"/>
> >  <abc pqr="true"/>
> >  <abc pqr="false"/>
> >
> I'm not sure this makes sense (to me at least).... if it is 
> part of an 
> ant call, then the macrodef should be in the build file used in the 
> antfile atribute...  in which case your first javac might 
> also come out 
> with debug=false (assuming inheritall=false, and the property 
> definition 
> was before the macro definition) or debug="${xyz}" (unexpanded, and 
> causing the build to fail because it wasn't defined yet, if 
> the property 
> isn't before the macro definition, as you have shown). If the 
> task does 
> property replacement at invocation time, then you still 
> should get debug="false" for your first javac since the 
> property won't have been 
> expanded yet.
> 

Even when using <antcall/> the call may not redefine the macro
nor any other <taskdef/> in the buildfile. This may happen if the
definitions
are inside a target which is not evaluated as part of the antcall
target.

So it is completely possible to have the situation above. Furthermore,
the <antcall/> can be as follows:

        <antcall target="subcall">
        <param name="xyz" value="false"/>
      </antcall>

> If macro definitions are available to sub builds, then your 3rd case 
> might occur, but I don't think it would be good to allow macros to be 
> called across build file boundaries. builds would be almost 
> unintelligible without tracking down the macros from other files.
> 

This is all regular kosher ANT stuff, up to this day, <taskdef/>s get
inherited, they do not need to be redeclared for the task to be
available
during the <antcall/>. Are you proposing that we have a different,
special case,
semantics for <macrodef>?

> It would also bring up yet another scoping issue for 2 files that 
> defined macros with the same name and then one called the 
> other. Granted 
> this might be an xml namespaces thing, but the more parts of ant that 
> require namespaces the steeper the learning curve for new users.
> 

We already have a solution for the case of <taskdef> I would just like
the behavior on both cases to be the same, so to reduce the leaarning
curve.

Jose Alberto

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

Reply via email to