<?xml version="1.0" encoding="utf-8"?>
<!-- ***** BEGIN LICENSE BLOCK *****
   - Version: MPL 1.1/GPL 2.0
   -
   - The contents of this file are subject to the Mozilla Public License Version
   - 1.1 (the "License"); you may not use this file except in compliance with
   - the License. You may obtain a copy of the License at
   - http://www.mozilla.org/MPL/
   -
   - 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 language governing rights and limitations under the
   - License.
   -
   - The Original Code is Rhino code, released May 6, 1999.
   -
   - The Initial Developer of the Original Code is
   - Netscape Communications Corporation.
   - Portions created by the Initial Developer are Copyright (C) 1997-1999
   - the Initial Developer. All Rights Reserved.
   -
   - Contributor(s):
   -
   - Alternatively, the contents of this file may be used under the terms of
   - the GNU General Public License Version 2 or later (the "GPL"), in which
   - case the provisions of the GPL are applicable instead of those above. If
   - you wish to allow use of your version of this file only under the terms of
   - the GPL and not to allow others to use your version of this file under the
   - MPL, indicate your decision by deleting the provisions above and replacing
   - them with the notice and other provisions required by the GPL. If you do
   - not delete the provisions above, a recipient may use your version of this
   - file under either the MPL or the GPL.
   -
   - ***** END LICENSE BLOCK ***** -->

<project name="xmlimplsrc" basedir=".." default="compile">
  <!--
    Properties which affect this build file:

    no-e4x: Will cause E4X not to be built
    no-xmlbeans: Will cause the old, XMLBeans-based implementation of E4X not to be built
  -->

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

  <!--
    Provide support for the old name for skipping E4X compilation, in case someone is still using it
  -->
  <condition property="no-e4x">
    <isset property="without-xmlimpl" />
  </condition>

  <path id="xmlbeans.classpath">
    <pathelement location="${xbean.jar}"/>
    <pathelement location="${jsr173.jar}"/>
  </path>

  <target name="compile" unless="no-e4x">
    <antcall target="e4x-compile" />
    <antcall target="no-e4x-compile" />

    <antcall target="old-e4x" />
  </target>

  <available property="jdk1.5?" classname="java.lang.ProcessBuilder" />

  <target name="e4x-compile" if="jdk1.5?">
    <javac
      srcdir="xmlimplsrc"
      destdir="${classes}"
      deprecation="on"
      debug="${debug}"
                        includeAntRuntime="false"
      target="${target-jvm}"
      source="${source-level}"
    />
  </target>

  <target name="no-e4x-compile" unless="jdk1.5?">
    <echo>
      Skipping DOM E4X implementation; JDK 1.5+ currently required for compilation.
      <!--
        If the compiler is outfitted with DOM3 using the endorsed standards
        override mechanism, presumably the code could be built under 1.4.
        Not tested.
      -->
    </echo>
  </target>

  <target name="old-e4x" unless="no-xmlbeans">
    <antcall target="old-e4x-compile" />
    <antcall target="no-old-e4x-compile" />
  </target>

  <target name="old-e4x-compile" depends="xmlbeans-unzip">
    <echo>Compiling XMLBeans E4X implementation using ${xbean.jar} and ${jsr173.jar}</echo>
    <javac srcdir="deprecatedsrc"
           destdir="${classes}"
           includes="org/mozilla/javascript/xml/impl/xmlbeans/*.java"
           deprecation="on"
           debug="${debug}"
           classpathref="xmlbeans.classpath"
           failonerror="${xmlimpl.compile.failonerror}"
           includeAntRuntime="false"
           target="${target-jvm}"
           source="${source-level}" />
  </target>

  <target name="no-old-e4x-compile" if="no-xmlbeans">
    <echo>
      Skipping compilation of XMLBeans E4X implementation due to missing XMLBeans files
    </echo>
  </target>

  <target name="copy-source">
    <mkdir dir="${dist.dir}/xmlimplsrc"/>
    <copy todir="${dist.dir}/xmlimplsrc">
      <fileset dir="xmlimplsrc"
               includes="**/*.java,**/*.properties,**/*.xml"
      />
    </copy>
  </target>

  <target name="clean">
    <delete includeEmptyDirs="true">
      <fileset dir="${classes}"
               includes="org/mozilla/javascript/xmlimpl/**"
      />
    </delete>
  </target>

  <property name="xmlbeans.tmp" location="${build.dir}/tmp-xbean" />
  <property name="xmlbeans.zip" location="${xmlbeans.tmp}/xbean.zip" />

  <condition property="xmlbeans-present?">
    <and>
      <available file="${xbean.jar}" />
      <available file="${jsr173.jar}" />
    </and>
  </condition>

  <condition property="xmlbeans-zip-present?">
    <available file="${xmlbeans.zip}" />
  </condition>

  <target name="xmlbeans-get" unless="xmlbeans-zip-present?">
    <property
      name="xmlbeans.url"
      value="http://www.apache.org/dist/xmlbeans/binaries/xmlbeans-2.5.0.zip"
    />

    <mkdir dir="${xmlbeans.tmp}" />
    <get src="${xmlbeans.url}" dest="${xmlbeans.zip}" ignoreerrors="true" />
  </target>

  <target name="xmlbeans-unzip" unless="xmlbeans-present?">
    <antcall target="xmlbeans-get" />
    <unzip src="${xmlbeans.zip}" dest="${xmlbeans.tmp}" />
    <copy tofile="${xbean.jar}" file="${xmlbeans.tmp}/xmlbeans-2.5.0/lib/xbean.jar" />
    <copy tofile="${jsr173.jar}" file="${xmlbeans.tmp}/xmlbeans-2.5.0/lib/jsr173_1.0_api.jar" />
    <delete dir="${xmlbeans.tmp}" />
  </target>
</project>
