<!--
 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="googledrive" 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="google-*.jar"/>
	    <include name="jackson-core.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="google-*.jar"/>
		<include name="jackson-core.jar"/>
            </fileset>
        </copy>
    </target>

    <target name="deliver-connector" depends="mcf-connector-build.deliver-connector">
        <antcall target="general-add-repository-connector">
            <param name="connector-label" value="GoogleDrive"/>
            <param name="connector-class" value="org.apache.manifoldcf.crawler.connectors.googledrive.GoogleDriveRepositoryConnector"/>
        </antcall>
    </target>

</project>
