summaryrefslogblamecommitdiff
path: root/build.xml
blob: 4c6e85751cd6d1d5b84bb105974e4e0162877f2d (plain) (tree)
1
2
3
4
5
6
7
8
9

                                      
 


                                           
                                                                                         

                                                                               
 
                                                                          
 


                                                                                
 
                               





                                                      
                                                              


                                                     

                                                                   
                          
                                  
                             
                                                                
                                                       
                                                     



                                                

                                             
                                             
                                                                   
                                        
                                                                

                                                                



                                                                         

                                                             
                                                            
                                                                       
                                                



                                                           
                                                     


                                                                 
                                             


                                                                     

                                                               

                                                               
                                                           
                                            
                                                                          
                                                                  
                                                                            
                                                         

                                                    
                                                        
                                                        
                                                        


                                                                           
                                                                           

                                                                         

                                                                         

                                                                         

                                                                         

                                                                     
                          

                                                               
                                                             
                                                         
                                                                                  
 


                                                                                
 
                                          
                          
             
                        

                                                  

                        
                                 
        



                           
             



                                                            
















                                                                        
                                              
                                                                    

                                                             











                                             

                              
                                                                      

                                                              



                                                        

                        
                                                          

                                                            



                                             

                        


                                           





                                                 









                                                              










                                                                              





                                                               





                                      














                                                 
                                                            
                                        
                                                               

                                         
                                                            




                                                               
                                                                                 















                                                                       













                                             
           
 

                                      









                                           








                                                             




                                                                          



                                                                 
                                                                      


                                                

                                      
             

                                                                                              
      


                                                                      


                          
                                                                                                                                                                                                                                     
      
           
 
                                                            




                                        
           
 
                                                    





                                        



                                             




                                          
           



                                                                                
 



                                                 
                                      

                                     

                                    


                                                  
                                       

                                     

                                    



                  
 





                                                       



                                         





                                                


                                                                           





                   
 


                                                                                
 
                          


                                                          
 
                                                                    
                                               
                                    

                                    
          
                             
                                 


                                     
     



                                                   
            
          
                             


                                 



                                                   
            
          
                             

                                 




                                                   
                                    



                                                                
          
                              

                                  


                                                    
                                             




                                                                
                                                   




                                                                      
                                                                           
                                              






                                            
                                     
               
                                                  





                                                                              
                                                   







                                                                                                                                      
                                                     








                                                                                                                                      
                                                     






                                                                                                                                      
                                                   


                   
                                                  


                   
                                                     


                   
                                                     

                   
                                                  
                                                       
           



                                                                                
 
                      


                                                                     
                                   

                                   
          
                             
                                


                                     
     



                                                  
            
           
                             




                                        



                                                  
             
           
                             



                                        




                                                  




                                                                
                             








                                                  



                                                                
           
                              



                                        


                                                   
                                             




                                                                
                                                  




                                                                     
                                                                           
                                             
                                           
                                  
                                   




                                           
                                    
              
                                                 




                                                                              
              
                                                  



                                  
                                                                                                                                      

                                  
              
                                                    




                                  
                                                                                                                                      

                                  
              
                                                    



                                             


                                                                                                                                      
                                                  


                   
                                                 


                   
                                                    
                   

          
                                                    

                   
           
 
                                            



                                                    
           
 


                                                                                
 
                     


                                                                     
 
                                                   
                                      
                                   

                                   
          
                             
                                


                                     
     



                                                  
            
          
                             



                                



                                                  
            
          
                             


                                




                                                  




                                                                
                             







                                                  



                                                                
          
                              


                                 


                                                   
                                             




                                                                
                                                  




                                                                     
                                                                           
                                             
                                           
                                   




                                           
                                    
              
                                                 




                                                                              
              
                                                  



                                  
                                                                                                                                      

                                  
              
                                                    




                                  
                                                                                                                                      

                                  
              
                                                    



                                             


                                                                                                                                      
                                                  


                   
                                                 


                   
                                                    
                   

          
                                                    

                   
           
 
                                                      

                                          



                                             
               
                                         
                                                       

                                        



                                             
               
                                         
                                                       





                                                         
                                                   
           
 
                                                  
                                                                        
           
 
                                                                                
             
                                                                                
 
                     

                                                       
   
                                 
             
                         
                              
                   
                                               
                                                                                             

                 
                                                              
                  

                                                  

                                                                
           
 
                              




                                                        
                              

                               
                                                
                                                                                             



                                                   
                                             





                                                                
 


                                                                                
 







                                                                                
 











                                                                       

                              
 
                                           






                                                                       




                                                                

                              
 




                                                                        
                     
                                     
                                                       



                                                       
   



                                                        
                                      
                                        
                                          


                                                             
                
                                                                       

                 

                                                            


                                                                       
          





                                                                       
                                          

                                          
              





                                                       
                                                        



                                  

                                  

                                                          
                                



                                  

                                  
              




                                                          











                                                          




                                                          
                                           


                                                            


                                                           


                                                                



                                                                     
                                  
            




                                              





                                        
             
         


                                             
              


                                                                         
                                 
                                                                                         
                                                                    
     
                                                                                            
                
                                                
              


                                                                         
                                 
                                                                                                                                                                           
                                
                                                                    
     



                                                                         
                
                                                     
              


                                                                           
                                 
                                                                                         
                                                 
                                                                      
      






                                                                             
                                                                     
     

                             
                                                                    
        

                             
                                                                                           

                





                                                                    
           
 





















































                                                                                     


                                                                                
 


                           





                              

                 
 
                                                                                 
                                
                                
                              



                                                                      
           
 
                          

                                                              


                                
 
                                               




                                   
                                
           

          
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id$ -->

