<!--
   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="org.apache.easyant.plugins#abstract-provisioning" xmlns:ac="antlib:net.sf.antcontrib" xmlns:ea="antlib:org.apache.easyant">

    <ea:core-version requiredrevision="[0.9,+]" />

    <extension-point name="abstract-provisioning:provisioning-ready" description="defines provisioning requirements" />
    <extension-point name="abstract-provisioning:provisioning" depends="abstract-provisioning:provisioning-ready"
        description="defines provisioning step, usually it's a good place for loading libraries, populating classpath" />

    <ea:parameter property="lib.main" default="${basedir}/lib/main" description="directory where main libraries are picked up" />
    <ea:parameter property="lib.test" default="${basedir}/lib/test" description="directory where test libraries are picked up" />
    <ea:parameter property="lib.provided" default="${basedir}/lib/provided" description="directory where provided libraries are picked up" />

    <fileset id="lib.main.fileset" dir="${lib.main}" erroronmissingdir="false" description="content of lib main, usually used to build a classpath from a lib directory"/>
    <fileset id="lib.test.fileset" dir="${lib.test}" erroronmissingdir="false" description="content of lib test, usually used to build a classpath from a lib directory"/>
    <fileset id="lib.provided.fileset" dir="${lib.provided}" erroronmissingdir="false" description="content of lib provided, usually used to build a classpath from a lib directory"/>
</project>