I ended up with teh following script after many many attempts to try to get something working. It's a bit of a hack now but I thought it was working until today.
<target name="parser-uptodate-check"> <dependset> <srcfileset dir="${grammar.dir}"> <include name="*.grammar" /> </srcfileset> <srcfileset dir="${lib.dir}"> <include name="*.jar" /> </srcfileset> <targetfileset dir="${generate.dir}" includes="**/*" /> </dependset> <condition property="parser.isUptodate"> <and> <available file="${generate.dir}/al/parser/Parser.java" /> <available file="${generate.dir}/ae/parser/Parser.java" /> <available file="${generate.dir}/ab/parser/Parser.java" /> <available file="${generate.dir}/dse/parser/Parser.java" /> <available file="${generate.dir}/lte/parser/Parser.java" /> </and> </condition> </target> The above doesn't work regardless of what I do, I've googled, I've tried all sorts of combinations, I've looked at uptodate task but can't see if it will do what I want. My requirements are quite simple and from all the documentation I've read, ant should do it no problems. What I want to do is: If any file ending in .grammar in the directory grammar/ has been modified after any file in the directory generate/ then set a property. In the above I set the property only if it is up to date, I'm sure I can do the negation also. The one extra complication is that in the generate/ directory there will be a bunch of subdirectories that I may not know the names of and these too may contain subdirectories. I want to check all files recursively down these directories. Any help appreciated. Thanks Lionel.