| <?xml version="1.0"?> | 
 | <!-- | 
 |  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 name="libthrift" default="dist" basedir="." | 
 |   xmlns:ivy="antlib:org.apache.ivy.ant" | 
 |   xmlns:artifact="antlib:org.apache.maven.artifact.ant"> | 
 |  | 
 |   <description>Thrift Build File</description> | 
 |  | 
 |   <property environment="env" /> | 
 |  | 
 |   <property name="gen" location="gen-java" /> | 
 |   <property name="genbean" location="gen-javabean" /> | 
 |   <property name="mvn.ant.task.version" value="2.1.0" /> | 
 |    | 
 |   <property name="src" location="src" /> | 
 |   <property name="build" location="build" /> | 
 |   <property name="javadoc" location="${build}/javadoc" /> | 
 |   <property name="install.path" value="/usr/local/lib" /> | 
 |   <property name="src.test" location="test" /> | 
 |   <property name="build.test" location="${build}/test" /> | 
 |   <property name="test.thrift.home" location="../../test"/> | 
 |   <property name="thrift.root" location="../../"/> | 
 |   <property name="jar.file" location="${basedir}/libthrift.jar" />   | 
 |   <property name="test.jar.file" location="${basedir}/libthrift-test.jar" /> | 
 |  | 
 |   <property file="${user.home}/.thrift-build.properties" /> | 
 |  | 
 |   <!-- ivy properties --> | 
 |   <property name="ivy.version" value="2.0.0-rc2" /> | 
 |   <property name="ivy.dir" location="${build}/ivy" /> | 
 |   <property name="ivy.jar" location="${ivy.dir}/ivy-${ivy.version}.jar"/> | 
 |   <property name="ivy.lib.dir" location="${ivy.dir}/lib" /> | 
 |   <property name="ivy_repo_url" value="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/> | 
 |   <property name="ivysettings.xml" location="${ivy.dir}/ivysettings.xml" /> | 
 |   <property name="mvn_ant_task_url" value="http://www.reverse.net/pub/apache/maven/binaries/maven-ant-tasks-${mvn.ant.task.version}.jar" /> | 
 |   <property name="mvn.ant.task.jar" location="${ivy.dir}/maven-ant-tasks-${mvn.ant.task.version}.jar" /> | 
 |   <property name="sources.zip" location="${build}/libthrift-src.zip" /> | 
 |   <property name="pom.file" location="${build}/pom.xml" /> | 
 |    | 
 |   <!-- TODO: Get the appropriate tokens / URL for upload -->   | 
 |   <property name="apache.snapshot.repository" value="https://repository.apache.org/content/repositories/snapshots" /> | 
 |   | 
 |   <path id="compile.classpath"> | 
 |     <path refid="ivy.compile.classpath" /> | 
 |   </path> | 
 |  | 
 |   <path id="test.classpath"> | 
 |     <path refid="compile.classpath" /> | 
 |     <path refid="ivy.test.classpath" /> | 
 |     <pathelement path="${env.CLASSPATH}" /> | 
 |     <pathelement location="build/test" /> | 
 |     <pathelement location="${jar.file}" /> | 
 |   </path> | 
 |  | 
 |   <target name="init"> | 
 |     <tstamp /> | 
 |     <mkdir dir="${build}"/> | 
 |     <mkdir dir="${build.test}" /> | 
 |     <!-- | 
 |     Allow Ivy to be disabled with "-Dnoivy=". | 
 |     It is kind of a hack to pretend that we already found it, | 
 |     but Ant doesn't provide an easy way of blocking dependencies | 
 |     from executing or checking multiple conditions. | 
 |     --> | 
 |     <condition property="ivy.found"><isset property="noivy" /></condition> | 
 |     <condition property="offline"><isset property="noivy" /></condition> | 
 |   </target> | 
 |  | 
 |   <target name="ivy-init-dirs"> | 
 |     <mkdir dir="${ivy.dir}" /> | 
 |     <mkdir dir="${ivy.lib.dir}" /> | 
 |   </target> | 
 |  | 
 |   <target name="ivy-download" depends="ivy-init-dirs" description="To download ivy" unless="offline"> | 
 |     <get src="${ivy_repo_url}" dest="${ivy.jar}" usetimestamp="true"/> | 
 |   </target> | 
 |  | 
 |   <target name="ivy-probe-antlib"> | 
 |     <condition property="ivy.found"> | 
 |       <typefound uri="antlib:org.apache.ivy.ant" name="cleancache"/> | 
 |     </condition> | 
 |   </target> | 
 |  | 
 |   <target name="ivy-init-antlib" depends="ivy-download,ivy-probe-antlib" unless="ivy.found"> | 
 |     <typedef uri="antlib:org.apache.ivy.ant" onerror="fail" | 
 |       loaderRef="ivyLoader"> | 
 |       <classpath> | 
 |         <pathelement location="${ivy.jar}"/> | 
 |       </classpath> | 
 |     </typedef> | 
 |     <fail> | 
 |       <condition > | 
 |         <not> | 
 |           <typefound uri="antlib:org.apache.ivy.ant" name="cleancache"/> | 
 |         </not> | 
 |       </condition> | 
 |       You need Apache Ivy 2.0 or later from http://ant.apache.org/ | 
 |       It could not be loaded from ${ivy_repo_url} | 
 |     </fail> | 
 |   </target> | 
 |  | 
 |   <target name="resolve" depends="ivy-init-antlib" description="retrieve dependencies with ivy" unless="noivy"> | 
 |     <ivy:retrieve /> | 
 |     <ivy:cachepath pathid="ivy.compile.classpath" conf="compile" /> | 
 |     <ivy:cachepath pathid="ivy.test.classpath" conf="test" /> | 
 |   </target> | 
 |  | 
 |   <target name="resolve-offline" depends="ivy-init-antlib" description="retrieve dependencies with ivy" if="noivy"> | 
 |     <path id="ivy.compile.classpath"> | 
 |       <fileset dir="${ivy.lib.dir}"> | 
 |         <include name="**/*.jar" /> | 
 |       </fileset> | 
 |     </path> | 
 |     <path id="ivy.test.classpath"> | 
 |     <!-- same as ivy.compile.classpath, but has to be defined --> | 
 |     </path> | 
 |   </target> | 
 |  | 
 |   <target name="compile" depends="init,resolve,resolve-offline"> | 
 |     <javac srcdir="${src}" destdir="${build}" source="1.5" target="1.5" debug="true" classpathref="compile.classpath" /> | 
 |   </target> | 
 |  | 
 |   <target name="javadoc" depends="init"> | 
 |     <javadoc sourcepath="${src}" | 
 |       destdir="${javadoc}" | 
 |       version="true" | 
 |       windowtitle="Thrift Java API" | 
 |       doctitle="Thrift Java API" | 
 |       classpathref="test.classpath"> | 
 |     </javadoc> | 
 |   </target> | 
 |  | 
 |   <target name="dist" depends="compile"> | 
 |     <mkdir dir="${build}/META-INF"/> | 
 |     <copy file="${thrift.root}/LICENSE" tofile="${build}/META-INF/LICENSE.txt"/> | 
 |     <copy file="${thrift.root}/NOTICE" tofile="${build}/META-INF/NOTICE.txt"/> | 
 |     <jar jarfile="${jar.file}"> | 
 |       <fileset dir="${build}"> | 
 |         <include name="org/apache/thrift/**/*.class" /> | 
 |         <include name="META-INF/*.txt" /> | 
 |       </fileset> | 
 |       <fileset dir="src"> | 
 |         <include name="**/*.java" /> | 
 |       </fileset> | 
 |     </jar> | 
 |   </target> | 
 |  | 
 |   <target name="install" depends="dist,javadoc"> | 
 |     <copy todir="${install.path}"> | 
 |         <fileset dir="."><include name="*.jar" /></fileset> | 
 |     </copy> | 
 |     <copy todir="${install.javadoc.path}"> | 
 |       <fileset dir="${javadoc}"> | 
 |         <include name="**/*" /> | 
 |       </fileset> | 
 |     </copy> | 
 |   </target> | 
 |  | 
 |   <target name="clean"> | 
 |     <delete dir="${build}" /> | 
 |     <delete dir="${gen}"/> | 
 |     <delete dir="${genbean}"/> | 
 |     <delete dir="${javadoc}"/> | 
 |     <delete file="${jar.file}" /> | 
 |     <delete file="${test.jar.file}" /> | 
 |   </target> | 
 |  | 
 |   <target name="compile-test" description="Build the test suite classes" depends="generate,dist"> | 
 |     <javac debug="true" srcdir="${gen}" destdir="${build.test}" classpathref="test.classpath" /> | 
 |     <javac debug="true" srcdir="${genbean}" destdir="${build.test}" classpathref="test.classpath" /> | 
 |     <javac debug="true" srcdir="${src.test}" destdir="${build.test}" classpathref="test.classpath" /> | 
 |     <copy todir="${build.test}"> | 
 |       <fileset dir="${src.test}" includes="log4j.properties" /> | 
 |     </copy> | 
 |     <jar jarfile="${test.jar.file}" basedir="${build}/test"/> | 
 |   </target> | 
 |  | 
 |   <property name="build.test" location="${build.dir}/test"/> | 
 |   <property name="test.junit.output.format" value="plain"/> | 
 |   <property name="test.timeout" value="2000000"/> | 
 |   <property name="test.src.dir" location="${basedir}/test"/> | 
 |   <property name="test.log.dir" value="${build.test}/log"/> | 
 |   <property name="test.port" value="9090" /> | 
 |  | 
 |   <target name="junit-test" description="Run the JUnit test suite" depends="compile-test"> | 
 |     <mkdir dir="${test.log.dir}"/> | 
 |     <junit | 
 |       printsummary="yes" showoutput="${test.output}"  | 
 |       haltonfailure="no" fork="yes" maxmemory="512m" | 
 |       errorProperty="tests.failed" failureProperty="tests.failed" | 
 |       timeout="${test.timeout}" | 
 |     > | 
 |       <sysproperty key="build.test" value="${build.test}"/> | 
 |       <sysproperty key="test.port" value="${test.port}" /> | 
 |       <sysproperty key="javax.net.ssl.trustStore" value="${src.test}/.truststore"/> | 
 |       <sysproperty key="javax.net.ssl.trustStorePassword" value="thrift"/> | 
 |       <sysproperty key="javax.net.ssl.keyStore" value="${src.test}/.keystore"/> | 
 |       <sysproperty key="javax.net.ssl.keyStorePassword" value="thrift"/> | 
 |       <classpath refid="test.classpath"/> | 
 |       <formatter type="${test.junit.output.format}" /> | 
 |       <batchtest todir="${test.log.dir}" unless="testcase"> | 
 |         <fileset dir="${test.src.dir}"> | 
 |           <include name="**/Test*.java"/> | 
 |           <exclude name="**/TestClient.java"/> | 
 |           <exclude name="**/TestServer.java"/> | 
 |           <exclude name="**/TestNonblockingServer.java"/> | 
 |         </fileset> | 
 |       </batchtest> | 
 |       <batchtest todir="${test.log.dir}" if="testcase"> | 
 |         <fileset dir="${test.src.dir}" includes="**/${testcase}.java" /> | 
 |       </batchtest> | 
 |     </junit> | 
 |     <fail if="tests.failed">Tests failed!</fail> | 
 |   </target> | 
 |  | 
 |   <target name="deprecated-test" description="Run the non-JUnit test suite" depends="compile-test"> | 
 |     <java classname="org.apache.thrift.test.EqualityTest" | 
 |       classpathref="test.classpath" failonerror="true" /> | 
 |     <java classname="org.apache.thrift.test.JavaBeansTest" | 
 |       classpathref="test.classpath" failonerror="true" /> | 
 |   </target> | 
 |  | 
 |   <target name="test" description="Run the full test suite" depends="junit-test,deprecated-test"/> | 
 |  | 
 |   <target name="testclient" description="Run a test client" depends="compile-test"> | 
 |     <java classname="org.apache.thrift.test.TestClient" | 
 |       classpathref="test.classpath" failonerror="true"> | 
 |       <arg line="${testargs}" /> | 
 |     </java> | 
 |   </target> | 
 |  | 
 |   <target name="testserver" description="Run a test server" depends="compile-test"> | 
 |     <java classname="org.apache.thrift.test.TestServer" | 
 |       classpathref="test.classpath" failonerror="true"> | 
 |       <arg line="${testargs}" /> | 
 |     </java> | 
 |   </target> | 
 |  | 
 |   <target name="testnonblockingserver" description="Run a test nonblocking server" depends="compile-test"> | 
 |     <java classname="org.apache.thrift.test.TestNonblockingServer" | 
 |       classpathref="test.classpath" failonerror="true"> | 
 |       <arg line="${testargs}" /> | 
 |     </java> | 
 |   </target> | 
 |  | 
 |   <target name="generate"> | 
 |     <exec executable="../../compiler/cpp/thrift" failonerror="true"> | 
 |       <arg line="--gen java:hashcode ${test.thrift.home}/ThriftTest.thrift" /> | 
 |     </exec> | 
 |     <exec executable="../../compiler/cpp/thrift" failonerror="true"> | 
 |       <arg line="--gen java:hashcode ${test.thrift.home}/DebugProtoTest.thrift" /> | 
 |     </exec> | 
 |     <exec executable="../../compiler/cpp/thrift" failonerror="true"> | 
 |       <arg line="--gen java:hashcode ${test.thrift.home}/OptionalRequiredTest.thrift" /> | 
 |     </exec> | 
 |     <exec executable="../../compiler/cpp/thrift" failonerror="true"> | 
 |       <arg line="--gen java:beans,nocamel ${test.thrift.home}/JavaBeansTest.thrift" /> | 
 |     </exec> | 
 |   </target> | 
 |  | 
 |   <target name="mvn.init"> | 
 |     <get src="${mvn_ant_task_url}" dest="${mvn.ant.task.jar}" usetimestamp="true" />  | 
 |     <path id="maven-ant-tasks.classpath" path="${mvn.ant.task.jar}" /> | 
 |   <taskdef resource="org/apache/maven/artifact/ant/antlib.xml" | 
 |                         uri="antlib:org.apache.maven.artifact.ant" | 
 |           classpathref="maven-ant-tasks.classpath" /> | 
 |   </target> | 
 |  | 
 |   <target name="pack.src"> | 
 |     <zip destfile="${sources.zip}" basedir="${src}" /> | 
 |   </target> | 
 |  | 
 |   <target name="generate.pom" depends="init,resolve" description="Generate a Maven POM file for libthrift"> | 
 |     <ivy:makepom ivyfile="${basedir}/ivy.xml" pomfile="${pom.file}" > | 
 |       <mapping conf="default" scope="compile" /> | 
 |       <mapping conf="runtime" scope="runtime" /> | 
 |     </ivy:makepom> | 
 |   </target> | 
 |  | 
 |   <target name="publish" depends="test,dist,mvn.init,generate.pom,pack.src"> | 
 |     <artifact:pom id="pom" file="${pom.file}" /> | 
 |  | 
 |     <artifact:install file="${jar.file}"> | 
 |       <pom refid="pom"/> | 
 |       <attach file="${sources.zip}" classifier="source" /> | 
 |     </artifact:install> | 
 |  | 
 |     <artifact:remoteRepository id="remote.repository" url="${apache.snapshot.repository}" /> | 
 |  | 
 |     <artifact:deploy file="${jar.file}"> | 
 |       <remoteRepository refid="remote.repository" /> | 
 |       <pom refid="pom"/> | 
 |       <attach file="${sources.zip}" classifier="source" /> | 
 |     </artifact:deploy> | 
 |   </target> | 
 | </project> |