mirror of https://github.com/apache/cassandra
415 lines
16 KiB
XML
415 lines
16 KiB
XML
<?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"
|
|
xmlns:ivy="antlib:org.apache.ivy.ant">
|
|
<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.dir.lib" value="${basedir}/build/lib"/>
|
|
<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.thrift.dir" value="${interface.dir}/thrift"/>
|
|
<property name="interface.avro.dir" value="${interface.dir}/avro/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}"/>
|
|
<property name="ivy.version" value="2.1.0" />
|
|
<property name="ivy.url"
|
|
value="http://repo2.maven.org/maven2/org/apache/ivy/ivy" />
|
|
|
|
<!-- 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"/>
|
|
|
|
<condition property="ivy.jar.exists">
|
|
<available file="${build.dir}/ivy-${ivy.version}.jar" />
|
|
</condition>
|
|
|
|
<condition property="is.source.artifact">
|
|
<available file="${build.src}" type="dir" />
|
|
</condition>
|
|
|
|
<!--
|
|
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>
|
|
<fileset dir="${build.dir.lib}">
|
|
<include name="**/*.jar" />
|
|
</fileset>
|
|
<pathelement location="${build.dir}/ivy-${ivy.version}.jar"/>
|
|
</path>
|
|
|
|
<!--
|
|
Setup the output directories.
|
|
-->
|
|
<target name="init">
|
|
<fail unless="is.source.artifact"
|
|
message="Not a source artifact, stopping here." />
|
|
<mkdir dir="${build.classes}"/>
|
|
<mkdir dir="${test.classes}"/>
|
|
<mkdir dir="${build.src.gen-java}"/>
|
|
</target>
|
|
|
|
<target name="clean">
|
|
<delete dir="${build.test.dir}" />
|
|
<delete dir="${build.classes}" />
|
|
<delete dir="${build.src.gen-java}" />
|
|
<delete dir="${interface.avro.dir}" />
|
|
</target>
|
|
<target depends="clean" name="cleanall"/>
|
|
|
|
<target name="realclean" depends="clean">
|
|
<delete dir="${build.dir}" />
|
|
</target>
|
|
|
|
<!--
|
|
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>
|
|
|
|
<!--
|
|
Fetch Ivy and Cassandra's dependencies
|
|
|
|
These targets are intentionally free of dependencies so that they
|
|
can be run stand-alone from a binary release artifact.
|
|
-->
|
|
<target name="ivy-download" unless="ivy.jar.exists">
|
|
<echo>Downloading Ivy...</echo>
|
|
<mkdir dir="${build.dir}" />
|
|
<get src="${ivy.url}/${ivy.version}/ivy-${ivy.version}.jar"
|
|
dest="${build.dir}/ivy-${ivy.version}.jar" usetimestamp="true" />
|
|
</target>
|
|
|
|
<target name="ivy-init" depends="ivy-download" unless="ivy.initialized">
|
|
<mkdir dir="${build.dir.lib}"/>
|
|
<taskdef resource="org/apache/ivy/ant/antlib.xml"
|
|
uri="antlib:org.apache.ivy.ant"
|
|
classpathref="cassandra.classpath"/>
|
|
<property name="ivy.initialized" value="true"/>
|
|
</target>
|
|
|
|
<target name="ivy-retrieve" depends="ivy-init">
|
|
<ivy:retrieve type="jar,source" conf="default" sync="true"
|
|
pattern="${build.dir.lib}/[type]s/[artifact]-[revision].[ext]" />
|
|
</target>
|
|
|
|
<!--
|
|
Generate avro code
|
|
-->
|
|
<target name="check-avro-generate">
|
|
<uptodate property="avroUpToDate"
|
|
srcfile="${interface.dir}/cassandra.avpr"
|
|
targetfile="${interface.avro.dir}/org/apache/cassandra/avro/Cassandra.java" />
|
|
<taskdef name="protocol"
|
|
classname="org.apache.avro.specific.ProtocolTask">
|
|
<classpath refid="cassandra.classpath" />
|
|
</taskdef>
|
|
<taskdef name="schema" classname="org.apache.avro.specific.SchemaTask">
|
|
<classpath refid="cassandra.classpath" />
|
|
</taskdef>
|
|
<taskdef name="paranamer"
|
|
classname="com.thoughtworks.paranamer.ant.ParanamerGeneratorTask">
|
|
<classpath refid="cassandra.classpath" />
|
|
</taskdef>
|
|
</target>
|
|
<target name="avro-generate" unless="avroUpToDate"
|
|
depends="init,check-avro-generate">
|
|
<echo>Generating avro code...</echo>
|
|
<protocol destdir="${interface.avro.dir}">
|
|
<fileset dir="${interface.dir}">
|
|
<include name="**/*.avpr" />
|
|
</fileset>
|
|
</protocol>
|
|
|
|
<schema destdir="${interface.avro.dir}">
|
|
<fileset dir="${interface.dir}">
|
|
<include name="**/*.avsc" />
|
|
</fileset>
|
|
</schema>
|
|
</target>
|
|
|
|
<!--
|
|
Generate thrift code
|
|
-->
|
|
<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" />
|
|
<arg line="-o ${interface.thrift.dir}" />
|
|
<arg line="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" />
|
|
<arg line="-o ${interface.thrift.dir}" />
|
|
<arg line="cassandra.thrift" />
|
|
</exec>
|
|
</target>
|
|
<target name="gen-thrift-perl">
|
|
<echo>Generating Thrift Perl code from ${basedir}/interface/cassandra.thrift ....</echo>
|
|
<exec executable="thrift" dir="${basedir}/interface">
|
|
<arg line="--gen perl" />
|
|
<arg line="-o ${interface.thrift.dir}" />
|
|
<arg line="cassandra.thrift" />
|
|
</exec>
|
|
</target>
|
|
|
|
<!--
|
|
The build target builds all the .class files
|
|
-->
|
|
<target name="build"
|
|
depends="ivy-retrieve,avro-generate,build-subprojects,build-project"/>
|
|
<target name="build-subprojects"/>
|
|
<target name="codecoverage" depends="cobertura-instrument,test,cobertura-report"/>
|
|
|
|
<target depends="init,avro-generate,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.thrift.dir}/gen-java"/>
|
|
<src path="${interface.avro.dir}"/>
|
|
<classpath refid="cassandra.classpath"/>
|
|
</javac>
|
|
|
|
<paranamer sourceDirectory="${interface.avro.dir}"
|
|
outputDirectory="${build.classes}"/>
|
|
</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>
|
|
<copy todir="${dist.dir}">
|
|
<fileset file="build.xml" />
|
|
<fileset file="ivy.xml" />
|
|
</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="-Dlog4j.configuration=log4j-junit.properties" />
|
|
<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 &copy; ${YEAR} The Apache Software Foundation">
|
|
|
|
<fileset dir="${build.src}" defaultexcludes="yes">
|
|
<include name="org/apache/**/*.java"/>
|
|
</fileset>
|
|
<fileset dir="${interface.thrift.dir}" defaultexcludes="yes">
|
|
<include name="org/apache/**/*.java"/>
|
|
</fileset>
|
|
</javadoc>
|
|
</target>
|
|
|
|
</project>
|