<!--
 * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Author: anorth@google.com (Alex North)
 -->
<project>
  <import file="${build.classpath.path}"/>

  <!-- 
  Compiles the sources referenced by the "srcs" patternset.

  The model for these rules is that buildjava's source path includes the
  entire universe of all source, but small fragements of it are compiled
  one by one as specificed by a subproject's 'srcs' pattern.
  -->
  <target name="compile">
    <echo message="Compiling ${libname}"/>
    <buildjava destdir="${build.src.dir}" srcpattern="srcs">
      <src path="${src.dir}"/>
      <classpath>
        <path refid="libpath"/>
        <path location="${build.proto.dir}"/>
        <path location="${build.messages.dir}"/>
      </classpath>
    </buildjava>
  </target>

  <!-- 
  Compiles the tests referenced by the "srcs" patternset.
  -->
  <target name="compile-tests">
    <buildjava srcdir="${test.dir}" destdir="${build.test.dir}" srcpattern="srcs">
      <classpath>
        <path refid="libpath"/>
        <path location="${build.src.dir}"/>
        <path location="${build.proto.dir}"/>
        <path location="${build.messages.dir}"/>
      </classpath>
    </buildjava>
  </target>

  <!--
  Packages compiled and source files into jars
  -->
  <target name="dist" depends="compile">
    <distlib srcpattern="srcs" libname="${libname}"/>
  </target>

</project>