<project name="scala-core" default="build">

  <description>
    I am SABBUS for ${ant.project.name}, the build system for the Scala compiler and core
    library. Please check the 'docs/README' file for more information about me.
  </description>

  <echo level="info" message="Running SABBUS for ${ant.project.name}..."/>

<!-- ===========================================================================
PROPERTIES
============================================================================ -->

  <property environment="env"/>

  <!-- Prevents system classpath from being used -->
  <property name="build.sysclasspath" value="ignore"/>

  <!-- Base properties -->
  <property name="docs.dir" value="${basedir}/docs"/>
  <property name="examples.dir" value="${docs.dir}/examples"/>
  <property name="lib.dir" value="${basedir}/lib"/>
  <property name="src.dir" value="${basedir}/src"/>
  <property name="test.dir" value="${basedir}/test"/>
  <property name="properties" value="${basedir}/build.properties"/>
  <echo level="verbose" message="properties=${properties}"/>
  <!-- User properties -->
  <property file="${properties}"/>
  <!-- General properties -->
  <property name="number.file" value="${basedir}/build.number"/>
  <property name="copyright.holder" value="LAMP/EPFL"/>
  <property name="logs.dir" value="${basedir}/logs"/>
  <!-- Javac configuration properties -->
  <property name="jc.source" value="1.4"/>
  <property name="jc.target" value="1.4"/>
  <property name="jc.deprecation" value="true"/>
  <!-- NSC configuration properties -->
  <property name="nsc.logging" value="none"/>
  <property name="nsc.log-files" value="no"/>
  <property name="nsc.excludes" value="${basedir}/build.excludes"/>
  <property name="nsc.params" value=""/>
  <property name="nsc.timers" value="${logs.dir}/build.timers"/>
  <!-- SVN configuration properties -->
  <property name="svn.entries" value="${basedir}/.svn/entries"/>
  <!-- Location of pre-compiled libraries properties -->
  <property name="starr.lib.jar" value="${lib.dir}/scala-library.jar"/>
  <property name="starr.comp.jar" value="${lib.dir}/scala-compiler.jar"/>
  <property name="jaco.jar" value="${lib.dir}/jaco.jar"/>
  <property name="fjbg.name" value="fjbg.jar"/>
  <property name="fjbg.jar" value="${lib.dir}/${fjbg.name}"/>
  <property name="ant.jar" value="${ant.home}/lib/ant.jar"/>
  <property name="ant-contrib.jar" value="${lib.dir}/ant-contrib.jar"/>
  <!-- Location of build products properties -->
  <property name="build.dir" value="${basedir}/build"/>
  <property name="locker.dir" value="${build.dir}/locker"/>
  <property name="quick.dir" value="${build.dir}/quick"/>
  <property name="strap.dir" value="${build.dir}/strap"/>
  <property name="api.dir" value="${build.dir}/api"/>
  <!-- Location of source and build elements names properties -->
  <property name="lib.dir.name" value="library"/>
  <property name="comp.dir.name" value="compiler"/>
  <property name="dbc.dir.name" value="dbc"/>
  <property name="src.lib.dir" value="${src.dir}/${lib.dir.name}"/>
  <property name="src.comp.dir" value="${src.dir}/${comp.dir.name}"/>
  <property name="src.dbc.dir" value="${src.dir}/${dbc.dir.name}"/>
  <property name="exec.dir.name" value="exec"/>
  <!-- Location of structure of the distribution properties -->
  <property name="dist.dir" value="${basedir}/dists"/>
  <property name="dist.latest.dir" value="${dist.dir}/latest"/>
  <property name="dist.sbaz.dir" value="${dist.dir}/sbaz"/>
  <property name="dist.name" value="scala"/>
  <property name="lib.jar.name" value="${dist.name}-${lib.dir.name}.jar"/>
  <property name="lib-dbc.jar.name" value="${dist.name}-dbc.jar"/>
  <property name="comp.jar.name" value="${dist.name}-${comp.dir.name}.jar"/>
  <property name="scala.exec.name" value="${dist.name}"/>
  <property name="scalai.exec.name" value="scalai"/>
  <property name="scalac.exec.name" value="scalac"/>
  <property name="scaladoc.exec.name" value="scaladoc"/>
  <property name="scalaint.exec.name" value="scalaint"/>
  <property name="scalatok.exec.name" value="scalatok"/>
  <!-- Shorcut names -->
  <property name="locker.lib.dir" value="${locker.dir}/${lib.dir.name}"/>
  <property name="locker.comp.dir" value="${locker.dir}/${comp.dir.name}"/>
  <property name="locker.exec.dir" value="${locker.dir}/${exec.dir.name}"/>
  <property name="quick.lib.dir" value="${quick.dir}/${lib.dir.name}"/>
  <property name="quick.comp.dir" value="${quick.dir}/${comp.dir.name}"/>
  <property name="quick.dbc.dir" value="${quick.dir}/${dbc.dir.name}"/>
  <property name="quick.exec.dir" value="${quick.dir}/${exec.dir.name}"/>
  <property name="strap.lib.dir" value="${strap.dir}/${lib.dir.name}"/>
  <property name="strap.comp.dir" value="${strap.dir}/${comp.dir.name}"/>
  <property name="strap.dbc.dir" value="${strap.dir}/${dbc.dir.name}"/>
  <property name="strap.exec.dir" value="${strap.dir}/${exec.dir.name}"/>
  <property name="api.lib.dir" value="${api.dir}/${lib.dir.name}"/>
  <property name="api.comp.dir" value="${api.dir}/${comp.dir.name}"/>
  <!-- sbaz properties -->
  <property name="sbaz.lib.name" value="${dist.name}-library"/>
  <property name="sbaz.dev.name" value="${dist.name}-devel"/>
  <property name="sbaz.test.name" value="${dist.name}-test"/>
  <property name="sbaz.scala.name" value="${dist.name}"/>
  <property name="sbaz.universe" value="http://scala.epfl.ch/downloads/packages"/>

