Source

Cassandra / build.xml

Full commit
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
 ~ 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.
 -->
<project basedir="." default="build" name="apache-cassandra-incubating">
    <property environment="env"/>
    <property file="build.properties" />
    <property name="debuglevel" value="source,lines,vars"/>

    <property name="basedir" value="."/>
    <property name="build.src" value="${basedir}/src/java"/>
    <property name="build.src.gen-java" value="${basedir}/src/gen-java"/>
    <property name="build.lib" value="${basedir}/lib"/>
    <property name="build.dir" value="${basedir}/build"/>
    <property name="build.test.dir" value="${build.dir}/test"/>
    <property name="build.classes" value="${build.dir}/classes"/>
    <property name="javadoc.dir" value="${build.dir}/javadoc"/>
    <property name="interface.dir" value="${basedir}/interface"/>
    <property name="interface.src.dir" value="${interface.dir}/gen-java"/>
    <property name="test.dir" value="${basedir}/test"/>
    <property name="test.resources" value="${test.dir}/resources"/>
    <property name="test.classes" value="${build.dir}/test/classes"/>
    <property name="test.conf" value="${test.dir}/conf"/>
    <property name="test.name" value="*Test"/>
    <property name="test.unit.src" value="${test.dir}/unit"/>
    <property name="dist.dir" value="${build.dir}/dist"/>
    <property name="version" value="0.5.0"/>
    <property name="final.name" value="${ant.project.name}-${version}"/>

    <!-- http://cobertura.sourceforge.net/ -->
    <property name="cobertura.build.dir" value="${build.dir}/cobertura"/>
    <!-- can't include due to licensing, specify jar via command line -->
    <property name="cobertura.dir" value="/tmp"/>
    <property name="cobertura.report.dir" value="${cobertura.build.dir}/report"/>
    <property name="cobertura.classes.dir" value="${cobertura.build.dir}/classes"/>
    <property name="cobertura.datafile" value="${cobertura.build.dir}/cobertura.ser"/>
	
    <!-- 
	 Add all the dependencies.
    -->
    <path id="cassandra.classpath">
        <pathelement location="${cobertura.classes.dir}"/>
        <pathelement location="${build.classes}"/>
        <fileset dir="${build.lib}">
          <include name="**/*.jar" />
        </fileset>
    </path>

    <!--
	Setup the output directories.
    -->
    <target name="init">
        <mkdir dir="${build.classes}"/>
        <mkdir dir="${test.classes}"/>
        <mkdir dir="${build.src.gen-java}"/>
    </target>

    <target name="clean">
        <delete dir="${build.dir}" />
        <delete dir="${build.src.gen-java}" />
    </target>
    <target depends="clean" name="cleanall"/>

    <!--
       This generates the CLI grammar files from Cli.g
    -->
    <target name="check-gen-cli-grammar">
        <uptodate property="cliUpToDate" 
                srcfile="${build.src}/org/apache/cassandra/cli/Cli.g" 
                targetfile="${build.src.gen-java}/org/apache/cassandra/cli/Cli.tokens"/>
    </target>
 
    <target name="gen-cli-grammar" depends="check-gen-cli-grammar" unless="cliUpToDate">
      <echo>Building Grammar ${build.src}/org/apache/cassandra/cli/Cli.g  ....</echo>
      <java classname="org.antlr.Tool"
            classpath="${build.lib}/antlr-3.1.3.jar"
            fork="true">
         <arg value="${build.src}/org/apache/cassandra/cli/Cli.g" />
         <arg value="-fo" />
         <arg value="${build.src.gen-java}/org/apache/cassandra/cli/" />
      </java> 
    </target>

    <target name="gen-thrift-java">
      <echo>Generating Thrift Java code from ${basedir}/interface/cassandra.thrift ....</echo>
      <exec executable="thrift" dir="${basedir}/interface">
        <arg line="--gen java cassandra.thrift" />
      </exec>
    </target>
    <target name="gen-thrift-py">
      <echo>Generating Thrift Python code from ${basedir}/interface/cassandra.thrift ....</echo>
      <exec executable="thrift" dir="${basedir}/interface">
        <arg line="--gen py cassandra.thrift" />
      </exec>
    </target>

    <!--
	The build target builds all the .class files
    -->
    <target name="build" depends="build-subprojects,build-project"/>
    <target name="build-subprojects"/>
    <target name="codecoverage" depends="cobertura-instrument,test,cobertura-report"/>
    	
    <target depends="init,gen-cli-grammar" name="build-project">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="${build.classes}">
            <src path="${build.src}"/>
            <src path="${build.src.gen-java}"/>
            <src path="${interface.src.dir}"/>
            <classpath refid="cassandra.classpath"/>
        </javac>
    </target>

    <!--
	The jar target makes cassandra.jar output.
    -->
    <target name="jar" depends="build">
      <mkdir dir="${build.classes}/META-INF"/>
      <copy file="LICENSE.txt" tofile="${build.classes}/META-INF/LICENSE.txt"/>
      <copy file="NOTICE.txt" tofile="${build.classes}/META-INF/NOTICE.txt"/>
      <jar jarfile="${build.dir}/${final.name}.jar"
           basedir="${build.classes}">
        <manifest>
        <!-- <section name="org/apache/cassandra/infrastructure"> -->
          <attribute name="Implementation-Title" value="Cassandra"/>
          <attribute name="Implementation-Version" value="${version}"/>
          <attribute name="Implementation-Vendor" value="Apache"/>
          <attribute name="Premain-Class" value="org.apache.cassandra.infrastructure.continuations.CAgent"/>
        <!-- </section> -->
        </manifest>
      </jar>
    </target>

    <!-- creates a release tarball -->	
    <target name="release" depends="jar,javadoc">
      <mkdir dir="${dist.dir}"/>
      <copy todir="${dist.dir}/lib">
        <fileset dir="${build.lib}"/>
        <fileset dir="${build.dir}">
          <include name="*.jar" />
        </fileset>
      </copy>
      <copy todir="${dist.dir}/javadoc">
        <fileset dir="${javadoc.dir}"/>
      </copy>
      <copy todir="${dist.dir}/bin">
        <fileset dir="bin"/>
      </copy>
      <copy todir="${dist.dir}/conf">
        <fileset dir="conf"/>
      </copy>   
      <copy todir="${dist.dir}/interface">
        <fileset dir="interface">
          <include name="**/*.thrift" />
        </fileset>
      </copy>      
      <copy todir="${dist.dir}/">
        <fileset dir="${basedir}">
          <include name="*.txt" />
        </fileset>
      </copy> 
      
      <tar compression="gzip" longfile="gnu"
        destfile="${build.dir}/${final.name}-bin.tar.gz">

        <!-- Everything but bin/ (default mode) -->
        <tarfileset dir="${dist.dir}" prefix="${final.name}">
          <include name="**"/>
          <exclude name="bin/*" />
        </tarfileset>
        <!-- Shell includes in bin/ (default mode) -->
        <tarfileset dir="${dist.dir}" prefix="${final.name}">
          <include name="bin/*.in.sh" />
        </tarfileset>
        <!-- Executable scripts in bin/ -->
        <tarfileset dir="${dist.dir}" prefix="${final.name}" mode="755">
          <include name="bin/*"/>
          <not>
        	<filename name="bin/*.in.sh" />
          </not>
        </tarfileset>	
      </tar>
      <tar compression="gzip" longfile="gnu"
        destfile="${build.dir}/${final.name}-src.tar.gz">

        <tarfileset dir="${basedir}"
          prefix="${final.name}-src">
          <include name="**"/>
          <exclude name="build/**" />
          <exclude name="src/gen-java/**" />
        </tarfileset>
      </tar>
    </target>

  <target name="build-test" depends="build" description="Build the Cassandra classes">
    <javac
     debug="true"
     debuglevel="${debuglevel}"
     destdir="${test.classes}"
    >
      <classpath refid="cassandra.classpath"/>
      <src path="${test.unit.src}"/>
    </javac>

    <!-- Non-java resources needed by the test suite -->    
    <copy todir="${test.classes}">
      <fileset dir="${test.resources}"/>
    </copy>
  </target>

   <target name="test" depends="build-test">
    <echo message="running tests"/>
    <mkdir dir="${build.test.dir}/cassandra"/>
    <mkdir dir="${build.test.dir}/output"/>
    <junit fork="on" failureproperty="testfailed">
      <sysproperty key="net.sourceforge.cobertura.datafile" file="${cobertura.datafile}"/>
      <formatter type="xml" usefile="true"/>
      <formatter type="brief" usefile="false"/>
      <jvmarg value="-Dstorage-config=${test.conf}"/>
      <jvmarg value="-ea"/>
      <classpath>
        <path refid="cassandra.classpath" />
        <pathelement location="${test.classes}"/>
        <pathelement location="${cobertura.dir}/cobertura.jar"/>
        <pathelement location="${test.conf}"/>
      </classpath>
      <batchtest todir="${build.test.dir}/output">
        <fileset dir="${test.classes}" includes="**/${test.name}.class" />
      </batchtest>
    </junit>

    <fail if="testfailed" message="Some test(s) failed."/>
  </target>
	
  <!-- instruments the classes to later create code coverage reports -->
  <target name="cobertura-instrument" depends="build,build-test">
    <taskdef resource="tasks.properties">
      <classpath>
        <fileset dir="${cobertura.dir}">
            <include name="cobertura.jar" />
            <include name="lib/**/*.jar" />
        </fileset>
      </classpath>
    </taskdef>
    
    <delete file="${cobertura.datafile}"/>
    
    <cobertura-instrument todir="${cobertura.classes.dir}" datafile="${cobertura.datafile}">
      <ignore regex="org.apache.log4j.*"/>
      
      <fileset dir="${build.classes}">
        <include name="**/*.class"/>
        <exclude name="**/*Test.class"/>
        <exclude name="**/*TestCase.class"/>
        <exclude name="**/test/*.class"/>
        <exclude name="${cobertura.excludes}"/>
      </fileset>
     
    </cobertura-instrument>
  </target>	

  <!-- create both html and xml code coverage reports -->
  <target name="cobertura-report">
    <cobertura-report format="html" destdir="${cobertura.report.dir}" srcdir="${build.src}"
      datafile="${cobertura.datafile}"/>
    <cobertura-report format="xml" destdir="${cobertura.report.dir}" srcdir="${build.src}"
      datafile="${cobertura.datafile}"/>
  </target>	
	
  <target name="javadoc" depends="init">
    <tstamp>
      <format property="YEAR" pattern="yyyy"/>
    </tstamp>
    <javadoc destdir="${javadoc.dir}" author="true" version="true" use="true"
      windowtitle="${ant.project.name} API" classpathref="cassandra.classpath"
      bottom="Copyright &amp;copy; ${YEAR} The Apache Software Foundation">

      <fileset dir="${build.src}" defaultexcludes="yes">
        <include name="org/apache/**/*.java"/>
      </fileset>
      <fileset dir="${interface.src.dir}" defaultexcludes="yes">
        <include name="org/apache/**/*.java"/>
      </fileset>
    </javadoc>
   </target>

</project>