<!--

The contents of this file are subject to the THDL Open Community License
Version 1.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License on the THDL web site 
(http://www.thdl.org/).

Software distributed under the License is distributed on an "AS IS" basis, 
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the 
License for the specific terms governing rights and limitations under the 
License. 

The Initial Developer of this software is the Tibetan and Himalayan Digital
Library (THDL). Portions created by the THDL are Copyright 2002-2003 THDL.
All Rights Reserved. 

Contributor(s): ______________________________________.
-->

<!-- @author David Chandler, dchandler@users.sourceforge.net

     FIXME
       Right now, the web-start-releases and self-contained-dist
       targets hard-code the paths of the JARs/ZIPs they need.  Be
       sure you have yours in the right place.
     FIXME

     We have a document,
     http://thdltools.sourceforge.net/BuildSystems.html, that
     describes how to use this file to build Jskad, TiblEdit (TIBBIBL
     editor), and the translation tool.

     This build file is the main one, and it uses jwsbuild.xml for
     building Java Web Start (JWS) releases.  See the comments in that
     file to learn why.  Likewise with junitbuild.xml.

     Quick start for the impatient: This buildfile looks for the
     following, which are not in the CVS repository:

     $ANT_HOME/lib/xalan.jar
     $ANT_HOME/lib/xercesImpl.jar
     $ANT_HOME/lib/xml-apis.jar

     See the developers site, linked to from http://thdltools.sf.net/,
     for info on where to find these.  (You may be able to use Ant's
     copies of some of them, if you really can't wait to get started.
     Examine the contents of '$ANT_HOME/lib'.)

-->

<project name="THDLTools" default="dist" basedir=".">


  <description>
    This Jakarta Ant buildfile is used to build Jskad, TiblEdit
    (TIBBIBL editor), and the Translation Tool.  The docs at
    http://thdltools.sf.net/api are created using this buildfile, for
    example.  Read the comments of this buildfile to learn more, or
    see http://thdltools.sourceforge.net/BuildSystems.html.
  </description>

  <!--

   To customize a property without having to commit something to CVS
   (or feeling bothered by CVS), create the file build.properties in
   the same directory as this file.  It's a Java properties file, so
   you have lines like 'this.property=that' in it.

  -->
  <property file="build.properties"/>

  <!-- set global properties for this build -->
  <property name="my.jar.suffix" value=""/>
  <property name="javacdashg" value="yes"/>
  <property name="source" location="source"/>
  <property name="license" location="license"/>

  <!-- 'ant clean' won't work well if ${jskadbin} and the other *bin aren't
       subdirectories of ${bin}. -->
  <property name="bin" location="bin"/>
  <property name="jskadbin" location="bin/jskad"/>
  <property name="converterguibin" location="bin/convertergui"/>
  <property name="tibleditbin" location="bin/tibledit"/>
  <property name="junitbin" location="bin/for-junit"/>
  <property name="ttstandalonebin" location="bin/tt-standalone"/>
  <property name="ttappletjwsbin" location="bin/tt-applet-and-java-web-start"/>
  <property name="tthandheldbin" location="bin/tt-handheld"/>
  <property name="ttservletbin" location="bin/tt-servlet"/>

  <property name="docs" location="docs"/>
  <property name="dist"  location="dist"/>
  <property name="vanillalib"  location="${dist}/lib-vanilla"/>
  <property name="jwslib"  location="${dist}/lib-jws"/>
  <property name="lib"  location="${vanillalib}"/>
  <property name="ext"  location="extensions"/>
  <property name="publicjavadocs"  location="${docs}/public-javadocs"/>
  <property name="privatejavadocs"  location="${docs}/private-javadocs"/>

  <!-- Getting your nightly builds set up can take a long time.
       Changing this to "jskad-jws" tests that you've got Vamp and your
       keystore set up correctly if you use the dc-nightly-build
       target. -->
  <property name="dcnbt" value="nightly-build"/>

  <!-- If you wish to have your Javadocs link to someplace other than
       Sun's web site, maybe just changing these two, link.offline and
       java.api.loc.url, will do the trick: -->
  <property name="link.offline" value="false"/>
  <property name="java.api.loc.url"
            value="http://java.sun.com/j2se/1.4/docs/api/"/>


  <property name="jnlp.codebase"
            value="http://iris.lib.virginia.edu/tibet/tools"/>

  <property name="key.alias" value="David Germano"/>
  <property name="keystore" value="file:///f:/thdl/Jskad/thawte/keystore"/>

  <!-- If you have installed the J2EE SDK, then you can compile servlets.
       Set this property to the directory containing j2ee.jar: 
    -->
  <property name="j2ee.sdk.home" location="F:\Program Files\j2sdkee1.3.1\lib"/>
  <property name="tomcat.servlet.jar"
            location="d:\lenguaje\jakarta-tomcat-3.2.1\lib\servlet.jar"/>

  <!-- Set to true for more output when running the tools and if you
       want the code to abort when it reaches poorly thought-out
       control flow paths (i.e., iffy code).
    -->
  <property name="thdl.debug" value="true"/>

  <!-- Compress nightlyBuild.zip? -->
  <property name="compress.nightly.build" value="false"/>

  <!-- Set to the name of the dictionary used by the Translation Tool: -->
  <property name="arch.dict" value="architecture_dictionary"/>

  <!-- Set this to 1.2 if you want J2SDK 1.4's default.  1.1 gives us
       more compatibility, but maybe there will be a performance hit
       or something.  -->
  <property name="target.jvm" value="1.1"/>

  <!-- Only the tt-servlet-compile target changes this.  Humans
       shouldn't mess with this. -->
  <property name="our.javac.classpathref" value="entire.class.path"/>

  <!-- Javadoc needs to find all classes, so you have to give it a megaclasspath: -->
  <property name="javadocs.class.path.ref" value="all.extras.class.path"/>

  <!-- To easily add a jar to the CLASSPATH, just drop it into
       'extensions/drop-ins/'. -->
  <path id="entire.class.path">
    <pathelement location="${ext}/"/> <!-- for netscape.javascript and calpa.html -->

    <!-- Developers: although these JARs are not yet in CVS, you're
         responsible for finding them and putting them into
         'extensions/': -->
    <pathelement location="${ext}/jdom.jar"/>

    <!-- this gets Ant's jars, so leave it out:
        <pathelement path="${java.class.path}/"/> -->

    <fileset dir="${ext}/drop-ins">
      <include name="*.jar"/>
      <include name="*.JAR"/>
      <include name="*.zip"/>
      <include name="*.ZIP"/>
    </fileset>

    <!-- Developers: set this on the ant command line if you need to
         with 'ant -Dadditional.class.path="c:\foo"': -->
    <pathelement path="${additional.class.path}"/>

  </path>


  <path id="all.extras.class.path">
    <pathelement location="${j2ee.sdk.home}/j2ee.jar"/>
    <pathelement location="${tomcat.servlet.jar}"/>
    <path refid="entire.class.path"/>
  </path>


  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${dist}/releases"/>
    <mkdir dir="${dist}/docs"/>
    <mkdir dir="${vanillalib}"/>
    <mkdir dir="${jwslib}"/>
    <mkdir dir="${lib}"/>
    <mkdir dir="${dist}/java-web-start"/>
    <mkdir dir="${dist}/source"/>
    <mkdir dir="${publicjavadocs}"/>
    <mkdir dir="${privatejavadocs}"/>
  </target>


  <!--
       See http://thdltools.sourceforge.net/BuildSystems.html for full
       details on unit testing our software.  If you're eager enough
       to get started, just read
       extensions/to-be-installed-with-ant/README.TXT.

       Just as with 'ant dist', it is wise to 'ant clean' before
       running 'ant check'.
  -->
  <target name="check"
          description="Compiles and runs all JUnit tests (that can be run given the present extension JARs) for the entire project.  Our coverage is currently quite low."
          depends="compile-junit-tests">
    <ant antfile="junitbuild.xml" target="run-headed-junit-tests"
         inheritAll="false" inheritRefs="false">
       <reference refid="entire.class.path"/>
       <property name="junitbin" value="${junitbin}"/>
    </ant>
    <ant antfile="junitbuild.xml" target="run-headless-junit-tests"
         inheritAll="false" inheritRefs="false">
       <reference refid="entire.class.path"/>
       <property name="junitbin" value="${junitbin}"/>
       <property name="java.awt.headless" value="true"/>
       <property name="java.awt.graphicsenv" value=""/>
    </ant>
    <echo message=""/>
    <echo message="You may now examine the files TEST-* for more details."/>
  </target>

  <!-- Use 'ant check' for testing the software, and this merely for putting the build system through its paces: -->
  <target name="test-all-ant-targets"
          depends="clean,distclean,compile,dist,src-dist,self-contained-dist,public-javadocs-dist,private-javadocs-dist,releases,web-start-releases,check,nightly-build"
          description="runs every target in this buildfile in a smart order; useful for testing the buildfile and your build environment" />

  <target name="nightly-build"
          depends="distclean"
          description="Creates ${dist}/nightlyBuild.zip" >

    <!-- I believe that this order might actually matter, because some
         targets execute 'ant clean' (though they only do so because I
         am lazy).  I stopped a couple from so doing, but I'm not sure
         if I got them all. -->

    <!-- If you change *build.xml, then 'ant dc-nightly-build' will be
         using the OLD build.xml, not the new one, if it were to
         execute the 'cvs-update' target itself.  You should update
         and then use a new ant process to read the potentially
         revised buildfiles; e.g., ant distclean cvs-update && ant
         dc-nightly-build.  -->

    <antcall target="web-start-releases"/>

    <antcall target="self-contained-dist"/>

    <!-- vanilla JARs: -->
    <antcall target="dist"/>

    <antcall target="public-javadocs-dist">
      <param name="DSTAMP" value="today"/>
    </antcall>
    <unzip src="${dist}/docs/public-javadocs-today.zip" dest="${dist}/docs/public"/>

    <antcall target="private-javadocs-dist">
      <param name="DSTAMP" value="today"/>
    </antcall>
    <unzip src="${dist}/docs/private-javadocs-today.zip" dest="${dist}/docs/private"/>

    <antcall target="src-dist">
      <param name="DSTAMP" value="today"/>
    </antcall>

    <antcall target="check-report"/>

    <echo file="${dist}/DateStampForNightlyBuilds.html"
          append="false"><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Nightly Build Timestamp</title>
  </head>

  <body>
    <h1>THDL Tools Nightly Build Timestamp</h1>

<p>
  These nightly builds were made at ]]></echo>

    <tstamp>
      <format property="nb.creation.time" pattern="MM/dd/yyyy hh:mm aa"/>
    </tstamp>

    <echo file="${dist}/DateStampForNightlyBuilds.html" append="true">${nb.creation.time}</echo>
    <echo file="${dist}/DateStampForNightlyBuilds.html" append="true"><![CDATA[.
</p>
</body>
</html>
]]></echo>

    <zip destfile="${dist}/nightlyBuild.zip"
         compress="${compress.nightly.builds}">
      <zipfileset dir="${dist}"
                  excludes="nightlyBuild.zip,lib-jws/**,*.jnlp,README.TXT,releases"
                  prefix="."/>
    </zip>
    <delete file="${dist}/DateStampForNightlyBuilds.html"/>
  </target>

  <!-- DLC FIXME: add tibledit-all-in-one-dist -->
  <target name="self-contained-dist"
          depends="jskad-all-in-one-dist"
          description="JARs up everything into self-contained JARs for double-click, classpath-worry-free joy" />

  <target name="dist"
          depends="jskad-dist,tt-handheld-dist,tt-standalone-dist,tt-applet-plus-jws-dist,tt-servlet-dist,tibledit-dist,convertergui-dist"
          description="JARs up everything" />

  <target name="compile"
          depends="jskad-compile,tt-standalone-compile,tt-handheld-compile,tt-applet-plus-jws-compile,tt-servlet-compile,tibledit-compile,convertergui-compile"
          description="compiles all programs" />


  <target name="jskad-compile" depends="init"
          description="compiles Jskad" >
    <mkdir dir="${jskadbin}"/>
    <antcall target="create-timestamp-source-code"/> <!-- DLC NOW! The -run targets are mucking with this! It isn't fatal, but it should be fixed. -->
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${jskadbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/input/Jskad.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${jskadbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/TibetanHTML.java"/>
    </antcall>
    <!-- Put org.thdl.VerboseUnicodeDump in Jskad's jar for those who
         want to use it. -->
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${jskadbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/util/VerboseUnicodeDump.java"/>
    </antcall>
    <!-- Put TibetanConverter and ACIPConverter in Jskad's jar for
         those who want to use them. -->
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${jskadbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/input/TibetanConverter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${jskadbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/ttt/ACIPConverter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${jskadbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/input/ConverterGUI.java"/>
    </antcall>
    <antcall target="copy-ini-files-to-bin-dir-for-jarring">
      <param name="mybin" value="${jskadbin}"/>
    </antcall>
    <antcall target="copy-tmw-fonts-to-bin-dir">
      <param name="my.bin" value="${jskadbin}"/>
    </antcall>
    <antcall target="copy-tm-fonts-to-bin-dir">
      <param name="my.bin" value="${jskadbin}"/>
    </antcall>
    <antcall target="copy-calhtmlpane-to-bin-dir">
      <param name="my.bin" value="${jskadbin}"/>
    </antcall>
    <antcall target="copy-license-etc-to-bin-dir-for-jarring">
      <param name="mybin" value="${jskadbin}"/>
    </antcall>
    <copy todir="${jskadbin}">
      <fileset dir="${source}">
        <include name="org/thdl/tib/input/jskad_doc.html"/>
      </fileset>
    </copy>
    <copy todir="${jskadbin}/org/thdl/tib/input">
      <fileset dir="${source}">
        <include name="*.rtf"/>
        <!-- We don't have ACIP_keyboard.rtf yet, but creating such a
             thing manually is just one option.  We could easily
             generate all the keyboard descriptions
             programmatically. (FIXME) -->
      </fileset>
    </copy>
  </target>

  <target name="convertergui-compile" depends="init"
          description="compiles Convertergui" >
    <mkdir dir="${converterguibin}"/>
    <antcall target="create-timestamp-source-code"/> <!-- DLC NOW! The -run targets are mucking with this! It isn't fatal, but it should be fixed. -->
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${converterguibin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/input/ConverterGUI.java"/>
    </antcall>
    <!-- Put TibetanConverter in this jar for those who want
         to use it. -->
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${converterguibin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/input/TibetanConverter.java"/>
    </antcall>
    <antcall target="copy-ini-files-to-bin-dir-for-jarring">
      <param name="mybin" value="${converterguibin}"/>
    </antcall>
    <antcall target="copy-license-etc-to-bin-dir-for-jarring">
      <param name="mybin" value="${converterguibin}"/>
    </antcall>
  </target>

  <target name="tibledit-compile" depends="init"
          description="compiles TiblEdit" >
    <mkdir dir="${tibleditbin}"/>
    <antcall target="copy-tmw-fonts-to-bin-dir">
      <param name="my.bin" value="${tibleditbin}"/>
    </antcall>
    <antcall target="create-timestamp-source-code"/> <!-- DLC NOW! The -run targets are mucking with this! It isn't fatal, but it should be fixed. -->
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${tibleditbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/bibl/TiblEdit.java"/>
    </antcall>
    <antcall target="copy-ini-files-to-bin-dir-for-jarring">
      <param name="mybin" value="${tibleditbin}"/>
    </antcall>
    <antcall target="copy-license-etc-to-bin-dir-for-jarring">
      <param name="mybin" value="${tibleditbin}"/>
    </antcall>
  </target>

  <target name="compile-junit-tests" depends="init"
          description="compiles all JUnit test cases that can be compiled in the present CLASSPATH (NB that this distinction is just wishful thinking for now because we have such weak test coverage at this point)" >
    <mkdir dir="${junitbin}"/>
    <antcall target="create-timestamp-source-code"/> <!-- DLC NOW! The -run targets are mucking with this! It isn't fatal, but it should be fixed. -->
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/ttt/PackageTest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/ttt/LotsOfTshegBarsTest.java"/>
    </antcall>
    <antcall target="copy-ini-files-to-bin-dir-for-jarring">
      <param name="mybin" value="${junitbin}"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/util/ThdlLazyExceptionTest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/util/TrieTest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/tshegbar/UnicodeUtilsTest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/tshegbar/LegalTshegBarTest.java"/>
    </antcall>
    <antcall target="create-timestamp-source-code">
      <param name="mybin" value="${junitbin}"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/input/DuffPaneTest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/tshegbar/UnicodeGraphemeClusterTest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/text/tshegbar/UnicodeCodepointToThdlWylieTest.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${junitbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/util/RTFFixerInputStreamTest.java"/>
    </antcall>
  </target>

  <!-- Builds the standalone translation tool: -->
  <target name="tt-standalone-compile" depends="init"
          description="compiles the standalone Translation Tool" >
    <mkdir dir="${ttstandalonebin}"/>
    <antcall target="copy-tmw-fonts-to-bin-dir">
      <param name="my.bin" value="${ttstandalonebin}"/>
    </antcall>
    <antcall target="create-timestamp-source-code"/>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${ttstandalonebin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/BinaryFileGenerator.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${ttstandalonebin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/WindowScannerFilter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${ttstandalonebin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/ConsoleScannerFilter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${ttstandalonebin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/AcipToWylie.java"/>
    </antcall>
    <antcall target="copy-ini-files-to-bin-dir-for-jarring">
      <param name="mybin" value="${ttstandalonebin}"/>
    </antcall>
    <antcall target="copy-license-etc-to-bin-dir-for-jarring">
      <param name="mybin" value="${ttstandalonebin}"/>
    </antcall>
    <copy todir="${ttstandalonebin}/org/thdl/tib/input">
      <fileset dir="${source}">
        <include name="*.rtf"/>
      </fileset>
    </copy>
  </target>


  <!-- Builds the translation tool for handhelds.  This tells J2SDK
       1.4 to compile for handhelds (-target 1.1 does the trick).
       Compiling with J2SDK 1.3 does so by default, by the way. -->
  <target name="tt-handheld-compile" depends="init"
          description="compiles the handheld Translation Tool" >
    <mkdir dir="${tthandheldbin}"/>
    <antcall target="create-timestamp-source-code"/>
    <antcall target="our-internal-javac-task">
      <param name="target.jvm" value="1.1"/>
      <param name="mybin" value="${tthandheldbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/WindowScannerFilter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="target.jvm" value="1.1"/>
      <param name="mybin" value="${tthandheldbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/ConsoleScannerFilter.java"/>
    </antcall>
    <antcall target="copy-license-etc-to-bin-dir-for-jarring">
      <param name="mybin" value="${tthandheldbin}"/>
    </antcall>
  </target>


  <!-- Builds the applet + the Java Web Start translation tool: -->
  <target name="tt-applet-plus-jws-compile" depends="init"
          description="compiles the applet + Java Web Start forms of the Translation Tool" >
    <mkdir dir="${ttappletjwsbin}"/>
    <antcall target="copy-tmw-fonts-to-bin-dir">
      <param name="my.bin" value="${ttappletjwsbin}"/>
    </antcall>
    <antcall target="create-timestamp-source-code"/>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${ttappletjwsbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/AppletScannerFilter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <param name="mybin" value="${ttappletjwsbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/WindowScannerFilter.java"/>
    </antcall>
    <antcall target="copy-ini-files-to-bin-dir-for-jarring">
      <param name="mybin" value="${ttappletjwsbin}"/>
    </antcall>
    <antcall target="copy-license-etc-to-bin-dir-for-jarring">
      <param name="mybin" value="${ttappletjwsbin}"/>
    </antcall>
    <copy todir="${ttappletjwsbin}/org/thdl/tib/input">
      <fileset dir="${source}">
        <include name="*.rtf"/>
      </fileset>
    </copy>
  </target>


  <target name="tt-servlet-compile"
          depends="ttsc-init"
          if="found.servlet.classes"
          description="compiles the servlet form of the Translation Tool if you've set the j2ee.sdk.home property correctly" >
    <mkdir dir="${ttservletbin}"/>
    <antcall target="copy-tmw-fonts-to-bin-dir">
      <param name="my.bin" value="${ttservletbin}"/>
    </antcall>
    <antcall target="create-timestamp-source-code"/>
    <!-- For now, these two paths are identical: -->
    <path id="ttsc.class.path">
      <path refid="all.extras.class.path"/>
    </path>
    <antcall target="our-internal-javac-task">
      <reference torefid="ttsc.class.path" refid="ttsc.class.path"/>
      <param name="our.javac.classpathref" value="ttsc.class.path"/>
      <param name="mybin" value="${ttservletbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/ConsoleScannerFilter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <reference torefid="ttsc.class.path" refid="ttsc.class.path"/>
      <param name="our.javac.classpathref" value="ttsc.class.path"/>
      <param name="mybin" value="${ttservletbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/OnLineScannerFilter.java"/>
    </antcall>
    <antcall target="our-internal-javac-task">
      <reference torefid="ttsc.class.path" refid="ttsc.class.path"/>
      <param name="our.javac.classpathref" value="ttsc.class.path"/>
      <param name="mybin" value="${ttservletbin}"/>
      <param name="my.included.source.file"
             value="org/thdl/tib/scanner/RemoteScannerFilter.java"/>
    </antcall>
    <antcall target="copy-ini-files-to-bin-dir-for-jarring">
      <param name="mybin" value="${ttservletbin}"/>
    </antcall>
    <antcall target="copy-license-etc-to-bin-dir-for-jarring">
      <param name="mybin" value="${ttservletbin}"/>
    </antcall>
  </target>

  <!-- DLC FIXME: add tibledit-jws -->
  <!--
       Note that jardiffs for the JWS stuff are done by the JWS system
       itself when appropriate and when the server is configured
       correctly.  We have no work to do on that front.
  -->
  <target name="web-start-releases"
          depends="jskad-jws,tt-jws"
          description="Builds the Java Web Start versions of all applications"/>


  <target name="jskad-jws"
          depends="init"
          description="Builds the Java Web Start version of Jskad">
    <antcall target="compile-from-scratch-and-call-jws-subbuild">
      <param name="my.app" value="Jskad"/>
      <param name="jwsjarsuffix" value="-self-contained"/>
      <param name="my.prereq" value="jskad-all-in-one-dist"/>
      <param name="lib" value="${jwslib}"/>
    </antcall>
  </target>

  <target name="tt-jws"
          depends="init"
          description="Builds the Java Web Start version of the translation tool">
    <antcall target="compile-from-scratch-and-call-jws-subbuild">
      <param name="my.app" value="DictionarySearchAppletAndJavaWebStart"/>
      <param name="jwsjarsuffix" value=""/>
      <param name="my.prereq" value="tt-applet-plus-jws-dist"/>
      <param name="lib" value="${jwslib}"/>
    </antcall>
  </target>


  <target name="src-dist" depends="init"
          description="generates the full Jskad+TiblEdit+Translation Tool source distribution" >
    <!-- Put everything necessary into the zip file -->
    <zip destfile="${dist}/source/THDL-Tools-src-${DSTAMP}.zip">
      <zipfileset dir="${source}"
                  includes="**"
                  prefix="source"/>
      <zipfileset dir="${ext}/drop-ins"
                  includes="README.TXT"
                  prefix="extensions/drop-ins"/>
      <zipfileset dir="${ext}/calpa/html"
                  includes="*.class"
                  prefix="extensions/calpa/html"/>

      <!-- Without a Fonts dir, the build from source will fail. Cludge: hack: FIXME: -->
      <zipfileset dir="Fonts/TibetanMachine"
                  includes="*.txt"
                  prefix="Fonts/TibetanMachine"/>
      <zipfileset dir="Fonts/TibetanMachineWeb"
                  includes="*.txt"
                  prefix="Fonts/TibetanMachineWeb"/>

      <zipfileset dir="${license}"
                  includes="*"
                  prefix="."/>
      <zipfileset dir="${license}"
                  includes="*"
                  prefix="license"/>
      <zipfileset dir="."
                  includes="*build.xml"
                  prefix="."/>
      <zipfileset dir="."
                  includes="docs/*package-list/**"
                  prefix="."/>
    </zip>
  </target>


  <target name="jskad-dist" depends="jskad-compile"
          description="generates the bare Jskad binary distribution" >
    <!-- Put everything in ${jskadbin} into the JAR file -->
    <jar jarfile="${lib}/Jskad${my.jar.suffix}.jar"
         basedir="${jskadbin}">
      <manifest>
        <attribute name="Main-Class" value="org.thdl.tib.input.Jskad"/>
      </manifest>
    </jar>
  </target>


  <target name="convertergui-dist" depends="convertergui-compile"
          description="generates the bare ConverterGUI binary distribution" >
    <!-- Put everything in ${converterguibin} into the JAR file -->
    <jar jarfile="${lib}/TibetanConverterGUI${my.jar.suffix}.jar"
         basedir="${converterguibin}">
      <manifest>
        <attribute name="Main-Class" value="org.thdl.tib.input.ConverterGUI"/>
      </manifest>
    </jar>
  </target>


  <target name="tibledit-dist" depends="tibledit-compile"
          description="generates the bare TiblEdit binary distribution" >
    <!-- Put everything in ${tibleditbin} into the JAR file -->
    <jar jarfile="${lib}/TiblEdit${my.jar.suffix}.jar"
         basedir="${tibleditbin}">
      <manifest>
        <attribute name="Main-Class" value="org.thdl.tib.bibl.TiblEdit"/>
      </manifest>
    </jar>
  </target>


  <!-- FIXME: generate translation tool servlet distribution -->

  <target name="tt-standalone-dist" depends="tt-standalone-compile"
          description="generates the standalone translation tool's binary distribution." >
    <!-- Put everything in ${ttstandalonebin} into the JAR file -->
    <jar jarfile="${lib}/DictionarySearchStandalone${my.jar.suffix}.jar"
         basedir="${ttstandalonebin}">
      <manifest>
        <attribute name="Main-Class"
                   value="org.thdl.tib.scanner.WindowScannerFilter"/>
      </manifest>
    </jar>
  </target>


  <target name="tt-handheld-dist" depends="tt-handheld-compile"
          description="generates the handheld translation tool's binary distribution." >
    <!-- Put everything in ${tthandheldbin} into the JAR file -->
    <jar jarfile="${lib}/DictionarySearchHandheld${my.jar.suffix}.jar"
         basedir="${tthandheldbin}">
      <manifest>
        <attribute name="Main-Class"
                   value="org.thdl.tib.scanner.WindowScannerFilter"/>
      </manifest>
    </jar>
  </target>


  <target name="tt-applet-plus-jws-dist" depends="tt-applet-plus-jws-compile"
          description="generates the applet-plus-jws translation tool's binary distribution." >
    <!-- Put everything in ${ttappletjwsbin} into the JAR file -->
    <jar jarfile="${lib}/DictionarySearchAppletAndJavaWebStart${my.jar.suffix}.jar"
         basedir="${ttappletjwsbin}">
      <!-- We have two choices here, but the web page will call for
           AppletScannerFilter, so the double-click should open the
           standalone version, WindowScannerFilter: -->
      <manifest>
        <attribute name="Main-Class"
                   value="org.thdl.tib.scanner.WindowScannerFilter"/>
      </manifest>
    </jar>
  </target>


  <target name="tt-servlet-dist" depends="tt-servlet-compile"
          if="found.servlet.classes"
          description="generates the servlet translation tool's binary distribution." >
    <!-- Put everything in ${ttservletbin} into the JAR file -->
    <jar jarfile="${lib}/DictionarySearchServlet${my.jar.suffix}.jar"
         basedir="${ttservletbin}">

      <!-- I don't think this'll work (I don't know servlets, mind
           you), but the main class is the following, so why not: -->
      <manifest>
        <attribute name="Main-Class"
                   value="org.thdl.tib.scanner.ConsoleScannerFilter"/>
      </manifest>
    </jar>
  </target>

  <target name="jskad-all-in-one-dist" depends="jskad-compile"
          description="generates the self-contained binary distribution for Jskad" >
    <!-- Now put everything in ${jskadbin} and ${ext}/netscape, plus
         the .ini files, into the JAR file
     -->
    <copy todir="${jskadbin}/netscape">
      <fileset dir="${ext}/netscape"/>
    </copy>
    <jar jarfile="${lib}/Jskad-self-contained${my.jar.suffix}.jar"
         basedir="${jskadbin}">
      <manifest>
        <attribute name="Main-Class" value="org.thdl.tib.input.Jskad"/>
      </manifest>
    </jar>
  </target>

  <target name="clean"
          description="cleans up a few things, but not all (not the Javadocs or the JWS releases, e.g.)" >
    <!-- Delete the ${bin} and ${dist} directory trees -->
    <delete dir="${bin}"/>
    <delete dir="${dist}/docs"/>
    <delete dir="${vanillalib}"/>
    <delete dir="${jwslib}"/>
    <delete dir="${lib}"/>
    <delete dir="${dist}/junit-noframes.html"/>
    <delete dir="${dist}/TESTS-TestSuites.xml"/>
    <delete dir="${dist}/releases"/>
    <delete dir="${dist}/source"/>
    <delete file="${dist}/DictionarySearchAppletAndJavaWebStart.jnlp"/>
    <delete file="${dist}/Jskad.jnlp"/>
    <delete file="${source}/org/thdl/util/ThdlVersion.java"/>
    <delete>
      <fileset dir="." includes="TEST-org.thdl*"/>
    </delete>
  </target>


  <!-- Automake build systems use a 'make distclean' target, hence the
       admittedly rather confusing name.  Trust the description.  -->
  <target name="distclean"
          description="cleans up so your directory once again looks like the source distribution"
          depends="clean" >
    <!-- Delete the API docs -->
    <delete dir="${publicjavadocs}"/>
    <delete dir="${privatejavadocs}"/>

    <delete dir="${dist}/java-web-start"/>

    <!-- 'ant clean' may be run during the nightly-build target, so
         'ant clean' cannot delete the following: -->
    <delete file="${dist}/nightlyBuild.zip"/>
  </target>


  <!--
    HEY PROJECT MANAGER:

    http://thdltools.sf.net/api lives at
    /home/groups/t/th/thdltools/htdocs/api.  To update it, follow the instructions
    at 'http://thdltools.sf.net/BuildSystems.html#wwwmodule'.
  -->


  <target name="public-javadocs-dist" depends="public-javadocs"
          description="makes zip file of Javadoc documentation for public/protected classes, methods, and fields" >
    <tstamp/>
    <zip destfile="${dist}/docs/public-javadocs-${DSTAMP}.zip"
         basedir="${publicjavadocs}"/>
  </target>


  <target name="private-javadocs-dist" depends="private-javadocs"
          description="makes zip file of Javadoc documentation for ALL classes, methods, and fields" >
    <tstamp/>
    <zip destfile="${dist}/docs/private-javadocs-${DSTAMP}.zip"
         basedir="${privatejavadocs}"/>
  </target>


  <target name="public-javadocs"
          description="makes Javadoc documentation for public/protected classes, methods, and fields.  Expect warnings, as private-javadocs is preferred."
          depends="init,create-timestamp-source-code" >
    <antcall target="our-javadocs">
      <param name="access" value="protected"/>
      <param name="our-javadocs-destdir" value="${publicjavadocs}"/>
    </antcall>
  </target>


  <target name="private-javadocs"
          description="makes Javadoc documentation for all classes, methods, and fields, regardless of their protection level (public, private, etc.)"
          depends="init,create-timestamp-source-code" >
    <antcall target="our-javadocs">
      <param name="access" value="private"/>
      <param name="our-javadocs-destdir" value="${privatejavadocs}"/>
    </antcall>
  </target>

  <target name="jskad-run" depends="jskad-dist" description="runs Jskad">
    <java classname="org.thdl.tib.input.Jskad" fork="yes">
      <classpath>
        <pathelement location="${lib}/Jskad${my.jar.suffix}.jar"/>
        <path refid="entire.class.path"/>
      </classpath>
      <jvmarg value="-Dthdl.debug=${thdl.debug}"/>
    </java>
  </target>

  <target name="tibledit-run" depends="tibledit-dist" description="runs TiblEdit, the TIBBIBL editor">
    <available classname="org.jdom.Document"
               classpathref="entire.class.path"
               ignoresystemclasses="true"
               property="jdom.present"/>
    <fail message="Can't find JDOM.  Drop jdom.jar into extensions."
          unless="jdom.present"/>
    <java classname="org.thdl.tib.bibl.TiblEdit" fork="yes">
      <classpath>
        <pathelement location="${lib}/TiblEdit${my.jar.suffix}.jar"/>
        <path refid="entire.class.path"/>
      </classpath>
      <jvmarg value="-Dthdl.debug=${thdl.debug}"/>
    </java>
  </target>

  <target name="tt-run" depends="tt-standalone-dist" description="runs the standalone translation tool">
    <java classname="org.thdl.tib.scanner.WindowScannerFilter" fork="yes">
      <classpath>
        <pathelement
          location="${lib}/DictionarySearchStandalone${my.jar.suffix}.jar"/>
        <path refid="entire.class.path"/>
      </classpath>
      <jvmarg value="-Dthdl.debug=${thdl.debug}"/>
      <!-- For non-swing version: <arg value="-simple"/> -->
      <arg value="${arch.dict}"/>
    </java>
  </target>


  <!-- DLC FIXME: build the tt-servlet release if the J2EE SDK is present. UPDATE: doesn't it do this? -->
  <!-- See http://thdltools.sf.net/BuildSystems.html for info on
       how to use this target.  Note that we must do a distclean
       because Ant doesn't always recompile when it should unless you use a
       special task.  -->
  <target name="releases"
          description="builds the releases under 'dist/releases/' after doing a distclean"
          depends="distclean,init">
    <antcall target="dist">
      <param name="javacdashg" value="no"/>
      <param name="dist" value="${dist}/releases"/>
    </antcall>
    <antcall target="src-dist">
      <param name="dist" value="${dist}/releases"/>
    </antcall>
    <antcall target="public-javadocs-dist">
      <param name="dist" value="${dist}/releases"/>
    </antcall>
    <antcall target="private-javadocs-dist">
      <param name="dist" value="${dist}/releases"/>
    </antcall>
  </target>


  <!-- DC uses this to update the javadocs on thdltools.sf.net. -->
  <target name="copy-over-javadocs"
          depends="clean,public-javadocs-dist,private-javadocs-dist"
          description="Uses scp to copy zip files of two flavors of Javadocs to thdltools.sf.net.  After that, ssh in and follow the instructions given in http://thdltools.sourceforge.net/BuildSystems.html.">
    <apply executable="scp" parallel="true">
      <srcfile/>
      <fileset dir="${dist}/docs"/>
      <arg value="dchandler@thdltools.sourceforge.net:/home/groups/t/th/thdltools/htdocs"/>
    </apply>
  </target>

  <target name="check-report" depends="check"
          description="Generates an HTML report regarding the status of the JUnit test cases.">
    <ant antfile="junitbuild.xml" target="make-nightly-report"
         inheritAll="false" inheritRefs="false">
       <property name="dist" value="${dist}"/>
    </ant>
  </target>
  
  <!-- DC uses this to do nightly builds. The passwords are included
       in this publically-available file because the keystore is basically
       a dummy keystore. -->
  <target name="dc-nightly-build"
          description="How Chandler r0x0rs the nightly build's b0x0rs">
    <antcall target="${dcnbt}">
      <param name="keystore" value="file:///home/my_www/thdl/nightly/Jskad/NightlyBuildStore"/>
      <param name="key.alias" value="me"/>
      <param name="dgkey.password" value="nightly"/>
      <param name="keystore.password" value="nightly"/>
      <param name="jnlp.codebase" value="http://he.is-a-geek.org/thdl/nightly/builds/java-web-start"/>
    </antcall>
  </target>

  <!-- THDL uses this to do nightly builds. The passwords are included
       in this publically-available file because the keystore is basically
       a dummy keystore. -->
  <target name="thdl-nightly-build"
          description="How THDL does nightly builds">
    <antcall target="${dcnbt}">
      <param name="keystore"
             value="file:///home/www/thdl/builds/Jskad/NightlyBuildStore"/>
      <param name="key.alias" value="me"/>
      <param name="dgkey.password" value="nightly"/>
      <param name="keystore.password" value="nightly"/>
      <param name="jnlp.codebase"
             value="http://iris.lib.virginia.edu/thdl/builds"/>
    </antcall>
  </target>

  <target name="cvs-update" description="Performs a CVS update.">
    <cvs cvsRoot=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/thdltools"
         command="-f -z3 -q update -d -P" failonerror="true"/>
  </target>


  <!-- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -->
  <!-- UTILITY TARGETS - targets of antcalls, targets not usually
       directly called. -->
  <!-- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -->

  <target name="ttsc-init" depends="init"
          description="used internally to set a property when the J2EE SDK or Tomcat's servlet.jar is installed in a place where we can find it.  In that case, we can build servlets.">
    <condition property="found.servlet.classes">
      <or>
        <available file="${j2ee.sdk.home}/j2ee.jar"/>
        <available file="${tomcat.servlet.jar}"/>
      </or>
    </condition>
  </target>

  <!-- Utility target called by private-javadocs and public-javadocs -->
  <target name="our-javadocs" depends="init"
          description="INTERNAL TASK: makes Javadoc documentation; usually not called directly" >

    <!-- See http://jakarta.apache.org/ant/manual/CoreTasks/javadoc.html
         to learn more about the Javadoc task.
     -->

    <tstamp>
      <format property="javadoc.creation.time" pattern="MM/dd/yyyy hh:mm aa"/>
    </tstamp>

    <!-- We don't really use @version correctly, do we? So version="false". -->
    <javadoc destdir="${our-javadocs-destdir}"
             author="true"
             access="${access}"
             version="false"
             use="true"
             classpathref="${javadocs.class.path.ref}"
             windowtitle="THDL Tools APIs"
             Overview="${source}/overview.html">

      <fileset dir="${source}" defaultexcludes="yes">
        <include name="org/thdl/**/*.java" />
        <!-- Exclude JUnit tests: -->
        <exclude name="**/*Test.java"/>
        <exclude name="**/*AllTests.java"/>
      </fileset>

      <doctitle><![CDATA[<h1>THDL Tools</h1>]]></doctitle>

      <!-- Note: We must show the SF.net logo in order to get hit counts. -->
      <bottom>These API docs were created ${javadoc.creation.time}.<![CDATA[<br><i>Copyright &#169; 2001-2003 Tibetan and Himalayan Digital Library. All Rights Reserved.</i><br>Hosted by <a href="http://sourceforge.net/"><img src="http://sourceforge.net/sflogo.php?group_id=61934&amp;type=1" width="88" height="31" border="0" alt="SourceForge_Logo"></a>]]></bottom>

      <group title="Tibetan Text Packages" packages="org.thdl.tib.text.**"/>
      <group title="Tibetan Input Packages" packages="org.thdl.tib.input.**"/>

      <!-- Have our API docs link to Sun's, JDOM's, etc. -->
      <link offline="${link.offline}"
            href="${java.api.loc.url}"
            packagelistLoc="${docs}/j2sdk1.4-package-list"/>
      <link offline="${link.offline}"
            href="http://www.jdom.org/docs/apidocs/"
            packagelistLoc="${docs}/jdom-package-list"/>
    </javadoc>
  </target>


  <target name="copy-license-etc-to-bin-dir-for-jarring"
          depends="init"
          description="INTERNAL TASK: Copies the license documents and the default properties file (hence the et cetera) to the bin directory.  Usually not called directly.">
    <copy todir="${mybin}">
      <fileset dir="${license}"/>
    </copy>

    <!-- The default properties file, shared by all our tools: -->
    <copy todir="${mybin}">
      <fileset dir="${source}">
        <include name="options.txt"/>
      </fileset>
    </copy>
  </target>


  <target name="copy-ini-files-to-bin-dir-for-jarring"
          depends="init"
          description="INTERNAL TASK: Copies the *.ini files to the bin directory.  Usually not called directly.">
    <copy todir="${mybin}">
      <fileset dir="${source}">
        <include name="org/thdl/tib/**/*.ini"/>
      </fileset>
    </copy>
    <copy todir="${mybin}">
      <fileset dir="${source}">
        <include name="org/thdl/tib/bibl/dia.dat"/>
      </fileset>
    </copy>
    <copy todir="${mybin}">
      <fileset dir="${source}">
        <include name="keyboards.ini"/>
      </fileset>
    </copy>
  </target>


  <!-- To avoid duplicating very similar compilation tasks, we antcall
       this task.  We do this once per class we want, and javac is
       smart enough to find dependent classes and compile them. -->
  <target name="our-internal-javac-task"
          depends="init"
          description="INTERNAL TASK: Compiles according to Ant properties.  Usually not called directly.">

    <!-- Be sure we're going to be able to compile something: -->
    <available file="${source}/${my.included.source.file}"
               property="found.file.to.compile"/>
    <fail message="Can't find the file '${source}/${my.included.source.file}' to compile it!  Don't worry about forward vs. backward slashes, by the way--Ant is smart about those."
          unless="found.file.to.compile"/>


    <javac destdir="${mybin}" debug="${javacdashg}" target="${target.jvm}">
      <classpath refid="${our.javac.classpathref}"/>
      <src path="${source}"/>
      <include name="${my.included.source.file}" />

      <!-- Don't compile these resources (we could leave this out, but
           Ant's debugging output would confuse us, and having this
           explicit is a Good Thing: -->
      <exclude name="**/*.properties" />
      <exclude name="**/*.rtf" />
      <exclude name="**/*.xsl" />
      <exclude name="**/*.txt" />
      <exclude name="**/*.ini" />
      <exclude name="**/*.html" />
      <exclude name="**/*.gif" />
      <exclude name="**/*.jpg" />
    </javac>
  </target>


  <target name="compile-from-scratch-and-call-jws-subbuild"
          depends="init"
          description="Cleans, compiles, and packages the Java Web Start version of ${my.app}">

    <!-- First, you must give the passwords so that we can sign the JARs. -->
    <fail message="Use 'ant -Dkeystore.password=psst' to sign a Java Web Start WAR file."
          unless="keystore.password"/>
    <fail message="Use 'ant -Ddgkey.password=psst' to sign a Java Web Start WAR file."
          unless="dgkey.password"/>

    <!-- Clean:  (FIXME: clean only what you must clean, the appropriate bin dir, not the whole bin tree.) -->
    <delete dir="${bin}"/>

    <!-- Now, having cleaned, we create ${my.app}.jar: -->
    <antcall target="${my.prereq}">
      <param name="my.jar.suffix" value=""/>
      <param name="javacdashg" value="no"/>
    </antcall>

    <!-- Now create the .jnlp file: -->
    <antcall target="create-${my.app}-jnlp-file"/>
    <!-- And save it: -->
    <copy todir="${dist}/java-web-start">
      <fileset dir="${dist}">
        <include name="${my.app}.jnlp"/>
      </fileset>
    </copy>

    <!-- Finally, call jwsbuild.xml appropriately: -->
    <ant antfile="jwsbuild.xml" target="package-for-java-web-start"
         inheritAll="false" inheritRefs="false">
      <property name="dist" value="${dist}"/>
      <property name="lib" value="${jwslib}"/>

      <property name="dgkey.password" value="${dgkey.password}"/>
      <property name="keystore.password" value="${keystore.password}"/>
      <property name="keystore" value="${keystore}"/>
      <property name="key.alias" value="${key.alias}"/>
    </ant>
  </target>


  <target name="create-Jskad-jnlp-file"
          depends="init"
          description="Creates Jskad's JNLP file based on a template hard-coded into this build file and your choice of the jnlp.codebase property.">

    <!-- Write the head of the .jnlp file: -->
    <echo file="${dist}/Jskad.jnlp"
          append="false"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"]]></echo>

    <!-- Write the middle of the .jnlp file: -->
    <echo file="${dist}/Jskad.jnlp"
          append="true">
<![CDATA[      codebase="]]>${jnlp.codebase}<![CDATA["]]></echo>

    <!-- Write the tail of the .jnlp file: -->
    <echo file="${dist}/Jskad.jnlp"
          append="true">
<![CDATA[      href="Jskad.jnlp">
<information>
  <title>Jskad</title>
  <vendor>THDL</vendor>
  <homepage href="http://iris.lib.virginia.edu/tibet/tools/jskad.html" />

  <description>
    Jskad is a simple text editor for the Tibetan language, using the
    Wylie transliteration and supporting several virtual keyboards.
    You must install the Tibetan Machine Web fonts before using
    Jskad.
  </description>

  <offline-allowed/>
</information>
<security>
  <all-permissions/>
</security>
<resources>
  <j2se version="1.2+"/>
  <jar href="Jskad-self-contained.jar" />
</resources>
<application-desc />
</jnlp>
]]></echo>

  </target>

  <target name="create-DictionarySearchAppletAndJavaWebStart-jnlp-file"
          depends="init"
          description="Creates the translation tool's JNLP file based on a template hard-coded into this build file and your choice of the jnlp.codebase property.">

    <!-- Write the head of the .jnlp file: -->
    <echo file="${dist}/DictionarySearchAppletAndJavaWebStart.jnlp"
          append="false"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"]]></echo>

    <!-- Write the middle of the .jnlp file: -->
    <echo file="${dist}/DictionarySearchAppletAndJavaWebStart.jnlp"
          append="true">
<![CDATA[      codebase="]]>${jnlp.codebase}<![CDATA["]]></echo>

    <!-- Write the tail of the .jnlp file: -->
    <echo file="${dist}/DictionarySearchAppletAndJavaWebStart.jnlp"
          append="true">
<![CDATA[      href="DictionarySearchAppletAndJavaWebStart.jnlp">
<information>
  <title>DictionarySearchAppletAndJavaWebStart</title>
  <vendor>THDL</vendor>
  <homepage href="http://iris.lib.virginia.edu/tibet/reference/translation-tool.html" />

  <description>
    The translation tool provides a Tibetan-to-English dictionary.
    You must have the Tibetan Machine Web fonts installed on your
    computer to take full advantage of this dictionary.
  </description>

  <offline-allowed/>
</information>
<security>
  <all-permissions/>
</security>
<resources>
  <j2se version="1.2+"/>
  <jar href="DictionarySearchAppletAndJavaWebStart.jar" />
</resources>
<application-desc />
</jnlp>
]]></echo>

  </target>

  <target name="create-timestamp-source-code"
          description="writes out a Java source file that contains the time of compilation">
    <tstamp>
      <format property="compilation.time" pattern="d-MMMM-yyyy hh:mm aa"
              offset="0" unit="hour"/>
    </tstamp>
    <delete file="${source}/org/thdl/util/ThdlVersion.java"/>
    <echo file="${source}/org/thdl/util/ThdlVersion.java"
          append="false"><![CDATA[// This file was automatically generated by the Ant build process.
// Your edits will be lost when you run Ant again.

package org.thdl.util;

/** Contains methods for determining the time at which this class
    was compiled.  This is useful for filling out bug reports about
    nightly builds.  This class is not instantiable. */
public class ThdlVersion {
    /** Do not instantiate this class. */
    private ThdlVersion() { }

    /** Returns a string indicating the time this program was compiled. */
    public static String getTimeOfCompilation() {
        return "]]></echo>

    <echo file="${source}/org/thdl/util/ThdlVersion.java"
          append="true">${compilation.time}</echo>

    <echo file="${source}/org/thdl/util/ThdlVersion.java"
          append="true"><![CDATA[";
    }
}
]]></echo>
  </target>

  <target name="copy-tmw-fonts-to-bin-dir"
          description="Copies the TMW font files to the current build's bin/ directory.">
    <available file="Fonts/TibetanMachineWeb"
               property="found.the.fonts"/>
    <fail message="Can't find the Fonts module at Jskad/Fonts/TibetanMachineWeb.  Did you do 'cvs -f checkout -P Fonts' from inside the Jskad directory?"
          unless="found.the.fonts"/>
    <copy todir="${my.bin}/Fonts/TibetanMachineWeb">
      <fileset dir="Fonts/TibetanMachineWeb"/>
    </copy>
  </target>

  <target name="copy-tm-fonts-to-bin-dir"
          description="Copies the TM font files to the current build's bin/ directory.">
    <available file="Fonts/TibetanMachine"
               property="found.the.fonts"/>
    <fail message="Can't find the Fonts module at Jskad/Fonts/TibetanMachine.  Did you do 'cvs -f checkout -P Fonts' from inside the Jskad directory?"
          unless="found.the.fonts"/>
    <copy todir="${my.bin}/Fonts/TibetanMachine">
      <fileset dir="Fonts/TibetanMachine"/>
    </copy>
  </target>

  <target name="copy-calhtmlpane-to-bin-dir"
          description="Copies the class files for CalHTMLPane to the current build's bin/ directory.  The license does not require that we include CalHTMLPane's license in the JAR.">
    <copy todir="${my.bin}/calpa/html">
      <fileset dir="extensions/calpa/html"/>
    </copy>
  </target>

</project>

<!-- My TO-DO list: -->

<!-- DLC FIXME: If we use bootclasspath and -target 1.1, do we need a
     separate tt-handheld and tt-standalone? -->

<!-- DLC FIXME: Allow for signing the vanilla JARs. -->
