<?xml version="1.0"?>

<!--
  =======================================================================
    Build file to fetch optiona libraries for Apache Ant

   Copyright (c) 2005 The Apache Software Foundation.  All rights
   reserved.

  =======================================================================
-->
<project name="fetch" default="all" basedir=".">

<description>
  This build file downloads JAR files that optional Ant tasks use,
  and installs them in a location that is accessible the next time Ant runs.
  
  You can choose three locations, by going -Ddest=LOCATION on the command line
  -Ddest=user     user lib dir  ${user.home}/.ant/lib  
  -Ddest=system   ant lib dir   ${ant.home}/lib --Default--
  -Ddest=optional optional dir  ${ant.home}/lib/optional  (for Ant developers)
  
  You may also need to set proxy settings. This can be done on the command line,
  or in ${user.home}/.ant/proxy.properties 
    proxy.host  hostname of proxy
    proxy.port  port (default 80)
    proxy.user  user (default="")
    proxy.pass  pass (default="" )

  Note that this project does not download any scripting language implementations.
    
</description>

  <!-- Give user a chance to override without editing this file
       (and without typing -D each time it compiles it) -->
  <property file=".ant.properties"/>
  <property file="${user.home}/.ant.properties"/>
  <property name="lib.dir" location="lib" />
  <property name="optional.dir" location="${lib.dir}/optional" />
  <property name="userlib.dir" location="${user.home}/.ant/lib" />
  
  <!-- load in our properties table -->
  <property file="${lib.dir}/libraries.properties"/>
  
    <!-- configure an HTTP proxy -->
  <property file="${user.home}/.ant/proxy.properties" />
  <target name="setproxy" unless="setproxy.disabled" >
    <property name="proxy.host" value="" />
    <property name="proxy.port" value="80" />
    <property name="proxy.user" value="" />
    <property name="proxy.pass" value="" />
    <echo level="verbose">
      proxy: ${proxy.host}:${proxy.port} [${proxy.user}/${proxy.pass}]
    </echo>
      <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"
        proxyuser="${proxy.user}" proxypassword="${proxy.pass}" />
  </target> 
  
  
  <target name="pick-dest">
    <condition property="dest.dir" 
      value="${lib.dir}">
      <or>
        <equals arg1="${dest}" arg2="system" />
        <not><isset property="dest"/></not>
      </or>
    </condition>
    <condition property="dest.dir" 
      value="${optional.dir}">
      <equals arg1="${dest}" arg2="optional" />
    </condition>
    <condition property="dest.dir" 
      value="${userlib.dir}">
      <equals arg1="${dest}" arg2="user" />
    </condition>
    <fail>
      Unknown destination : ${dest}
      <condition>
        <not><isset property="dest.dir" /></not>
      </condition>
    </fail>
    <echo>Downloading to ${dest.dir}</echo>
  </target>
  
  <!-- any init stuff -->
  <target name="init" depends="setproxy,pick-dest" >
    
    <macrodef name="f">
      <attribute name="project" />
      <sequential>
        <fail>
        Unknown project @{project}
          <condition>
            <not>
            <isset property="@{project}.version"/>
            </not>
          </condition>
        </fail>
        <libraries destDir="${dest.dir}" flatten="true" >
          <library project="@{project}" version="${@{project}.version}" />
        </libraries>
      </sequential>
    </macrodef> 

    <macrodef name="f2">
      <attribute name="project" />
      <attribute name="archive" />
      <sequential>
        <fail>
        Unknown file @{archive}/
          <condition>
            <not>
            <isset property="@{archive}.version"/>
            </not>
          </condition>
        </fail>      
        <libraries destDir="${dest.dir}" flatten="true" >
          <library project="@{project}"
            archive="archive"
            version="${@{archive}.version}" />
        </libraries>
      </sequential>
    </macrodef> 
  </target>
  
  <target name="diag" depends="init">
    <echoproperties />
  </target>
  
  <target name="logging" 
    description="load logging libraries"
    depends="init">
    <f project="log4j" />
    <f project="commons-logging" />
  </target>
    
  <target name="junit" 
    description="load junit libraries"
    depends="init">
    <f project="junit" />
  </target>
  
  <target name="xml" 
    description="load full XML libraries (xalan, resolver)"
    depends="init">
    <f project="xalan" />
    <f project="xml-resolver" />
  </target>

  <target name="networking" 
    description="load networking libraries (commons-net; jsch)"
    depends="init">
    <f project="commons-net" />
    <f project="jsch" />
  </target>  

  <target name="regexp" 
    description="load regexp libraries"
    depends="init">
    <f project="regexp" />
    <f project="oro" />
  </target>  
 
  <target name="antlr" 
    description="load antlr libraries"
    depends="init">
    <f project="antlr" />
  </target>  

  <target name="bcel" 
    description="load bcel libraries"
    depends="init">
    <f project="bcel" />
  </target>  

  <target name="jdepend" 
    description="load jdepend libraries"
    depends="init">
    <f project="jdepend" />
  </target>  

  <target name="bsf" 
    description="load bsf libraries"
    depends="init">
    <f project="bsf" />
  </target>

  <target name="debugging" 
    description="internal ant debugging"
    depends="init">
    <f project="which" />
  </target>
  
  <target name="all"
    description="load all the libraries"
    depends="logging,junit,xml,networking,regexp,antlr,bcel,jdepend,bsf,debugging" />
  
</project>
