blob: 0797e898f9070c5c6a0c9436ca3fbca527a0d28c [file] [log] [blame]
<!-- ========================================================================= -->
<!-- Copyright (c) 1999-2001 Xerox Corporation, -->
<!-- 2002 Palo Alto Research Center, Incorporated (PARC). -->
<!-- All rights reserved. -->
<!-- This program and the accompanying materials are made available -->
<!-- under the terms of the Common Public License v1.0 -->
<!-- which accompanies this distribution and is available at -->
<!-- http://www.eclipse.org/legal/cpl-v10.html -->
<!-- -->
<!-- Contributors: -->
<!-- Xerox/PARC initial implementation -->
<!-- ========================================================================= -->
<project name="aspectj-examples" default="spacewar" basedir=".">
<target name="info" >
<echo>
This script builds the AspectJ examples.
Relevant targets:
spacewar build and run spacewar with debugging (default)
all build and run each example
{example} build and run any {example}
(use -projecthelp to list {example} names)
tracing-bc use AspectJ 1.1 bytecode weaving to build tracing example
Setup:
- Run from the doc/examples directory in your AspectJ distribution.
The tasks in ../../lib/aspectjtools.jar are used automatically.
Variants:
- To avoid running (i.e., compile only), define variable "norun"
- To define a variable, use the Ant -D option - e.g., on Windows:
ant -f build.xml -DJAVA_HOME=c:\jdk1.3.1 -Dnorun=skip
</echo>
</target>
<!-- ============================================================= -->
<!-- setup and cleanup targets -->
<!-- ============================================================= -->
<target name="clean" depends="init"
description="clean and create classes/jar dir, .ajesym files">
<delete quiet="on" dir="${classes.dir}"/>
<delete quiet="on" dir="${jar.dir}"/>
<delete quiet="on">
<fileset dir="${example.dir}" includes="**/*.ajesym"/>
</delete>
<mkdir dir="${classes.dir}"/>
<mkdir dir="${jar.dir}"/>
</target>
<target name="init" depends="init.variables,init.taskdefs"/>
<target name="init.variables"
description="init variables">
<!-- build.compiler value to pick up our CompilerAdapter for javac -->
<property name="ajc.adapter"
value="org.aspectj.tools.ant.taskdefs.Ajc11CompilerAdapter"/>
<!-- required directories - run from examples or predefine -->
<property name="example.dir"
location="${basedir}"/>
<property name="aspectj.lib.dir"
location="${basedir}/../../lib"/>
<!-- required libraries - install or predefine -->
<property name="aspectjrt.jar"
location="${aspectj.lib.dir}/aspectjrt.jar"/>
<property name="aspectjtools.jar"
location="${aspectj.lib.dir}/aspectjtools.jar"/>
<property name="aspectjweaver.jar"
location="${aspectj.lib.dir}/aspectjweaver.jar"/>
<!-- created directories -->
<property name="classes.dir"
location="${example.dir}/classes"/>
<property name="jar.dir"
location="${example.dir}/jars"/>
<!-- checking required libraries -->
<available file="${aspectjtools.jar}"
property="aspectjtools.jar.available"/>
<available file="${aspectjrt.jar}"
property="aspectjrt.jar.available"/>
<property name="example.packages"
value="bean, coordination, evolution, figures, figures.gui,
helloworld, icount, icount.lib, introduction,
observer, shadow, shadow.version1, shadow.version2,
spacewar, telecom, telecom.version1, timeserver, tjp,
tracing, tracing.lib tracing.version1, tracing.version2,
tracing.version3"/>
</target>
<target name="init.taskdefs" depends="init.variables,
aspectjtools.jar.available,
aspectjrt.jar.available"
unless="taskdefs.init">
<!-- sets name of new task to iajc, old task to ajc -->
<taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
<classpath>
<pathelement path="${aspectjtools.jar}"/>
</classpath>
</taskdef>
<property name="taskdefs.init" value="true"/>
</target>
<!-- targets to fail unless required libraries available -->
<target name="aspectjrt.jar.available" depends="init.variables"
unless="aspectjrt.jar.available" >
<fail message="expecting aspectjrt.jar at ${aspectjrt.jar}"/>
</target>
<target name="aspectjtools.jar.available" depends="init.variables"
unless="aspectjtools.jar.available" >
<fail message="expecting aspectjtools.jar at ${aspectjtools.jar}"/>
</target>
<!-- ============================================================= -->
<!-- these targets compile and run any example -->
<!-- ============================================================= -->
<target name="Ajx" depends="init"
description="compile {list} and run {class} of example">
<echo message="##### Ajx list=${list} class=${class}" />
<antcall target="clean" />
<!-- can use ajc or iajc here -->
<iajc destdir="${classes.dir}" argfiles="${list}"
fork="true"
forkclasspath="${aspectjtools.jar}"
classpath="${aspectjrt.jar}"/>
<antcall target="Ajx-run" >
<param name="class" value="${class}"/>
</antcall>
</target>
<target name="Ajx-run"
description="run {class} unless {norun} is set"
unless="norun" >
<echo message="##### Ajx-run list=${list} class=${class}" />
<java classname="${class}" fork="yes">
<classpath>
<pathelement path="${classes.dir}"/>
<pathelement path="${aspectjrt.jar}"/>
</classpath>
</java>
</target>
<!-- ============================================================= -->
<!-- example targets -->
<!-- ============================================================= -->
<target name="all"
description="build and run all examples"
depends="bean,intro,intro-clone,intro-compare,intro-hash,
observer,spacewar,spacewar-demo,telecom,
telecom-timing,tracing-none,tracing-1,
tracing-2,tracing-3,tjp"/>
<target name="nonGui"
description="build and run non-GUI examples"
depends="bean,intro,intro-clone,intro-compare,intro-hash,
telecom,telecom-timing,tracing-none,tracing-1,
tracing-2,tracing-3,tjp"/>
<target name="bean"
description="build bean example">
<antcall target="Ajx">
<param name="list" value="bean/files.lst"/>
<param name="class" value="bean.Demo"/>
</antcall>
</target>
<target name="intro"
description="build inter-type declaration example">
<antcall target="Ajx">
<param name="list" value="introduction/files.lst"/>
<param name="class" value="introduction.Point"/>
</antcall>
</target>
<target name="intro-clone"
description="build inter-type declaration (clone) example">
<antcall target="Ajx">
<param name="list" value="introduction/files.lst"/>
<param name="class" value="introduction.CloneablePoint"/>
</antcall>
</target>
<target name="intro-compare"
description="build inter-type declaration (Comparable) example">
<antcall target="Ajx">
<param name="list" value="introduction/files.lst"/>
<param name="class" value="introduction.ComparablePoint"/>
</antcall>
</target>
<target name="intro-hash"
description="build inter-type declaration (hashcode) example">
<antcall target="Ajx">
<param name="list" value="introduction/files.lst"/>
<param name="class" value="introduction.HashablePoint"/>
</antcall>
</target>
<target name="observer"
description="build observer example">
<antcall target="Ajx">
<param name="list" value="observer/files.lst"/>
<param name="class" value="observer.Demo"/>
</antcall>
</target>
<target name="spacewar"
description="build spacewar debug example">
<antcall target="Ajx">
<param name="list" value="spacewar/debug.lst"/>
<param name="class" value="spacewar.Game"/>
</antcall>
</target>
<target name="spacewar-demo"
description="build spacewar demo (no debug) example">
<antcall target="Ajx">
<param name="list" value="spacewar/demo.lst"/>
<param name="class" value="spacewar.Game"/>
</antcall>
</target>
<target name="telecom"
description="build telecom basic example">
<antcall target="Ajx">
<param name="list" value="telecom/basic.lst"/>
<param name="class" value="telecom.BasicSimulation"/>
</antcall>
</target>
<target name="telecom-billing"
description="build telecom billing example">
<antcall target="Ajx">
<param name="list" value="telecom/billing.lst"/>
<param name="class" value="telecom.BillingSimulation"/>
</antcall>
</target>
<target name="telecom-timing"
description="build telecome timing example">
<antcall target="Ajx">
<param name="list" value="telecom/timing.lst"/>
<param name="class" value="telecom.TimingSimulation"/>
</antcall>
</target>
<target name="tjp"
description="build thisJoinPoint example">
<antcall target="Ajx">
<param name="list" value="tjp/files.lst"/>
<param name="class" value="tjp.Demo"/>
</antcall>
</target>
<target name="tracing-none"
description="build tracing (base) example">
<antcall target="Ajx">
<param name="list" value="tracing/notrace.lst"/>
<param name="class" value="tracing.ExampleMain"/>
</antcall>
</target>
<target name="tracing-1"
description="build tracing (version 1) example">
<antcall target="Ajx">
<param name="list" value="tracing/tracev1.lst"/>
<param name="class" value="tracing.version1.TraceMyClasses"/>
</antcall>
</target>
<target name="tracing-2"
description="build tracing (version 2) example">
<antcall target="Ajx">
<param name="list" value="tracing/tracev2.lst"/>
<param name="class" value="tracing.version2.TraceMyClasses"/>
</antcall>
</target>
<target name="tracing-3"
description="build tracing (version 3) example">
<antcall target="Ajx">
<param name="list" value="tracing/tracev3.lst"/>
<param name="class" value="tracing.version3.TraceMyClasses"/>
</antcall>
</target>
<!-- ============================================================= -->
<!-- do tracing example using compiler adapter -->
<!-- ============================================================= -->
<target name="tracing-adapter" depends="init"
description="tracing example compiled via javac task">
<antcall target="clean" />
<!-- to fork, set adapter.fork=true
and put aspectjtools.jar on ant classpath -->
<javac destdir="${classes.dir}"
fork="${adapter.fork}">
<src path="${example.dir}"/>
<include name="tracing/*.java"/>
<!-- compilerarg's ignored unless using our compiler adapter -->
<compilerarg compiler="${ajc.adapter}"
line="-verbose -Xlint -proceedOnError"/>
<!-- use separate values if a path might have spaces -->
<compilerarg compiler="${ajc.adapter}"
value="-classpath"/>
<compilerarg compiler="${ajc.adapter}"
value="${aspectjrt.jar}"/>
<compilerarg compiler="${ajc.adapter}"
path="${example.dir}/tracing/version3/Trace.java"/>
<compilerarg compiler="${ajc.adapter}"
path="${example.dir}/tracing/version3/TraceMyClasses.java"/>
</javac>
</target>
<target name="tracing-adapter-ajc" depends="init"
description="tracing example compiled using ajc via compiler adapter">
<!-- aspectjtools.jar must be on system/ant classpath -->
<antcall target="tracing-adapter">
<param name="build.compiler" value="${ajc.adapter}"/>
</antcall>
</target>
<!-- ============================================================= -->
<!-- do tracing example with 1.1 bytecode weaving (binary aspects) -->
<!-- (and use fork/forkclasspath to avoid Eclipse 2.x bug) -->
<!-- ============================================================= -->
<target name="tracing-bc" depends="init"
description="tracing example with bytecode weaving (binary aspects)">
<antcall target="clean" />
<!-- build application classes -->
<iajc outjar="${jar.dir}/tracingApp.jar"
classpath="${aspectjrt.jar}"
fork="true"
forkclasspath="${aspectjtools.jar}"
verbose="off">
<src path="${example.dir}"/>
<include name="tracing/*.java" />
</iajc>
<!-- test standalone application by running without tracing -->
<echo message="---------- running without tracing - START"/>
<java classname="tracing.ExampleMain">
<classpath>
<pathelement path="${aspectjrt.jar}"/>
<pathelement path="${jar.dir}/tracingApp.jar"/>
</classpath>
</java>
<echo message="---------- running without tracing - FINISH "/>
<!-- Build a read-only tracing library -->
<iajc outjar="${jar.dir}/tracingLib.jar"
classpath="${aspectjrt.jar}"
fork="true"
forkclasspath="${aspectjtools.jar}"
verbose="off">
<src path="${example.dir}"/>
<include name="tracing/version3/Trace.java" />
</iajc>
<!-- weave them -->
<!-- This example uses a concrete aspect in source form, -->
<!-- but the aspects could be written to be binary only. -->
<iajc outjar="${jar.dir}/tracedApp.jar"
inpath="${jar.dir}/tracingApp.jar"
aspectpath="${jar.dir}/tracingLib.jar"
classpath="${aspectjrt.jar}"
fork="true"
forkclasspath="${aspectjtools.jar}"
verbose="off">
<src path="${example.dir}"/>
<include name="tracing/version3/TraceMyClasses.java" />
</iajc>
<!-- run with tracing -->
<echo message="---------- running with tracing - START"/>
<java classname="tracing.version3.TraceMyClasses">
<classpath>
<pathelement path="${aspectjrt.jar}"/>
<pathelement path="${jar.dir}/tracingLib.jar"/>
<pathelement path="${jar.dir}/tracedApp.jar"/>
</classpath>
</java>
<echo message="---------- running with tracing - FINISH"/>
</target>
<!-- ============================================================= -->
<!-- do tracing example with 1.2 load-time weaving -->
<!-- (and use fork/forkclasspath to avoid Eclipse 2.x bug) -->
<!-- ============================================================= -->
<target name="tracing-lt" depends="init"
description="tracing example with load-time aspect weaving">
<antcall target="clean" />
<!-- build application classes -->
<iajc outjar="${jar.dir}/tracingApp.jar"
classpath="${aspectjrt.jar}"
fork="true"
forkclasspath="${aspectjtools.jar}"
verbose="off">
<src path="${example.dir}"/>
<include name="tracing/*.java" />
</iajc>
<!-- Build a read-only tracing library -->
<iajc outjar="${jar.dir}/tracingLib.jar"
classpath="${aspectjrt.jar}:${jar.dir}/tracingApp.jar"
fork="true"
forkclasspath="${aspectjtools.jar}"
verbose="off">
<src path="${example.dir}"/>
<include name="tracing/version2/Trace.java" />
<include name="tracing/version2/TraceMyClasses.java" />
</iajc>
<!-- test standalone application by running without tracing -->
<echo message="---------- running without tracing - START"/>
<java classname="tracing.ExampleMain">
<classpath>
<pathelement path="${aspectjrt.jar}"/>
<pathelement path="${jar.dir}/tracingApp.jar"/>
</classpath>
</java>
<echo message="---------- running without tracing - FINISH "/>
<!-- run application with LTW to add tracing -->
<echo message="---------- running with tracing - START"/>
<java classname="tracing.ExampleMain"
fork="true">
<classpath>
<pathelement path="${aspectjweaver.jar}"/>
</classpath>
<jvmarg line="-showversion"/>
<sysproperty key="java.system.class.loader" value="org.aspectj.weaver.WeavingURLClassLoader"/>
<sysproperty key="aj.weaving.verbose" value="True"/>
<sysproperty key="org.aspectj.weaver.showWeaveInfo" value="True"/>
<sysproperty key="aj.class.path" path="${jar.dir}/tracingLib.jar:${jar.dir}/tracingApp.jar"/>
<sysproperty key="aj.aspect.path" path="${jar.dir}/tracingLib.jar"/>
</java>
<echo message="---------- running with tracing - FINISH"/>
</target>
</project>