Paul Duffin | c1dbb44 | 2017-01-20 15:04:28 +0000 | [diff] [blame] | 1 | <project name="hamcrest" default="all"> |
| 2 | |
| 3 | <property name="version" value="SNAPSHOT" description="Version number to use in build files"/> |
| 4 | <property name="haltonfailure" value="true" description="Whether to halt the build if the tests fail"/> |
| 5 | <property name="debug" value="true" description="Whether to build with debug information"/> |
| 6 | <property name="javaversion" value="1.5" description="Java version to target"/> |
| 7 | <tstamp><format property="build.timestamp" pattern="yyyy-MM-dd HH:mm:ss" timezone="GMT"/></tstamp> |
| 8 | <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" classpath="lib/integration/ant-junit-1.8.4.jar"/> |
| 9 | |
| 10 | |
| 11 | <target name="all" depends="clean, bigjar, javadoc" description="Performs clean build, runs tests and packages for distribution"/> |
| 12 | |
| 13 | <target name="clean" description="Clean up all built files"> |
| 14 | <delete dir="build"/> |
| 15 | </target> |
| 16 | |
| 17 | <target name="api" description="Build Hamcrest APIs"> |
| 18 | <path id="cp-hamcrest-api-main" path=""/> |
| 19 | <path id="cp-hamcrest-api-test" path=""/> |
| 20 | <compile-module modulename="hamcrest-api"/> |
| 21 | <jar-module modulename="hamcrest-api"/> |
| 22 | <test-module modulename="hamcrest-api"/> |
| 23 | </target> |
| 24 | |
| 25 | <target name="generator" depends="api" description="Build code generator tool"> |
| 26 | <path id="cp-hamcrest-generator-main" path="lib/generator/qdox-2.0-M2.jar;build/hamcrest-api-${version}.jar"/> |
| 27 | <path id="cp-hamcrest-generator-test" path=""/> |
| 28 | <compile-module modulename="hamcrest-generator"/> |
| 29 | <jar-module modulename="hamcrest-generator"/> |
| 30 | <test-module modulename="hamcrest-generator"/> |
| 31 | |
| 32 | <!-- Include QDox classes in hamcrest-generator.jar using JarJar to place classes under a different package --> |
| 33 | <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="lib/generator/jarjar-1.3.jar"/> |
| 34 | <copy file="build/hamcrest-generator-${version}.jar" tofile="build/hamcrest-generator-${version}-nodep.jar"/> |
| 35 | <jarjar jarfile="build/hamcrest-generator-${version}.jar"> |
| 36 | <zipfileset src="build/hamcrest-generator-${version}-nodep.jar"/> |
| 37 | <zipfileset src="lib/generator/qdox-2.0-M2.jar"/> |
| 38 | <rule pattern="com.thoughtworks.qdox.**" result="org.hamcrest.generator.qdox.@1"/> |
| 39 | </jarjar> |
| 40 | </target> |
| 41 | |
| 42 | <target name="core" depends="generator" description="Build core Hamcrest library"> |
| 43 | <path id="cp-hamcrest-core-main" path="build/hamcrest-api-${version}.jar"/> |
| 44 | <path id="cp-hamcrest-core-test" path=""/> |
| 45 | <compile-module modulename="hamcrest-core"/> |
| 46 | <generate-module-factory modulename="hamcrest-core" configurationfile="hamcrest-core/core-matchers.xml" targetclass="org.hamcrest.CoreMatchers" sources="hamcrest-core/src/main/java"/> |
| 47 | <jar-module modulename="hamcrest-core"/> |
| 48 | <test-module modulename="hamcrest-core"/> |
| 49 | </target> |
| 50 | |
| 51 | <target name="library" depends="core" description="Build library of matchers"> |
| 52 | <path id="cp-hamcrest-library-main" path="build/hamcrest-api-${version}.jar;build/hamcrest-core-${version}.jar"/> |
| 53 | <path id="cp-hamcrest-library-test" path="build/hamcrest-core-${version}-tests.jar"/> |
| 54 | <compile-module modulename="hamcrest-library"/> |
| 55 | <generate-module-factory modulename="hamcrest-library" configurationfile="hamcrest-library/matchers.xml" targetclass="org.hamcrest.Matchers" sources="hamcrest-core/src/main/java,hamcrest-library/src/main/java"/> |
| 56 | <jar-module modulename="hamcrest-library"/> |
| 57 | <test-module modulename="hamcrest-library"/> |
| 58 | </target> |
| 59 | |
| 60 | <target name="integration" depends="library" description="Build integration with external tools"> |
| 61 | <path id="cp-hamcrest-integration-main"> |
| 62 | <fileset file="build/hamcrest-api-${version}.jar"/> |
| 63 | <fileset file="build/hamcrest-core-${version}.jar"/> |
| 64 | <fileset file="build/hamcrest-library-${version}.jar"/> |
| 65 | <fileset dir="lib/integration" includes="**/*.jar"/> |
| 66 | </path> |
| 67 | <path id="cp-hamcrest-integration-test" path="build/hamcrest-core-${version}-tests.jar"/> |
| 68 | <compile-module modulename="hamcrest-integration"/> |
| 69 | <jar-module modulename="hamcrest-integration"/> |
| 70 | <test-module modulename="hamcrest-integration"/> |
| 71 | </target> |
| 72 | |
| 73 | <target name="examples" depends="core, library, integration" description="Build and run unit tests."> |
| 74 | <path id="cp-hamcrest-examples-main"> |
| 75 | <fileset file="build/hamcrest-api-${version}.jar"/> |
| 76 | <fileset file="build/hamcrest-core-${version}.jar"/> |
| 77 | <fileset file="build/hamcrest-library-${version}.jar"/> |
| 78 | <fileset file="build/hamcrest-integration-${version}.jar"/> |
| 79 | <fileset dir="lib/integration" includes="**/*.jar"/> |
| 80 | </path> |
| 81 | <compile-module modulename="hamcrest-examples"/> |
| 82 | <jar-module modulename="hamcrest-examples"/> |
| 83 | </target> |
| 84 | |
| 85 | <target name="bigjar" depends="core,library,integration,generator" description="Build composite jars"> |
| 86 | <!-- Bundle api into core jar --> |
| 87 | <copy todir="build/temp/hamcrest-core-${version}.jar.contents"> |
| 88 | <fileset dir="build/temp/hamcrest-api-${version}.jar.contents"/> |
| 89 | </copy> |
| 90 | <copy todir="build/temp/hamcrest-core-${version}-sources.jar.contents"> |
| 91 | <fileset dir="build/temp/hamcrest-api-${version}-sources.jar.contents"/> |
| 92 | </copy> |
| 93 | <jar-module modulename="hamcrest-core"/> |
| 94 | |
| 95 | <!-- Bundle core, library, integration, and generator into all jar--> |
| 96 | <copy todir="build/temp/hamcrest-all-${version}.jar.contents"> |
| 97 | <fileset dir="build/temp/hamcrest-core-${version}.jar.contents"/> |
| 98 | <fileset dir="build/temp/hamcrest-library-${version}.jar.contents"/> |
| 99 | <fileset dir="build/temp/hamcrest-integration-${version}.jar.contents"/> |
| 100 | <fileset dir="build/temp/hamcrest-generator-${version}.jar.contents"/> |
| 101 | </copy> |
| 102 | <copy todir="build/temp/hamcrest-all-${version}-sources.jar.contents"> |
| 103 | <fileset dir="build/temp/hamcrest-core-${version}-sources.jar.contents"/> |
| 104 | <fileset dir="build/temp/hamcrest-library-${version}-sources.jar.contents"/> |
| 105 | <fileset dir="build/temp/hamcrest-integration-${version}-sources.jar.contents"/> |
| 106 | <fileset dir="build/temp/hamcrest-generator-${version}-sources.jar.contents"/> |
| 107 | </copy> |
| 108 | <path id="cp-hamcrest-all-main"> |
| 109 | <path refid="cp-hamcrest-core-main"/> |
| 110 | <path refid="cp-hamcrest-library-main"/> |
| 111 | <path refid="cp-hamcrest-integration-main"/> |
| 112 | <path refid="cp-hamcrest-generator-main"/> |
| 113 | </path> |
| 114 | <jar-module modulename="hamcrest-all"/> |
| 115 | </target> |
| 116 | |
| 117 | <target name="javadoc" depends="bigjar" description="build javadoc jars"> |
| 118 | <javadoc-module modulename="hamcrest-generator"/> |
| 119 | <javadoc-module modulename="hamcrest-core"/> |
| 120 | <javadoc-module modulename="hamcrest-library"/> |
| 121 | <javadoc-module modulename="hamcrest-integration"/> |
| 122 | <javadoc-module modulename="hamcrest-all"/> |
| 123 | </target> |
| 124 | |
| 125 | <target name="bundle" description="Create a release bundle for deployment to maven central" depends="clean, javadoc"> |
| 126 | <copy todir="build"> |
| 127 | <fileset dir="pom" includes="*.pom"/> |
| 128 | <filterset><filter token="VERSION" value="${version}"/></filterset> |
| 129 | <mapper type="regexp" from="(.*)\.pom" to="\1-${version}.pom"/> |
| 130 | </copy> |
| 131 | |
| 132 | <sign target="hamcrest-parent-${version}.pom"/> |
| 133 | <jar-bundle modulename="hamcrest-parent"/> |
| 134 | |
| 135 | <bundle-module modulename="hamcrest-core"/> |
| 136 | <bundle-module modulename="hamcrest-generator"/> |
| 137 | <bundle-module modulename="hamcrest-library"/> |
| 138 | <bundle-module modulename="hamcrest-integration"/> |
| 139 | <bundle-module modulename="hamcrest-all"/> |
| 140 | </target> |
| 141 | |
| 142 | <macrodef name="make-manifest"> |
| 143 | <attribute name="modulename" description="Name of the module"/> |
| 144 | <sequential> |
| 145 | <mkdir dir="build/temp/@{modulename}-${version}.jar.manifest"/> |
| 146 | <manifest file="build/temp/@{modulename}-${version}.jar.manifest/MANIFEST.MF"> |
| 147 | <attribute name="Implementation-Title" value="@{modulename}"/> |
| 148 | <attribute name="Implementation-Vendor" value="hamcrest.org"/> |
| 149 | <attribute name="Implementation-Version" value="${version}"/> |
| 150 | <attribute name="Built-By" value="${user.name}"/> |
| 151 | <attribute name="Built-Date" value="${build.timestamp}"/> |
| 152 | </manifest> |
| 153 | </sequential> |
| 154 | </macrodef> |
| 155 | |
| 156 | <macrodef name="compile-module"> |
| 157 | <attribute name="modulename" description="Name of the module to jar"/> |
| 158 | <sequential> |
| 159 | <compile-content srcdir="@{modulename}/src/main/java" jarname="@{modulename}-${version}" classpathref="cp-@{modulename}-main" /> |
| 160 | <path id="cp-@{modulename}-test-complete"> |
| 161 | <path path="lib/integration/junit-dep-4.11.jar"/> |
| 162 | <path refid="cp-@{modulename}-main"/> |
| 163 | <path refid="cp-@{modulename}-test"/> |
| 164 | <path path="build/temp/@{modulename}-${version}.jar.contents"/> |
| 165 | </path> |
| 166 | <compile-content srcdir="@{modulename}/src/test/java" jarname="@{modulename}-${version}-tests" classpathref="cp-@{modulename}-test-complete" /> |
| 167 | </sequential> |
| 168 | </macrodef> |
| 169 | |
| 170 | <macrodef name="compile-content"> |
| 171 | <attribute name="srcdir"/> |
| 172 | <attribute name="jarname" description="Name of the jar whose content is being compiled (without .jar suffix)"/> |
| 173 | <attribute name="classpathref"/> |
| 174 | <sequential> |
| 175 | <mkdir dir="build/temp/@{jarname}-sources.jar.contents"/> |
| 176 | <copy failonerror="false" todir="build/temp/@{jarname}-sources.jar.contents"> |
| 177 | <fileset dir="@{srcdir}"/> |
| 178 | </copy> |
| 179 | <mkdir dir="build/temp/@{jarname}.jar.contents"/> |
| 180 | <javac srcdir="build/temp/@{jarname}-sources.jar.contents" |
| 181 | destdir="build/temp/@{jarname}.jar.contents" |
| 182 | debug="${debug}" source="${javaversion}" target="${javaversion}" includeantruntime="false"> |
| 183 | <classpath refid="@{classpathref}"/> |
| 184 | </javac> |
| 185 | </sequential> |
| 186 | </macrodef> |
| 187 | |
| 188 | <macrodef name="jar-module"> |
| 189 | <attribute name="modulename" description="Name of the module to jar"/> |
| 190 | <sequential> |
| 191 | <make-manifest modulename="@{modulename}"/> |
| 192 | <jar-module-component modulename="@{modulename}"/> |
| 193 | <jar-module-component modulename="@{modulename}" suffix="-tests"/> |
| 194 | <jar-module-component modulename="@{modulename}" suffix="-sources"/> |
| 195 | </sequential> |
| 196 | </macrodef> |
| 197 | |
| 198 | <macrodef name="jar-module-component"> |
| 199 | <attribute name="modulename" description="Name of the module to jar"/> |
| 200 | <attribute name="suffix" default="" description="Name of the module to jar"/> |
| 201 | <sequential> |
| 202 | <copy file="LICENSE.txt" todir="build/temp/@{modulename}-${version}@{suffix}.jar.contents/META-INF"/> |
| 203 | <jar jarfile="build/@{modulename}-${version}@{suffix}.jar" manifest="build/temp/@{modulename}-${version}.jar.manifest/MANIFEST.MF"> |
| 204 | <fileset dir="build/temp/@{modulename}-${version}@{suffix}.jar.contents"/> |
| 205 | </jar> |
| 206 | </sequential> |
| 207 | </macrodef> |
| 208 | |
| 209 | <macrodef name="generate-module-factory" description="Generate one class with all static imports"> |
| 210 | <attribute name="modulename" description="Name of the module to jar"/> |
| 211 | <attribute name="configurationfile" description="xml configuration file"/> |
| 212 | <attribute name="targetclass" description="factory class to generate"/> |
| 213 | <attribute name="sources" description="comma-separated source directories"/> |
| 214 | <sequential> |
| 215 | <mkdir dir="build/temp/@{modulename}/generated-code"/> |
| 216 | <java classname="org.hamcrest.generator.config.XmlConfigurator" fork="yes" failonerror="yes"> |
| 217 | <classpath path="build/hamcrest-generator-${version}.jar"/> |
| 218 | <classpath refid="cp-@{modulename}-main"/> |
| 219 | <classpath path="build/temp/@{modulename}-${version}.jar.contents"/> |
| 220 | <arg value="@{configurationfile}"/> |
| 221 | <arg value="@{sources}"/> |
| 222 | <arg value="@{targetclass}"/> |
| 223 | <arg value="build/temp/@{modulename}/generated-code"/> |
| 224 | </java> |
| 225 | |
| 226 | <copy todir="build/temp/@{modulename}-${version}-sources.jar.contents"> |
| 227 | <fileset dir="build/temp/@{modulename}/generated-code"/> |
| 228 | </copy> |
| 229 | <compile-module modulename="@{modulename}"/> |
| 230 | </sequential> |
| 231 | </macrodef> |
| 232 | |
| 233 | <macrodef name="test-module" description="run unit tests."> |
| 234 | <attribute name="modulename" description="Name of the module to test"/> |
| 235 | <sequential> |
| 236 | <mkdir dir="build/temp/@{modulename}/test-wrk"/> |
| 237 | <junit printsummary="no" forkmode="once" tempdir="build/temp/@{modulename}/test-wrk" haltonfailure="${haltonfailure}" dir="@{modulename}"> |
| 238 | <formatter type="brief" usefile="no"/> |
| 239 | <classpath refid="cp-@{modulename}-test-complete"/> |
| 240 | <classpath path="build/@{modulename}-${version}-tests.jar"/> |
| 241 | <batchtest fork="yes" todir="${build.dir}/testreport"> |
| 242 | <zipfileset src="build/@{modulename}-${version}-tests.jar"> |
| 243 | <include name="org/hamcrest/**/*Test.class"/> |
| 244 | <exclude name="**/Abstract*.class"/> |
| 245 | </zipfileset> |
| 246 | </batchtest> |
| 247 | </junit> |
| 248 | </sequential> |
| 249 | </macrodef> |
| 250 | |
| 251 | <macrodef name="javadoc-module" description="Generate javadoc for a module and build a Jar"> |
| 252 | <attribute name="modulename" description="Name of the module to document"/> |
| 253 | <sequential> |
| 254 | <javadoc packagenames="org.hamcrest.*" sourcepath="build/temp/@{modulename}-${version}-sources.jar.contents" |
| 255 | destdir="build/temp/@{modulename}-${version}-javadoc.jar.contents" author="true" version="true" |
| 256 | use="true" windowtitle="Hamcrest" source="${javaversion}" failonerror="yes" defaultexcludes="yes"> |
| 257 | <classpath refid="cp-@{modulename}-main"/> |
| 258 | </javadoc> |
| 259 | <jar-module-component modulename="@{modulename}" suffix="-javadoc"/> |
| 260 | </sequential> |
| 261 | </macrodef> |
| 262 | |
| 263 | <macrodef name="bundle-module" description="Generate maven bundle jar for a module"> |
| 264 | <attribute name="modulename" description="Name of the module to bundle"/> |
| 265 | <sequential> |
| 266 | <sign target="@{modulename}-${version}.pom"/> |
| 267 | <sign target="@{modulename}-${version}.jar"/> |
| 268 | <sign target="@{modulename}-${version}-javadoc.jar"/> |
| 269 | <sign target="@{modulename}-${version}-sources.jar"/> |
| 270 | <jar-bundle modulename="@{modulename}"/> |
| 271 | </sequential> |
| 272 | </macrodef> |
| 273 | |
| 274 | <macrodef name="jar-bundle" description="Jar maven bundle contents"> |
| 275 | <attribute name="modulename" description="Name of the module to create bundle jar for"/> |
| 276 | <sequential> |
| 277 | <jar destfile="build/maven-bundle-@{modulename}.jar"> |
| 278 | <fileset dir="build"><include name="@{modulename}-${version}*"/></fileset> |
| 279 | </jar> |
| 280 | </sequential> |
| 281 | </macrodef> |
| 282 | |
| 283 | <macrodef name="sign" description="Sign a file with a gpg key"> |
| 284 | <attribute name="target" description="Name of the resource to sign"/> |
| 285 | <sequential> |
| 286 | <exec executable="gpg" dir="build"><arg value="-ab"/><arg value="@{target}"/></exec> |
| 287 | </sequential> |
| 288 | </macrodef> |
| 289 | </project> |