<?xml version="1.0"?>

<!-- ======================================================================= -->
<!-- Hop build file for building with ant                                    -->
<!-- ======================================================================= -->
<!--                                                                         -->
<!-- Usage:                                                                  -->
<!--    ant [-buildfile build.xml] target                                    -->
<!--                                                                         -->
<!-- Available targets:                                                      -->
<!--    checkout        copies helma source code from cvs                    -->
<!--    fullcheckout    copies helma source code and applications from cvs   -->
<!--    compile         compiles helma source code to java classes           -->
<!--    jar             compiles helma source code to java archives          -->
<!--    javadocs        creates api documentation for helma java classes     -->
<!--    helmadocs       fetches printable user reference for helma           -->
<!--    package         creates directory with compiled helma and apps       -->
<!--    fullpackage     creates directory with compiled helma, docs and apps -->
<!--    package-zip     creates zipped file of fullpackage                   -->
<!--    package-tgz     creates tared and gzipped file of fullpackage        -->
<!--    package-all     creates fullpackage, package-zip and package-tgz     -->
<!--    snapshotcompile compiles current helma snapshot to java classes      -->
<!--    snapshot        compiles current helma snapshot to java archive      -->
<!--    app-package     creates a zipped file of an application from cvs     -->
<!--    antclick        creates package incl. helma, Antville and manage app -->
<!--    cleanup         removes temporary directories                        -->
<!--    fullcleanup     removes all directories created by ant               -->

