> 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]