<?xml version="1.0"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You 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.
 -->
<project name="solr-solrj" default="default" xmlns:ivy="antlib:org.apache.ivy.ant">
  <description>Solrj - Solr Java Client</description>

  <property name="test.lib.dir" location="test-lib"/>

  <!-- violates the servlet-api restrictions, but it is safe to do so in this test: -->
  <property name="forbidden-tests-excludes" value="
    org/apache/solr/client/solrj/impl/BasicHttpSolrServerTest$DebugServlet.class
  "/>

  <import file="../common-build.xml"/>

  <!-- Specialized compile classpath: to only depend on what solrj should depend on (e.g. not lucene) -->
  <path id="classpath">
    <fileset dir="${common-solr.dir}/solrj/lib" excludes="${common.classpath.excludes}"/>
  </path>

  <!-- Specialized common-solr.test.classpath, to remove the Solr core test output -->
  <path id="test.classpath">
    <fileset dir="${test.lib.dir}" includes="*.jar"/>
    <pathelement path="${common-solr.dir}/build/solr-test-framework/classes/java"/>
    <pathelement path="${tests.userdir}"/>
    <path refid="test.base.classpath"/>
    <path refid="solr.base.classpath"/>
    <pathelement path="${example}/resources"/>
  </path>

  <target name="resolve" depends="ivy-availability-check,ivy-fail,ivy-configure">
    <sequential>
      <ivy:retrieve conf="compile" type="jar,bundle" sync="${ivy.sync}" log="download-only"/>
      <ivy:retrieve conf="test" type="jar,bundle,test" sync="${ivy.sync}" log="download-only"
                    pattern="${test.lib.dir}/[artifact]-[revision](-[classifier]).[ext]"/>
    </sequential>
  </target>

  <!-- Specialized to depend on nothing -->
  <target name="javadocs" depends="compile-core,define-lucene-javadoc-url">
    <sequential>
      <mkdir dir="${javadoc.dir}/${name}"/>
      <solr-invoke-javadoc>
        <solrsources>
          <packageset dir="${src.dir}"/>
        </solrsources>
      </solr-invoke-javadoc>
      <solr-jarify basedir="${javadoc.dir}/${name}" destfile="${build.dir}/${final.name}-javadoc.jar"/>
     </sequential>
  </target>

  <!-- Specialized to use lucene's classpath too, because it refs e.g. qp syntax 
       (even though it doesnt compile with it) 
       TODO: would be nice to fix this up better, but its hard because of
       the different ways solr links to lucene javadocs -->
  <target name="-ecj-javadoc-lint-src" depends="-ecj-resolve">
    <ecj-macro srcdir="${src.dir}" configuration="${common.dir}/tools/javadoc/ecj.javadocs.prefs">
      <classpath>
        <path refid="classpath"/>
        <path refid="solr.lucene.libs"/>
      </classpath>
    </ecj-macro>
  </target>


  <target name="dist" depends="common-solr.dist">
    <mkdir  dir="${dist}/solrj-lib" />
    <copy todir="${dist}/solrj-lib">
      <fileset dir="${common-solr.dir}/solrj/lib">
        <include name="*.jar"/>
      </fileset>
    </copy>
  </target>

  <target name="-dist-maven" depends="-dist-maven-src-java"/>
</project>