<project name="Hop" default="main" basedir=".">

    <!-- =================================================================== -->
    <!-- Initializes some variables                                          -->
    <!-- =================================================================== -->
    <target name="init">
        <property name="Name" value="helma"/>
        <property name="year" value="1998-2002"/>
        <property name="version" value="1.2pre3"/>
        <property name="project" value="helma"/>
        <property name="build.compiler" value="classic"/>

        <property name="home.dir" value=".."/>

        <!-- values for building a snapshot -->
        <property name="snapshot.src" value="${home.dir}/src"/>
        <property name="snapshot.classes" value="${home.dir}/classes"/>
        <property name="snapshot.lib" value="${home.dir}/lib"/>

        <!-- values for building the distribution -->
        <property name="build.work" value="${home.dir}/work"/>
        <property name="build.checkout" value="${build.work}/checkout"/>
        <property name="build.src" value="${build.checkout}/hop"/>
        <property name="build.lib" value="${build.checkout}/hopbuild/lib"/>
        <property name="build.classes" value="${build.work}/classes"/>
        <property name="build.docs" value="${build.work}/docs"/>
        <property name="build.javadocs" value="${build.docs}/api"/>
        <property name="final.name" value="${project}-${version}"/>
        <property name="final.dir" value="${build.work}/${final.name}"/>

        <property name="cvs.root" value=":pserver:anonymous@coletta.helma.at:/opt/cvs"/>
        <property name="jar.name" value="helma"/>
        <property name="debug" value="off"/>
        <property name="optimize" value="on"/>
        <property name="deprecation" value="off"/>

        <tstamp/>

        <filter token="year" value="${year}"/>
        <filter token="version" value="${version}"/>
        <filter token="date" value="${TODAY}"/>
    </target>

    <!-- =================================================================== -->
    <!-- Copies the source code to the src directroy                         -->
    <!-- =================================================================== -->
    <target name="checkout" depends="init">
        <mkdir dir="${snapshot.src}"/>
        <cvs cvsRoot="${cvs.root}" package="hop" dest="${snapshot.src}"/>
    </target>

    <!-- =================================================================== -->
    <!-- Copies the everything from cvs that's needed to build a full        -->
    <!-- helma distribution                                                  -->
    <!-- =================================================================== -->
    <target name="fullcheckout" depends="init">
        <mkdir dir="${build.checkout}"/>
        <cvs cvsRoot="${cvs.root}" package="hop" dest="${build.checkout}"/>
        <cvs cvsRoot="${cvs.root}" package="hopbuild" dest="${build.checkout}"/>
        <cvs cvsRoot="${cvs.root}" package="apps/base" dest="${build.checkout}"/>
        <cvs cvsRoot="${cvs.root}" package="apps/himp" dest="${build.checkout}"/>
        <cvs cvsRoot="${cvs.root}" package="apps/bloggerapi" dest="${build.checkout}"/>
        <cvs cvsRoot="${cvs.root}" package="apps/lillebror" dest="${build.checkout}"/>
        <cvs cvsRoot="${cvs.root}" package="apps/manage" dest="${build.checkout}"/>
    </target>

    <!-- =================================================================== -->
    <!-- Compiles the source directory                                       -->
    <!-- =================================================================== -->
    <target name="compile" depends="init">
        <mkdir dir="${build.classes}"/>
        <javac srcdir="${build.src}"
            destdir="${build.classes}"
            debug="${debug}"
            deprecation="${deprecation}"
            optimize="${optimize}">
            <classpath>
                <fileset dir="${build.lib}">
                     <include name="**/*.jar" />
                </fileset>
                <pathelement path="${classpath}" />
            </classpath>
        </javac>
        <rmic classname="helma.framework.core.Application" base="${build.classes}"/>
        <rmic classname="helma.image.Server" base="${build.classes}"/>
        <rmic classname="helma.image.RemoteImage" base="${build.classes}"/>
    </target>

    <!-- =================================================================== -->
    <!-- Creates a .jar file                                                 -->
    <!-- =================================================================== -->
    <target name="jar" depends="compile">
        <jar jarfile="${build.work}/${jar.name}-${DSTAMP}.jar"
            basedir="${build.classes}"
            excludes="**/package.html"/>
    </target>

    <!-- =================================================================== -->
    <!-- Creates the API documentation                                       -->
    <!-- =================================================================== -->
    <target name="javadocs" depends="init">
        <mkdir dir="${build.javadocs}"/>
        <javadoc packagenames="helma.*"
            sourcepath="${build.src}"
            destdir="${build.javadocs}"
            author="false"
            private="false"
            version="false"
            windowtitle="${Name} ${version} API"
            doctitle="${Name} ${version} API"
            bottom="Copyright &#169; ${year} Helma.org. All Rights Reserved.">
            <classpath>
                <fileset dir="${build.lib}">
                     <include name="**/*.jar" />
                </fileset>
                <pathelement path="${classpath}" />
            </classpath>
       </javadoc>
    </target>

    <!-- =================================================================== -->
    <!-- Get the documentation (currently fails due to request time-out)     -->
    <!-- =================================================================== -->
    <target name="helmadocs" depends="init">
		<get src="http://www.helma.org/docs/reference/print"
		     dest="${build.docs}/reference.html"
		     ignoreerrors="true"
		/>
    </target>

    <!-- =================================================================== -->
    <!-- Package                                                             -->
    <!-- =================================================================== -->
    <target name="package" depends="init, fullcheckout, jar">
        <mkdir dir="${final.dir}"/>

        <mkdir dir="${final.dir}/src/hop"/>
        <copy todir="${final.dir}/src/hop">
            <fileset dir="${build.checkout}/hop" />
        </copy>

        <copy todir="${final.dir}/build">
            <fileset dir="${build.checkout}/hopbuild/build"/>
        </copy>
        <chmod file="${final.dir}/build/build.sh" perm="755"/>

        <copy todir="${final.dir}/lib">
            <fileset dir="${build.checkout}/hopbuild/lib"/>
        </copy>

        <copy file="${build.work}/${jar.name}-${DSTAMP}.jar" tofile="${final.dir}/lib/helma.jar"/>

        <copy todir="${final.dir}">
            <fileset dir="${build.checkout}/hopbuild/skeleton" excludes="**/CVS,extras/**"/>
        </copy>
        <chmod file="${final.dir}/hop.sh" perm="755"/>

        <copy todir="${final.dir}/apps">
            <fileset dir="${build.checkout}/apps" excludes="**/CVS,manage/**"/>
        </copy>

        <mkdir dir="${final.dir}/apps/manage"/>
		  	<zip zipfile="${final.dir}/apps/manage/manage.zip" basedir="${build.checkout}/apps/manage/" includes="**" excludes="**/properties,readme/**" />
		<copy todir="${final.dir}/apps/manage">
		    <fileset dir="${build.checkout}/apps/manage" includes="app.properties,class.properties,readme.txt"/>
		</copy>
   </target>

    <!-- =================================================================== -->
    <!-- Full Package (includes documentation)                               -->
    <!-- =================================================================== -->
    <target name="fullpackage" depends="package, javadocs">
        <copy todir="${final.dir}/docs">
            <fileset dir="${build.docs}"/>
        </copy>
    </target>

    <!-- =================================================================== -->
    <!-- Packages the distribution with ZIP                                  -->
    <!-- =================================================================== -->
    <target name="package-zip" depends="fullpackage">
        <zip zipfile="${home.dir}/${Name}-${version}.zip" basedir="${build.work}" includes="**/${final.name}/**"/>
    </target>

    <!-- =================================================================== -->
    <!-- Packages the distribution with TAR-GZIP                             -->
    <!-- =================================================================== -->
    <target name="package-tgz" depends="fullpackage">
        <tar tarfile="${build.work}/${Name}-${version}.tar" basedir="${build.work}/${final.name}" excludes="**">
             <tarfileset dir="${build.work}" mode="755">
                  <include name="${final.name}/hop.sh"/>
                  <include name="${final.name}/build/build.sh"/>
             </tarfileset>
             <tarfileset dir="${build.work}">
                  <include name="${final.name}/**"/>
                  <exclude name="${final.name}/hop.sh"/>
                  <exclude name="${final.name}/build/build.sh"/>
             </tarfileset>
        </tar>
        <gzip zipfile="${home.dir}/${Name}-${version}.tar.gz" src="${build.work}/${Name}-${version}.tar"/>
    </target>

    <!-- =================================================================== -->
    <!-- Packages the distribution with ZIP and TAR-GZIP                     -->
    <!-- =================================================================== -->
    <target name="package-all" depends="package-zip, package-tgz">
    </target>

    <!-- =================================================================== -->
    <!-- Compiles the source directory for a snapshot                        -->
    <!-- =================================================================== -->
    <target name="snapshotcompile" depends="init">
        <mkdir dir="${snapshot.classes}"/>
        <javac srcdir="${snapshot.src}/hop"
            destdir="${snapshot.classes}"
            debug="${debug}"
            deprecation="${deprecation}"
            optimize="${optimize}">
            <classpath>
                <fileset dir="${snapshot.lib}">
                     <include name="**/*.jar" />
					 <exclude name="**/helma*.jar" />
                </fileset>
                <pathelement path="${classpath}" />
            </classpath>
        </javac>
        <rmic classname="helma.framework.core.Application" base="${snapshot.classes}"/>
        <rmic classname="helma.image.Server" base="${snapshot.classes}"/>
        <rmic classname="helma.image.RemoteImage" base="${snapshot.classes}"/>
    </target>
    
    <!-- =================================================================== -->
    <!-- Creates a .jar file for a snapshot                                  -->
    <!-- =================================================================== -->
    <target name="snapshot" depends="snapshotcompile">
        <jar jarfile="${snapshot.lib}/${jar.name}-${DSTAMP}.jar"
            basedir="${snapshot.classes}"
            excludes="**/package.html"/>
    </target>

    <!-- =================================================================== -->
    <!-- Checks out and zips an application defined by -Dapplication=appName -->
    <!-- e.g. ant [-buildfile build.xml] -Dapplication=helmaorg              -->
    <!-- =================================================================== -->
    <target name="app-package" depends="init">
      <mkdir dir="${build.checkout}"/>
      <cvs cvsRoot="${cvs.root}" package="apps/${application}" dest="${build.checkout}"/>
      <zip zipfile="../${application}.zip" basedir="${build.checkout}/apps/${application}/" includes="**"/>
    </target>

    <!-- =================================================================== -->
    <!-- Make Antclick package (helma plus Antville and manage apps)         -->
    <!-- =================================================================== -->
    <target name="antclick" depends="package">
      <property name="antclick.dir" value="${build.work}/antclick"/>
      <mkdir dir="${antclick.dir}"/>
      <cvs cvsRoot="${cvs.root}" package="apps/antville" dest="${build.checkout}"/>
      <copy todir="${antclick.dir}/">
        <fileset dir="${final.dir}" includes="db.properties,server.properties,*.txt,lib/**,db/antville.*"/>
      </copy>
      <copy todir="${antclick.dir}/apps/">
        <fileset dir="${build.checkout}/apps" excludes="antville/images.zip,antville/*.sql,antville/db.properties" includes="antville/**"/>
      </copy>
      <copy todir="${antclick.dir}/apps/">
        <fileset dir="${final.dir}/apps" includes="manage/**"/>
      </copy>
      <copy todir="${antclick.dir}/">
        <fileset dir="${build.checkout}/hopbuild/skeleton/extras" includes="apps.properties,hop.bat,hop.sh"/>
      </copy>
      <copy todir="${antclick.dir}/lib/">
        <fileset dir="${build.checkout}/hopbuild/skeleton/extras" includes="hsqldb-1.7RC5Pre2-patched.jar"/>
      </copy>
      <mkdir dir="${antclick.dir}/static/antville"/>
      <unzip src="${build.checkout}/apps/antville/images.zip" dest="${antclick.dir}/static/antville">
        <patternset>
          <include name="**"/>
        </patternset>
      </unzip>
      <copy todir="${antclick.dir}/apps/antville/">
        <fileset dir="${build.checkout}/hopbuild/skeleton/extras" includes="db.properties"/>
      </copy>
      <chmod file="${antclick.dir}/hop.sh" perm="755"/>
			<zip zipfile="${home.dir}/antclick.zip" basedir="${build.work}/" includes="antclick/**"/>
      <tar tarfile="${build.work}/antclick.tar">
        <tarfileset dir="${antclick.dir}" mode="755">
          <include name="hop.sh"/>
        </tarfileset>
        <tarfileset dir="${antclick.dir}">
          <include name="**"/>
          <exclude name="hop.sh"/>
        </tarfileset>
      </tar>
      <gzip zipfile="${home.dir}/antclick.tgz" src="${build.work}/antclick.tar"/>
    </target>

    <!-- =================================================================== -->
    <!-- Remove temporary directories                                        -->
    <!-- =================================================================== -->
    <target name="cleanup" depends="init">
      <delete dir="${build.classes}"/>
      <delete dir="${final.dir}"/>
    </target>

    <!-- =================================================================== -->
    <!-- Remove all directories created by ant                               -->
    <!-- =================================================================== -->
    <target name="fullcleanup" depends="init">
      <delete dir="${build.work}"/>
      <delete dir="${snapshot.src}"/>
    </target>

    <!-- =================================================================== -->
    <!-- These are just some test targets                                    -->
    <!-- =================================================================== -->
    <target name="ftp-test" depends="">
         <ftp server="piefke.helma.at"
            userid="anonymous"
            password="tobi@helma.at">
            <fileset dir="${home.dir}">
                 <include name="${Name}-${version}.zip,${Name}-${version}.tar.gz"/>
            </fileset>
        </ftp>
    </target>
    
    <target name="test1" depends="init">
      <mkdir dir="${build.checkout}"/>
      <cvs cvsRoot="${cvs.root}" package="apps/manage" dest="${build.checkout}"/>
			<zip zipfile="../manage.zip" basedir="${build.checkout}/apps/manage/" includes="**"/>
    </target>

    <target name="test2" depends="init">
      <property name="antclick.dir" value="${build.work}/antclick"/>
      <copy todir="${antclick.dir}/apps/antville/">
        <fileset dir="${build.checkout}/hopbuild/skeleton/extras" includes="db.properties"/>
      </copy>
    </target>

</project>