<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->

<!-- ========================================================================= -->
<!-- Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC),        -->
<!-- 2003-2005 Contributors                                                         -->
<!-- All rights reserved.                                                      -->
<!-- This program and the accompanying materials are made available            -->
<!-- under the terms of the Eclipse Public License v1.0                         -->
<!-- which accompanies this distribution and is available at                   -->
<!-- http://www.eclipse.org/legal/epl-v10.html                                 -->
<!--                                                                           -->
<!-- Contributors: (See CVS checkin's)                                         -->
<!--     Xerox/PARC     initial implementation                                 -->
<!--     Adrian Colyer / George Harley eclipse plugin targets                  -->
<!-- ========================================================================= -->

<project name="build" default="all" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:maven="antlib:org.apache.maven.artifact.ant">

    <target name="all"     depends="aspectj">
        <antcall target="eclipse.plugins"/>
    </target>
    <target name="clean"   depends="clean-directories"/>
		    
    <target name="compile" depends="build-module"
    	description="compile module ${module.name} (without tests, by default)"/>

    <target name="compile-tests" depends="init"
        description="compile module ${module.name} tests">
		<assemble-module-test module="${module.name}"/>
    </target>

    <target name="test" depends="compile-tests">
        <antcall target="do-test-junit"/>
    </target>

    <!-- ===================================================================== -->
    <!-- Init                                                                  -->
    <!-- ===================================================================== -->
    <property name="modules.dir" location="${basedir}/.."/>
    <property name="module.name" value="${ant.project.name}"/>
    
    <import file="${modules.dir}/build/build-properties.xml"/>
	
    <target name="init" depends="init-properties,init-directories">
      <property name="build.config" value=""/> 
      <property name="trim.testing.default" value="true"/>
      <property name="aj.installer.jar" location="${aj.dist.dir}/aspectj-${build.version.long}.jar"/>

      <available property="ant.lib.aspectjtools"
         file="${ant.home}/lib/aspectjtools.jar"
         value="Expect classpath errors from ${ant.home}/lib/aspectjtools.jar"/>

      <available property="ant.lib.aspectjrt"
         file="${ant.home}/lib/aspectjrt.jar"
         value="Expect classpath errors from ${ant.home}/lib/aspectjrt.jar"/>

      <available property="testing.drivers.all.available"
         file="${aj.jar.dir}/testing-drivers-all.jar"
         value="${aj.jar.dir}/testing-drivers-all.jar"/>
    </target>

    <target name="version-uptodate" depends="init,init-taskdefs"
         unless="version-uptodate.done">
         <!-- XXX change task to pre-check & avoid scan if dates uptodate -->
		 <versionuptodate
			version="${build.version}"
			versionSourceFile="${aspectj.modules.dir}/bridge/src/org/aspectj/bridge/Version.java"
			versionTagFile="${aj.temp.dir}/versionUptodate"/>
		 
		 <available file="${aj.temp.dir}/versionUptodate"
		       property="version.uptodate"/>
         <property name="version-uptodate.done" value="done"/>
    </target>

    <target name="init-version" depends="init,init-filters,version-uptodate" >
      <antcall target="init-filters"/>
      <copy file="${aspectj.modules.dir}/build/lib/BridgeVersion.java.txt"
          tofile="${aspectj.modules.dir}/bridge/src/org/aspectj/bridge/Version.java"
          overwrite="yes" filtering="yes"/>
      <property name="init.version.done" value="done"/>
      <!-- consider checking this in? -->
    </target>


    <!-- ===================================================================== -->
    <!-- Misc setup and warnings                                               -->
    <!-- ===================================================================== -->

    <target name="warn.ant.lib.aspectjrt" if="ant.lib.aspectjrt">
      <echo message="----- WARNING: ${ant.lib.aspectjrt}" /> 
    </target>

    <target name="warn.ant.lib.aspectjtools" if="ant.lib.aspectjtools">
      <echo message="----- WARNING: ${ant.lib.aspectjtools}" /> 
    </target>

	<target name="fail-unless-boot-libraries-uptodate" depends="init"
	 description="fail unless all boot libraries are up-to-date">
		
		<antcall target="verify-boot-lib">
			<param name="boot.lib"        value="test/aspectjrt.jar"/>
			<param name="vbl.module.name" value="runtime"/>
		</antcall>
		
		<antcall target="verify-boot-lib">
			<param name="boot.lib"        value="build/build.jar"/>
			<param name="vbl.module.name" value="build"/>
		</antcall>

		<antcall target="verify-boot-lib">
			<param name="boot.lib"        value="test/testing-client.jar"/>
			<param name="vbl.module.name" value="testing-client"/>
		</antcall>

		<echo message="fyi, bridge/util changes rarely mean client is invalid"/>
		<antcall target="verify-boot-lib">
			<param name="boot.lib"        value="test/testing-client.jar"/>
			<param name="vbl.module.name" value="util"/>
		</antcall>
		
		<antcall target="verify-boot-lib">
			<param name="boot.lib"        value="test/testing-client.jar"/>
			<param name="vbl.module.name" value="bridge"/>
		</antcall>

		<echo message="all boot libraries verified"/>		
	</target>

	<target name="update-tree" depends="init"
     description="update tree">
      <fail unless="CVSROOT" 
           message="required: {ant} -DCVSROOT=... ..."/>
      <cvs cvsRoot="${CVSROOT}"
              dest="${aspectj.modules.dir}"
             quiet="on" 
       failonerror="on" 
           command="update -dP" />
    </target>
		
    <!-- ===================================================================== -->
    <!-- antcall targets                                                       -->
    <!-- ===================================================================== -->	
	
	<target name="build-product" depends="init,init-taskdefs,init-version" description="build $${product.name}">
      <ajbuild jarDir="${aj.jar.dir}"
              baseDir="${aspectj.modules.dir}"
              distDir="${aj.dist.dir}"
           productDir="${aspectj.modules.dir}/build/products/${product.name}"
          trimTesting="true"
          buildConfig="${build.config}" 
              version="${build.version.long}"
              verbose="${build.verbose}"
          failonerror="true"/>		
	</target>

	<target name="build-module" depends="init,init-taskdefs,init-version">
      <ajbuild module="${module.name}"
              baseDir="${aspectj.modules.dir}"
              distDir="${aj.dist.dir}"
               jarDir="${aj.jar.dir}"
          trimTesting="${trim.testing}"
          buildConfig="${build.config}" 
              version="${build.version.long}"
              verbose="${build.verbose}"
          assembleall="${assemble}"
          failonerror="true"/>		
	</target>

    <macrodef name="build-module-all">
		<attribute name="module"/>
		<attribute name="trimTesting" default="${trim.testing.default}"/>
		<sequential>
			<antcall target="build-module">
				<param name="module.name" value="@{module}"/>
				<param name="trim.testing" value="@{trimTesting}"/>
				<param name="assemble" value="true"/>
			</antcall>
		</sequential>
	</macrodef>
    <macrodef name="build-module">
		<attribute name="module"/>
		<attribute name="trimTesting" default="${trim.testing.default}"/>
		<attribute name="assemble" default="false"/>
		<sequential>
			<antcall target="build-module">
				<param name="module.name" value="@{module}"/>
				<param name="trim.testing" value="@{trimTesting}"/>
				<param name="assemble" value="@{assemble}"/>
			</antcall>
		</sequential>
	</macrodef>
    
    <macrodef name="assemble-module-test">
		<attribute name="module"/>
		<sequential>
    		<build-module module="@{module}" assemble="true" trimTesting="false"/>
		</sequential>
	</macrodef>

    
	<target name="create-installer" depends="init,init-taskdefs,init-filters"
	 description="create ${installer.file} from ${staging.dir} using ${htmlSrc.dir} and ${simpleClassName}">
        <!-- init-filters: filter on copy used by ajinstaller taskdef -->
        
        <delete quiet="on" file="${installer.file}"/>
        <ajinstaller zipfile="${installer.file}"
           installerclassjar="${aspectj.build.jar}"
                     basedir="${staging.dir}"
                   mainclass="$$installer$$.org.aspectj.${simpleClassName}"
                     htmlSrc="${htmlSrc.dir}"
                resourcesSrc="${aspectj.modules.build.dir}/installer-resources"/>
	</target>

	<target name="verify-boot-lib" depends="init"
	 description="fail if ${boot.lib} is out of date wrt ${vbl.module.name}">
      <uptodate property="lib-warning-${vbl.module.name}"
              targetfile="${aspectj.modules.dir}/lib/${boot.lib}">
      	<srcfiles dir="${aspectj.modules.dir}/${vbl.module.name}/src"
              includes="**/*.java"/>
      </uptodate>
      
      <fail unless="lib-warning-${vbl.module.name}"
        message="${boot.lib} out of date wrt module ${vbl.module.name}"/>

    </target>

    <!-- ===================================================================== -->
    <!-- test targets                                                          -->
    <!-- ===================================================================== -->	
    <target name="test-run-all-junit-tests" 
		depends="init"
        description="run unit tests via run-all-junit-tests module">
	    <antcall target="test">
	        <param name="module.name" value="run-all-junit-tests"/>
	    </antcall>
    </target>
    
    <target name="test-compiler-tests" 
		depends="init"
        description="run compiler tests via tests module">
	    <antcall target="test">
	        <param name="module.name" value="tests"/>
	    </antcall>
    </target>

    <target name="test-each-module" 
		depends="init"
	    description="run JUnit tests for each module">
	    <subant target="test">
	        <filelist dir="${aspectj.modules.dir}"
	        	files="${aspectj.tools.modules},${aspectj.test.modules}"/>
	    </subant>
	</target>

<!--
<target name="ivy.init" unless="ivy.initialized">
  <property name="ivy.lib.dir" value="n:/apache-ivy-2.1.0/lib"/>
  <property name="ivy.settings.file" value="n:/workspaces/aspectj16_1/build/ivysettings.xml"/>
                <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant">
               <classpath>
                       <path location="${ivy.lib.dir}/ivy.jar"/>
	                                <path location="${ivy.lib.dir}/org.springframework.build.aws.ivy.jar"/>
	                                <path location="${ivy.lib.dir}/commons-codec.jar"/>
                       <path location="${ivy.lib.dir}/commons-httpclient.jar"/>
                       <path location="${ivy.lib.dir}/commons-logging.jar"/>
                       <path location="${ivy.lib.dir}/jets3t.jar"/>
	                                <path location="${ivy.lib.dir}"/>
	                        </classpath>
       </taskdef>

	                <ivy:settings file="${ivy.settings.file}"/>
	                <property name="ivy.initialized" value="true"/>
	        </target>
-->

  <target name="maven.init" >
    <property name="org.apache.maven.ant.version" value="2.0.10"/>
    <property name="org.springframework.build.aws.maven.version" value="2.0.0.RELEASE"/>
<!--
    <ivy:cachepath resolveId="maven.ant.tasks.classpath" pathid="maven.ant.tasks.classpath"
       organisation="org.apache.maven" module="com.springsource.org.apache.maven.ant"
       revision="${org.apache.maven.ant.version}" conf="runtime" type="jar" inline="true" log="download-only"/>
-->
<!--
         <taskdef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant"
                           classpathref="maven.ant.tasks.classpath"/>
-->
          <maven:install-provider groupId="org.springframework.build.aws" artifactId="org.springframework.build.aws.maven"
                           version="${org.springframework.build.aws.maven.version}"/>
<!--
          <maven:install-provider groupId="org.springframework.build" artifactId="aws.maven"
                           version="${org.springframework.build.aws.maven.version}"/>
-->
  </target>


	                	    
    <target name="junitreport" depends="init,init-taskdefs"
        if="junitreport.available">
	    <clean-dir dir="${aj.junit.dir}/html"/>
	    <junitreport todir="${aj.junit.dir}/html">
	      <fileset dir="${aj.junit.dir}">
	        <include name="**/TEST-*.xml"/>
	      </fileset>
	      <report format="frames" todir="${aj.junit.dir}/html"/>
	    </junitreport>
        <pathconvert property="jur.url" targetos="unix">
        	<path location="${aj.junit.dir}/html/index.html"/>
        </pathconvert>
        <echo message="see file:${jur.url}"/>
	</target>
    
	<target name="do-test-junit" 
	    depends="init-taskdefs" 
		description="run junit tests for a module using module root or leaves">
		<property name="dtj.dir"
	    	location="${aj.junit.dir}/${module.name}"/>
	    <mkdir dir="${dtj.dir}"/>

	    <condition property="dtj.includes"
	        value="${junit.includes}"
	        else="${junit.rootSuites}">
	        <istrue value="${junit.leaves}"/>
	    </condition>
	    <condition property="dtj.excludes"
	        value="${junit.excludes}"
	        else="">
	        <istrue value="${junit.leaves}"/>
	    </condition>
      	
	    <junit 
	    	dir="${aspectj.modules.build.dir}"
      	    failureproperty="test-junit-${module.name}.failed"
      	    fork="on" 
      	    forkmode="perTest"
      	    maxmemory="400m"
      		includeAntRuntime="off" 
           	printsummary="yes" 
           	haltonfailure="${haltOnTestFailure}" >
           	<classpath>
           	    <pathelement location="${aj.jar.dir}/${module.name}-test-all.jar"/>
				<!-- see skipped libraries in Builder.properties -->
           	    <pathelement location="${jdk.tools.jar}"/>
            	<pathelement location="${aspectj.modules.lib.dir}/junit/junit.jar"/> 
           		<fileset dir="${aspectj.modules.lib.dir}/commons" includes="commons.jar"/>
           		<!-- XML api's used by loadtime, also needed when running under 1.3 per Ant FAQ -->
           	    <fileset dir="${aspectj.modules.lib.dir}/ant/lib" 
                	includes="ant.jar,ant-junit.jar,xml-apis.jar,xercesImpl.jar"/>
           	</classpath>
    		<jvmarg value="-Daspectjrtpath=${lib.test.aspectjrt.jar}" />
	        <formatter type="xml"/>
	        <batchtest todir="${dtj.dir}">
	            <fileset dir="${modules.dir}/${module.name}/testsrc"
	                includes="${dtj.includes}"
	                excludes="${dtj.excludes}"/>
            </batchtest>        
	    </junit>
	    <report-if-failed text="JUnit tests for ${module.name} failed"
	        property="test-junit-${module.name}.failed"/>
    </target>

    	
    <!-- ===================================================================== -->
    <!-- custom targets                                                        -->
    <!-- ===================================================================== -->

    <target name="build-harness-jar" depends="init"
		description="build harness jar from scratch">
        <antcall target="clean-jars"/>
		<assemble-module-test module="testing-drivers"/>
	</target>
	
    <target name="build-testing-jars" depends="init"
		description="build testing jars from scratch">
        <antcall target="build-harness-jar"/>
	</target>

    <target name="build-testing-client" depends="init-taskdefs,init">
		<build-module module="testing-client" assemble="true"/>
		<assemble-module-test module="testing-client"/>
	  <echo>
To use testing client jar in tests, 
  mv ../aj-build/jars/testing-client-all.jar ../lib/tests/testing-client.jar
</echo>
	</target>

    <target name="aspectj" depends="init,aspectjtools-dist,docs-dist" description="create installer from local distributions">
	  <property name="installer.staging.dir" location="${aj.temp.dir}/installer-staging"/>
	  <clean-dir dir="${installer.staging.dir}"/>
	  <copy todir="${installer.staging.dir}">
	    <fileset dir="${aj.dist.dir}/tools"/>
	    <fileset dir="${aj.dist.dir}/docs"/>
	  </copy>
	  
	  <antcall target="create-installer">
	    <param name="installer.file" location="${aj.installer.jar}"/>
	    <param name="staging.dir" location="${installer.staging.dir}"/>
	    <param name="htmlSrc.dir" location="${aspectj.modules.build.dir}/products/aspectj/install"/>
	    <param name="simpleClassName" value="ToolsInstaller"/>
	  </antcall>
	  <delete dir="${installer.staging.dir}"/> 
	</target>
	
	<target name="docs-dist" depends="init">
	   <ant dir="${aspectj.modules.dir}/docs"
	    antfile="build.xml"
	    target="local-dist"
	    inheritAll="false"/>
	</target>
	
	<target name="aspectjrt" depends="init"
	 description="build aspectjrt.jar (differently than release)">
		<build-module-all module="aspectj5rt"/>
	  <copy file="${aj.jar.dir}/aspectj5rt-all.jar"
	      tofile="${aj.jar.dir}/aspectjrt.jar"/>
	</target>

    <target name="compile-runtime-11" depends="init-properties"
        description="compile runtime under 1.1 - fails, but by how much?">
        <condition property="cr1.in13">
            <equals arg1="1.3" arg2="${ant.java.version}"/>
        </condition>
		<antcall target="compile-runtime-11-flag-unless13"/>
		<antcall target="compile-runtime-11-do-if13"/>
    </target>
    
    <target name="compile-runtime-11-flag-unless13" depends="init-properties"
    	unless="cr1.in13">
        <echo message="Skipping compile-runtime-11 unless 1.3"/>
    </target>
    
    <target name="compile-runtime-11-do-if13" depends="init-properties"
        if="cr1.in13">
        <mkdir dir="${aj.build.dir}/classes-1.1"/>
        <property name="java11.classes.zip"
            location="${java11.home}/lib/classes.zip"/>
        <available property="classes.zip.available"
        	file="${java11.classes.zip}"/>
        <fail unless="classes.zip.available" message="no 1.1 bootclasspath"/>
        <javac
            compiler="javac1.1"
            bootclasspath="${java11.classes.zip}"
            source="1.3"
            includejavaruntime="no"
            includeantruntime="no"
            destdir="${aj.build.dir}/classes-1.1"
            srcdir="${aspectj.modules.dir}/runtime/src"
            target="1.1"
            verbose="false"
            failonerror="true"
            />
       <delete dir="${aj.build.dir}/classes-1.1"/>
    </target>
    
    <!-- ===================================================================== -->
    <!-- boilerplate antcalls                                                  -->
    <!-- ===================================================================== -->

	<!-- for any-[module|product], define [module|product].name -->
	<target name="any-module" depends="init">
		<fail unless="module.name" message="use -Dmodule.name=... to define"/>
		<build-module module="${module.name}"/>
	</target>

	<target name="any-module-all" depends="init">
		<fail unless="module.name" message="use -Dmodule.name=... to define"/>
		<build-module-all module="${module.name}"/>
	</target>

	<target name="any-product" depends="init">
	  <fail unless="product.name" message="use -Dproduct.name=... to define"/>
	  <antcall target="build-product">
	    <param name="product.name" value="${product.name}"/>
	  </antcall>
	</target>

	<target name="ajbrowser-all" >
    	<build-module-all module="ajbrowser"/>
    </target>

	<target name="ajdoc-all">
    	<build-module-all module="ajdoc"/>
    </target>

	<target name="build">
		<build-module-all module="build"/>
    </target>

	<target name="aspectjtools-dist" depends="init" description="build local distribution">
	  <antcall target="build-product">
	    <param name="product.name" value="tools"/>
	  </antcall>
    </target>

    <!-- ===================================================================== -->
    <!-- eclipse plugins                                                       -->
    <!-- ===================================================================== -->

	<target name="eclipse.plugins" depends="init"
     	    description="create the Eclipse distribution plugins">	  
	   <ant dir="${aspectj.modules.dir}/eclipse.plugin" inheritAll="false"/>
    </target>
	
	<target name="src" depends="init" description="build src modules">
		
		<mkdir dir="${aj.src.dir}"/>
		<jar destfile="${aj.src.dir}/aspectjrt${build.version}-src.jar">
			<fileset dir="${aspectj.modules.dir}/aspectj5rt/java5-src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/runtime/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
		</jar>

		<unzip dest="${aj.src.dir}/bcelsrc" src="${aspectj.modules.dir}/lib/bcel/bcel-src.zip"/>
	    <!-- loadtime5/asm/bridge/loadtime/weaver/weaver5 -->
		<jar destfile="${aj.src.dir}/aspectjweaver${build.version}-src.jar">
			<fileset dir="${aspectj.modules.dir}/aspectj5rt/java5-src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/runtime/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
				<exclude name="**/*.html"/>
			</fileset>
			<fileset dir="${aj.src.dir}/bcelsrc">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/loadtime5/java5-src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/asm/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/bridge/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/loadtime/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/org.aspectj.matcher/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/weaver/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/weaver5/java5-src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/util/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
		</jar>
		
        <!-- missing from this are the jdtDepends.jar src files -->
		<unzip dest="${aj.src.dir}/jdtsrc" src="${aspectj.modules.dir}/org.eclipse.jdt.core/jdtcore-for-aspectj-src.zip"/>
        <!-- ajde/ajde.core/ajdoc/asm/bridge/loadtime/org.aspectj.ajdt.core/taskdefs/util/weaver5 -->
		<jar destfile="${aj.src.dir}/aspectjtools${build.version}-src.jar">
			<fileset dir="${aj.src.dir}/jdtsrc">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aj.src.dir}/bcelsrc">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/loadtime5/java5-src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/loadtime/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/ajde/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/ajde.core/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/runtime/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/aspectj5rt/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/ajdoc/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/asm/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/bridge/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/loadtime/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/org.aspectj.ajdt.core/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/taskdefs/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/util/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/weaver/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/org.aspectj.matcher/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<fileset dir="${aspectj.modules.dir}/weaver5/java5-src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
		</jar>
		<delete dir="${aj.src.dir}/bcelsrc" failonerror="false"/>
		<delete dir="${aj.src.dir}/jdtsrc" failonerror="false"/>
		
		<jar destfile="${aj.src.dir}/org.aspectj.matcher-${build.version}-src.jar">
					<fileset dir="${aspectj.modules.dir}/bridge/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/util/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
			<fileset dir="${aspectj.modules.dir}/org.aspectj.matcher/src">
				<exclude name="CVS"/>
				<exclude name="**/.cvsignore"/>
			</fileset>
			<!--
					<fileset dir="${aj.src.dir}/jdtsrc">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aj.src.dir}/bcelsrc">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/loadtime5/java5-src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/loadtime/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/ajde/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/ajde.core/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/runtime/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/aspectj5rt/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/ajdoc/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/asm/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/loadtime/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/org.aspectj.ajdt.core/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/taskdefs/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/weaver/src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					<fileset dir="${aspectj.modules.dir}/weaver5/java5-src">
						<exclude name="CVS"/>
						<exclude name="**/.cvsignore"/>
					</fileset>
					-->
				</jar>
		
		<jar destfile="${aj.src.dir}/org.aspectj-${build.version}-src.jar">
			<fileset dir="${aj.src.dir}">
				<include name="aspectjrt${build.version}-src.jar"/> 
				<include name="aspectjweaver${build.version}-src.jar"/> 
				<include name="aspectjtools${build.version}-src.jar"/>
				<include name="org.aspectj.matcher-${build.version}-src.jar"/>
			</fileset>
		</jar>
		
		<delete file="{aj.src.dir}/aspectjrt${build.version}-src.jar"/> 
		<delete file="{aj.src.dir}/aspectjweaver${build.version}-src.jar"/> 
		<delete file="{aj.src.dir}/aspectjtools${build.version}-src.jar"/> 
		<delete file="{aj.src.dir}/org.aspectj.matcher${build.version}-src.jar"/> 
    </target>
	


	<target name="repo" depends="init" description="deploy maven repo">
		<property name="repo.url" value="scp://simonegianni.it/home/mavenrsync/repo"/>
		<property name="repo.id" value="simonegianni-rsync"/>
		
		<mkdir dir="${modules.dir}/aj-build/repo"/>
		<copy toDir="${modules.dir}/aj-build/repo" file="aspectjtools.pom"/>
		<copy toDir="${modules.dir}/aj-build/repo" file="aspectjweaver.pom"/>
		<copy toDir="${modules.dir}/aj-build/repo" file="aspectjrt.pom"/>
		<replaceregexp byline="true" flags="g">
			<regexp pattern="ASPECTJVERSION"/>
			<substitution expression="${repo.version}"/>
			<fileset dir="${modules.dir}/aj-build/repo">
				<include name="*.pom"/>
			</fileset>			
		</replaceregexp>
		
		
		<!-- Invoke maven to deploy the jars to the rsynced repo -->
		<antcall target="mavenDeployJar">
			<param name="file" value="${modules.dir}/aj-build/dist/tools/lib/aspectjtools.jar"/>
			<param name="artifact" value="aspectjtools"/>
			<param name="desc" value="AspectJ Tools"/>
		</antcall>		
		<antcall target="mavenDeployJar">
			<param name="file" value="${modules.dir}/aj-build/dist/tools/lib/aspectjweaver.jar"/>
			<param name="artifact" value="aspectjweaver"/>
			<param name="desc" value="AspectJ Weaver"/>
		</antcall>		
		<antcall target="mavenDeployJar">
			<param name="file" value="${modules.dir}/aj-build/dist/tools/lib/aspectjrt.jar"/>
			<param name="artifact" value="aspectjrt"/>
			<param name="desc" value="AspectJ Runtime"/>
		</antcall>		
		
		<antcall target="mavenDeploySource">
			<param name="file" value="${modules.dir}/aj-build/src/aspectjtools${build.version}-src.jar"/>
			<param name="artifact" value="aspectjtools"/>
			<param name="desc" value="AspectJ Tools"/>
		</antcall>		
		<antcall target="mavenDeploySource">
			<param name="file" value="${modules.dir}/aj-build/src/aspectjweaver${build.version}-src.jar"/>
			<param name="artifact" value="aspectjweaver"/>
			<param name="desc" value="AspectJ Weaver"/>
		</antcall>		
		<antcall target="mavenDeploySource">
			<param name="file" value="${modules.dir}/aj-build/src/aspectjrt${build.version}-src.jar"/>
			<param name="artifact" value="aspectjrt"/>
			<param name="desc" value="AspectJ Runtime"/>
		</antcall>		
		
		
		
	</target>

