You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
514 lines
20 KiB
514 lines
20 KiB
<?xml version="1.0"?> |
|
<!-- ============= [build file for ANT v1.5.x] ====================== --> |
|
<!DOCTYPE project |
|
[ |
|
<!ENTITY dependencies SYSTEM "dependencies.xml" > |
|
]> |
|
|
|
<project name="emma" default="build" basedir="." > |
|
<!-- $Id: build.xml,v 1.2.2.3 2005/06/13 00:20:55 vlad_r Exp $ --> |
|
<property name="app.short.name" value="${ant.project.name}" /> |
|
<property name="app.project.start.date" value="2001/02/01" /> |
|
|
|
<!-- TODO: build log --> |
|
|
|
<!-- ============================================================== --> |
|
|
|
<!-- pull in the OS environment variables; an OS env variable VAR can be used as ${env.VAR}: --> |
|
<property environment="env" /> |
|
|
|
<!-- ============================================================== --> |
|
<!-- build branch properties and local customization overrides: --> |
|
|
|
<!-- first, load the official build settings file: --> |
|
<property file="build.properties" /> |
|
|
|
<!-- next, load the CVS-versioned release/branch properties file: --> |
|
<property file="release.properties" /> |
|
|
|
<!-- next, load an optional global properties file: --> |
|
<property file="${env.ANT_BLDENV}/ant.properties" /> |
|
|
|
<!-- ============================================================== --> |
|
<!-- global compiler settings: --> |
|
|
|
<property name="build.debug" value="on" /> <!-- default for a release build is "on" --> |
|
<property name="build.deprecation" value="off" /> |
|
<property name="build.compiler" value="modern" /> |
|
<property name="build.sysclasspath" value="ignore" /> |
|
<property name="build.target" value="1.2" /> <!-- all .class files are stamped as compatible with 1.2 JVMs: --> |
|
|
|
<!-- ============================================================== --> |
|
<!-- main/default build target: --> |
|
|
|
<target name="build" depends="dist" |
|
description="-> full build [without 'clean']" |
|
/> |
|
|
|
<!-- helper build subtargets: --> |
|
|
|
<target name="build.core.compile" depends="core.compile" |
|
description="-> re-compiles updated core sources [no 'clean']" |
|
/> |
|
<target name="build.core.package" depends="core.package" |
|
description="-> re-packages core classes [no 'clean']" |
|
/> |
|
|
|
<!-- build modifier targets: --> |
|
|
|
<target name="official" |
|
description="-> switches 'build' into official, CVS-aware mode" > |
|
<property name="build.is.official" value="yes" /> |
|
</target> |
|
|
|
<target name="release" |
|
description="-> [RELEASE]" > |
|
<property name="build.is.on.a.branch" value="yes" /> |
|
<property name="app.build.release.tag" value="" /> <!-- no tag means official release --> |
|
<property name="file.release.prefix" value="" /> |
|
<property name="cvs.ready.label.prefix" value="RELEASE" /> |
|
</target> |
|
|
|
<target name="stable" |
|
description="-> [STABLE]" > |
|
<property name="app.build.release.tag" value=" (stable)" /> |
|
<property name="file.release.prefix" value="-stable" /> |
|
<property name="cvs.ready.label.prefix" value="STABLE" /> |
|
</target> |
|
|
|
<!-- ============================================================== --> |
|
<!-- init targets: --> |
|
<!-- ============================================================== --> |
|
|
|
<!-- static (checked-in) build structure: --> |
|
<property file="module.dirs.properties" /> |
|
|
|
<!-- work (created by the build) build structure: --> |
|
<property file="work.dirs.properties" /> |
|
|
|
<target name="init.work.dirs" > |
|
<mkdir dir="${out.dir}" /> |
|
<mkdir dir="${dist.dir}" /> |
|
<mkdir dir="${release.dir}" /> |
|
<mkdir dir="${temp.dir}" /> |
|
|
|
<mkdir dir="${tools.classes.out.dir}" /> |
|
|
|
<mkdir dir="${core.classes.out.dir}" /> |
|
<mkdir dir="${core.srcgen.out.dir}" /> |
|
<mkdir dir="${core.res.out.dir}" /> |
|
|
|
<mkdir dir="${ant.classes.out.dir}" /> |
|
</target> |
|
|
|
<target name="init" depends="init.work.dirs"> |
|
<!-- NOTE: the official build machine sets these explicitly, |
|
these unofficial defaults are provided for private builds only: --> |
|
<property name="build.target.j2se.14.home" value="${java.home}" /> |
|
<property name="build.target.j2se.12.home" value="${build.target.j2se.14.home}" /> |
|
<property name="build.target.j2se.13.home" value="${build.target.j2se.14.home}" /> |
|
|
|
<property name="build.target.ant.15.home" value="${env.ANT_HOME}" /> |
|
<property name="build.target.ant.14.home" value="${build.target.ant.15.home}" /> |
|
|
|
|
|
<!-- verify that we have J2SE 1.4+: --> |
|
<available property="j2se.is.14+" classname="java.lang.CharSequence" /> |
|
<fail unless="j2se.is.14+">location [${build.target.j2se.14.home}] does not specify J2SE 1.4+</fail> |
|
|
|
<available file="${temp.dir}/.ready.build.stamp" type="file" property="build.is.dirty" value="yes" /> |
|
|
|
<!-- include dependencies.xml (a dynamic include by design): --> |
|
&dependencies; |
|
|
|
<echo message="ANT version: ${ant.version}" /> |
|
<echo message="JDK version: ${ant.java.version}" /> |
|
<echo message="build debug flag: ${build.debug}" /> |
|
</target> |
|
|
|
<!-- ============================================================== --> |
|
<!-- support targets: --> |
|
<!-- ============================================================== --> |
|
|
|
<target name="clean" depends="clean.out, clean.dist" description="-> complete clean (output + distribution)" /> |
|
|
|
<target name="clean.out" description="-> output clean" > |
|
<delete dir="${out.dir}" /> |
|
</target> |
|
|
|
<target name="clean.dist" description="-> distribution clean" > |
|
<delete dir="${dist.dir}"/> |
|
<delete dir="${release.dir}"/> |
|
</target> |
|
|
|
|
|
<target name="timestamp" depends="init, -timestamp.1, -timestamp.2, -timestamp.3, -timestamp.4, -timestamp.5"> |
|
</target> |
|
|
|
<target name="-timestamp.1" depends="init" unless="build.is.dirty" > |
|
<java classname="com.vladium.util.version.VersionStampTool" |
|
classpathref="lib.internal.classpath" |
|
output="${temp.dir}/.ready.build.stamp" |
|
append="no" |
|
> |
|
<arg value="-start" /> |
|
<arg value="${app.project.start.date}" /> |
|
<arg value="-format" /> |
|
<arg value="~F~" /> |
|
</java> |
|
<java classname="com.vladium.util.version.VersionStampTool" |
|
classpathref="lib.internal.classpath" |
|
output="${temp.dir}/timestamp.properties" |
|
append="no" |
|
> |
|
<arg value="-start" /> |
|
<arg value="${app.project.start.date}" /> |
|
<arg value="-fend" /> |
|
<arg value="${temp.dir}/.ready.build.stamp" /> |
|
<arg value="-format" /> |
|
<arg value="app.build.id=${app.build.id.format}\napp.build.date=${app.build.date.format}" /> |
|
</java> |
|
<!-- TODO: this is ugly and breaks private builds (constant appending is bad any way): --> |
|
<!-- <echo message="file.release.prefix=${file.release.prefix}" file="${temp.dir}/timestamp.properties" append="yes" /> --> |
|
</target> |
|
|
|
<target name="-timestamp.2" depends="init" > |
|
<property file="${temp.dir}/timestamp.properties" /> |
|
|
|
<!-- private/Eclipse build defaults: --> |
|
<property name="app.build.release.tag" value=" (unsupported private build)" /> |
|
<property name="app.bug.report.link" value="this private build is unsupported" /> |
|
<property name="file.release.prefix" value="-private" /> |
|
|
|
<property name="file.release.label" value="${app.major.version}.${app.minor.version}.${app.build.id}" /> |
|
<echo message="build id: ${file.release.label}${app.build.release.tag}" /> |
|
</target> |
|
|
|
<target name="-timestamp.2a" depends="init" if="build.is.on.a.branch" > |
|
<property name="cvs.branch.label" value="BRANCH_${app.major.version}_${app.minor.version}" /> |
|
</target> |
|
|
|
<target name="-timestamp.3" depends="init, -timestamp.2a" if="build.is.official" > |
|
<property name="cvs.ready.label" value="${cvs.ready.label.prefix}_${app.major.version}_${app.minor.version}_${app.build.id}" /> |
|
<property name="cvs.branch.label" value="HEAD" /> <!-- default to a trunk/stable build --> |
|
<echo message="CVS branch label: ${cvs.branch.label}" /> |
|
<echo message="release version (CVS ready label): ${cvs.ready.label}" /> |
|
</target> |
|
|
|
<target name="-timestamp.4" depends="init, build.cvs.ready" if="build.is.official" > |
|
</target> |
|
|
|
<target name="-timestamp.5" depends="init" unless="build.is.dirty" > |
|
<copy overwrite="yes" todir="${core.srcgen.out.dir}" > |
|
<fileset dir="${core.data.dir}" includes="**/*.java" /> |
|
<filterset> |
|
<filter token="APP_MAJOR_VERSION" value='*/ ${app.major.version}; // ' /> |
|
<filter token="APP_MINOR_VERSION" value='*/ ${app.minor.version}; // ' /> |
|
<filter token="APP_BUILD_ID" value='*/ ${app.build.id}; // ' /> |
|
<filter token="APP_BUILD_RELEASE_TAG" value='*/ "${app.build.release.tag}"; // ' /> |
|
<filter token="APP_BUILD_DATE" value='*/ "${app.build.date}"; // ' /> |
|
<filter token="APP_BUG_REPORT_LINK" value='*/ "${app.bug.report.link}"; // ' /> |
|
<filter token="APP_HOME_SITE_LINK" value='*/ "${app.home.site.link}"; // ' /> |
|
</filterset> |
|
</copy> |
|
<copy overwrite="yes" file="${core.data.dir}/MANIFEST.MF" todir="${temp.dir}" > |
|
<filterset> |
|
<filter token="JDK_ID" value="JDK_${ant.java.version}" /> |
|
<filter token="BUILD_USER_NAME" value="${user.name} on ${os.name}:${os.version}:${os.arch}" /> |
|
|
|
<filter token="APP_NAME" value="${app.short.name}" /> |
|
<filter token="APP_MAJOR_VERSION" value="${app.major.version}" /> |
|
<filter token="APP_MINOR_VERSION" value="${app.minor.version}" /> |
|
<filter token="APP_BUILD_ID" value="${app.build.id}" /> |
|
<filter token="APP_BUILD_RELEASE_TAG" value="${app.build.release.tag}" /> |
|
<filter token="APP_BUILD_DATE" value="${app.build.date}" /> |
|
<filter token="APP_BUG_REPORT_LINK" value="${app.bug.report.link}" /> |
|
<filter token="APP_HOME_SITE_LINK" value="${app.home.site.link}" /> |
|
</filterset> |
|
</copy> |
|
</target> |
|
|
|
<target name="-pre-compile" depends="init, timestamp" > |
|
</target> |
|
|
|
<!-- ============================================================== --> |
|
<!-- compilation targets: --> |
|
<!-- ============================================================== --> |
|
|
|
<target name="compile" depends="init, core.compile, ant.compile, tools.compile" /> |
|
|
|
<!-- ========================== --> |
|
<!-- core module: --> |
|
|
|
<target name="core.bootstrap.compile" depends="init, -pre-compile" > |
|
<javac destdir="${core.classes.out.dir}" |
|
debug="${build.debug}" |
|
deprecation="${build.deprecation}" |
|
target="${build.target}" |
|
bootclasspathref="boot.j2se.12.classpath" |
|
extdirs="${ext.j2se.12.classpath}" |
|
classpathref="core.classpath" |
|
> |
|
<!-- include IAppVersion.java: --> |
|
<src path="${core.srcgen.out.dir}" /> |
|
|
|
<!-- classes used by core.src.java12.dir sources: --> |
|
<src path="${core.src.java12.dir}" /> |
|
<include name="**/util/Property.java" /> |
|
<include name="**/IAppConstants.java" /> |
|
</javac> |
|
</target> |
|
|
|
<target name="core.java14.compile" depends="init, core.bootstrap.compile" > |
|
<javac destdir="${core.classes.out.dir}" |
|
debug="${build.debug}" |
|
deprecation="${build.deprecation}" |
|
target="${build.target}" |
|
bootclasspathref="boot.j2se.14.classpath" |
|
extdirs="${ext.j2se.14.classpath}" |
|
classpathref="core.classpath" |
|
> |
|
<src path="${core.src.java14.dir}" /> |
|
</javac> |
|
</target> |
|
|
|
<target name="core.java13.compile" depends="init, core.java14.compile" > |
|
<javac destdir="${core.classes.out.dir}" |
|
debug="${build.debug}" |
|
deprecation="${build.deprecation}" |
|
target="${build.target}" |
|
bootclasspathref="boot.j2se.13.classpath" |
|
extdirs="${ext.j2se.13.classpath}" |
|
classpathref="core.classpath" |
|
> |
|
<src path="${core.src.java13.dir}" /> |
|
</javac> |
|
</target> |
|
|
|
<!-- the bulk of core compilation: --> |
|
<target name="core.compile" depends="init, core.java13.compile" > |
|
<javac destdir="${core.classes.out.dir}" |
|
debug="${build.debug}" |
|
deprecation="${build.deprecation}" |
|
target="${build.target}" |
|
bootclasspathref="boot.j2se.12.classpath" |
|
extdirs="${ext.j2se.12.classpath}" |
|
classpathref="core.classpath" |
|
> |
|
<src path="${core.src.java12.dir}" /> |
|
<exclude name="**/util/Property.java" /> |
|
<exclude name="**/IAppConstants.java" /> |
|
</javac> |
|
</target> |
|
|
|
<!-- ========================== --> |
|
<!-- tools module: --> |
|
|
|
<target name="tools.compile" depends="init, core.compile" > |
|
<javac destdir="${tools.classes.out.dir}" |
|
debug="${build.debug}" |
|
deprecation="${build.deprecation}" |
|
target="${build.target}" |
|
bootclasspathref="boot.j2se.14.classpath" |
|
extdirs="${ext.j2se.14.classpath}" |
|
classpathref="tools.classpath" |
|
> |
|
<src path="${tools.src.dir}" /> |
|
</javac> |
|
</target> |
|
|
|
<!-- ========================== --> |
|
<!-- ant module: --> |
|
|
|
<target name="ant.15.compile" depends="init, core.compile" > |
|
<javac destdir="${ant.classes.out.dir}" |
|
debug="${build.debug}" |
|
deprecation="${build.deprecation}" |
|
target="${build.target}" |
|
bootclasspathref="boot.j2se.12.classpath" |
|
extdirs="${ext.j2se.12.classpath}" |
|
classpathref="ant.15.classpath" |
|
> |
|
<src path="${ant.src.ant15.dir}" /> |
|
</javac> |
|
</target> |
|
|
|
<!-- the bulk of ant compilation: --> |
|
<target name="ant.compile" depends="init, core.compile, ant.15.compile" > |
|
<javac destdir="${ant.classes.out.dir}" |
|
debug="${build.debug}" |
|
deprecation="${build.deprecation}" |
|
target="${build.target}" |
|
bootclasspathref="boot.j2se.12.classpath" |
|
extdirs="${ext.j2se.12.classpath}" |
|
classpathref="ant.14.classpath" |
|
> |
|
<src path="${ant.src.ant14.dir}" /> |
|
</javac> |
|
</target> |
|
|
|
|
|
<!-- ============================================================== --> |
|
<!-- packaging targets: --> |
|
<!-- ============================================================== --> |
|
|
|
<target name="package" depends="init, core.package, ant.package" /> |
|
|
|
<!-- ========================== --> |
|
<!-- run tools: --> |
|
|
|
<target name="rtclosure.gen" depends="init, compile" > |
|
<property name="rtclosure.resource" value="com/vladium/emma/rt/RTExitHook.closure" /> |
|
<property name="rtclosure.classpath" refid="core.classpath" /> |
|
|
|
<java classname="com.vladium.tools.ClassDep" |
|
classpathref="tools.classpath" |
|
> |
|
<arg value="${rtclosure.classpath}" /> |
|
<arg value="${core.res.out.dir}/${rtclosure.resource}" /> |
|
<arg value="com.vladium.emma.rt.RTExitHook" /> |
|
<arg value="com.vladium.emma.data.CoverageData" /> |
|
</java> |
|
</target> |
|
|
|
<!-- ========================== --> |
|
<!-- core module: --> |
|
|
|
<target name="core.package" depends="init, core.compile, rtclosure.gen" > |
|
<jar jarfile="${out.dir}/${app.short.name}.jar" |
|
manifest="${temp.dir}/MANIFEST.MF" |
|
compress="true" |
|
index="false" |
|
> |
|
<!-- classes: --> |
|
<fileset dir="${core.classes.out.dir}" includes="**/*.class" /> |
|
<!-- classloader resources: --> |
|
<fileset dir="${core.res.dir}" excludes="**/*.exclude" /> |
|
<fileset dir="${core.res.out.dir}" excludes="**/*.exclude" /> |
|
<manifest> |
|
<attribute name="Main-Class" value="${app.short.name}run" /> |
|
</manifest> |
|
</jar> |
|
</target> |
|
|
|
<!-- ========================== --> |
|
<!-- ant module: --> |
|
|
|
<target name="ant.package" depends="init, ant.compile" > |
|
<jar jarfile="${out.dir}/${app.short.name}_ant.jar" |
|
manifest="${temp.dir}/MANIFEST.MF" |
|
compress="true" |
|
index="false" |
|
> |
|
<!-- classes: --> |
|
<fileset dir="${ant.classes.out.dir}" includes="**/*.class" /> |
|
<!-- classloader resources: --> |
|
<fileset dir="${ant.res.dir}" excludes="**/*.exclude" /> |
|
<manifest> |
|
<attribute name="Main-Class" value="com.vladium.${app.short.name}.ANTMain" /> |
|
</manifest> |
|
</jar> |
|
</target> |
|
|
|
<!-- ============================================================== --> |
|
<!-- distribution targets: --> |
|
<!-- ============================================================== --> |
|
|
|
<target name="dist" depends="init, core.dist, ant.dist" /> |
|
|
|
<!-- ========================== --> |
|
<!-- core module: --> |
|
<target name="core.dist" depends="init, core.package" > |
|
<copy file="${out.dir}/${app.short.name}.jar" todir="${dist.dir}" /> |
|
</target> |
|
|
|
<!-- ========================== --> |
|
<!-- ant module: --> |
|
<target name="ant.dist" depends="init, ant.package" > |
|
<copy file="${out.dir}/${app.short.name}_ant.jar" todir="${dist.dir}" /> |
|
</target> |
|
|
|
<!-- ============================================================== --> |
|
<!-- file release targets: --> |
|
<!-- ============================================================== --> |
|
|
|
<target name="publish.release" depends="init, release, publish.property.check, release.lib, release.full, release.src" > |
|
</target> |
|
|
|
<target name="publish.stable" depends="init, stable, publish.property.check, release.lib" > |
|
<fail unless="file.release.label">need ${file.release.label}</fail> |
|
</target> |
|
|
|
<target name="publish.property.check" depends="init" > |
|
<fail unless="file.release.label">property ${file.release.label} must be set</fail> |
|
<fail unless="docs.dist.dir">property ${docs.dist.dir} must be set</fail> |
|
<property name="publish.ok" value="true" /> |
|
</target> |
|
|
|
|
|
<target name="release.lib" depends="init" if="publish.ok" > |
|
<!-- lib distribution: --> |
|
<zip destfile="${release.dir}/${app.short.name}${file.release.prefix}-${file.release.label}-lib.zip" |
|
basedir="${dist.dir}" |
|
includes="*.jar" |
|
/> |
|
</target> |
|
|
|
<target name="release.src" depends="init" if="publish.ok" > |
|
<!-- source files: --> |
|
<zip destfile="${release.dir}/${app.short.name}-${file.release.label}-src.zip" > |
|
<zipfileset prefix="${app.short.name}-${file.release.label}" |
|
dir="${basedir}" |
|
includes="${tools}/**, ${core}/**, ${ant}/**, ${lib}/**" |
|
excludes="*/CVS/*" |
|
/> |
|
<!-- license, build script and instructions, etc: --> |
|
<zipfileset prefix="${app.short.name}-${file.release.label}" |
|
dir="${basedir}" |
|
includes="*.txt, *.xml, *.html, *.properties" |
|
excludes="build.properties" |
|
/> |
|
</zip> |
|
</target> |
|
|
|
<target name="release.full" depends="init" if="publish.ok" > |
|
<zip destfile="${release.dir}/${app.short.name}-${file.release.label}.zip" > |
|
<!-- license: --> |
|
<zipfileset prefix="${app.short.name}-${file.release.label}" |
|
dir="${basedir}/" |
|
includes="cpl*.html" |
|
/> |
|
<!-- examples and related instructions: --> |
|
<zipfileset prefix="${app.short.name}-${file.release.label}" |
|
dir="${basedir}/install/data" |
|
/> |
|
<!-- lib distribution: --> |
|
<zipfileset prefix="${app.short.name}-${file.release.label}/lib" |
|
dir="${dist.dir}" |
|
includes="*.jar" |
|
/> |
|
<!-- doc distribution: --> |
|
<zipfileset prefix="${app.short.name}-${file.release.label}/docs" |
|
dir="${docs.dist.dir}/docs" |
|
/> |
|
</zip> |
|
</target> |
|
|
|
|
|
<!-- ============================================================== --> |
|
<!-- CVS targets: --> |
|
<!-- ============================================================== --> |
|
|
|
<target name="build.cvs.ready" if="cvs.ready.label"> |
|
<cvs failonerror="yes" output="${out.dir}/cvs.txt" error="${out.dir}/cvs.error.txt" |
|
command="-t rtag -r ${cvs.branch.label} -F -a ${cvs.ready.label} ${app.short.name}" /> |
|
</target> |
|
|
|
<target name="build.cvs.unready" if="cvs.ready.label"> |
|
<cvs failonerror="yes" output="${out.dir}/cvs.txt" error="${out.dir}/cvs.error.txt" |
|
command="-t rtag -r ${cvs.branch.label} -d -a ${cvs.ready.label} ${app.short.name}" /> |
|
</target> |
|
|
|
</project> |
|
<!-- ========= END OF FILE ========================================== --> |
|
|
|
|