<!-- ===========================================================================
INITIALISATION
============================================================================ -->

  <target name="init" unless="init.avail">
    <tstamp prefix="time">
      <format
        property="human"
        pattern="EEEE, d MMMM yyyy, HH:mm:ss (zz)"
      />
      <format
        property="short"
        pattern="yyyyMMdd-HHmmss"
      />
      <format
       property="this.year"
       pattern="yyyy"
     />
    </tstamp>
    <property
      name="copyright"
      value="(c) 2002-${time.this.year} ${copyright.holder}"
    />
    <echo level="verbose" message="ant.jar=${ant.jar}"/>
    <echo level="verbose" message="ant-contrib.jar=${ant-contrib.jar}"/>
    <fail message="Additional Ant tasks in 'lib/' is not available">
      <condition><not>
        <available
          classname="net.sf.antcontrib.AntContribVersion"
          classpath="${ant-contrib.jar}"
        />
      </not></condition>
    </fail>
    <!-- Setting-up Ant contrib tasks -->
    <taskdef resource="net/sf/antcontrib/antlib.xml">
      <classpath>
        <pathelement location="${ant-contrib.jar}"/>
      </classpath>
    </taskdef>
    <stopwatch name="timer.dist"/>
    <!-- Testing if everything is in place -->
    <echo level="verbose" message="starr.lib.jar=${starr.lib.jar}"/>
    <fail message="STARR library in 'lib/' is not available">
      <condition><not><and>
        <available
          classname="scala.Predef" 
          classpath="${starr.lib.jar}"
        />
        <available
          classname="scala.List"
          classpath="${starr.lib.jar}"
        />
        <available
          classname="scala.runtime.ObjectRef"
          classpath="${starr.lib.jar}"
        />
      </and></not></condition>
    </fail>
    <echo level="verbose" message="starr.comp.jar=${starr.comp.jar}"/>
    <fail message="STARR compiler in 'lib/' is not available">
      <condition><not>
        <available
          classname="scala.tools.ant.Scalac"
          classpath="${starr.comp.jar}:${starr.lib.jar}"
        />
      </not></condition>
    </fail>
    <echo level="verbose" message="fjbg.jar=${fjbg.jar}"/>
    <fail message="FJBG library in 'lib/' is not available">
      <condition><not>
        <available
          classname="ch.epfl.lamp.fjbg.JCode"
          classpath="${fjbg.jar}"
        />
      </not></condition>
    </fail>
    <!-- Creating class-pathes -->
    <path id="common.classpath">
      <pathelement location="${fjbg.jar}"/>
    </path>
    <path id="starr.classpath">
      <pathelement location="${starr.lib.jar}"/>
      <pathelement location="${starr.comp.jar}"/>
      <path refid="common.classpath"/>
    </path>
    <path id="locker.classpath">
      <pathelement location="${locker.dir}/${lib.dir.name}"/>
      <pathelement location="${locker.dir}/${comp.dir.name}"/>
      <path refid="common.classpath"/>
    </path>
    <path id="quick.classpath">
      <pathelement location="${quick.dir}/${lib.dir.name}"/>
      <pathelement location="${quick.dir}/${comp.dir.name}"/>
      <path refid="common.classpath"/>
    </path>
    <!-- Making sure enough memory is available -->
    <propertyregex
      property="memory.set"
      input="${env.ANT_OPTS}"
      regexp="-Xmx([1-9][0-9]{3,}|[6-9][0-9]{2}|5[2-9][0-9]|51[2-9])(M|m)"
      select="\1"
    />
    <fail unless="memory.set">
      SABBUS requires additional memory. Please set the 'ANT_OPTS' environment
      property to '-Xmx512M' or more.
    </fail>
    <!-- Finding out what system architecture is being used -->
    <condition property="os.win">
      <os family="windows"/>
    </condition>
    <if><isset property="os.win"/>
      <then>
        <exec
          executable="cygpath"
          vmlauncher="no"
          errorproperty="cygpath.err"
          outputproperty="cygpath.out"
        >
          <arg value="--windir"/>
        </exec>
        <condition property="os.cygwin">
          <equals arg1="${cygpath.err}" arg2=""/>
        </condition>
      </then>
    </if>
    <condition property="os.unix">
      <or>
        <os family="unix"/>
        <os family="mac"/>
        <isset property="os.cygwin"/>
      </or>
    </condition>
    <if><isset property="os.cygwin"/>
      <then><property name="os.type" value="Cygwin"/></then>
      <elseif><isset property="os.win"/>
        <then><property name="os.type" value="Windows"/></then>
      </elseif>
      <elseif><isset property="os.unix"/>
        <then><property name="os.type" value="UNIX"/></then>
      </elseif>
      <else>
        <fail>System environment could not be determined</fail>
      </else>
    </if>
    <!-- Printing out some information about what environment I am running in -->
    <echo
      level="info"
      message="OS:   ${os.type} (${os.name} ${os.arch} ${os.version});"
    />
    <echo
      level="info"
      message="Java: ${java.version} ('${java.home}');"
    />
    <echo
      level="info"
      message="JVM:  ${java.vm.name} ${java.vm.version};"
    />
    <echo
      level="info"
      message="Ant:  ${ant.version}."
    />
    <!-- Finding out SVN revision -->
    <loadfile
      property="entries"
      srcFile="${svn.entries}"
      failonerror="false"
    />
    <propertyregex
      property="svn.revision"
      input="${entries}"
      regexp="revision=\042([0-9]*)\042\.*"
      select="\1"
      defaultValue="x"
    />
    <property name="init.avail" value="yes"/>
  </target>

  <target name="setup" depends="init">
    <!-- Creating boot-level tasks -->
    <taskdef
      name="starr"
      classname="scala.tools.ant.Scalac"
      classpathref="starr.classpath"
    />
    <taskdef
      name="starrtool"
      classname="scala.tools.ant.ScalaTool"
      classpathref="starr.classpath"
    />
    <!-- Removing any outdated stuff -->
    <if>
      <and>
        <available file="${locker.dir}/complete"/>
        <not><uptodate targetfile="${locker.dir}/complete">
          <srcfiles dir="${lib.dir}" includes="scala-*.jar"/>
        </uptodate></not>
      </and>
      <then>
        <echo
          level="warning"
          message="STARR updated: LOCKER is obsolete and will be rebuilt."
        />
        <runtarget target="clean.build"/>
      </then>
    </if>
    <!-- Finding out what is available -->
    <available property="excludes.avail" file="${nsc.excludes}"/>
    <echo level="verbose" message="excludes.avail=${excludes.avail}"/>
    <condition property="locker.avail">
      <available file="${locker.dir}/complete"/>
    </condition>
    <!-- Generating version number -->
    <property file="${number.file}"/>
    <property
      name="version.number"
      value="${version.major}.${version.minor}.${version.patch}.${svn.revision}.${time.short}"
    />
    <echo level="verbose" message="version.number=${version.number}"/>
    <!-- Setup timer -->
    <mkdir dir="${logs.dir}"/>
    <echo
      file="${nsc.timers}"
      append="true"
      message="${line.separator}Revision ${svn.revision};${line.separator}  built ${time.human};${line.separator}  by ${java.vm.name} ${java.vm.version};${line.separator}  on ${os.name} ${os.arch} ${os.version}:${line.separator}"
    />
  </target>

  <target name="setup.locker" depends="setup, build.locker">
    <taskdef
      name="locker"
      classname="scala.tools.ant.Scalac"
      classpathref="locker.classpath"
    />
  </target>

  <target name="setup.quick" depends="setup, build">
    <taskdef
      name="quick"
      classname="scala.tools.ant.Scalac"
      classpathref="quick.classpath"
    />
    <taskdef
      name="quicksbaz"
      classname="scala.tools.ant.ScalaBazaar"
      classpathref="quick.classpath"
    />
    <taskdef
      name="quickdoc"
      classname="scala.tools.ant.Scaladoc"
      classpathref="quick.classpath"
    />
  </target>

