<!--
    Copyright 2005 The Apache Software Foundation

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<project name="fsuid2" default="build" basedir=".">

<property name="jdo.fsuid2" value="../../../jdo.jar"/>
<property name="jdo-enhancer.fsuid2" value="../../../jdo-enhancer.jar"/>
<property name="enhancer.fsuid2" value="org.apache.jdo.enhancer.Main"/>
<property name="jarfile.fsuid2" value="../../fsuid2.jar"/>
<property name="xerces.fsuid2"
  value="../../../../lib/xerces.jar"/>

<target name="build" depends="fsuid2.uptodate, fsuid2.jar">
</target>

<target name="fsuid2.uptodate">
  <uptodate property="fsuid2.enhancement.notRequired" targetfile="${jarfile.fsuid2}">
    <srcfiles dir="." includes="*.jdoproperties, PC*.java"/>
  </uptodate>
</target>

<target name="fsuid2.jar" unless="fsuid2enhancement.notRequired">
  <javac srcdir="." debug="on" includes="PCPoint.java"/>

  <mkdir dir="enhance.out"/>
  <java fork="yes" failonerror="yes"
    classname="${enhancer.fsuid2}"
	classpath="${jdo.fsuid2};${jdo-enhancer.fsuid2};${xerces.fsuid2}">
    <arg line="-f -d enhance.out PCPoint.jdo PCPoint.class"/>
  </java>

  <move todir=".">
    <fileset dir="enhance.out/test">
      <include name="*.class"/>
    </fileset>
  </move>

  <delete file="${jarfile.fsuid2}"/>
  <jar jarfile="${jarfile.fsuid2}" basedir=".." includes="test/*.class, test/*.jdo"/>
</target>

<target name="clean">
  <delete includeEmptyDirs="true">
    <fileset dir="." includes="*.class, enhance.out"/>
  </delete>
  <delete file="${jarfile.fsuid2}"/>
</target>

<target name="clobber" depends="clean"/>

</project>
