<!--
 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="solringester" default="all">

    <property environment="env"/>
    <condition property="mcf-dist" value="${env.MCFDISTPATH}">
        <isset property="env.MCFDISTPATH"/>
    </condition>
    <property name="abs-dist" location="../../dist"/>
    <condition property="mcf-dist" value="${abs-dist}">
        <not>
            <isset property="env.MCFDISTPATH"/>
        </not>
    </condition>

    <import file="${mcf-dist}/connector-build.xml"/>

    <path id="connector-classpath">
        <path refid="mcf-connector-build.connector-classpath"/>
        <fileset dir="../../lib">
            <include name="solr-solrj*.jar"/>
        </fileset>
    </path>

    <target name="lib" depends="mcf-connector-build.lib,precompile-check" if="canBuild">
        <mkdir dir="dist/lib"/>
        <copy todir="dist/lib">
            <fileset dir="../../lib">
                <include name="solr-solrj*.jar"/>
            </fileset>
        </copy>
    </target>

    <target name="integration">
        
        <mkdir dir="dist/integration/solr-7.x"/>
        <copy todir="dist/integration/solr-7.x">
          <fileset dir="../../lib/solr-7.x"/>
        </copy>
        <mkdir dir="dist/integration/solr-8.x"/>
        <copy todir="dist/integration/solr-8.x">
          <fileset dir="../../lib/solr-8.x"/>
        </copy>
    </target>

    <target name="deliver-connector" depends="mcf-connector-build.deliver-connector">
        <antcall target="general-add-repository-connector">
            <param name="connector-label" value="SolrIngester"/>
            <param name="connector-class" value="org.apache.manifoldcf.crawler.connectors.solringester.SolrIngesterConnector"/>
        </antcall>
    </target>

</project>
