Yes, 

The behavior you see is correct...there is an inherent limition of the 
<antcall> task becuase it starts a new ANT "cycle" and knowlegde of previous 
run targets (like your "init" target) are not retained. 

You can try many different solutions: 

First solution: 
1) Create a "property setting" target like the following 
<target name="determineOS">
    <condition property="isMAC">
        <os name="Mac OS X"/>
    </condition>
</target>
      The key thing is to avoid the usage of the else attribute of the 
condition task, we DO NOT want the property to be defined only IF the OS is Mac 
OS X

2) Now add an "if" to your "two-mac" target --> so that it will only execute if 
the isMAC property is set
    <target name="two-mac" if="isMAC" depends="init">
        .
        .
        .
    </target>
        Now unfortunately, the way ANT is written the presence of an "if" 
attribute only controls the execution of the tasks within the target NOT the 
execution of the dependent targets (but we will fix soon enough)
3) Add an "unless" attribute to your "two-other" target --> so that it will 
only execute if the isMAC property is NOT set
    <target name="two-other" unless="isMAC" depends="init">
        .
        .
        .
    </target>
4) Now adjust your "init" target to run the "determineOS" target in its depends 
list
5) Adjust your main target "one" to run the targets in order
    <target name="one" depends="init, two-mac, two-other">
        .
        .
        .
    </target>
        And now instead of <antcall> off to another target (and incurring the 
cost of creating a new ANT "cycle") you are attempting to run both targets and 
based on the way they are protected (via the if/unless attributes) only one of 
them will run.
6) Along the same line, to make sure that the code of the "init" target is run 
only once you can add an "unless" attribute in its definition and set the 
property at the bottom of the target:
    <target name="init" unless="init_run_already">
        .
        (really delicate stuff that can only be run once)
        .
        <property name="init_run_already" value="yeah!!!"/>
    </target>






----- Original Message ---- 
From: Cameron McCormack <[EMAIL PROTECTED]> 
To: user@ant.apache.org 
Sent: Saturday, January 20, 2007 4:59:26 AM 
Subject: Using antcall but not re-running dependent targets 


Hi. 

I’ve got a build file that’s structured like this: 

<target name="init"> 
<echo message="something"/> 
</target> 

<target name="one" depends="init, something"> 
<condition property="suffix" value="mac" else="other"> 
<os name="Mac OS X"/> 
</condition> 
<antcall target="two-${suffix}"/> 
</target> 

<target name="two-mac" depends="init"> 
</target> 

<target name="two-other" depends="init"> 
</target> 

<target name="something"> 
</target> 

If I run "ant one" I get: 

jet:/tmp $ ant one 
Buildfile: build.xml 

init: 
[echo] something 

something: 

one: 

init: 
[echo] something 

two-other: 

BUILD SUCCESSFUL 

but I want it so that the init target doesn’t get run again, because it 
has already been run. Is that just a limitation of antcall (that it 
forgets which dependencies have already been run)? If so, how I else 
can I get this sort of flow control? 

Thanks, 

Cameron 

-- 
Cameron McCormack, http://mcc.id.au/ 
xmpp:[EMAIL PROTECTED] ▪ ICQ 26955922 ▪ MSN [EMAIL PROTECTED] 

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


 
____________________________________________________________________________________
Be a PS3 game guru.
Get your game face on with the latest PS3 news and previews at Yahoo! Games.
http://videogames.yahoo.com/platform?platform=120121

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

Reply via email to