| <?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" |
| 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.thrift.gen-java" value="${interface.thrift.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.6.11"/> |
| <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="autoivy.classpath"> |
| <fileset dir="${build.dir.lib}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <pathelement location="${build.dir}/ivy-${ivy.version}.jar"/> |
| </path> |
| <path id="cassandra.classpath"> |
| <pathelement location="${cobertura.classes.dir}"/> |
| <pathelement location="${build.classes}"/> |
| <fileset dir="${build.lib}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <path refid="autoivy.classpath" /> |
| </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}" /> |
| </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="autoivy.classpath"/> |
| <property name="ivy.initialized" value="true"/> |
| </target> |
| |
| <target name="ivy-retrieve-build" depends="ivy-init"> |
| <ivy:retrieve type="jar,source" sync="true" |
| pattern="${build.dir.lib}/[type]s/[artifact]-[revision].[ext]" /> |
| </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-build,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.thrift.dir}/gen-java"/> |
| <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,rat-init"> |
| <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> |
| <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" |
| reportFile="${build.dir}/${final.name}-bin.rat.txt"> |
| <tarfileset> |
| <gzipresource> |
| <file file="${build.dir}/${final.name}-bin.tar.gz" /> |
| </gzipresource> |
| </tarfileset> |
| </rat:report> |
| |
| <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/**" /> |
| <exclude name=".git/**" /> |
| <!-- exclude Eclipse files --> |
| <exclude name=".project" /> |
| <exclude name=".classpath" /> |
| <exclude name=".settings/**" /> |
| <exclude name=".externalToolBuilders/**" /> |
| </tarfileset> |
| </tar> |
| <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" |
| reportFile="${build.dir}/${final.name}-src.rat.txt"> |
| <tarfileset> |
| <gzipresource> |
| <file file="${build.dir}/${final.name}-src.tar.gz" /> |
| </gzipresource> |
| </tarfileset> |
| </rat:report> |
| </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> |
| |
| <!-- |
| License audit tool |
| --> |
| <target name="rat-init" depends="ivy-retrieve-build"> |
| <typedef resource="org/apache/rat/anttasks/antlib.xml" |
| uri="antlib:org.apache.rat.anttasks"> |
| <classpath> |
| <fileset dir="${build.dir.lib}"> |
| <include name="**/apache-rat*.jar"/> |
| <include name="**/commons-*.jar"/> |
| </fileset> |
| </classpath> |
| </typedef> |
| </target> |
| |
| <target name="rat-check" depends="rat-init"> |
| <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" |
| reportFile="${build.dir}/rat-report.log"> |
| <fileset dir="." excludesfile=".rat-excludes" /> |
| </rat:report> |
| <condition property="rat.passed"> |
| <isfileselected file="${build.dir}/rat-report.log"> |
| <containsregexp expression="^0 Unknown Licenses"/> |
| </isfileselected> |
| </condition> |
| <fail unless="rat.passed">Unknown licenses: See build/rat-report.log.</fail> |
| </target> |
| |
| <target name="rat-write" depends="rat-init"> |
| <echo>RAT: invoking addLicense to write missing headers</echo> |
| <java classname="org.apache.rat.Report" fork="true" |
| output="${build.dir}/rat-report.log"> |
| <classpath> |
| <fileset dir="${build.dir.lib}"> |
| <include name="**/apache-rat*.jar"/> |
| <include name="**/commons-*.jar"/> |
| </fileset> |
| </classpath> |
| <arg value="-a" /> |
| <arg value="--force" /> |
| <arg value="." /> |
| </java> |
| </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.gen-java}" defaultexcludes="yes"> |
| <include name="org/apache/**/*.java"/> |
| </fileset> |
| </javadoc> |
| </target> |
| |
| <!-- Generate Eclipse project description files --> |
| <target name="generate-eclipse-files" depends="build"> |
| <echo file=".project"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> |
| <projectDescription> |
| <name>${eclipse.project.name}</name> |
| <comment></comment> |
| <projects> |
| </projects> |
| <buildSpec> |
| <buildCommand> |
| <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> |
| <triggers>full,incremental,auto,clean,</triggers> |
| <arguments> |
| <dictionary> |
| <key>LaunchConfigHandle</key> |
| <value><project>/.externalToolBuilders/Cassandra_Ant_Builder.launch</value> |
| </dictionary> |
| </arguments> |
| </buildCommand> |
| </buildSpec> |
| <natures> |
| <nature>org.eclipse.jdt.core.javanature</nature> |
| </natures> |
| </projectDescription>]]> |
| </echo> |
| <echo file=".classpath"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> |
| <classpath> |
| <classpathentry kind="src" path="src/java"/> |
| <classpathentry kind="src" path="src/gen-java"/> |
| <classpathentry kind="src" path="interface/avro/gen-java"/> |
| <classpathentry kind="src" path="interface/thrift/gen-java"/> |
| <classpathentry kind="src" path="test/unit"/> |
| <classpathentry kind="src" path="test/long"/> |
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> |
| <classpathentry kind="output" path="build/classes"/> |
| <classpathentry kind="lib" path="build/test/classes"/> |
| <classpathentry kind="lib" path="test/conf"/> |
| ]]> |
| </echo> |
| <path id="eclipse-project-libs-path"> |
| <fileset dir="lib"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <fileset dir="build/lib/jars"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </path> |
| <property name="eclipse-project-libs" refid="eclipse-project-libs-path"/> |
| <script language="javascript"> <![CDATA[ |
| importClass(java.io.File); |
| jars = project.getProperty("eclipse-project-libs").split(":"); |
| |
| cp = ""; |
| for (i=0; i< jars.length; i++) { |
| cp += ' <classpathentry kind="lib" path="'+jars[i]+'"/>\n'; |
| } |
| |
| cp += '</classpath>'; |
| |
| echo = project.createTask("echo"); |
| echo.setMessage(cp); |
| echo.setFile(new File(".classpath")); |
| echo.setAppend(true); |
| echo.perform(); |
| ]]> </script> |
| <mkdir dir=".settings" /> |
| <mkdir dir=".externalToolBuilders" /> |
| <echo file=".externalToolBuilders/Cassandra_Ant_Builder.launch"><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| <launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> |
| <stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AFTER_CLEAN_TARGETS" value="build,build-test,"/> |
| <stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AUTO_TARGETS" value="build,build-test,"/> |
| <stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="build,build-test,"/> |
| <stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_MANUAL_TARGETS" value="build,build-test,"/> |
| <booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> |
| <booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> |
| <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> |
| <listEntry value="/${eclipse.project.name}/build.xml"/> |
| </listAttribute> |
| <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> |
| <listEntry value="1"/> |
| </listAttribute> |
| <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> |
| <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> |
| <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> |
| <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="${eclipse.project.name}"/> |
| <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="$${workspace_loc:/${eclipse.project.name}/build.xml}"/> |
| <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean,"/> |
| <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> |
| <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="$${workspace_loc:/${eclipse.project.name}}"/> |
| </launchConfiguration>]]> |
| </echo> |
| </target> |
| |
| <pathconvert property="eclipse.project.name"> |
| <path path="${basedir}" /> |
| <regexpmapper from="^.*/([^/]+)$$" to="\1" handledirsep="yes" /> |
| </pathconvert> |
| |
| <!-- Clean Eclipse project description files --> |
| <target name="clean-eclipse-files"> |
| <delete file=".project" /> |
| <delete file=".classpath" /> |
| <delete dir=".settings" /> |
| <delete dir=".externalToolBuilders" /> |
| <delete dir="build/eclipse-classes" /> |
| </target> |
| |
| </project> |