<!--
 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="searchblox" 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="jsoup*.jar" />
              <include name="resteasy-*.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="jsoup*.jar" />
              <include name="resteasy-*.jar" />
            </fileset>
        </copy>
    </target>

    <target name="deliver-connector" depends="mcf-connector-build.deliver-connector">
        <antcall target="general-add-output-connector">
            <param name="connector-label" value="Searchblox"/>
            <param name="connector-class" value="org.apache.manifoldcf.agents.output.searchblox.SearchBloxConnector"/>
        </antcall>
    </target>

</project>