<!-- ===========================================================================
BUILD SUPPORT MACROS
============================================================================ -->

  <macrodef name="build.support">
    <attribute name="build.dir"/>
    <sequential>
      <copy todir="@{build.dir}/${lib.dir.name}">
        <fileset dir="${src.lib.dir}">
          <include name="**/*.tmpl"/>
          <include name="**/*.xml"/>
          <include name="**/*.js"/>
          <include name="**/*.css"/>
        </fileset>
      </copy>
      <copy todir="@{build.dir}/${comp.dir.name}">
        <fileset dir="${src.comp.dir}">
          <include name="**/*.tmpl"/>
          <include name="**/*.xml"/>
          <include name="**/*.js"/>
          <include name="**/*.css"/>
        </fileset>
      </copy>
    </sequential>
  </macrodef>

  <macrodef name="build.links">
    <attribute name="build.dir"/>
    <sequential>
      <if>
        <not><and>
          <available file="@{build.dir}/${fjbg.name}"/>
        </and></not>
        <then>
          <if><isset property="os.unix"/>
            <then>
              <symlink
                link="@{build.dir}/${fjbg.name}"
                resource="${fjbg.jar}"
                overwrite="yes"
                failonerror="no"
              />
            </then>
            <else>
              <copy file="${fjbg.jar}" tofile="@{build.dir}/${fjbg.name}"/>
            </else>
          </if>
        </then>
      </if>
    </sequential>
  </macrodef>

