<!--
 * 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 name="classpath">
  <!-- Classpath of external dependencies -->
  <path id="libpath">
    <fileset dir="${lib.runtime}">
      <include name="*/*.jar"/>
    </fileset>
    <fileset dir="${lib.codegen}">
      <include name="*/*.jar"/>
    </fileset>
    <!-- Hamcrest, JUnit, and Mockito included for some classes in 
        src/**/testing/. -->
    <fileset dir="${lib.test}">
      <include name="hamcrest/*.jar"/>
      <include name="junit/*.jar"/>
      <include name="mockito/*.jar"/>
    </fileset>
    <!-- PST -->
    <fileset dir="${dist.dir}">
      <include name="pst.jar"/>
    </fileset>
  </path>

  <!-- Classpath for testing only -->
  <path id="test.libpath">
    <fileset dir="${lib.test}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
</project>
