<?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.
-->
<ivysettings>
  <properties file="${ivy.settings.dir}/build.properties"/>
  <caches defaultCacheDir="${ivy.settings.dir}/../ivy-cache" />

  <settings defaultResolver="shared"
     circularDependencyStrategy="error" />

  <classpath file="${ivy.settings.dir}/../../../target/sigil-ivy-plugin.jar" />
  <!--
  Ant tasks "subant" and "ant" cause IvySettings to be re-loaded, 
  which then re-loads SigilParser in a new URLClassLoader,
  which causes ProjectRepository to be re-initialised. Outch!

  Better if Ivy classpath cached its classloader, or provided a
  loaderRef attribute, like ant does.

  Loading sigil-ivy-plugin.jar in ivy-taskdefs, uses the same ClassLoader
  to load sigil-ivy-plugin, and thus avoids re-initialising ProjectRepositiory.
  -->
  <typedef name="sigil-parser" classname="org.cauldron.bld.ivy.SigilParser" />
  <typedef name="sigil" classname="org.cauldron.bld.ivy.SigilResolver" />

  <parsers>
    <sigil-parser quiet="true"/>
  </parsers>

  <resolvers>
    <sigil name="sigil" config="${ivy.settings.dir}/sigil-repos.properties" />
    <filesystem name="local">
      <ivy pattern="${repository.dir}/local/[module]-[revision].xml" />
      <artifact pattern="${repository.dir}/local/[artifact]-[revision].[ext]" />
    </filesystem>
    <filesystem name="shared">
      <ivy pattern="${repository.dir}/shared/[module]-[revision].xml" />
      <artifact pattern="${repository.dir}/shared/[module]/[artifact]-[revision].[ext]" />
    </filesystem>
  </resolvers>
  <modules>
    <!--<module organisation="org.apache.ivy.example" name=".*" resolver="shared"/>
    -->
    <module organisation="sigil" resolver="sigil"/>
  </modules>
</ivysettings>