<!--
ant -propertyfile XXX publishtomaven
-->
  <target name="publishtomaven_snapshot" depends="maven.init">
    <property name="build.root" value="/Users/aclement/gits/org.aspectj/aj-build"/>

    <property name="adjusted.release.type" value="snapshot"/>
    <property name="maven.central.repository" value="s3://maven.springframework.org/${adjusted.release.type}"/>

    <property name="bin.jars.folder" value="${build.root}/dist/tools/lib"/>
    <property name="src.jars.folder" value="${build.root}/src"/>
    <property name="suffix" value="DEVELOPMENT"/>

    <!-- ASPECTJRT -->
    <maven:deploy file="${bin.jars.folder}/aspectjrt.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload/aspectjrt.pom"/>
      <attach file="${src.jars.folder}/aspectjrt${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>

    <!-- ASPECTJTOOLS -->
    <maven:deploy file="${bin.jars.folder}/aspectjtools.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload/aspectjtools.pom"/>
      <attach file="${src.jars.folder}/aspectjtools${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>

    <!-- ASPECTJWEAVER -->
    <maven:deploy file="${bin.jars.folder}/aspectjweaver.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload/aspectjweaver.pom"/>
      <attach file="${src.jars.folder}/aspectjweaver${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>

  </target>





  <target name="publishtomaven_milestone" depends="maven.init">
    <property name="suffix" value="1.9.0.BETA-6"/>

    <property name="build.root" value="/Users/aclement/gits/org.aspectj/aj-build"/>
    <property name="adjusted.release.type" value="milestone"/>
    <property name="maven.central.repository" value="s3://maven.springframework.org/${adjusted.release.type}"/>
    <property name="bin.jars.folder" value="${build.root}/dist/tools/lib"/>
    <property name="src.jars.folder" value="${build.root}/src"/>

    <!-- ASPECTJRT -->
    <maven:deploy file="${bin.jars.folder}/aspectjrt.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload_milestone/aspectjrt.pom"/>
      <attach file="${src.jars.folder}/aspectjrt${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>

    <!-- ASPECTJTOOLS -->
    <maven:deploy file="${bin.jars.folder}/aspectjtools.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload_milestone/aspectjtools.pom"/>
      <attach file="${src.jars.folder}/aspectjtools${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>

    <!-- ASPECTJWEAVER -->
    <maven:deploy file="${bin.jars.folder}/aspectjweaver.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload_milestone/aspectjweaver.pom"/>
      <attach file="${src.jars.folder}/aspectjweaver${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>
  </target>

  <target name="publishtomaven_release" depends="maven.init">
    <property name="suffix" value="1.7.2"/>

    <property name="build.root" value="/Users/aclement/gits/org.aspectj/aj-build"/>
    <property name="adjusted.release.type" value="release"/>
    <property name="maven.central.repository" value="s3://maven.springframework.org/${adjusted.release.type}"/>
    <property name="bin.jars.folder" value="${build.root}/dist/tools/lib"/>
    <property name="src.jars.folder" value="${build.root}/src"/>

    <!-- ASPECTJRT -->
    <maven:deploy file="${bin.jars.folder}/aspectjrt.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload_${adjusted.release.type}/aspectjrt.pom"/>
      <attach file="${src.jars.folder}/aspectjrt${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>

    <!-- ASPECTJTOOLS -->
    <maven:deploy file="${bin.jars.folder}/aspectjtools.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload_${adjusted.release.type}/aspectjtools.pom"/>
      <attach file="${src.jars.folder}/aspectjtools${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>

    <!-- ASPECTJWEAVER -->
    <maven:deploy file="${bin.jars.folder}/aspectjweaver.jar">
      <remoteRepository url="${maven.central.repository}">
        <authentication username="${accessKey}" passphrase="${secretKey}"/>
      </remoteRepository>
      <pom file="usedForMavenUpload_${adjusted.release.type}/aspectjweaver.pom"/>
      <attach file="${src.jars.folder}/aspectjweaver${suffix}-src.jar" classifier="sources"/>
    </maven:deploy>
  </target>

	
  <target name="repo2" depends="maven.init">
  </target>

	<target name="mavenDeployJar">
		<!-- 
		  Currently only an exec is usable, see http://jira.codehaus.org/browse/MANTTASKS-71 
		  this mean you need to have maven installed on your system.
		-->
		<exec executable="n:/tools/apache-maven-2.0.9/bin/mvn.bat" failonerror="true">
			<arg line="--batch-mode"/>
			<arg line="deploy:deploy-file"/>
			<arg line="-Durl=${repo.url}"/>
			<arg line="-DrepositoryId=${repo.id}"/>
			<arg line="-Dfile=${file}"/>
			<arg line="-DgroupId=org.aspectj"/>
			<arg line="-DartifactId=${artifact}"/>
			<arg line="-Dpackaging=jar"/>
			<arg line="-Dversion=${repo.version}"/>
			<arg line="-DpomFile=${modules.dir}/aj-build/repo/${artifact}.pom"/>			
		</exec>	
	</target>
	
	<target name="mavenDeploySource">
		<!-- 
		     Currently only an exec is usable, see http://jira.codehaus.org/browse/MANTTASKS-71 
		     this mean you need to have maven installed on your system.
		     
		     failonerror is set to false because deploy:deploy-file goes NPE for some obscure reason
		     on recent versions, see http://jira.codehaus.org/browse/MDEPLOY-48
		     -->
		<exec executable="n:/tools/apache-maven-2.0.9/bin/mvn.bat" failonerror="false">
			<arg line="--batch-mode"/>
			<arg line="deploy:deploy-file"/>
			<arg line="-Durl=${repo.url}"/>
			<arg line="-DrepositoryId=${repo.id}"/>
			<arg line="-Dfile=${file}"/>
			<arg line="-DgroupId=org.aspectj"/>
			<arg line="-DartifactId=${artifact}"/>
			<arg line="-Dpackaging=java-source"/>
			<arg line="-Dversion=${repo.version}"/>
			<arg value="-DgeneratePom=false"/>			
		</exec>	
	</target>
	

</project>

