<?xml version="1.0" encoding="UTF-8"?>

<project name="sabbus" default="build">

  <!-- ... (skipped -->

  <target name="init">
    <!-- ... (skipped -->

    <!-- Define source/test files to be filtered/excluded -->
    <property name="noxml.dir" value="${src.dir}/build/noxml"/>
    <property name="library.excludes" value="${noxml.dir}/library.excludes"/>
    <property name="library.filters" value="${noxml.dir}/library.filters"/>
    <property name="compiler.excludes" value="${noxml.dir}/compiler.excludes"/>
    <property name="compiler.filters" value="${noxml.dir}/compiler.filters"/>
    <property name="partest.filters" value="${noxml.dir}/partest.filters"/>
    <property name="postests.excludes" value="${noxml.dir}/postests.excludes"/>
    <property name="negtests.excludes" value="${noxml.dir}/negtests.excludes"/>
    <property name="runtests.excludes" value="${noxml.dir}/runtests.excludes"/>
    <property name="jvmtests.excludes" value="${noxml.dir}/jvmtests.excludes"/>

    <property name="xml.disabled.file" value="${noxml.dir}/xml.disabled"/>
    <condition property="xml.disabled">
      <available file="${xml.disabled.file}"/>
    </condition>
    <condition property="xml.state" value="DISABLED" else="ENABLED">
      <isset property="xml.disabled"/>
    </condition>
    <echo level="info" message="XML support is ${xml.state}"/>
    <condition property="pack.xml"
               value="${src.dir}/build/noxml/pack-noxml.xml"
               else="${src.dir}/build/pack.xml">
      <isset property="xml.disabled"/>
    </condition>
  </target>

  <!-- ... (skipped) -->

<!-- ===========================================================================
XML SUPPORT (enable/disable)
============================================================================ -->

  <target name="disable.xml" depends="init" unless="xml.disabled">
    <disablefilter dir="${src.dir}/library" includesfile="${library.filters}"/>
    <disablefilter dir="${src.dir}/compiler" includesfile="${compiler.filters}"/>
    <disablefilter dir="${src.dir}/partest" includesfile="${partest.filters}"/>
    <disablexml file="${src.dir}/compiler/scala/tools/ant/antlib.xml"/>
    <touch file="${xml.disabled.file}" verbose="no"/>
    <echo level="info" message="XML support is DISABLED"/>
  </target>

  <target name="enable.xml" depends="init" if="xml.disabled">
    <enablefilter dir="${src.dir}/library" includesfile="${library.filters}"/>
    <enablefilter dir="${src.dir}/compiler" includesfile="${compiler.filters}"/>
    <enablefilter dir="${src.dir}/partest" includesfile="${partest.filters}"/>
    <enablexml file="${src.dir}/compiler/scala/tools/ant/antlib.xml"/>
    <delete file="${xml.disabled.file}" quiet="true"/>
    <echo level="info" message="XML support is ENABLED"/>
  </target>

  <macrodef name="disablefilter">
    <attribute name="dir"/>
    <attribute name="includesfile"/>
    <sequential>
      <replace dir="@{dir}" includesfile="@{includesfile}">
        <replacefilter token="/*@XML*/" value="/*@XML"/>
        <replacefilter token="/*XML@*/" value="XML@*/"/>
        <replacefilter token="/*@NOXML" value="/*@NOXML*/"/>
        <replacefilter token="XMLNO@*/" value="/*XMLNO@*/"/>
      </replace>
    </sequential>
  </macrodef>

  <macrodef name="enablefilter">
    <attribute name="dir"/>
    <attribute name="includesfile"/>
    <sequential>
      <replace dir="@{dir}" includesfile="@{includesfile}">
        <replacefilter token="/*@XML" value="/*@XML*/" />
        <replacefilter token="XML@*/" value="/*XML@*/" />
        <replacefilter token="/*@NOXML*/" value="/*@NOXML" />
        <replacefilter token="/*XMLNO@*/" value="XMLNO@*/" />
      </replace>
    </sequential>
  </macrodef>

  <!-- ... (skipped) -->

</project>

