----- Original Message ----- From: "Jean Rajotte" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, November 20, 2003 6:30 PM Subject: RE: [Nant-users] Incorrect dependency evaluation?
> gert, thanks for sticking w/ me on this. > > > > your build example could be done using call+force just as > > readily in > > > the past as you have it now. > > > > feel free to provide a sample to convince me, but I don't > > think we will be change the new behaviour :-) > > here's your example: > > <target name="clean" /> > <target name="build-assembly" /> > <target name="build-docs" /> > > <target name="debug" depends="clean, build-assembly, build-docs" > /> > <target name="release" depends="clean, build-assembly, > build-docs" /> > > <target name="build"> > <call target="debug" /> > <call target="release" /> > </target> > > #1, i don't see how your example works. there's no diff bet. target > debug and target release, unless they init props in their bodies, in > which case the depends= run too soon. what am i missing? My example wasn't meant to work, I just wanted to illustrate how I think dependencies should be implemented in build file ... > > #2 here's the equiv using call+force. just as legible, if slightly more > verbose. > > <target name="clean" /> > <target name="build-assembly" /> > <target name="build-docs" /> > > <target name="doBuild" > > <call force="true" target="clean" /> > <call force="true" target="build-assembly" /> > <call force="true" target="build-docs" /> > </target> > > <target name="build"> > <call target="initForDebug" /> > <call target="DoBuild" force="true" /> > <call target="initForRelease" /> > <call target="DoBuild" force="true" /> > </target> But using this solution, you don't set up dependencies ... The call task was not really intended to be used to set-up dependencies, it should only be used when you want to break-out of the normal dependency walking ... Sorry if I'm not making completely sense right now ... Been working a bit too hard today :( I'll look into all of this again when I have some more time (tomorrow or in the weekend) ... > > > > > If you send me a simple example of your build file, I'd love > > to help you out ... > > hopefully, the following example isn't too verbose to get the points > across that > 1) i have to use CALL to execute dodo* > 2) in the new world order setProps will run several times altho it > should only run once > 3) i need setProps dependency so i can unit-test dodo1, dodo2, ... > > <target name="setProps" /> > > <target name="dodo1" depends="setProps" /> > <target name="dodo2" depends="setProps" /> > <target name="dodo3" depends="setProps" /> > > <target name="figure-it-all-out" > > <property name="do1" value="false" /> > <property name="do2" value="false" /> > <property name="do3" value="false" /> > > <if uptodatefile="${File.App.Leap.Marker}" > > <comparefiles> > <includes name="${Dir.Leap.Xml}**.xml" /> > <includes name="${Dir.Leap.Gsl}**.gsl" /> > <includes name="${Dir.Leap.Commands}**.build" /> > <includes name="${Dir.App}**.build" /> > </comparefiles> > <property name="do1" value="true" /> > <property name="do2" value="true" /> > </if> > <if uptodatefile="${File.App.Leap.Marker}" > > <comparefiles> > <includes name="${Dir.Leap.Sql}**.sql" /> > <includes name="${File.Version.Def.Spec}" /> > </comparefiles> > <property name="do2" value="true" /> > <property name="do3" value="true" /> > </if> > > <call if="${do1}" target="dodo1" /> > <call if="${do2}" target="dodo2" /> > <call if="${do3}" target="dodo3" /> > ... > </target> > I attached a possible solution for your specific case, but I'm pretty sure there's a better solution possible using dynamic properties... But in that case, I'd have to know more about the setProps target ... Gert
<project name="test" default="do"> <property name="do1" value="false" /> <property name="do2" value="false" /> <property name="do3" value="false" /> <target name="setProps"> <echo message="in setProps" /> </target> <target name="dodo1" depends="setProps" /> <target name="dodo2" depends="setProps" /> <target name="dodo3" depends="setProps" /> <target name="figure-it-all-out"> <property name="do1" value="false" /> <property name="do2" value="false" /> <property name="do3" value="false" /> <if uptodatefile="${File.App.Leap.Marker}"> <comparefiles> <includes name="${Dir.Leap.Xml}**.xml" /> <includes name="${Dir.Leap.Gsl}**.gsl" /> <includes name="${Dir.Leap.Commands}**.build" /> <includes name="${Dir.App}**.build" /> </comparefiles> <property name="do1" value="true" /> <property name="do2" value="true" /> </if> <if uptodatefile="${File.App.Leap.Marker}"> <comparefiles> <includes name="${Dir.Leap.Sql}**.sql" /> <includes name="${File.Version.Def.Spec}" /> </comparefiles> <property name="do2" value="true" /> <property name="do3" value="true" /> </if> </target> <target name="do" depends="figure-it-all-out, do1, do2, do3" /> <target name="do1" depends="dodo1" if="${do1}" /> <target name="do2" depends="dodo2" if="${do2}" /> <target name="do3" depends="dodo3" if="${do3}" /> </project>