<?xml version="1.0" encoding="UTF-8"?>
<project name="svnkit" default="deploy" basedir=".">

    <target name="init-environment">
        <property environment="env" />
        <property name="eclipse.home" value="${env.ECLIPSE_HOME}" />
        <property name="java.home" value="${env.JAVA_HOME}" />
        <property file="svnkit.build.properties"/>
    		
    	<condition property="eclipse.present">
        	<available file="${eclipse.home}/startup.jar" property="eclipse.ini"/>
        </condition>
    	
    	<condition property="os" value="windows">
            <os family="dos" />
        </condition>
        <condition property="os" value="unix">
            <os family="unix" />
        </condition>
        <condition property="os" value="mac">
            <os family="mac" />
        </condition>
    </target>

    <target name="compile-library">
        <mkdir dir="svnkit/bin" />
        <mkdir dir="contrib/javahl/bin" />
        <mkdir dir="contrib/sequence/bin" />

        <path id="library.classpath">
            <pathelement location="contrib/ganymed/ganymed.jar" />
            <pathelement path="contrib/javahl/bin" />
            <pathelement path="contrib/sequence/bin" />
        </path>

        <javac debug="true" destdir="contrib/javahl/bin" srcdir="contrib/javahl/src">
            <exclude name="**/SVNClient.java" />
            <exclude name="**/SVNAdmin.java" />
            <exclude name="org/tigris/subversion/javahl/tests/**" />
        </javac>
        <javac debug="true" destdir="contrib/sequence/bin" srcdir="contrib/sequence/src" />
        <javac debug="true"
               destdir="svnkit/bin"
               srcdir="svnkit/src"
               classpathref="library.classpath">
            <exclude name="org/tmatesoft/svn/util/SVNTest.java" />
        </javac>
        	
    </target>

	<target name="compile-library-eclipse" depends="init-environment" if="eclipse.present"> 
        <path id="library-eclipse.classpath">
            <pathelement location="contrib/ganymed/ganymed.jar" />
            <pathelement path="contrib/javahl/bin" />
            <pathelement path="contrib/sequence/bin" />
        	<fileset dir="${eclipse.home}/plugins">
    	        <include name="**/*.jar"/>
	        </fileset>
        </path>
        <javac debug="true"
               destdir="svnkit/bin"
               srcdir="svnkit-eclipse/org.tmatesoft.svnkit/src"
               classpathref="library-eclipse.classpath">
            <include name="org/tmatesoft/svn/core/internal/wc/EclipseSVNAuthenticationManager.java" />
        </javac>
	</target>

	<target name="compile-examples">
		<mkdir dir="doc/examples/bin" />
		<path id="examples.classpath">
            <pathelement path="svnkit/bin" />
		</path>
		<javac debug="true"
			destdir="doc/examples/bin"
			srcdir="doc/examples/src"
			classpathref="examples.classpath"
		/>
	</target>
    
	<target name="compile-eclipse" depends="init-environment,compile-library,compile-library-eclipse" if="eclipse.present">
        <mkdir dir="svnkit-eclipse/bin" />
		
        <path id="eclipse.classpath">
            <pathelement path="build/lib/svnkit.jar" />
            <pathelement path="build/lib/ganymed.jar" />
        	<fileset dir="${eclipse.home}/plugins">
    	        <include name="**/*.jar"/>
	        </fileset>
        </path>

        <javac debug="true"
               srcdir="svnkit-eclipse/org.tmatesoft.svnkit/src"
               classpathref="eclipse.classpath"
               destdir="svnkit-eclipse/bin"
         >
            <exclude name="org/tmatesoft/svn/core/internal/wc/EclipseSVNAuthenticationManager.java" />
		</javac>
    </target>

    <target name="compile-tests" depends="compile-library, compile-library-eclipse">
        <mkdir dir="contrib/sequence/bin-test" />
        <mkdir dir="svnkit-test/bin" />
        <path id="tests.classpath">
            <pathelement location="contrib/ganymed/ganymed.jar" />
            <pathelement location="contrib/junit/junit.jar" />
            <pathelement path="contrib/javahl/bin" />
            <pathelement path="contrib/sequence/bin" />
            <pathelement path="contrib/sequence/bin-test" />
            <pathelement path="svnkit/bin" />
        </path>

        <path id="sequence.tests.classpath">
            <pathelement location="contrib/junit/junit.jar" />
            <pathelement path="contrib/sequence/bin" />
        </path>

        <javac debug="true"
               destdir="contrib/sequence/bin-test"
               srcdir="contrib/sequence/src-test"
               classpathref="sequence.tests.classpath"
        />
        <javac debug="true"
               destdir="svnkit-test/bin"
               srcdir="svnkit-test/src"
               classpathref="tests.classpath"
        />
    </target>

    <target name="build-library" depends="compile-library, compile-library-eclipse">
        <mkdir dir="build/lib" />

        <jar destfile="build/lib/svnkit.jar">
            <fileset dir="svnkit/bin">
                <exclude name="org/tmatesoft/svn/cli/**" />
                <exclude name="org/tigris/subversion/javahl/SVNClient**" />
                <exclude name="org/tigris/subversion/javahl/SVNAdmin**" />
            </fileset>
            <fileset dir="${basedir}" >
                <include name="svnkit.build.properties" />
                <include name="COPYING" />
            </fileset>
        	<fileset dir="contrib/sequence">
                <include name="SEQUENCE-LICENSE" />
        	</fileset>
            <fileset dir="contrib/sequence/bin" />
            <fileset dir="svnkit/src">
                <include name="org/tmatesoft/svn/core/internal/wc/config/**" />
                <include name="org/tmatesoft/svn/core/io/repository/**" />
            </fileset>
        </jar>
        <jar destfile="build/lib/svnkit-javahl.jar">
            <fileset dir="svnkit/bin">
                <include name="org/tigris/**" />
            </fileset>
            <fileset dir="contrib/javahl/bin" >
                <exclude name="org/tigris/subversion/javahl/tests/**" />
                <exclude name="org/tigris/subversion/javahl/SVNClient.class" />
                <exclude name="org/tigris/subversion/javahl/SVNClient$*.class" />
                <exclude name="org/tigris/subversion/javahl/SVNAdmin.class" />
                <exclude name="org/tigris/subversion/javahl/SVNAdmin$*.class" />
            </fileset>
            <fileset dir="contrib/javahl">
                <include name="JAVAHL-LICENSE" />
            </fileset>
        </jar>
        <copy file="contrib/ganymed/ganymed.jar" todir="build/lib" />
        <!-- copy licences and changelog -->
        <copy todir="build/lib" flatten="true">
            <fileset dir=".">
                <include name="changelog.txt" />
                <include name="README.txt" />
                <include name="COPYING" />
                <include name="contrib/javahl/JAVAHL-LICENSE" />
                <include name="contrib/sequence/SEQUENCE-LICENSE" />
                <include name="contrib/ganymed/GANYMED-LICENSE" />
            </fileset>
        </copy>
    </target>

    <target name="build-cli" depends="build-library">
        <jar destfile="build/lib/svnkit-cli.jar">
            <fileset dir="svnkit/bin">
                <include name="org/tmatesoft/svn/cli/**" />
            </fileset>
            <fileset dir="${basedir}">
                <include name="COPYING" />
            </fileset>
        </jar>
        <copy todir="build/lib">
            <fileset dir="svnkit/cli">
                <include name="**" />
            </fileset>
        </copy>
        <chmod file="build/lib/svn" perm="ugo+rx" />
        <chmod file="build/lib/svnsync" perm="ugo+rx" />
    </target>

    <target name="build-src">
        <mkdir dir="build/lib" />
        <zip destfile="build/lib/svnkitsrc.zip">
            <fileset dir="svnkit/src" />
            <fileset dir="svnkit-eclipse/org.tmatesoft.svnkit/src" />
            <fileset dir="contrib/javahl/src">
            	<exclude name="org/tigris/subversion/javahl/SVNAdmin.java"/>
            	<exclude name="org/tigris/subversion/javahl/SVNClient.java"/>
            </fileset>
            <fileset dir="contrib/sequence/src" />
        </zip>
    </target>

    <target name="build-eclipse" depends="build-library,build-src,compile-eclipse" if="eclipse.present">
        <property name="svnkit.plugin.name" value="plugins/org.tmatesoft.svnkit_${svnkit.version}" />
        <property name="svnkit.feature.name" value="features/org.tmatesoft.svnkit_${svnkit.version}" />

        <mkdir dir="build/eclipse/${svnkit.plugin.name}" />
        <mkdir dir="build/eclipse/${svnkit.feature.name}" />
        <mkdir dir="build/eclipse/site/plugins" />
        <mkdir dir="build/eclipse/site/features" />
        
        <!-- build svnkit plugin -->
        <copy todir="build/eclipse/${svnkit.plugin.name}">
            <fileset dir="build/lib">
                <include name="*.jar" />
                <exclude name="svnkit-cli.jar" />
                <include name="svnkitsrc.zip" />
            </fileset>
        </copy>
        <copy todir="build/eclipse/${svnkit.plugin.name}">
            <fileset dir="build/lib">
                <include name="changelog.txt" />
                <include name="README.txt" />
                <include name="COPYING" />
                <include name="GANYMED-LICENSE" />
                <include name="SEQUENCE-LICENSE" />
                <include name="JAVAHL-LICENSE" />
            </fileset>
            <fileset dir="svnkit-eclipse/org.tmatesoft.svnkit">
                <include name="plugin.xml" />
                <include name=".options" />
            </fileset>
        </copy>
        <jar destfile="build/eclipse/${svnkit.plugin.name}/svnkitplugin.jar">
            <fileset dir="svnkit-eclipse/bin" />
            <fileset dir="${basedir}">
                <include name="COPYING" />
            </fileset>
        </jar>
        
        <!-- build features -->
        <copy todir="build/eclipse/${svnkit.feature.name}">
            <fileset dir="svnkit-eclipse/org.tmatesoft.svnkit.feature">
                <exclude name="**/.svn"/>
            </fileset>
        </copy>
        <copy file="svnkit-eclipse/site.xml" todir="build/eclipse/site"/>

        <!-- update versions -->
        <replace dir="build/eclipse" includes="**/site.xml,**/plugin.xml,**/feature.xml" token="%svnkit.version%" value="${svnkit.version}"/>
        
        <!-- build jars for update site -->
        <zip destfile="build/eclipse/site/${svnkit.plugin.name}.jar" basedir="build/eclipse/${svnkit.plugin.name}"/>
        <zip destfile="build/eclipse/site/${svnkit.feature.name}.jar" basedir="build/eclipse/${svnkit.feature.name}"/>
    </target>

    <target name="build-doc">
        <mkdir dir="build/doc/javadoc" />
    	<copy file="doc/javadoc-files/SVNKit_API_Packages.jpg" todir="build/doc/javadoc"/>
       	<copy file="doc/javadoc-files/info.png" todir="build/doc/javadoc"/>

    	<path id="doc.classpath">
            <pathelement path="svnkit/bin" />
            <pathelement path="contrib/sequence/bin" />
            <pathelement path="contrib/javahl/bin" />
		</path>
    	<javadoc destdir="build/doc/javadoc" failonerror="false"
                 windowtitle="JavaDoc :: Documentation :: Pure Java Subversion (SVN) Client Library"
                 breakiterator="yes"
        		 stylesheetfile="doc/javadoc-files/javadoc.css" 	 
        		 overview="doc/javadoc-files/overview.html"
    			 classpathref="doc.classpath"
    		>
            
    		<packageset dir="svnkit/src" defaultexcludes="yes">
                <exclude name="**/util/**" />
            	<exclude name="**/internal/**" />
            	<include name="**/core/**" />
            </packageset>

    		<header>
                <![CDATA[<a target="_top" href="http://svnkit.com/"><span class="svnkit">SVNKit</span>&nbsp;Home<a/>]]></header>
            <bottom>
                <![CDATA[Copyright &#169; 2004-2006 TMate Software Ltd. All Rights Reserved.]]>
            </bottom>
        	<link href="http://java.sun.com/j2se/1.4.2/docs/api/"/>
        </javadoc>
    </target>

    <target name="clean">
        <!-- delete build dir -->
        <delete dir="build" />
        <delete dir="lib" />
        <!-- delete all compiled classes -->
        <delete>
            <fileset dir=".">
                <include name="contrib/javahl/bin/**" />
                <include name="contrib/sequence/bin/**" />
                <include name="contrib/sequence/bin-test/**" />
                <include name="svnkit/bin/**" />
                <include name="svnkit-eclipse/bin/**" />
                <include name="svnkit-test/bin/**" />
            </fileset>
        </delete>
    </target>

    <target name="deploy-library" depends="init-environment,build-library,build-cli,build-src,build-doc">
        <zip destfile="build/org.tmatesoft.svn_${svnkit.version}.standalone.zip">
            <zipfileset dir="build/lib" prefix="svnkit-${svnkit.version}">
                <exclude name="svn" />
            </zipfileset>
            <zipfileset file="build/lib/svn" filemode="555" prefix="svnkit-${svnkit.version}" />
            <zipfileset dir="build/doc" prefix="svnkit-${svnkit.version}/doc" />
        </zip>
    </target>

    <target name="deploy-eclipse"
            depends="init-environment,build-library,build-src,build-doc,build-eclipse"
            if="eclipse.present">
    	<zip destfile="build/org.tmatesoft.svn_${svnkit.version}.eclipse.zip">
            <zipfileset dir="build/eclipse/site/"/>
        </zip>
    </target>

    <target name="deploy-snapshot" depends="init-environment">
        <zip destfile="build/org.tmatesoft.svn_${svnkit.version}.src.zip">
            <zipfileset dir="svnkit" prefix="svnkit-src-${svnkit.version}/svnkit">
                <exclude name="**/.svn" />
                <exclude name="**/bin/**" />
                <exclude name="bin/**" />
            </zipfileset>
            <zipfileset dir="contrib" prefix="svnkit-src-${svnkit.version}/contrib">
                <exclude name="**/.svn" />
                <exclude name="**/bin/**" />
                <exclude name="bin/**" />
            </zipfileset>
            <zipfileset dir="." prefix="svnkit-src-${svnkit.version}">
                <include name="*.*" />
            </zipfileset>
            <zipfileset dir="build/doc" prefix="svnkit-src-${svnkit.version}/doc" />
        </zip>
    </target>

    <target name="deploy" depends="clean,deploy-library,deploy-eclipse,deploy-snapshot" />

    <target name="test-java" depends="init-environment,compile-tests">
        <path id="test.classpath">
            <pathelement path="contrib/junit/junit.jar" />
            <pathelement path="svnkit/bin" />
            <pathelement path="contrib/sequence/bin" />
            <pathelement path="svnkit-test/bin" />
            <pathelement path="contrib/sequence/bin-test" />
        </path>
        <java classpathref="test.classpath"
              dir="svnkit-test"
              fork="true"
              classname="org.tmatesoft.svn.core.test.UnitTests"
        />
    </target>

	<target name="test-special" depends="init-environment,compile-tests">
		<!-- remove wc --> 
		<delete failonerror="false" includeemptydirs="true" dir="svnkit-test/wc">
		</delete>
		
		<!-- and repository -->
		<delete failonerror="false" includeemptydirs="true" dir="svnkit-test/repos/special">
		</delete>
		
		<!-- create new repos with anon access -->
                <mkdir dir="svnkit-test/repos" />
		<exec executable="svnadmin">
			<arg value="create"/>
			<arg value="svnkit-test/repos/special"/>
		</exec>
		<echo append="true" file="svnkit-test/repos/special/conf/svnserve.conf" message="[general]${line.separator}anon-access=write${line.separator}" />
		
        <path id="test.classpath">
            <pathelement path="contrib/junit/junit.jar" />
            <pathelement path="svnkit/bin" />
            <pathelement path="contrib/sequence/bin" />
            <pathelement path="svnkit-test/bin" />
            <pathelement path="contrib/sequence/bin-test" />
        </path>
        <java classpathref="test.classpath"
              dir="svnkit-test"
              fork="true"
              classname="org.tmatesoft.svn.core.test.SpecialTest"
           	  args="svn://localhost/repos/special wc"
        />
    </target>

    <target name="test-python" depends="init-environment,compile-tests,build-library,build-cli">
        <copy file="svnkit-test/test.${os}.properties"
              tofile="svnkit-test/test.properties"
              failonerror="false"
              overwrite="false"
        />

        <copy file="svnkit-test/python/cmdline/svntest/main.py"
              overwrite="true"
              tofile="svnkit-test/python/cmdline/svntest/main.py.bak"
              failonerror="true"
        />
        <copy file="svnkit-test/python/patch/main.py"
              overwrite="true"
              tofile="svnkit-test/python/cmdline/svntest/main.py"
              failonerror="true"
        />

        <path id="python.classpath">
            <pathelement path="build/lib/svnkit.jar" />
            <pathelement path="build/lib/svnkit-cli.jar" />
            <pathelement path="contrib/junit/junit.jar" />
            <pathelement path="svnkit-test/bin" />
        </path>

        <delete dir="${user.home}/.svnkit" failonerror="false"/>
        <mkdir dir="${user.home}/.svnkit"/>    
        <copy file="svnkit/cli/logging.properties.disabled" 
              overwrite="false"
              tofile="build/lib/logging.properties"
              failonerror="false"
        />

        <java classpathref="python.classpath"
              dir="svnkit-test"
              fork="true"
              classname="org.tmatesoft.svn.core.test.PythonTests">        
         <jvmarg value="-Djava.util.logging.config.file=logging.properties" />
         <arg line="test.properties" />
        </java>

        <move file="svnkit-test/python/cmdline/svntest/main.py.bak"
              tofile="svnkit-test/python/cmdline/svntest/main.py"
              overwrite="true"
              failonerror="true"
        />
    </target>

    <!-- compatibility target -->
    <target name="build-standalone" depends="build-library,build-cli">
        <mkdir dir="lib" />
        <copy todir="lib">
            <fileset dir="build/lib">
            </fileset>
        </copy>
    </target>
    
    <target name="benchmark"> 
        <!-- build library with native SVNClient -->
        <mkdir dir="svnkit/bin" />
        <mkdir dir="contrib/javahl/bin" />
        <mkdir dir="contrib/sequence/bin" />

        <path id="library.classpath">
            <pathelement location="contrib/ganymed/ganymed.jar" />
            <pathelement path="contrib/javahl/bin" />
            <pathelement path="contrib/sequence/bin" />
        </path>

        <javac debug="true" optimize="true" destdir="contrib/javahl/bin" srcdir="contrib/javahl/src">
            <exclude name="org/tigris/subversion/javahl/tests/**" />
        </javac>
        <javac debug="true" optimize="true" destdir="contrib/sequence/bin" srcdir="contrib/sequence/src" />
        <javac debug="true" optimize="true" 
               destdir="svnkit/bin"
               srcdir="svnkit/src"
               classpathref="library.classpath"
        >
            <exclude name="org/tigris/subversion/javahl/SVNClient.java" />
            <exclude name="org/tigris/subversion/javahl/SVNAdmin.java" />
        </javac>
        <!-- now we have native SVNClient and SVNKit's SVNClientImpl -->
        <mkdir dir="contrib/sequence/bin-test" />
        <mkdir dir="svnkit-test/bin" />
        <path id="tests.classpath">
            <pathelement location="contrib/ganymed/ganymed.jar" />
            <pathelement location="contrib/junit/junit.jar" />
            <pathelement path="contrib/javahl/bin" />
            <pathelement path="contrib/sequence/bin" />
            <pathelement path="contrib/sequence/bin-test" />
            <pathelement path="svnkit/bin" />
        </path>

        <path id="sequence.tests.classpath">
            <pathelement location="contrib/junit/junit.jar" />
            <pathelement path="contrib/sequence/bin" />
        </path>

        <javac debug="true" optimize="true" 
               destdir="contrib/sequence/bin-test"
               srcdir="contrib/sequence/src-test"
               classpathref="sequence.tests.classpath"
        />
        <javac debug="true" optimize="true" 
               destdir="svnkit-test/bin"
               srcdir="svnkit-test/src"
               classpathref="tests.classpath"
        />

        <mkdir dir="build/lib" />
        <jar destfile="build/lib/svnkit.jar" compress="false">
            <fileset dir="svnkit/bin">
                <exclude name="org/tmatesoft/svn/cli/**" />
                <exclude name="org/tigris/subversion/javahl/SVNClient**" />
                <exclude name="org/tigris/subversion/javahl/SVNAdmin**" />
            </fileset>
            <fileset dir="${basedir}" >
                <include name="svnkit.build.properties" />
                <include name="COPYING" />
            </fileset>
            <fileset dir="contrib/sequence">
                <include name="SEQUENCE-LICENSE" />
            </fileset>
            <fileset dir="contrib/sequence/bin" />
            <fileset dir="svnkit/src">
                <include name="org/tmatesoft/svn/core/internal/wc/config/**" />
                <include name="org/tmatesoft/svn/core/io/repository/**" />
            </fileset>
        </jar>
        <jar destfile="build/lib/svnkit-javahl.jar"  >
            <fileset dir="contrib/javahl/bin" >
                <exclude name="org/tigris/subversion/javahl/tests/**" />
            </fileset>
            <fileset dir="contrib/javahl">
                <include name="JAVAHL-LICENSE" />
            </fileset>
        </jar>
        
        <!-- run benchmark -->
        <path id="benchmark.classpath">
            <pathelement path="build/lib/svnkit.jar" />
            <pathelement path="build/lib/svnkit-javahl.jar" />
            <pathelement path="svnkit-test/bin" />
        </path>
        
        <java classpathref="benchmark.classpath"
              fork="true"
              classname="org.tmatesoft.svn.core.test.Benchmark">        
        </java>

    </target>

</project>