<!-- ===========================================================================
BUILD LOCAL REFERENCE (LOCKER) LAYER
============================================================================ -->

  <target name="newlocker"
    depends="clean.unfreeze, build.locker"
    description="Rebuilds LOCKER from the current sources"
  />

  <target name="build.locker" depends="setup" unless="locker.avail">
    <property name="built.locker" value="yes"/>
    <stopwatch name="timer.locker"/>
    <!-- Build library -->
    <mkdir dir="${locker.lib.dir}"/>
    <javac
      srcdir="${src.lib.dir}"
      destdir="${locker.lib.dir}"
      source="${jc.source}"
      target="${jc.target}"
      deprecation="${jc.deprecation}"
    >
      <classpath>
        <pathelement location="${locker.lib.dir}"/>
      </classpath>
      <include name="**/*.java"/>
    </javac>
    <starr
      srcdir="${src.lib.dir}"
      destdir="${locker.lib.dir}"
      usepredefs="no"
    >
      <classpath>
        <pathelement location="${locker.lib.dir}"/>
      </classpath>
      <include name="scala/Predef.scala"/>
    </starr>
    <starr
      srcdir="${src.lib.dir}"
      destdir="${locker.lib.dir}"
    >
      <classpath>
        <pathelement location="${locker.lib.dir}"/>
      </classpath>
      <include name="**/*.scala"/>
      <exclude name="scala/Predef.scala"/>
      <exclude name="scala/dbc/**"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </starr>
    <!-- Build compiler -->
    <mkdir dir="${locker.comp.dir}"/>
    <starr
      srcdir="${src.comp.dir}"
      destdir="${locker.comp.dir}"
    >
      <classpath>
        <pathelement location="${locker.lib.dir}"/>
        <pathelement location="${locker.comp.dir}"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${ant.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </starr>
    <stopwatch name="timer.locker" action="total"/>
    <echo
      file="${nsc.timers}"
      append="true"
      message="    building LOCKER: ${timer.locker};${line.separator}"
    />
    <!-- Copy support files to build folder and links external libraries-->
    <build.support build.dir="${locker.dir}"/>
    <build.links build.dir="${locker.dir}"/>
    <!-- Build executable files -->
    <taskdef
      name="lockertool"
      classname="scala.tools.ant.ScalaTool"
      classpathref="locker.classpath"
    />
    <mkdir dir="${locker.exec.dir}"/>
    <lockertool
      file="${locker.exec.dir}/${scala.exec.name}"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <lockertool
      file="${locker.exec.dir}/${scalac.exec.name}"
      name="Scala compiler"
      class="scala.tools.nsc.Main"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <lockertool
      file="${locker.exec.dir}/${scaladoc.exec.name}"
      name="Scala doc generator"
      class="scala.tools.nsc.Main"
      toolflags="-doc"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <lockertool
      file="${locker.exec.dir}/${scalaint.exec.name}"
      name="Scala interpreter"
      class="scala.tools.nsc.MainInterpreter"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
    />
    <chmod
      file="${locker.exec.dir}/${scalac.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${locker.exec.dir}/${scala.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${locker.exec.dir}/${scaladoc.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${locker.exec.dir}/${scalaint.exec.name}"
      perm="ugo+rx"
    />
    <!-- Mark LOCKER as being completely built -->
    <touch file="${locker.dir}/complete" verbose="no"/>
  </target>

<!-- ===========================================================================
BUILD QUICK-TEST LAYER
============================================================================ -->

  <target name="build"
    depends="setup.locker"
    description="Builds a quick-test (QUICK) version of the compiler"
  >
    <stopwatch name="timer.quick"/>
    <!-- Build library -->
    <mkdir dir="${quick.lib.dir}"/>
    <javac
      srcdir="${src.lib.dir}"
      destdir="${quick.lib.dir}"
      source="${jc.source}"
      target="${jc.target}"
      deprecation="${jc.deprecation}"
    >
      <classpath>
        <pathelement location="${quick.lib.dir}"/>
      </classpath>
      <include name="**/*.java"/>
    </javac>
    <locker
      srcdir="${src.lib.dir}"
      destdir="${quick.lib.dir}"
      usepredefs="no"
      addparams="${nsc.params}"
      scalacdebugging="${nsc.log-files}"
    >
      <classpath>
        <pathelement location="${quick.lib.dir}"/>
      </classpath>
      <include name="scala/Predef.scala"/>
    </locker>
    <locker
      srcdir="${src.lib.dir}"
      destdir="${quick.lib.dir}"
      addparams="${nsc.params}"
      scalacdebugging="${nsc.log-files}"
    >
      <classpath>
        <pathelement location="${quick.lib.dir}"/>
      </classpath>
      <include name="**/*.scala"/>
      <exclude name="scala/Predef.scala"/>
      <exclude name="scala/dbc/**"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </locker>
    <mkdir dir="${quick.dbc.dir}"/>
    <locker
      srcdir="${src.dbc.dir}"
      destdir="${quick.dbc.dir}"
      addparams="${nsc.params}"
      scalacdebugging="${nsc.log-files}"
    >
      <classpath>
        <pathelement location="${quick.lib.dir}"/>
        <pathelement location="${quick.dbc.dir}"/>
      </classpath>
      <include name="scala/dbc/**/*.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </locker>
    <!-- Build compiler -->
    <mkdir dir="${quick.comp.dir}"/>
    <locker
      srcdir="${src.comp.dir}"
      destdir="${quick.comp.dir}"
      addparams="${nsc.params}"
      scalacdebugging="${nsc.log-files}"
    >
      <classpath>
        <pathelement location="${quick.lib.dir}"/>
        <pathelement location="${quick.comp.dir}"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${ant.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </locker>
    <stopwatch name="timer.quick" action="total"/>
    <echo
      file="${nsc.timers}"
      append="true"
      message="    building QUICK:  ${timer.quick};${line.separator}"
    />
    <!-- Copy support files to build folder and links external libraries-->
    <build.support build.dir="${quick.dir}"/>
    <build.links build.dir="${quick.dir}"/>
    <echo>${quick.exec.dir}</echo>
    <!-- Build executable files -->
    <taskdef
      name="quicktool"
      classname="scala.tools.ant.ScalaTool"
      classpathref="quick.classpath"
    />
    <mkdir dir="${quick.exec.dir}"/>
    <quicktool
      file="${quick.exec.dir}/${scala.exec.name}"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <quicktool
      file="${quick.exec.dir}/${scalac.exec.name}"
      name="Scala compiler"
      class="scala.tools.nsc.Main"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <quicktool
      file="${quick.exec.dir}/${scaladoc.exec.name}"
      name="Scala doc generator"
      class="scala.tools.nsc.Main"
      toolflags="-doc"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <quicktool
      file="${quick.exec.dir}/${scalaint.exec.name}"
      name="Scala interpreter"
      class="scala.tools.nsc.MainInterpreter"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
    />
    <chmod
      file="${quick.exec.dir}/${scalac.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${quick.exec.dir}/${scala.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${quick.exec.dir}/${scaladoc.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${quick.exec.dir}/${scalaint.exec.name}"
      perm="ugo+rx"
    />
  </target>

  <target name="test.quick" depends="build">
    <echo
      level="error"
      message="Ant test bench is not available yet."
    />
  </target>

<!-- ===========================================================================
TEST
============================================================================ -->

  <target name="test"
    depends="clean.build, test.stability, test.strap"
    description="Tests the build for stability (rebuilds everything)"
  />

  <target name="build.strap" depends="setup.quick">
    <!-- Build the bootstrap layer -->
    <stopwatch name="timer.strap"/>
    <!-- Build library -->
    <mkdir dir="${strap.lib.dir}"/>
    <javac
      srcdir="${src.lib.dir}"
      destdir="${strap.lib.dir}"
      source="${jc.source}"
      target="${jc.target}"
      deprecation="${jc.deprecation}"
    >
      <classpath>
        <pathelement location="${strap.lib.dir}"/>
      </classpath>
      <include name="**/*.java"/>
    </javac>
    <quick
      srcdir="${src.lib.dir}"
      destdir="${strap.lib.dir}"
      usepredefs="no"
      addparams="${nsc.params}"
    >
      <classpath>
        <pathelement location="${strap.lib.dir}"/>
      </classpath>
      <include name="scala/Predef.scala"/>
    </quick>
    <quick
      srcdir="${src.lib.dir}"
      destdir="${strap.lib.dir}"
      addparams="${nsc.params}"
    >
      <classpath>
        <pathelement location="${strap.lib.dir}"/>
      </classpath>
      <include name="**/*.scala"/>
      <exclude name="scala/Predef.scala"/>
      <exclude name="scala/dbc/**"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </quick>
    <mkdir dir="${strap.dbc.dir}"/>
    <quick
      srcdir="${src.dbc.dir}"
      destdir="${strap.dbc.dir}"
      addparams="${nsc.params}"
    >
      <classpath>
        <pathelement location="${strap.lib.dir}"/>
        <pathelement location="${strap.dbc.dir}"/>
      </classpath>
      <include name="scala/dbc/**/*.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </quick>
    <!-- Build compiler -->
    <mkdir dir="${strap.comp.dir}"/>
    <quick
      srcdir="${src.comp.dir}"
      destdir="${strap.comp.dir}"
      addparams="${nsc.params}"
    >
      <classpath>
        <pathelement location="${strap.lib.dir}"/>
        <pathelement location="${strap.comp.dir}"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${ant.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </quick>
    <stopwatch name="timer.strap" action="total"/>
    <echo
      file="${nsc.timers}"
      append="true"
      message="    building STRAP:  ${timer.strap}.${line.separator}"
    />
    <!-- Copy support files to build folder and links external libraries-->
    <build.support build.dir="${strap.dir}"/>
    <build.links build.dir="${strap.dir}"/>
    <!-- Build executable files -->
    <taskdef
      name="straptool"
      classname="scala.tools.ant.ScalaTool"
      classpathref="quick.classpath"
    />
    <mkdir dir="${strap.exec.dir}"/>
    <straptool
      file="${strap.exec.dir}/${scala.exec.name}"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <straptool
      file="${strap.exec.dir}/${scalac.exec.name}"
      name="Scala compiler"
      class="scala.tools.nsc.Main"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <straptool
      file="${strap.exec.dir}/${scaladoc.exec.name}"
      name="Scala doc generator"
      class="scala.tools.nsc.Main"
      toolflags="-doc"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <straptool
      file="${strap.exec.dir}/${scalaint.exec.name}"
      name="Scala interpreter"
      class="scala.tools.nsc.MainInterpreter"
      version="${version.number}"
      copyright="${copyright}"
      extclasspath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${dbc.dir.name}"
    />
    <chmod
      file="${strap.exec.dir}/${scalac.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${strap.exec.dir}/${scala.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${strap.exec.dir}/${scaladoc.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${strap.exec.dir}/${scalaint.exec.name}"
      perm="ugo+rx"
    />
  </target>

  <target name="test.stability" depends="build.strap">
    <!-- Compares quick and test level -->
    <checksum totalproperty="quick.md5">
      <fileset dir="${quick.dir}">
        <include name="${lib.dir.name}/**"/>
        <include name="${comp.dir.name}/**"/>
      </fileset>
    </checksum>
    <delete quiet="yes" failonerror="no">
      <fileset dir="${quick.dir}" includes="**/*.MD5"/>
    </delete>
    <checksum totalproperty="strap.md5">
      <fileset dir="${strap.dir}">
        <include name="${lib.dir.name}/**"/>
        <include name="${comp.dir.name}/**"/>
      </fileset>
    </checksum>
    <delete quiet="yes" failonerror="no">
      <fileset dir="${strap.dir}" includes="**/*.MD5"/>
    </delete>
    <fail message="Build is not stable">
      <condition><not>
        <equals arg1="${quick.md5}" arg2="${strap.md5}"/>
      </not></condition>
    </fail>
    <echo level="info" message="Build is stable."/>
  </target>

  <target name="test.strap" depends="build.strap">
    <echo level="error" message="Ant test bench is not available yet."/>
  </target>

<!-- ===========================================================================
DOCUMENTATION
============================================================================ -->

  <target name="docs"
    description="Generated the API for library sources"
    depends="setup.quick"
  >
    <mkdir dir="${api.lib.dir}"/>
    <quickdoc
      srcdir="${src.dir}"
      destdir="${api.lib.dir}"
      sourcepath=""
      windowtitle="Scala Library Documentation"
      documenttitle="&lt;div&gt;Scala 2&lt;div&gt;v${version.number}&lt;/div&gt;&lt;/div&gt;"
    >
      <classpath>
        <pathelement location="${quick.dir}/${lib.dir.name}"/>
      </classpath>
      <include name="${dbc.dir.name}/**/*.scala"/>
      <include name="${lib.dir.name}/**/*.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </quickdoc>
  </target>

  <target name="docs.compiler"
    description="Generated the API for compiler sources"
    depends="setup.quick"
  >
    <mkdir dir="${api.comp.dir}"/>
    <quickdoc
      srcdir="${src.comp.dir}"
      destdir="${api.comp.dir}"
      sourcepath=""
      windowtitle="Scala Compiler Documentation"
      documenttitle="&lt;div&gt;Scala 2&lt;div&gt;v${version.number}&lt;/div&gt;&lt;/div&gt;"
    >
      <classpath>
        <pathelement location="${quick.lib.dir}"/>
        <pathelement location="${quick.comp.dir}"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${ant.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </quickdoc>
  </target>

<!-- ===========================================================================
GENERATES A DISTRIBUTION
============================================================================ -->

  <target name="dist.devel" depends="init">
    <property file="${number.file}"/>
    <property
      name="version.number"
      value="${version.major}.${version.minor}.${version.patch}.${svn.revision}"
    />
    <runtarget target="dist"/>
  </target>

  <target name="dist.patch" depends="init">
    <propertyfile
      file="${number.file}"
      comment="Version last updated on ${time.human}"
    >
      <entry key="version.patch" type="int" default="0" operation="+"/>
    </propertyfile>
    <property file="${number.file}"/>
    <property
      name="version.number"
      value="${version.major}.${version.minor}.${version.patch}"
    />
    <runtarget target="dist"/>
  </target>

  <target name="dist.minor" depends="init">
    <propertyfile
      file="${number.file}"
      comment="Version last updated on ${time.human}"
    >
      <entry key="version.minor" type="int" default="0" operation="+"/>
      <entry key="version.patch" type="int" value="0"/>
    </propertyfile>
    <property file="${number.file}"/>
    <property
      name="version.number"
      value="${version.major}.${version.minor}.${version.patch}"
    />
    <runtarget target="dist"/>
  </target>

  <target name="dist.quick"
    depends="build.strap, dist.latest"
    description="Creates a quick Scala distribution (no tests and docs)"
  />

  <target name="dist"
    depends="test, docs, dist.latest"
    description="Creates a complete Scala distribution"
  />

  <target name="dist.latest"
    description="Creates the latest Scala distribution"
  >
    <property
      name="dist.current.dir"
      value="${dist.dir}/${dist.name}-${version.number}"
    />
    <mkdir dir="${dist.current.dir}"/>
    <!-- Copy all requires libraries -->
    <mkdir dir="${dist.current.dir}/lib"/>
    <jar destfile="${dist.current.dir}/lib/${comp.jar.name}">
      <fileset dir="${strap.comp.dir}"/>
      <zipfileset src="${fjbg.jar}"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${lib.jar.name}">
      <fileset dir="${strap.lib.dir}"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${lib-dbc.jar.name}">
      <fileset dir="${strap.dbc.dir}"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
      </manifest>
    </jar>
    <mkdir dir="${dist.current.dir}/bin"/>
    <!-- Build executable files -->
    <mkdir dir="${dist.current.dir}/bin"/>
    <quicktool
      file="${dist.current.dir}/bin/${scala.exec.name}"
      version="${version.number}"
      copyright="${copyright}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <quicktool
      file="${dist.current.dir}/bin/${scalac.exec.name}"
      name="Scala compiler"
      class="scala.tools.nsc.Main"
      version="${version.number}"
      copyright="${copyright}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <quicktool
      file="${dist.current.dir}/bin/${scaladoc.exec.name}"
      name="Scala doc generator"
      class="scala.tools.nsc.Main"
      toolflags="-doc"
      version="${version.number}"
      copyright="${copyright}"
      javaFlags="-Xmx256M -Xms16M"
    />
    <quicktool
      file="${dist.current.dir}/bin/${scalaint.exec.name}"
      name="Scala interpreter"
      class="scala.tools.nsc.MainInterpreter"
      version="${version.number}"
      copyright="${copyright}"
    />
    <chmod
      file="${dist.current.dir}/bin/${scalac.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${dist.current.dir}/bin/${scala.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${dist.current.dir}/bin/${scaladoc.exec.name}"
      perm="ugo+rx"
    />
    <chmod
      file="${dist.current.dir}/bin/${scalaint.exec.name}"
      perm="ugo+rx"
    />
    <!-- Copy the API, examples and man -->
    <copy todir="${dist.current.dir}/doc/${dist.name}">
      <fileset dir="${docs.dir}" includes="README,LICENSE"/>
    </copy>
    <copy todir="${dist.current.dir}/doc/${dist.name}/api">
      <fileset dir="${api.lib.dir}"/>
    </copy>
    <copy todir="${dist.current.dir}/doc/${dist.name}/examples">
      <fileset dir="${examples.dir}"/>
    </copy>
    <copy todir="${dist.current.dir}/man">
      <fileset dir="${docs.dir}/man"/>
    </copy>
    <!-- Recreate the 'latest' link to point to this distribution -->
    <if><isset property="os.win"/>
      <then>
        <copy todir="${dist.latest.dir}">
          <fileset dir="${dist.current.dir}"/>
        </copy>
      </then>
      <else>
        <symlink
          link="${dist.latest.dir}"
          resource="${dist.current.dir}"
          overwrite="yes"
          failonerror="no"
        />
      </else>
    </if>
    <!-- Create the SBaz packages -->
    <mkdir dir="${dist.sbaz.dir}"/>
    <!-- Create the Scala library package -->
    <quicksbaz
      file="${dist.sbaz.dir}/${sbaz.lib.name}-${version.number}.sbp"
      adfile="${dist.sbaz.dir}/${sbaz.lib.name}-${version.number}.advert"
      name="${sbaz.lib.name}"
      version="${version.number}"
      desc="The Scala library. This is the minimal requirement to run any Scala program."
      link="${sbaz.universe}/${sbaz.lib.name}-${version.number}.sbp"
    >
      <libset dir="${dist.current.dir}/lib" includes="${lib.jar.name},${lib-dbc.jar.name}"/>
    </quicksbaz>
    <!-- Create the Scala developper package -->
    <quicksbaz
      file="${dist.sbaz.dir}/${sbaz.dev.name}-${version.number}.sbp"
      adfile="${dist.sbaz.dir}/${sbaz.dev.name}-${version.number}.advert"
      name="${sbaz.dev.name}"
      version="${version.number}"
      desc="The Scala developper tools. This contains everything that is required to write, test and document new Scala programs, as well as all developper documentation."
      depends="${sbaz.lib.name}"
      link="${sbaz.universe}/${sbaz.dev.name}-${version.number}.sbp"
    >
      <binset dir="${dist.current.dir}/bin" includes="**"/>
      <docset dir="${dist.current.dir}/doc" includes="**"/>
      <libset dir="${dist.current.dir}/lib" includes="${comp.jar.name}"/>
      <manset dir="${dist.current.dir}/man" includes="**"/>
    </quicksbaz>
    <!-- Creates the empty umbrella Scala package -->
    <quicksbaz
      file="${dist.sbaz.dir}/${sbaz.scala.name}-${version.number}.sbp"
      adfile="${dist.sbaz.dir}/${sbaz.scala.name}-${version.number}.advert"
      name="${sbaz.scala.name}"
      version="${version.number}"
      desc="The base Scala package that contains everything needed to start using Scala."
      depends="${sbaz.lib.name},${sbaz.dev.name}"
      link="${sbaz.universe}/${sbaz.scala.name}-${version.number}.sbp"
    />
    <!-- Creates the Scala test package -->
    <quicksbaz
      file="${dist.sbaz.dir}/${sbaz.test.name}-${version.number}.sbp"
      adfile="${dist.sbaz.dir}/${sbaz.test.name}-${version.number}.advert"
      name="${sbaz.test.name}"
      version="${version.number}"
      desc="The Scala test package contains everything needed to test Scala."
      link="${sbaz.universe}/${sbaz.test.name}-${version.number}.sbp"
    >
      <binset
        dir="${basedir}/test"
        includes="clitest,diff.exe,lib*.dll,scalatest,scalatest.bat"
      />
      <miscset
        dir="${basedir}/test"
        includes="files/**/*.check,files/**/*.java,files/**/*.scala,files/cli/**/*.check.*"
      />
    </quicksbaz>
    <stopwatch name="timer.dist" action="total"/>
    <echo
      file="${nsc.timers}"
      append="true"
      message="    building DIST:   ${timer.dist};${line.separator}"
    />
  </target>

  <target name="dist.nightly" depends="dist.devel">
    <property
      name="dist.archive.nightly"
      value="${dist.name}-${version.number}"
    />
    <fail message="Directory '${dist.dir}/${dist.archive.nightly}' is not available">
      <condition><not>
        <available
          file="${dist.dir}/${dist.archive.nightly}"
          type="dir"
        />
      </not></condition>
    </fail>
    <!-- Create gzip compressed tarball -->
    <mytar
      dir="${dist.dir}"
      archive="${dist.archive.nightly}"
      compression="gzip"
    />
    <!-- Create md5 checksums -->
    <checksum
      file="${dist.dir}/${dist.archive.nightly}.tar.gz"
      forceOverwrite="yes"
      fileext=".md5"
    />
    <!-- Create zip archive -->
    <zip
      destfile="${dist.dir}/${dist.archive.nightly}.zip"
      basedir="${dist.dir}"
      includes="${dist.archive.nightly}/**"
    />
    <checksum
      file="${dist.dir}/${dist.archive.nightly}.zip"
      forceOverwrite="yes"
      fileext=".md5"
    />
  </target>

  <!-- create Unix tarballs while preserving permissions and symlinks -->
  <!-- Ant task 'tar' can't do that.. -->
  <macrodef name="mytar">
    <attribute name="dir"/>
    <attribute name="archive"/>
    <attribute name="compression"/>
    <sequential>
      <exec dir="@{dir}" executable="tar">
        <arg line="cf @{archive}.tar -C @{archive} ."/>
      </exec>
      <exec dir="@{dir}" executable="@{compression}">
        <arg line="-f9 @{archive}.tar"/>
      </exec>
    </sequential>
  </macrodef>

<!-- ===========================================================================
CLEAN
============================================================================ -->

  <macrodef name="remove">
    <attribute name="dir"/>
    <sequential>
      <delete
        dir="@{dir}"
        includeemptydirs="yes"
        quiet="yes"
        failonerror="no"
      />
    </sequential>
  </macrodef>

  <target name="clean" description="Removes QUICK, STRAP and API build products">
    <remove dir="${quick.dir}"/>
    <remove dir="${strap.dir}"/>
    <remove dir="${api.dir}"/>
  </target>

  <target name="clean.build" description="Removes all build products">
    <remove dir="${build.dir}"/>
  </target>

  <target name="clean.all"
    description="Removes all build products and distributions"
  >
    <remove dir="${build.dir}"/>
    <remove dir="${dist.dir}"/>
  </target>

  <target name="clean.unfreeze" depends="init">
    <delete
      file="${locker.dir}/complete"
      quiet="yes"
      failonerror="no"
    />
    <remove dir="${quick.dir}"/>
  </target>

</project>