<?xml version="1.0"?>

<!-- =================================================================== -->
<!-- JBoss build file                                                    -->
<!-- =================================================================== -->

<project name="javassist" default="jar" basedir=".">

  <property name="dist-version" value="javassist-3.2"/>

  <property environment="env"/>
  <property name="target.jar" value="javassist.jar"/>
  <property name="src.dir" value="${basedir}/src/main"/>
  <property name="build.dir" value="${basedir}/build"/>
  <property name="build.classes.dir" value="${build.dir}/classes"/>

  <property name="run.dir" value="${build.classes.dir}"/>

  <!-- Build classpath -->
  <path id="classpath">
    <pathelement location="${build.classes.dir}"/>
  </path>

  <property name="build.classpath" refid="classpath"/>

  <!-- =================================================================== -->
  <!-- Prepares the build directory                                        -->
  <!-- =================================================================== -->
  <target name="prepare" >
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${build.classes.dir}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source code                                            -->
  <!-- =================================================================== -->
  <target name="compile" depends="prepare">
    <javac srcdir="${src.dir}"
           destdir="${build.classes.dir}"
           debug="on"
           deprecation="on"
           optimize="off"
           includes="**">
            <classpath refid="classpath"/>
    </javac>
  </target>

  <target name="sample" depends="compile">
    <javac srcdir="${basedir}"
           destdir="${build.classes.dir}"
           debug="on"
           deprecation="on"
           optimize="off"
           includes="sample/**"
           excludes="sample/hotswap/**,sample/evolve/sample/**">
            <classpath refid="classpath"/>
    </javac>

    <copy file="sample/vector/Test.j"
          todir="${build.classes.dir}/sample/vector"/>

    <javac srcdir="${basedir}/sample/evolve"
           destdir="${build.classes.dir}/sample/evolve/"
           debug="on"
           deprecation="on"
           optimize="off"
           includes="sample/**">
            <classpath refid="classpath"/>
    </javac>
    <copy todir="${build.classes.dir}/sample/evolve">
      <fileset dir="sample/evolve"/>
    </copy>
    <copy file="${build.classes.dir}/sample/evolve/WebPage.class"
          tofile="${build.classes.dir}/sample/evolve/WebPage.class.0"/>
    <copy file="${build.classes.dir}/sample/evolve/sample/evolve/WebPage.class"
          tofile="${build.classes.dir}/sample/evolve/WebPage.class.1"/>

    <javac srcdir="${basedir}/sample/hotswap"
           destdir="${build.classes.dir}"
           debug="on"
           deprecation="on"
           optimize="off"
           includes="*">
            <classpath refid="classpath"/>
    </javac>
    <mkdir dir="${build.classes.dir}/logging"/>
    <javac srcdir="${basedir}/sample/hotswap/logging"
           destdir="${build.classes.dir}/logging"
           debug="on"
           deprecation="on"
           optimize="off"
           includes="*">
            <classpath refid="classpath"/>
    </javac>
    <echo>To run the sample programs without ant, change the current directory 
