1<?xml version="1.0"?> 2<!-- ============= [build file for ANT v1.5.x] ====================== --> 3<!DOCTYPE project 4[ 5 <!ENTITY dependencies SYSTEM "dependencies.xml" > 6]> 7 8<project name="emma" default="build" basedir="." > 9 <!-- $Id: build.xml,v 1.2.2.3 2005/06/13 00:20:55 vlad_r Exp $ --> 10 <property name="app.short.name" value="${ant.project.name}" /> 11 <property name="app.project.start.date" value="2001/02/01" /> 12 13 <!-- TODO: build log --> 14 15 <!-- ============================================================== --> 16 17 <!-- pull in the OS environment variables; an OS env variable VAR can be used as ${env.VAR}: --> 18 <property environment="env" /> 19 20 <!-- ============================================================== --> 21 <!-- build branch properties and local customization overrides: --> 22 23 <!-- first, load the official build settings file: --> 24 <property file="build.properties" /> 25 26 <!-- next, load the CVS-versioned release/branch properties file: --> 27 <property file="release.properties" /> 28 29 <!-- next, load an optional global properties file: --> 30 <property file="${env.ANT_BLDENV}/ant.properties" /> 31 32 <!-- ============================================================== --> 33 <!-- global compiler settings: --> 34 35 <property name="build.debug" value="on" /> <!-- default for a release build is "on" --> 36 <property name="build.deprecation" value="off" /> 37 <property name="build.compiler" value="modern" /> 38 <property name="build.sysclasspath" value="ignore" /> 39 <property name="build.target" value="1.2" /> <!-- all .class files are stamped as compatible with 1.2 JVMs: --> 40 41 <!-- ============================================================== --> 42 <!-- main/default build target: --> 43 44 <target name="build" depends="dist" 45 description="-> full build [without 'clean']" 46 /> 47 48 <!-- helper build subtargets: --> 49 50 <target name="build.core.compile" depends="core.compile" 51 description="-> re-compiles updated core sources [no 'clean']" 52 /> 53 <target name="build.core.package" depends="core.package" 54 description="-> re-packages core classes [no 'clean']" 55 /> 56 57 <!-- build modifier targets: --> 58 59 <target name="official" 60 description="-> switches 'build' into official, CVS-aware mode" > 61 <property name="build.is.official" value="yes" /> 62 </target> 63 64 <target name="release" 65 description="-> [RELEASE]" > 66 <property name="build.is.on.a.branch" value="yes" /> 67 <property name="app.build.release.tag" value="" /> <!-- no tag means official release --> 68 <property name="file.release.prefix" value="" /> 69 <property name="cvs.ready.label.prefix" value="RELEASE" /> 70 </target> 71 72 <target name="stable" 73 description="-> [STABLE]" > 74 <property name="app.build.release.tag" value=" (stable)" /> 75 <property name="file.release.prefix" value="-stable" /> 76 <property name="cvs.ready.label.prefix" value="STABLE" /> 77 </target> 78 79 <!-- ============================================================== --> 80 <!-- init targets: --> 81 <!-- ============================================================== --> 82 83 <!-- static (checked-in) build structure: --> 84 <property file="module.dirs.properties" /> 85 86 <!-- work (created by the build) build structure: --> 87 <property file="work.dirs.properties" /> 88 89 <target name="init.work.dirs" > 90 <mkdir dir="${out.dir}" /> 91 <mkdir dir="${dist.dir}" /> 92 <mkdir dir="${release.dir}" /> 93 <mkdir dir="${temp.dir}" /> 94 95 <mkdir dir="${tools.classes.out.dir}" /> 96 97 <mkdir dir="${core.classes.out.dir}" /> 98 <mkdir dir="${core.srcgen.out.dir}" /> 99 <mkdir dir="${core.res.out.dir}" /> 100 101 <mkdir dir="${ant.classes.out.dir}" /> 102 </target> 103 104 <target name="init" depends="init.work.dirs"> 105 <!-- NOTE: the official build machine sets these explicitly, 106 these unofficial defaults are provided for private builds only: --> 107 <property name="build.target.j2se.14.home" value="${java.home}" /> 108 <property name="build.target.j2se.12.home" value="${build.target.j2se.14.home}" /> 109 <property name="build.target.j2se.13.home" value="${build.target.j2se.14.home}" /> 110 111 <property name="build.target.ant.15.home" value="${env.ANT_HOME}" /> 112 <property name="build.target.ant.14.home" value="${build.target.ant.15.home}" /> 113 114 115 <!-- verify that we have J2SE 1.4+: --> 116 <available property="j2se.is.14+" classname="java.lang.CharSequence" /> 117 <fail unless="j2se.is.14+">location [${build.target.j2se.14.home}] does not specify J2SE 1.4+</fail> 118 119 <available file="${temp.dir}/.ready.build.stamp" type="file" property="build.is.dirty" value="yes" /> 120 121 <!-- include dependencies.xml (a dynamic include by design): --> 122 &dependencies; 123 124 <echo message="ANT version: ${ant.version}" /> 125 <echo message="JDK version: ${ant.java.version}" /> 126 <echo message="build debug flag: ${build.debug}" /> 127 </target> 128 129 <!-- ============================================================== --> 130 <!-- support targets: --> 131 <!-- ============================================================== --> 132 133 <target name="clean" depends="clean.out, clean.dist" description="-> complete clean (output + distribution)" /> 134 135 <target name="clean.out" description="-> output clean" > 136 <delete dir="${out.dir}" /> 137 </target> 138 139 <target name="clean.dist" description="-> distribution clean" > 140 <delete dir="${dist.dir}"/> 141 <delete dir="${release.dir}"/> 142 </target> 143 144 145 <target name="timestamp" depends="init, -timestamp.1, -timestamp.2, -timestamp.3, -timestamp.4, -timestamp.5"> 146 </target> 147 148 <target name="-timestamp.1" depends="init" unless="build.is.dirty" > 149 <java classname="com.vladium.util.version.VersionStampTool" 150 classpathref="lib.internal.classpath" 151 output="${temp.dir}/.ready.build.stamp" 152 append="no" 153 > 154 <arg value="-start" /> 155 <arg value="${app.project.start.date}" /> 156 <arg value="-format" /> 157 <arg value="~F~" /> 158 </java> 159 <java classname="com.vladium.util.version.VersionStampTool" 160 classpathref="lib.internal.classpath" 161 output="${temp.dir}/timestamp.properties" 162 append="no" 163 > 164 <arg value="-start" /> 165 <arg value="${app.project.start.date}" /> 166 <arg value="-fend" /> 167 <arg value="${temp.dir}/.ready.build.stamp" /> 168 <arg value="-format" /> 169 <arg value="app.build.id=${app.build.id.format}\napp.build.date=${app.build.date.format}" /> 170 </java> 171 <!-- TODO: this is ugly and breaks private builds (constant appending is bad any way): --> 172 <!-- <echo message="file.release.prefix=${file.release.prefix}" file="${temp.dir}/timestamp.properties" append="yes" /> --> 173 </target> 174 175 <target name="-timestamp.2" depends="init" > 176 <property file="${temp.dir}/timestamp.properties" /> 177 178 <!-- private/Eclipse build defaults: --> 179 <property name="app.build.release.tag" value=" (unsupported private build)" /> 180 <property name="app.bug.report.link" value="this private build is unsupported" /> 181 <property name="file.release.prefix" value="-private" /> 182 183 <property name="file.release.label" value="${app.major.version}.${app.minor.version}.${app.build.id}" /> 184 <echo message="build id: ${file.release.label}${app.build.release.tag}" /> 185 </target> 186 187 <target name="-timestamp.2a" depends="init" if="build.is.on.a.branch" > 188 <property name="cvs.branch.label" value="BRANCH_${app.major.version}_${app.minor.version}" /> 189 </target> 190 191 <target name="-timestamp.3" depends="init, -timestamp.2a" if="build.is.official" > 192 <property name="cvs.ready.label" value="${cvs.ready.label.prefix}_${app.major.version}_${app.minor.version}_${app.build.id}" /> 193 <property name="cvs.branch.label" value="HEAD" /> <!-- default to a trunk/stable build --> 194 <echo message="CVS branch label: ${cvs.branch.label}" /> 195 <echo message="release version (CVS ready label): ${cvs.ready.label}" /> 196 </target> 197 198 <target name="-timestamp.4" depends="init, build.cvs.ready" if="build.is.official" > 199 </target> 200 201 <target name="-timestamp.5" depends="init" unless="build.is.dirty" > 202 <copy overwrite="yes" todir="${core.srcgen.out.dir}" > 203 <fileset dir="${core.data.dir}" includes="**/*.java" /> 204 <filterset> 205 <filter token="APP_MAJOR_VERSION" value='*/ ${app.major.version}; // ' /> 206 <filter token="APP_MINOR_VERSION" value='*/ ${app.minor.version}; // ' /> 207 <filter token="APP_BUILD_ID" value='*/ ${app.build.id}; // ' /> 208 <filter token="APP_BUILD_RELEASE_TAG" value='*/ "${app.build.release.tag}"; // ' /> 209 <filter token="APP_BUILD_DATE" value='*/ "${app.build.date}"; // ' /> 210 <filter token="APP_BUG_REPORT_LINK" value='*/ "${app.bug.report.link}"; // ' /> 211 <filter token="APP_HOME_SITE_LINK" value='*/ "${app.home.site.link}"; // ' /> 212 </filterset> 213 </copy> 214 <copy overwrite="yes" file="${core.data.dir}/MANIFEST.MF" todir="${temp.dir}" > 215 <filterset> 216 <filter token="JDK_ID" value="JDK_${ant.java.version}" /> 217 <filter token="BUILD_USER_NAME" value="${user.name} on ${os.name}:${os.version}:${os.arch}" /> 218 219 <filter token="APP_NAME" value="${app.short.name}" /> 220 <filter token="APP_MAJOR_VERSION" value="${app.major.version}" /> 221 <filter token="APP_MINOR_VERSION" value="${app.minor.version}" /> 222 <filter token="APP_BUILD_ID" value="${app.build.id}" /> 223 <filter token="APP_BUILD_RELEASE_TAG" value="${app.build.release.tag}" /> 224 <filter token="APP_BUILD_DATE" value="${app.build.date}" /> 225 <filter token="APP_BUG_REPORT_LINK" value="${app.bug.report.link}" /> 226 <filter token="APP_HOME_SITE_LINK" value="${app.home.site.link}" /> 227 </filterset> 228 </copy> 229 </target> 230 231 <target name="-pre-compile" depends="init, timestamp" > 232 </target> 233 234 <!-- ============================================================== --> 235 <!-- compilation targets: --> 236 <!-- ============================================================== --> 237 238 <target name="compile" depends="init, core.compile, ant.compile, tools.compile" /> 239 240 <!-- ========================== --> 241 <!-- core module: --> 242 243 <target name="core.bootstrap.compile" depends="init, -pre-compile" > 244 <javac destdir="${core.classes.out.dir}" 245 debug="${build.debug}" 246 deprecation="${build.deprecation}" 247 target="${build.target}" 248 bootclasspathref="boot.j2se.12.classpath" 249 extdirs="${ext.j2se.12.classpath}" 250 classpathref="core.classpath" 251 > 252 <!-- include IAppVersion.java: --> 253 <src path="${core.srcgen.out.dir}" /> 254 255 <!-- classes used by core.src.java12.dir sources: --> 256 <src path="${core.src.java12.dir}" /> 257 <include name="**/util/Property.java" /> 258 <include name="**/IAppConstants.java" /> 259 </javac> 260 </target> 261 262 <target name="core.java14.compile" depends="init, core.bootstrap.compile" > 263 <javac destdir="${core.classes.out.dir}" 264 debug="${build.debug}" 265 deprecation="${build.deprecation}" 266 target="${build.target}" 267 bootclasspathref="boot.j2se.14.classpath" 268 extdirs="${ext.j2se.14.classpath}" 269 classpathref="core.classpath" 270 > 271 <src path="${core.src.java14.dir}" /> 272 </javac> 273 </target> 274 275 <target name="core.java13.compile" depends="init, core.java14.compile" > 276 <javac destdir="${core.classes.out.dir}" 277 debug="${build.debug}" 278 deprecation="${build.deprecation}" 279 target="${build.target}" 280 bootclasspathref="boot.j2se.13.classpath" 281 extdirs="${ext.j2se.13.classpath}" 282 classpathref="core.classpath" 283 > 284 <src path="${core.src.java13.dir}" /> 285 </javac> 286 </target> 287 288 <!-- the bulk of core compilation: --> 289 <target name="core.compile" depends="init, core.java13.compile" > 290 <javac destdir="${core.classes.out.dir}" 291 debug="${build.debug}" 292 deprecation="${build.deprecation}" 293 target="${build.target}" 294 bootclasspathref="boot.j2se.12.classpath" 295 extdirs="${ext.j2se.12.classpath}" 296 classpathref="core.classpath" 297 > 298 <src path="${core.src.java12.dir}" /> 299 <exclude name="**/util/Property.java" /> 300 <exclude name="**/IAppConstants.java" /> 301 </javac> 302 </target> 303 304 <!-- ========================== --> 305 <!-- tools module: --> 306 307 <target name="tools.compile" depends="init, core.compile" > 308 <javac destdir="${tools.classes.out.dir}" 309 debug="${build.debug}" 310 deprecation="${build.deprecation}" 311 target="${build.target}" 312 bootclasspathref="boot.j2se.14.classpath" 313 extdirs="${ext.j2se.14.classpath}" 314 classpathref="tools.classpath" 315 > 316 <src path="${tools.src.dir}" /> 317 </javac> 318 </target> 319 320 <!-- ========================== --> 321 <!-- ant module: --> 322 323 <target name="ant.15.compile" depends="init, core.compile" > 324 <javac destdir="${ant.classes.out.dir}" 325 debug="${build.debug}" 326 deprecation="${build.deprecation}" 327 target="${build.target}" 328 bootclasspathref="boot.j2se.12.classpath" 329 extdirs="${ext.j2se.12.classpath}" 330 classpathref="ant.15.classpath" 331 > 332 <src path="${ant.src.ant15.dir}" /> 333 </javac> 334 </target> 335 336 <!-- the bulk of ant compilation: --> 337 <target name="ant.compile" depends="init, core.compile, ant.15.compile" > 338 <javac destdir="${ant.classes.out.dir}" 339 debug="${build.debug}" 340 deprecation="${build.deprecation}" 341 target="${build.target}" 342 bootclasspathref="boot.j2se.12.classpath" 343 extdirs="${ext.j2se.12.classpath}" 344 classpathref="ant.14.classpath" 345 > 346 <src path="${ant.src.ant14.dir}" /> 347 </javac> 348 </target> 349 350 351 <!-- ============================================================== --> 352 <!-- packaging targets: --> 353 <!-- ============================================================== --> 354 355 <target name="package" depends="init, core.package, ant.package" /> 356 357 <!-- ========================== --> 358 <!-- run tools: --> 359 360 <target name="rtclosure.gen" depends="init, compile" > 361 <property name="rtclosure.resource" value="com/vladium/emma/rt/RTExitHook.closure" /> 362 <property name="rtclosure.classpath" refid="core.classpath" /> 363 364 <java classname="com.vladium.tools.ClassDep" 365 classpathref="tools.classpath" 366 > 367 <arg value="${rtclosure.classpath}" /> 368 <arg value="${core.res.out.dir}/${rtclosure.resource}" /> 369 <arg value="com.vladium.emma.rt.RTExitHook" /> 370 <arg value="com.vladium.emma.data.CoverageData" /> 371 </java> 372 </target> 373 374 <!-- ========================== --> 375 <!-- core module: --> 376 377 <target name="core.package" depends="init, core.compile, rtclosure.gen" > 378 <jar jarfile="${out.dir}/${app.short.name}.jar" 379 manifest="${temp.dir}/MANIFEST.MF" 380 compress="true" 381 index="false" 382 > 383 <!-- classes: --> 384 <fileset dir="${core.classes.out.dir}" includes="**/*.class" /> 385 <!-- classloader resources: --> 386 <fileset dir="${core.res.dir}" excludes="**/*.exclude" /> 387 <fileset dir="${core.res.out.dir}" excludes="**/*.exclude" /> 388 <manifest> 389 <attribute name="Main-Class" value="${app.short.name}run" /> 390 </manifest> 391 </jar> 392 </target> 393 394 <!-- ========================== --> 395 <!-- ant module: --> 396 397 <target name="ant.package" depends="init, ant.compile" > 398 <jar jarfile="${out.dir}/${app.short.name}_ant.jar" 399 manifest="${temp.dir}/MANIFEST.MF" 400 compress="true" 401 index="false" 402 > 403 <!-- classes: --> 404 <fileset dir="${ant.classes.out.dir}" includes="**/*.class" /> 405 <!-- classloader resources: --> 406 <fileset dir="${ant.res.dir}" excludes="**/*.exclude" /> 407 <manifest> 408 <attribute name="Main-Class" value="com.vladium.${app.short.name}.ANTMain" /> 409 </manifest> 410 </jar> 411 </target> 412 413 <!-- ============================================================== --> 414 <!-- distribution targets: --> 415 <!-- ============================================================== --> 416 417 <target name="dist" depends="init, core.dist, ant.dist" /> 418 419 <!-- ========================== --> 420 <!-- core module: --> 421 <target name="core.dist" depends="init, core.package" > 422 <copy file="${out.dir}/${app.short.name}.jar" todir="${dist.dir}" /> 423 </target> 424 425 <!-- ========================== --> 426 <!-- ant module: --> 427 <target name="ant.dist" depends="init, ant.package" > 428 <copy file="${out.dir}/${app.short.name}_ant.jar" todir="${dist.dir}" /> 429 </target> 430 431 <!-- ============================================================== --> 432 <!-- file release targets: --> 433 <!-- ============================================================== --> 434 435 <target name="publish.release" depends="init, release, publish.property.check, release.lib, release.full, release.src" > 436 </target> 437 438 <target name="publish.stable" depends="init, stable, publish.property.check, release.lib" > 439 <fail unless="file.release.label">need ${file.release.label}</fail> 440 </target> 441 442 <target name="publish.property.check" depends="init" > 443 <fail unless="file.release.label">property ${file.release.label} must be set</fail> 444 <fail unless="docs.dist.dir">property ${docs.dist.dir} must be set</fail> 445 <property name="publish.ok" value="true" /> 446 </target> 447 448 449 <target name="release.lib" depends="init" if="publish.ok" > 450 <!-- lib distribution: --> 451 <zip destfile="${release.dir}/${app.short.name}${file.release.prefix}-${file.release.label}-lib.zip" 452 basedir="${dist.dir}" 453 includes="*.jar" 454 /> 455 </target> 456 457 <target name="release.src" depends="init" if="publish.ok" > 458 <!-- source files: --> 459 <zip destfile="${release.dir}/${app.short.name}-${file.release.label}-src.zip" > 460 <zipfileset prefix="${app.short.name}-${file.release.label}" 461 dir="${basedir}" 462 includes="${tools}/**, ${core}/**, ${ant}/**, ${lib}/**" 463 excludes="*/CVS/*" 464 /> 465 <!-- license, build script and instructions, etc: --> 466 <zipfileset prefix="${app.short.name}-${file.release.label}" 467 dir="${basedir}" 468 includes="*.txt, *.xml, *.html, *.properties" 469 excludes="build.properties" 470 /> 471 </zip> 472 </target> 473 474 <target name="release.full" depends="init" if="publish.ok" > 475 <zip destfile="${release.dir}/${app.short.name}-${file.release.label}.zip" > 476 <!-- license: --> 477 <zipfileset prefix="${app.short.name}-${file.release.label}" 478 dir="${basedir}/" 479 includes="cpl*.html" 480 /> 481 <!-- examples and related instructions: --> 482 <zipfileset prefix="${app.short.name}-${file.release.label}" 483 dir="${basedir}/install/data" 484 /> 485 <!-- lib distribution: --> 486 <zipfileset prefix="${app.short.name}-${file.release.label}/lib" 487 dir="${dist.dir}" 488 includes="*.jar" 489 /> 490 <!-- doc distribution: --> 491 <zipfileset prefix="${app.short.name}-${file.release.label}/docs" 492 dir="${docs.dist.dir}/docs" 493 /> 494 </zip> 495 </target> 496 497 498 <!-- ============================================================== --> 499 <!-- CVS targets: --> 500 <!-- ============================================================== --> 501 502 <target name="build.cvs.ready" if="cvs.ready.label"> 503 <cvs failonerror="yes" output="${out.dir}/cvs.txt" error="${out.dir}/cvs.error.txt" 504 command="-t rtag -r ${cvs.branch.label} -F -a ${cvs.ready.label} ${app.short.name}" /> 505 </target> 506 507 <target name="build.cvs.unready" if="cvs.ready.label"> 508 <cvs failonerror="yes" output="${out.dir}/cvs.txt" error="${out.dir}/cvs.error.txt" 509 command="-t rtag -r ${cvs.branch.label} -d -a ${cvs.ready.label} ${app.short.name}" /> 510 </target> 511 512</project> 513<!-- ========= END OF FILE ========================================== --> 514 515