> -----Original Message----- > From: Diane Holt [mailto:holtdl@;yahoo.com] > Sent: Donnerstag, 17. Oktober 2002 07:13 > To: Ant Users List; [EMAIL PROTECTED] > Subject: RE: ant problem under cygwin and questions from a wanna-be > Makefile convert > > > > i) if there is a *.??.m4 file, run m4 on that file and create the > > > corresponding *.??.html output file unless it exists already > Yeah, didn't know 'm4' didn't let you specify an output file -- guess it > expects you to be piping the output somewhere. Yes, it unfortunately expects piping, I reported this in http://www.seindal.dk/forum/read.php?f=2&i=76&t=76 > Anyway, to avoid the batch > script, you could use the ant-contrib <foreach> and <if> tasks instead -- > for example: > <taskdef resource="net/sf/antcontrib/antcontrib.properties"/> > > <target name="doM4"> > <foreach target="runm4" param="m4.in"> > <fileset dir="${basedir}" includes="m4files/*.??.m4"/> > </foreach> > </target> > > <target name="runm4"> > <basename property="base.m4.in" file="${m4.in}" suffix=".m4"/> > <dirname property="m4.dir" file="${m4.in}"/> > <property name="m4.out" location="${m4.dir}/${base.m4.in}.html"/> > <uptodate property="html.isUpToDate" > targetfile="${m4.out}" srcfile="${m4.in}"/> > <if> > <isset property="html.isUpToDate"/> > <then> > <echo>${m4.out} is up-to-date.</echo> > </then> > <else> > <echo>Processing ${base.m4.in}.m4 ...</echo> <exec executable="m4" output="${m4.out}"> > <arg value="-P"/> <arg value="${base.m4.in}.m4"/> > </exec> > </else> > </if> > </target> > > Note: You will need to be running 1.5.1 to get the bug-fixed <basename>.
Diane, thanks for not giving up - it works!. 1) I added the missing quote around "output" 2) I upgraded ant to 1.5.1 3) got it from http://gump.covalent.net/jars/latest/ant-contrib/ 4) added <arg value="${base.m4.in}.m4"/> With that approach, I also got rid of the delete batch file (just one line) that drops the apply srcfile argument: however, there must be a more efficient solution! ;) <target name="depPageFile" description="if the {page file}.m4 is newer, remove its *.??.html descendants" > <foreach target="runDelete" param="outFileName.arg"> <fileset dir="." includes="*.??.html"/> </foreach> </target> <target name="runDelete"> <basename property="base.del.in0" file="${outFileName.arg}" suffix=".en.html"/> <basename property="fileName.del.in" file="${outFileName.arg}"/> <if> <!-- add one of these if statements for each language supported in a nested way--> <equals arg1="${base.del.in0}" arg2="${fileName.del.in}"/> <then> <basename property="base.del.in1" file="${outFileName.arg}" suffix=".de.html"/> <if> <equals arg1="${base.del.in1}" arg2="${fileName.del.in}"/> <then> <basename property="base.del.in2" file="${outFileName.arg}" suffix=".fr.html"/> <!-- add if statement for fr --> </then> <else> <property name="base.del.in" value="${base.del.in1}"/> </else> </if> </then> <else> <property name="base.del.in" value="${base.del.in0}"/> </else> </if> <uptodate property="html.isUpToDate" targetfile="${outFileName.arg}" srcfile="${base.del.in}.m4"/> <if> <isset property="html.isUpToDate"/> <then> <!--echo>${outFileName.arg} is up-to-date wrt. ${base.del.in}.m4.</echo--> </then> <else> <delete file="${outFileName.arg}" verbose="true"/> </else> </if> </target> it would be great if a list of {en, de, fr, ..} could be defined and then some way to iterate through it. Rgds Ralf -- To unsubscribe, e-mail: <mailto:ant-user-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:ant-user-help@;jakarta.apache.org>