<project name="subversion" default="all">
  <property environment="env"/>
  <property name="openssl.dir" location="openssl-0.9.7d"/>
  <property name="zlib.dir" location="zlib"/>
  <property name="src.dir" location="src-trunk"/>
  <property name="gettext.dir" location="gettext"/>
  <property name="bdb.dir" location="${src.dir}/db4-win32"/>
  <property name="zlib.dir" location="zlib"/>
  <property name="apr-util.dir" location="${src.dir}/apr-util"/>
  <property name="apr-iconv.dir" location="${src.dir}/apr-iconv"/>
  <property name="apr.dir" location="${src.dir}/apr"/>
  
  <path id="include.path">
    <pathelement path="${env.INCLUDE}"/>
    <pathelement location="${gettext.dir}/include"/>
    <pathelement location="${env.JAVA_HOME}/include"/>
    <pathelement location="${env.JAVA_HOME}/include/win32"/>
    <pathelement location="${apr-util.dir}/include"/>
    <pathelement location="${apr.dir}/include"/>
    <pathelement location="${apr-iconv.dir}/include"/>
  </path>
  
  <path id="lib.path">
    <pathelement path="${env.LIB}"/>
    <pathelement location="${gettext.dir}/lib"/>
    <pathelement location="${bdb.dir}/lib"/>
  </path>
  
  <property name="include.spec" refid="include.path"/>
  <property name="lib.spec" refid="lib.path"/>

  <property name="dist.dir" value="dist"/>
  
  <macrodef name="devenv">
    <attribute name="solution"/>
    <attribute name="project"/>
    <attribute name="config"/>
    <attribute name="lib" default="${env.LIB}"/>
    <attribute name="include" default="${env.INCLUDE}"/>
    <attribute name="failonerror" default="true"/>
    <attribute name="taskname" default="devenv"/>
    <sequential>
      <exec taskname="@{taskname}" executable="devenv.com" 
            vmlauncher="false"  failonerror="@{failonerror}">
        <arg value="/USEENV"/>
        <arg value="@{solution}"/>
        <arg value="/build"/>
        <arg value="@{config}"/>
        <arg value="/project"/>
        <arg value="@{project}"/>
        <env key="INCLUDE" value="@{include}"/>
        <env key="LIB" value="@{lib}"/>
      </exec>
    </sequential>
  </macrodef>

  <macrodef name="python">
    <attribute name="script"/>
    <attribute name="dir" default="."/>
    <attribute name="failonerror" default="true"/>
    <element name="args" implicit="yes"/>
    <sequential>
      <exec dir="@{dir}" taskname="@{script}" executable="python" 
            vmlauncher="false" failonerror="@{failonerror}">
        <arg line="@{script}"/>
        <args/>
      </exec>
    </sequential>
  </macrodef>
  
  <target name="openssl">
    <exec dir="${openssl.dir}" command="perl Configure VC-WIN32" taskname="config"/>
    <exec dir="${openssl.dir}" executable="${openssl.dir}/ms/do_nasm.bat" taskname="do_nasm"/>
    <exec dir="${openssl.dir}" command="nmake -f ms\ntdll.mak" taskname="nmake"/>
    <exec dir="${openssl.dir}/out32dll" executable="${openssl.dir}/ms/test.bat" taskname="test"/>
  </target>
  
  <target name="svn-config">
    <python dir="${src.dir}" script="gen-make.py">
      <arg line="-t vcproj"/>
      <arg line="--vsnet-version=2003"/>
      <arg line="--with-berkeley-db=db4-win32"/>
      <arg line="--with-openssl=${openssl.dir}"/>
      <arg line="--with-zlib=${zlib.dir}"/>
      <arg line="--enable-nls"/>
      <arg line="--enable-bdb-in-apr-util"/>
    </python>
  </target>
  
  <target name="svn" depends="svn-config">
    <devenv solution="${src.dir}/subversion_vcnet.sln"
            config="Debug" project="__ALL_TESTS__"
            lib="${lib.spec}" include="${include.spec}"
            taskname="svn-build"/>
  </target>
  
  <target name="javahl" depends="svn-config">
    <devenv solution="${src.dir}/subversion_vcnet.sln"
            config="Debug" project="__JAVAHL__"
            lib="${lib.spec}" include="${include.spec}"
            taskname="javahl-build"/>
    <jar destfile="${src.dir}/Debug/subversion/bindings/java/javahl/svnjavahl.jar">
      <fileset dir="${src.dir}/subversion/bindings/java/javahl/classes" includes="**/*.class"/>
    </jar>
  </target>

  <target name="dist">
    <mkdir dir="${dist.dir}"/>
    <copy todir="${dist.dir}/bin">
      <fileset dir="${openssl.dir}" includes="**/*.dll"/>
      <fileset dir="${src.dir}" includes="Debug/subversion/svn*/*.exe"/>
      <fileset dir="${src.dir}" includes="Debug/subversion/clients/**/*.exe"/>
      <fileset dir="${src.dir}" includes="apr*/**/Debug/*.dll"/>
      <fileset dir="${src.dir}" includes="db4-win32/bin/libdb42d.dll"/>
      <fileset dir="${src.dir}/Debug/subversion/bindings/java/javahl">
        <include name="**/*.dll"/>
        <include name="**/*.jar"/>
      </fileset>
      <mapper type="flatten"/>
    </copy>
    <copy todir="${dist.dir}/iconv">
      <fileset dir="${src.dir}" includes="apr-iconv/**/*.so"/>
      <mapper type="flatten"/>
    </copy>
  </target>

  <target name="javadoc">
    <ant antfile="${src.dir}/subversion/bindings/java/javahl/build/build.xml" 
         target="javadoc" inheritAll="false"/>
  </target>
  
  <target name="javatest" depends="dist">
    <mkdir dir="build/testclasses"/>
    <javac srcdir="${src.dir}/subversion/bindings/java/javahl/src" 
           destdir="build/testclasses" debug="on"
           classpath="${src.dir}/Debug/subversion/bindings/java/javahl/svnjavahl.jar">
      <include name="org/tigris/subversion/javahl/tests/*.java"/>
    </javac>
    <junit fork="yes">
      <classpath>
        <pathelement location="build/testclasses"/>
        <pathelement location="${src.dir}/Debug/subversion/bindings/java/javahl/svnjavahl.jar"/>
      </classpath>

      <formatter type="plain"/>
      <batchtest>
        <fileset dir="${src.dir}/subversion/bindings/java/javahl/src">
          <include name="org/tigris/subversion/javahl/tests/*Tests.java"/>
        </fileset>
      </batchtest>
    </junit>
  </target>
  
  <target name="all" depends="openssl, svn, javahl, javadoc, dist">
  </target>
</project>


