build.xml revision 230
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync<?xml version="1.0" encoding="UTF-8"?>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync<!--
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncCDDL HEADER START
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncThe contents of this file are subject to the terms of the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncCommon Development and Distribution License (the "License").
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncYou may not use this file except in compliance with the License.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncSee LICENSE.txt included in this distribution for the specific
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynclanguage governing permissions and limitations under the License.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncWhen distributing Covered Code, include this CDDL HEADER in each
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncfile and include the License file at LICENSE.txt.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncIf applicable, add the following below this CDDL HEADER, with the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncfields enclosed by brackets "[]" replaced with your own identifying
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncinformation: Portions Copyright [yyyy] [name of copyright owner]
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncCDDL HEADER END
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncCopyright 2007 Sun Microsystems, Inc. All rights reserved.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncUse is subject to license terms.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync-->
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync<project name="OpenGrok" default="jar" basedir=".">
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <description>Builds, tests, and runs the project opengrok.</description>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <import file="nbproject/build-impl.xml"/>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <import file="nbproject/profiler-build-impl.xml"/> <!--
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync There exist several targets which are by default empty and which can be
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync used for execution of your tasks. These targets are usually executed
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync before and after some main targets. They are:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -pre-init: called before initialization of project properties
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -post-init: called after initialization of project properties
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -pre-compile: called before javac compilation
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -post-compile: called after javac compilation
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -pre-compile-single: called before javac compilation of single file
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -post-compile-single: called after javac compilation of single file
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -pre-compile-test: called before javac compilation of JUnit tests
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -post-compile-test: called after javac compilation of JUnit tests
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -pre-compile-test-single: called before javac compilation of single JUnit test
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -post-compile-test-single: called after javac compilation of single JUunit test
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -pre-jar: called before JAR building
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -post-jar: called after JAR building
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -post-clean: called after cleaning build products
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync (Targets beginning with '-' are not intended to be called on their own.)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Example of inserting an obfuscator after compilation could look like this:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <target name="-post-compile">
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <obfuscate>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <fileset dir="${build.classes.dir}"/>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync </obfuscate>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync </target>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync For list of available properties check the imported
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync nbproject/build-impl.xml file.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Another way to customize the build is by overriding existing main targets.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync The targets of interest are:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -init-macrodef-javac: defines macro for javac compilation
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -init-macrodef-junit: defines macro for junit execution
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -init-macrodef-debug: defines macro for class debugging
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -init-macrodef-java: defines macro for class execution
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -do-jar-with-manifest: JAR building (if you are using a manifest)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -do-jar-without-manifest: JAR building (if you are not using a manifest)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync run: execution of project
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -javadoc-build: Javadoc generation
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync test-report: JUnit report generation
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync An example of overriding the target for project execution could look like this:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <target name="run" depends="opengrok-impl.jar">
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <exec dir="bin" executable="launcher.exe">
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <arg file="${dist.jar}"/>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync </exec>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync </target>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync Notice that the overridden target depends on the jar target and not only on
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync the compile target as the regular run target does. Again, for a list of available
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync properties which you can use, check the target you are overriding in the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync nbproject/build-impl.xml file.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync -->
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <property name="version" value="0.6beta"/>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync <property name="distname" value="opengrok"/>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
<taskdef classname="JFlex.anttask.JFlexTask" name="jflex" classpath="lib/JFlex.jar"/>
<property name="gensrcdir" value="generatedsrc"/>
<target name="jflex">
<mkdir dir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/plain/PlainXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/c/CSymbolTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/c/CXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/java/JavaSymbolTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/java/JavaXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/lisp/LispSymbolTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/lisp/LispXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/plain/PlainFullTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/plain/PlainSymbolTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/plain/PlainXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/plain/XMLXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/sql/SQLXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/document/TroffXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/document/TroffFullTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/sh/ShSymbolTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/analysis/sh/ShXref.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/search/context/HistoryLineTokenizer.lex" destdir="${gensrcdir}"/>
<jflex file="src/org/opensolaris/opengrok/search/context/PlainLineTokenizer.lex" destdir="${gensrcdir}"/>
</target>
<property name="hg" value="hg"/>
<target name="-hg-get-changeset">
<exec executable="${hg}"
failifexecutionfails="no"
outputproperty="changeset">
<arg value="log"/>
<arg value="-r"/>
<arg value="tip"/>
<redirector>
<outputfilterchain>
<filterreader classname="org.apache.tools.ant.filters.LineContainsRegExp">
<param type="regexp" value="^changeset:"/>
</filterreader>
<tokenfilter>
<replaceregex pattern="^changeset:[^:]*:" replace=""/>
</tokenfilter>
</outputfilterchain>
</redirector>
</exec>
</target>
<target name="-update-build-info" depends="-hg-get-changeset">
<mkdir dir="${build.classes.dir}/org/opensolaris/opengrok"/>
<propertyfile
file="${build.classes.dir}/org/opensolaris/opengrok/info.properties">
<entry key="version" value="${version}"/>
<entry key="changeset" value="${changeset}"/>
</propertyfile>
</target>
<target name="-pre-compile" depends="jflex"/>
<target name="-post-clean">
<delete dir="${gensrcdir}"/>
<delete file="${manifest.file}"/>
</target>
<!--
Create an empty manifest file so that nbproject/build-impl.xml
notices that a manifest should be added to the jar file
-->
<target name="-touch-manifest">
<!-- no attributes, main-class and class-path will be added later -->
<manifest file="manifest.mf" mode="replace"/>
</target>
<target name="-pre-init" depends="-touch-manifest"/>
<!--
Initialize a property holding a list of jar files on which
opengrok.jar depends
-->
<target name="-post-init">
<pathconvert property="opengrok.lib.files" pathsep=" ">
<path>
<pathelement path="${javac.classpath}"/>
</path>
<flattenmapper/>
<map from="" to="lib/"/>
</pathconvert>
</target>
<!-- Update the manifest file with a classpath attribute -->
<target name="-update-manifest-classpath">
<manifest file="${manifest.file}" mode="update">
<attribute name="Class-Path" value="${opengrok.lib.files}"/>
</manifest>
</target>
<target name="-pre-jar" depends="-update-manifest-classpath,-update-build-info"/>
<!--
Copy the jars from lib to dist/lib manually if we don't have
the copylibs task from NetBeans
-->
<target name="-copy-lib-without-netbeans"
unless="manifest.available+main.class+mkdist.available">
<copy todir="${dist.dir}">
<fileset dir="." includes="${opengrok.lib.files}"/>
</copy>
</target>
<target name="-post-jar" depends="-copy-lib-without-netbeans">
<war destfile="${dist.war}" webxml="conf/web.xml">
<fileset dir="web"/>
<fileset dir="conf" excludes="web.xml"/>
<lib dir="${dist.dir}" includes="opengrok.jar"/>
<lib dir="${dist.dir}/lib" includes="*.jar" excludes="servlet-api.jar,svn-javahl.jar"/>
</war>
</target>
<target name="package" depends="jar">
<exec os="SunOS" executable="/usr/bin/pkgmk">
<arg line="-o -d build -r . -v ${version} -f pkgdef/prototype"/>
</exec>
<exec os="SunOS" executable="/usr/bin/pkgtrans">
<arg line="-s build /dist/OSOLopengrok-${version}.pkg OSOLopengrok"/>
</exec>
</target>
<target name="dist" depends="jar">
<tar destfile="${dist.dir}/${distname}-${version}.tar.gz"
compression="gzip">
<tarfileset dir="." prefix="${distname}-${version}">
<include name="README.txt"/>
<include name="CHANGES.txt"/>
<include name="LICENSE.txt"/>
<include name="paths.tsv"/>
</tarfileset>
<tarfileset dir="." prefix="${distname}-${version}" mode="755">
<include name="run.sh"/>
<include name="run-quiet.sh"/>
<include name="run.bat"/>
</tarfileset>
<tarfileset dir="doc" prefix="${distname}-${version}">
<include name="EXAMPLE.txt"/>
</tarfileset>
<tarfileset dir="${dist.dir}" prefix="${distname}-${version}">
<include name="opengrok.jar"/>
<include name="source.war"/>
<include name="lib/*"/>
</tarfileset>
</tar>
</target>
<target name="dist-src" depends="init">
<mkdir dir="${dist.dir}"/>
<exec executable="hg">
<arg value="archive"/>
<arg value="-t"/>
<arg value="tgz"/>
<arg value="${dist.dir}/${distname}-${version}-src.tar.gz"/>
</exec>
</target>
</project>