to ${build.classes.dir}.</echo>
  </target>

  <target name="jar" depends="compile">
    <jar jarfile="${target.jar}" manifest="${src.dir}/META-INF/MANIFEST.MF">
      <fileset dir="${build.classes.dir}">
      	  <include name="**/*.class"/>
      </fileset>
     </jar>
  </target>

  <target name="javadocs">
    <javadoc packagenames="javassist.*"
           excludepackagenames="javassist.compiler.*,javassist.convert.*"
           sourcepath="src/main"
           defaultexcludes="yes"
           locale="en_US"
           destdir="html"
           author="true"
           version="true"
           use="true"
           public="true"
           nohelp="true"
           windowtitle="Javassist API">
      <doctitle><![CDATA[<h1>Javassist</h1>]]></doctitle>
      <bottom><![CDATA[<i>Javassist, a Java-bytecode translator toolkit.<br>
Copyright (C) 1999-2006 Shigeru Chiba. All Rights Reserved.</i>]]></bottom>
    </javadoc>
  </target>

  <target name="dist" depends="jar,javadocs">
    <delete file="${dist-version}.zip"/>
    <zip zipfile="${dist-version}.zip">
       <zipfileset dir="${basedir}" prefix="${dist-version}">
          <include name="**"/>
          <exclude name=".*"/>
	  <exclude name=".*/**"/>
          <exclude name="build/**"/>
          <exclude name="local/**"/>
          <exclude name="${dist-version}.zip"/>
       </zipfileset>
    </zip>
  </target>

  <target name="clean">
    <delete dir="build"/>
    <delete dir="html"/>
    <delete file="${target.jar}"/>
    <delete file="${dist-version}.zip"/>
  </target>

  <!-- =================================================================== -->
  <!-- Run samples                                                         -->
  <!-- =================================================================== -->

  <target name = "sample-all"
          depends="sample-test,sample-reflect,sample-duplicate,sample-vector">
    <echo>** please run sample-rmi, sample-evolve, and</echo>
    <echo>   sample-hotswap (or -hotswap5) separately **</echo>
  </target>

  <target name = "sample-test" depends="sample" >
    <java fork="true" dir="${run.dir}" classname="sample.Test">
      <classpath refid="classpath"/>
    </java>
  </target>

  <target name = "sample-reflect" depends="sample" >
    <java fork="true" dir="${run.dir}" classname="javassist.tools.reflect.Loader">
      <classpath refid="classpath"/>
      <arg line="sample.reflect.Main Joe" />
    </java>
  </target>

  <target name = "sample-duplicate" depends="sample" >
    <echo>run sample.duplicate.Viewer without reflection</echo>
    <java fork="true" dir="${run.dir}" classname="sample.duplicate.Viewer">
      <classpath refid="classpath"/>
    </java>
    <echo>run sample.duplicate.Viewer with reflection</echo>
    <java fork="true" dir="${run.dir}" classname="sample.duplicate.Main">
      <classpath refid="classpath"/>
    </java>
  </target>

  <target name = "sample-vector" depends="sample" >
    <echo>sample.preproc.Compiler sample/vector/Test.j</echo>
    <java fork="true" dir="${run.dir}" classname="sample.preproc.Compiler">
      <classpath refid="classpath"/>
      <arg line="sample/vector/Test.j"/>
    </java>
    <echo>javac sample/vector/Test.java</echo>
    <javac srcdir="${build.classes.dir}"
           destdir="${build.classes.dir}"
           includes="sample/vector/Test.java">
            <classpath refid="classpath"/>
    </javac>
    <java fork="true" dir="${run.dir}" classname="sample.vector.Test" />
  </target>

  <target name = "sample-rmi" depends="sample" >
    <echo>** Please open sample/rmi/webdemo.html with your browser **</echo>
    <java fork="true" dir="${run.dir}" classname="sample.rmi.Counter">
      <classpath refid="classpath"/>
      <arg value="5001" />
    </java>
  </target>

  <target name = "sample-evolve" depends="sample" >
    <echo>** Please open http://localhost:5003/demo.html with your browser **</echo>
    <java fork="true" dir="${run.dir}" classname="sample.evolve.DemoLoader">
      <classpath refid="classpath"/>
      <arg value="5003" />
    </java>
  </target>

  <!-- for JDK 1.4 -->
  <target name = "sample-hotswap" depends="sample">
    <echo>** JAVA_HOME/lib/tools.jar must be included in CLASS_PATH</echo>
    <echo>** for JDK 1.4</echo>
    <java fork="true" dir="${run.dir}" classname="Test">
      <jvmarg line="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000" />
      <classpath refid="classpath"/>
    </java>
  </target>

  <!-- for Java 5 -->
  <target name = "sample-hotswap5" depends="sample">
    <echo>** JAVA_HOME/lib/tools.jar must be included in CLASS_PATH</echo>
    <echo>** for JDK 1.5 or later</echo>
    <java fork="true" dir="${run.dir}" classname="Test">
      <jvmarg line="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000" />
      <classpath refid="classpath"/>
    </java>
  </target>
</project>