| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. --> |
| |
| <!-- ====================================================================== |
| Build source and lay out results in the required format |
| ====================================================================== --> |
| <project name="build-contribution" default="build" basedir="."> |
| <description> |
| Build contributed source and lay out results in the required format |
| </description> |
| |
| <target name="help"> |
| <echo> |
| Apache Harmony Classlibrary Build |
| |
| Usage: |
| |
| ant build |
| Compiles the java and native code to produce a jdk in |
| "target/hdk/jdk". |
| |
| ant clean |
| Removes all the files generated by a build. |
| |
| ant rebuild |
| Performs a full build - that is 'clean' then 'build'. |
| |
| ant test |
| Runs all the tests. |
| |
| ant doc |
| Generates the javadoc. |
| |
| ant snapshot |
| Produces a archive (tar/zip) of a build. |
| |
| ant fetch-depends |
| Fetches dependencies. Note: Some of Harmony's dependencies are |
| licensed under terms other than the Apache License v2. |
| |
| ant properties |
| Display the common properties that are use in the ant build files. |
| |
| |
| The 'build' and 'test' targets can be configured to only build/test a single |
| module by setting the 'build.module' property. For example, to run the tests for |
| the "luni" module: |
| |
| ant test -Dbuild.module=luni |
| |
| The 'test' target can further be configured to run a single test by setting |
| the 'test.case' property. For example, to run a specific test in the "luni" |
| module: |
| |
| ant test -Dbuild.module=luni -Dtest.case=org.apache.harmony.luni.tests.java.lang.MathTest |
| </echo> |
| </target> |
| |
| <property file="${user.home}/.harmony-classlib.properties" /> |
| |
| <property name="hy.target" location="target" /> |
| <property name="hy.component" value="classlib" /> |
| <property name="hy.module" value="toplevel" /> |
| |
| <fail message="Property 'common.resources' is not defined"> |
| <condition> |
| <not><isset property="common.resources" /></not> |
| </condition> |
| </fail> |
| |
| <mkdir dir="${hy.target}/hdk/build/ant" /> |
| <copy todir="${hy.target}/hdk/build/ant" preservelastmodified="true"> |
| <fileset dir="${common.resources}/make" includes="*.xml"/> |
| </copy> |
| |
| <!-- import properties for snapshot targets --> |
| <import file="${hy.target}/hdk/build/ant/properties.xml" /> |
| <init-hdk/> |
| |
| <property name="build.output" location="${hy.build.top}/java" /> |
| <property name="tests.output" location="${hy.target}/test_report" /> |
| <property name="tests.support.output" location="${hy.build.top}/test" /> |
| <property name="tests.report.dir" value="${tests.output}/html"/> |
| <property name="depends.files" location="depends/files"/> |
| <property name="depends.manifests" location="depends/manifests"/> |
| |
| <import file="${hy.hdk}/build/ant/depends.xml" /> |
| <property file="make/depends.properties" /> |
| |
| <condition property="needs.vme.v3.hack" value="true"> |
| <or> |
| <equals arg1="${hy.platform}" arg2="windows.x86" /> |
| <equals arg1="${hy.platform}" arg2="linux.x86" /> |
| </or> |
| </condition> |
| |
| <propertyset id="toplevel.props"> |
| <propertyref name="hy.target" /> |
| <propertyref name="hy.component" /> |
| <propertyref name="hy.module" /> |
| </propertyset> |
| |
| <!-- ================================ |
| target : rebuild |
| |
| builds with a clean first |
| ================================= --> |
| <target name="rebuild" depends="clean,build" |
| description="Performs a full build - that is 'clean' then 'build'" /> |
| |
| <target name="build" |
| description="Compiles the java, natives and tests to produce a jdk/hdk" |
| depends="-build-java,-build-native,-build-test,-build-modules" /> |
| |
| <target name="clean" |
| depends="-init-hdk-for-clean,-clean-modules,-clean-check, |
| -clean-native,-clean-test" |
| description="Removes all the files generated by a build" /> |
| |
| <target name="-build-java" unless="skip.java.build" |
| depends="-init-hdk,-layout-java" |
| description="Compiles the java code only" > |
| <ensure-javac/> |
| <mkdir dir="${build.output}" /> |
| |
| <hy.javac destdir="${build.output}" |
| includeAntRuntime="no"> |
| |
| <src path="modules/accessibility/src/main/java" /> |
| <src path="modules/annotation/src/main/java" /> |
| <src path="modules/applet/src/main/java" /> |
| <src path="modules/archive/src/main/java" /> |
| <src path="modules/auth/src/main/java/${hy.os.family}" /> |
| <src path="modules/auth/src/main/java/common" /> |
| <src path="modules/awt/src/main/java/${hy.os.family}" /> |
| <src path="modules/awt/src/main/java/common" /> |
| <src path="modules/beans/src/main/java" /> |
| <src path="modules/concurrent/src/main/java" /> |
| <src path="modules/crypto/src/main/java" /> |
| <src path="modules/instrument/src/main/java" /> |
| <src path="modules/imageio/src/main/java" /> |
| <src path="modules/jndi/src/main/java" /> |
| <src path="modules/logging/src/main/java" /> |
| <src path="modules/lang-management/src/main/java" /> |
| <src path="modules/luni-kernel/src/main/java" /> |
| <src path="modules/luni/src/main/java" /> |
| <src path="modules/math/src/main/java" /> |
| <src path="modules/misc/src/main/java" /> |
| <src path="modules/nio/src/main/java/common" /> |
| <src path="modules/nio/src/main/java/${hy.os.family}" /> |
| <src path="modules/nio_char/src/main/java" /> |
| <!-- pack200 uses customized build script and |
| should not be built from top-level build.xml --> |
| <!--src path="modules/pack200/src/main/java" /--> |
| <src path="modules/prefs/src/main/java" /> |
| <src path="modules/print/src/main/java/${hy.os.family}" /> |
| <src path="modules/print/src/main/java/common" /> |
| <src path="modules/regex/src/main/java" /> |
| <src path="modules/rmi/src/main/java" /> |
| <src path="modules/security-kernel/src/main/java" /> |
| <src path="modules/security/src/main/java/${hy.os.family}" /> |
| <src path="modules/security/src/main/java/common" /> |
| <src path="modules/sound/src/main/java" /> |
| <src path="modules/sql/src/main/java" /> |
| <src path="modules/suncompat/src/main/java" /> |
| <src path="modules/swing/src/main/java/${hy.os.family}" /> |
| <src path="modules/swing/src/main/java/common" /> |
| <src path="modules/text/src/main/java" /> |
| <src path="modules/x-net/src/main/java/" /> |
| |
| <classpath> |
| <fileset dir="${hy.jdk}/jre/lib/boot"> |
| <include name="**/*.jar" /> |
| <exclude name="**/*-src.jar" /> |
| </fileset> |
| </classpath> |
| |
| <!-- We need to set some BCP to avoid the compiler picking |
| up the JRE's JARs --> |
| <bootclasspath> |
| <fileset dir="${depends.jars}"> |
| <!-- FIXME: picked mx4j arbitrarily, needs to be non-empty set --> |
| <include name="**/mx4j.jar" /> |
| </fileset> |
| </bootclasspath> |
| </hy.javac> |
| </target> |
| |
| <target name="-build-modules" depends="-svn-info"> |
| <poll-modules target="-build-no-check" /> |
| </target> |
| |
| <target name="-clean-modules"> |
| <poll-modules target="clean" /> |
| </target> |
| |
| <target name="-layout-java" depends="check-depends"> |
| |
| <!-- Create the structure --> |
| <mkdir dir="${hy.jdk}/jre/bin" /> |
| <mkdir dir="${hy.jdk}/jre/lib/boot" /> |
| <mkdir dir="${hy.jdk}/jre/lib/ext" /> |
| <mkdir dir="${hy.jdk}/jre/lib/security" /> |
| |
| <!-- Copy across the required files --> |
| <copy file="LICENSE" todir="${hy.hdk}" verbose="yes" /> |
| <copy file="NOTICE" todir="${hy.hdk}" verbose="yes" /> |
| |
| <!-- Copy across the boot dependency jars --><!-- TOFIX clean these? --> |
| <copy todir="${hy.jdk}/jre/lib/boot"> |
| <fileset dir="${depends.jars}"> |
| <patternset includes="icu4j_4.4.1.1/*.jar" /> |
| </fileset> |
| <fileset dir="${depends.manifests}"/> |
| </copy> |
| |
| <!-- Copy across the extension dependency jars --> |
| <copy tofile="${hy.jdk}/jre/lib/ext/bcprov.jar" verbose="true" |
| flatten="yes" overwrite="true"> |
| <fileset file="${bcprov.jar}" /> |
| </copy> |
| |
| <!-- Copy across the support files --> |
| <copy todir="${hy.jdk}/jre/lib"> |
| <fileset dir="${depends.files}"> |
| <include name="content-types.properties" /> |
| </fileset> |
| </copy> |
| |
| <copy todir="${hy.jdk}/jre/lib/boot"> |
| <fileset dir="${depends.files}"> |
| <include name="bootclasspath.properties" /> |
| </fileset> |
| </copy> |
| <fixcrlf srcdir="${hy.jdk}/jre/lib/boot" |
| includes="bootclasspath.properties" /> |
| |
| <copy todir="${hy.jdk}/jre/lib/security"> |
| <fileset dir="${depends.files}"> |
| <include name="java.policy" /> |
| <include name="java.security" /> |
| </fileset> |
| </copy> |
| |
| <copy todir="${hy.jdk}/jre/lib"> |
| <fileset dir="${depends.files}"> |
| <include name="net.properties" /> |
| </fileset> |
| </copy> |
| |
| <copy todir="${hy.jdk}/jre/lib"> |
| <fileset dir="${depends.files}"> |
| <include name="rowset.properties" /> |
| </fileset> |
| </copy> |
| |
| </target> |
| |
| <target name="-clean-check" unless="skip.java.build" |
| depends="-clean-java-catch-all-test, |
| -clean-java-catch-all, |
| -clean-java-layout" |
| description="Checks that the module clean worked correctly" /> |
| |
| <target name="-clean-java-catch-all-test"> |
| <!-- without this test the pathconvert in the catch all clean |
| target fails --> |
| <available property="catch.all.required" |
| file="${build.output}" type="dir" /> |
| </target> |
| |
| <target name="-clean-java-catch-all" if="catch.all.required"> |
| <fileset id="built.files" dir="${build.output}"> |
| <include name="**/**" /> |
| </fileset> |
| <pathconvert property="built.files.list" |
| refid="built.files" |
| pathsep="${line.separator}" /> |
| <condition property="built.files.exist"> |
| <not> |
| <equals arg1="${built.files.list}" arg2="" /> |
| </not> |
| </condition> |
| |
| <delete includeemptydirs="true" failonerror="false"> |
| <fileset refid="built.files" /> |
| </delete> |
| |
| <condition property="continue"> |
| <equals arg1="${keep.working}" arg2="true" /> |
| </condition> |
| |
| <fail if="built.files.exist" unless="continue"> |
| ... |
| |
| Built files still exist after module clean targets have run. This |
| probably means that one or more patternsets are incomplete. The |
| remaining files are: |
| |
| ${built.files.list} |
| |
| </fail> |
| </target> |
| |
| <target name="-clean-java-layout"> |
| <delete includeemptydirs="true" failonerror="false"> |
| <fileset dir="${hy.jdk}"> |
| <exclude name="jre/bin/default/**" /> |
| <exclude name="jre/bin/**" /> |
| <exclude name="jre/lib/ext/**" /> |
| </fileset> |
| <fileset dir="${hy.hdk}"> |
| <include name="LICENSE" /> |
| <include name="NOTICE" /> |
| </fileset> |
| </delete> |
| </target> |
| |
| <target name="-build-native" unless="skip.native.build" |
| depends="-init-hdk,-svn-info,-layout-natives" |
| description="Compiles the native code only" > |
| |
| <!-- these must be run in a specific order due to dependencies --> |
| <ant dir="modules/portlib" target="-build-native" |
| inheritall="false"> |
| <property name="hy.target" location="${hy.target}"/> |
| <propertyset refid="module.props" /> |
| </ant> |
| |
| <ant dir="modules/luni" target="-build-native-core" |
| inheritall="false"> |
| <property name="hy.target" location="${hy.target}"/> |
| <propertyset refid="module.props" /> |
| </ant> |
| |
| <ant dir="modules/archive" target="-build-native" |
| inheritall="false"> |
| <property name="hy.target" location="${hy.target}"/> |
| <propertyset refid="module.props" /> |
| </ant> |
| |
| <ant dir="modules/luni" target="-build-native-secondary" |
| inheritall="false"> |
| <property name="hy.target" location="${hy.target}"/> |
| <propertyset refid="module.props" /> |
| </ant> |
| </target> |
| |
| <target name="-layout-natives" unless="skip.native.build" |
| depends="check-depends,-layout.windows,-layout.vme.v3.hack" |
| description="Construct the correct directory structure for native binaries"> |
| |
| <!-- Create the target directory structure --> |
| <mkdir dir="${hy.jdk}/jre/bin" /> |
| <mkdir dir="${hy.jdk}/include" /> |
| <mkdir dir="${hy.hdk}/lib"/> |
| |
| <!-- NLS catalog files --> |
| <copy todir="${hy.jdk}/jre/bin" overwrite="yes"> |
| <fileset dir="${depends.files}"> |
| <include name="harmony*.properties" /> |
| </fileset> |
| </copy> |
| |
| </target> |
| |
| <target name="-layout.windows" unless="skip.native.build" |
| if="is.windows"> |
| <!-- workaround until msdll is moved. --> |
| <copy file="${msvcr.dll}" todir="${hy.jdk}/jre/bin" overwrite="yes" /> |
| <copy file="${msvcp.dll}" todir="${hy.jdk}/jre/bin" overwrite="yes" /> |
| </target> |
| |
| <target name="-layout.vme.v3.hack" unless="skip.native.build" |
| if="needs.vme.v3.hack"> |
| <echo>Deploying empty ICU dynamic library stub</echo> |
| <copy todir="${hy.jdk}/jre/bin" verbose="true"> |
| <fileset dir="${depends.files}"> |
| <include name="hyempty.dll" if="is.windows" /> |
| </fileset> |
| <globmapper from="*hyempty.dll" to="*ICUInterface34.dll" /> |
| </copy> |
| <copy todir="${hy.jdk}/jre/bin" verbose="true"> |
| <fileset dir="${depends.files}"> |
| <include name="libhyempty.so" if="is.linux" /> |
| </fileset> |
| <globmapper from="*libhyempty.so" to="*libICUInterface34.so" /> |
| </copy> |
| </target> |
| |
| <target name="-clean-native" unless="skip.native.build" |
| depends="-init-hdk-for-clean" |
| description="Removes the compiled native code" > |
| <delete dir="${hy.hdk}/lib" /> |
| |
| <delete dir="${hy.hdk}/include" /> |
| <delete dir="${hy.hdk}/jdk/include" /> |
| |
| <delete includeemptydirs="true" failonerror="false"> |
| <fileset dir="${hy.jdk}"> |
| <include name="**/bin/java${exe.suffix}" /> |
| <include name="**/bin/javaw${exe.suffix}" /> |
| <include name="**/bin/*${shlib.suffix}*" /> |
| <include name="**/bin/*.pdb" /> |
| <include name="**/bin/harmony*.properties" /> |
| </fileset> |
| </delete> |
| </target> |
| |
| <target name="test" |
| depends="-test-init-hdk,clean-test-output" |
| description="Runs all tests"> |
| <mkdir dir="${tests.output}" /> |
| <ant antfile="${hy.hdk}/build/test/build.xml" |
| inheritall="false" target="test"> |
| <property name="tests.output" value="${tests.output}"/> |
| </ant> |
| </target> |
| |
| <target name="-build-test" unless="skip.test.build" |
| depends="-test-init-hdk,-support-jar" |
| description="Compile and archive all tests" /> |
| |
| <target name="-clean-test" unless="skip.test.build" |
| depends="-init-hdk-for-clean" |
| description="Removes the generated tests" > |
| <delete dir="${tests.support.output}" /> |
| <delete dir="${hy.hdk}/build/test" /> |
| </target> |
| |
| <target name="clean-test-output"> |
| <delete dir="${tests.output}" /> |
| </target> |
| |
| <target name="findbugs" depends="check-depends" |
| description="Runs FindBugs on all modules"> |
| <echo> |
| ======================================== |
| Finding bugs in all class libraries... |
| ======================================== |
| </echo> |
| <poll-modules target="findbugs" /> |
| </target> |
| |
| <!-- ================================= |
| target: doc |
| ================================= --> |
| <target name="doc" |
| description="Generates the javadoc"> |
| <echo> |
| ======================================== |
| Generating HTML using Doxygen... |
| ======================================== |
| </echo> |
| <ant antfile="doc/build.xml" inheritall="false" /> |
| </target> |
| |
| <target name="clean-doc" if="${really.clean.doc}"> |
| <!-- We really shouldn't do this, since svn diff complains |
| with svn: Working copy 'doc/kernel_doc' is missing or not |
| locked if we run it. We shouldn't really clean things |
| that are in the repository. --> |
| <ant antfile="doc/build.xml" inheritall="false" target="clean" /> |
| </target> |
| |
| <!-- ================================= |
| target: -properties |
| ================================= --> |
| <target name="-properties" depends="-svn-info"> |
| <property name="deploy.file.prefix" |
| value="harmony-classlib-r${svn.revision}" /> |
| <property name="deploy.tar" |
| value="${deploy.file.prefix}-${hy.os}-${hy.arch}-snapshot.tar.gz" /> |
| <property name="deploy.zip" |
| value="${deploy.file.prefix}-${hy.os}-${hy.arch}-snapshot.zip" /> |
| </target> |
| |
| <!-- ================================= |
| target: snapshot |
| ================================= --> |
| <target name="snapshot" depends="-snapshot-tar,-snapshot-zip" |
| description="Produce a classlib snapshot tar/zip" /> |
| |
| <!-- ================================= |
| target: snapshot-tar |
| ================================= --> |
| <target name="-snapshot-tar" depends="build, -properties" if="is.unix"> |
| <echo> |
| ======================================== |
| Generating snapshot tar |
| ======================================== |
| </echo> |
| <tar destfile="${deploy.tar}" compression="gzip"> |
| <tarfileset dir="${basedir}" prefix="Harmony"> |
| <include name="LICENSE" /> |
| <include name="NOTICE" /> |
| </tarfileset> |
| <tarfileset dir="${hy.hdk}" prefix="Harmony"> |
| <include name="build/**" /> |
| <include name="include/**" /> |
| <include name="jdk/**" /> |
| <exclude name="jdk/jre/bin/default/**" /> |
| <exclude name="jdk/jre/bin/java" /> |
| <include name="lib/**" /> |
| </tarfileset> |
| <tarfileset dir="${hy.hdk}" prefix="Harmony" mode="755"> |
| <include name="jdk/jre/bin/java" /> |
| </tarfileset> |
| <tarfileset dir="${basedir}/make/resources" |
| includes="README-snapshot.txt" |
| fullpath="Harmony/README"/> |
| </tar> |
| <chksum file="${deploy.tar}" /> |
| <chksum file="${deploy.tar}" type="sha" /> |
| </target> |
| |
| <!-- ================================= |
| target: snapshot-zip |
| ================================= --> |
| <target name="-snapshot-zip" depends="build,-properties" if="is.windows"> |
| <echo> |
| ======================================== |
| Generating snapshot zip |
| ======================================== |
| </echo> |
| <zip destfile="${deploy.zip}"> |
| <zipfileset dir="${basedir}" prefix="Harmony"> |
| <include name="LICENSE" /> |
| <include name="NOTICE" /> |
| </zipfileset> |
| <zipfileset dir="${hy.hdk}" prefix="Harmony"> |
| <include name="build/**" /> |
| <include name="include/**" /> |
| <include name="jdk/**" /> |
| <exclude name="jdk/jre/bin/default/**" /> |
| <exclude name="jdk/jre/bin/java" /> |
| <include name="lib/**" /> |
| </zipfileset> |
| <zipfileset dir="${basedir}/make/resources" |
| includes="README-snapshot.txt" |
| fullpath="Harmony/README.txt"/> |
| </zip> |
| <chksum file="${deploy.zip}" /> |
| <chksum file="${deploy.zip}" type="sha" /> |
| </target> |
| |
| <target name="check-depends" depends="-init-hdk,-check-depends" |
| description="Report on whether the dependencies are met"> |
| <poll-modules target="check-depends" /> |
| </target> |
| |
| <target name="-check-depends" description="Check top-level dependencies"> |
| <ant antfile="make/depends.xml" inheritall="false" target="check"> |
| <propertyset refid="toplevel.props" /> |
| </ant> |
| </target> |
| |
| <target name="fetch-depends" depends="-init-hdk" |
| description="Fetches dependencies. Note: Some of Harmony's dependencies are licensed under terms other than the Apache License v2."> |
| <ant antfile="make/depends.xml" inheritall="false" target="download"> |
| <propertyset refid="toplevel.props" /> |
| </ant> |
| |
| <poll-modules target="fetch-depends" /> |
| </target> |
| |
| <target name="properties" depends="echo" |
| description="Display the properties that are use in the ant build files" |
| /> |
| |
| <!-- test support --> |
| <target name="-support-jar" unless="skip.test.build" |
| depends="-compile-support"> |
| <mkdir dir="${hy.hdk}/build/test" /> |
| <hy.jar.bin destfile="${hy.hdk}/build/test/support.jar" |
| manifest="support/META-INF/MANIFEST.MF"> |
| <fileset dir="${tests.support.output}" /> |
| </hy.jar.bin> |
| <copy todir="${hy.hdk}/build/test"> |
| <fileset dir="${jetty.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| </copy> |
| </target> |
| |
| <target name="-compile-support" unless="skip.test.build" |
| depends="-copy-test-resources,-check-depends" |
| description="Compile the unit test source"> |
| <ensure-javac/> |
| <mkdir dir="${tests.support.output}" /> |
| <hy.javac destdir="${tests.support.output}"> |
| <src path="support/src/test/java" /> |
| <classpath location="${junit.jar}" /> |
| <classpath location="${tests.support.output}" /> |
| <classpath> |
| <fileset dir="${jetty.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| <bootclasspath location="${build.output}" /> |
| <bootclasspath> |
| <fileset dir="${hy.hdk}/jdk/jre/lib/boot"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </bootclasspath> |
| </hy.javac> |
| </target> |
| |
| <target name="-copy-test-resources" unless="skip.test.build" |
| description="Copy non-Java files from test support tree to the support output tree"> |
| <mkdir dir="${tests.support.output}" /> |
| <copy todir="${tests.support.output}" includeemptydirs="false"> |
| <fileset dir="support/src/test/java"> |
| <exclude name="**/*.java" /> |
| </fileset> |
| <fileset file="support/src/test/resources/hyts_Foo.c"/> |
| </copy> |
| <copy file="support/src/test/resources/config/testing.policy" |
| todir="${hy.hdk}/build/test" outputencoding="UTF-8" /> |
| </target> |
| |
| <target name="-test-init-hdk" unless="skip.test.build" |
| depends="-init-hdk"> |
| <copy file="make/test.properties" |
| tofile="${hy.hdk}/build/test/test.properties"/> |
| <copy file="make/run-test.xml" |
| tofile="${hy.hdk}/build/test/build.xml"/> |
| </target> |
| |
| <!-- hdk initialisation --> |
| |
| <target name="-init-hdk"> |
| <init-hdk /> |
| </target> |
| |
| <target name="-init-hdk-for-clean"> |
| <!-- This is currently the same as "-init-hdk" but has |
| a different name since otherwise it would only |
| get called once - before the clean - during a rebuild |
| and not called a second time - before the build. |
| --> |
| <init-hdk /> |
| </target> |
| |
| <macrodef name="chksum"> |
| <attribute name="file" /> |
| <attribute name="type" default="md5" /> |
| <sequential> |
| <checksum property="@{file}.@{type}" file="@{file}" |
| algorithm="@{type}" /> |
| <echo file="@{file}.@{type}" |
| message="${@{file}.@{type}} @{file}${line.separator}" /> |
| </sequential> |
| </macrodef> |
| |
| </project> |
| |