| <!-- |
| 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="Pig" default="jar"> |
| |
| <!-- Load all the default properties, and any the user wants --> |
| <!-- to contribute (without having to type -D or edit this file --> |
| <property file="${user.home}/build.properties" /> |
| <property file="${basedir}/build.properties" /> |
| |
| <!-- name and version properties --> |
| <property name="name" value="pig" /> |
| <property name="Name" value="Pig" /> |
| <property name="version" value="0.1.1-dev" /> |
| <property name="final.name" value="${name}-${version}" /> |
| |
| <!-- source properties --> |
| <property name="lib.dir" value="${basedir}/lib/" /> |
| <property name="src.dir" value="${basedir}/src/" /> |
| <property name="src.lib.dir" value="${basedir}/lib-src/" /> |
| <property name="src.gen.dir" value="${basedir}/src-gen/" /> |
| <property name="src.docs.dir" value="${basedir}/docs/" /> |
| |
| <!-- javacc properties --> |
| <property name="src.gen.query.parser.dir" value="${src.gen.dir}/org/apache/pig/impl/logicalLayer/parser" /> |
| <property name="src.gen.script.parser.dir" value="${src.gen.dir}/org/apache/pig/tools/pigscript/parser" /> |
| <property name="src.gen.param.parser.dir" value="${src.gen.dir}/org/apache/pig/tools/parameters" /> |
| |
| <property name="javacc.home" value="${basedir}/lib" /> |
| |
| <!-- javac properties --> |
| <property name="javac.debug" value="on" /> |
| <property name="javac.optimize" value="on" /> |
| <property name="javac.deprecation" value="off" /> |
| <property name="javac.version" value="1.5" /> |
| <property name="javac.args" value="" /> |
| <!-- TODO we should use warning... <property name="javac.args.warnings" value="-Xlint:unchecked" /> --> |
| <property name="javac.args.warnings" value="" /> |
| |
| <!-- build properties --> |
| <property name="build.dir" value="${basedir}/build" /> |
| <property name="build.classes" value="${build.dir}/classes" /> |
| <property name="build.docs" value="${build.dir}/docs" /> |
| <property name="build.javadoc" value="${build.docs}/api" /> |
| <property name="build.encoding" value="ISO-8859-1" /> |
| <!-- TODO with only one version of hadoop in the lib folder we do not need that anymore --> |
| <property name="hadoop.jarfile" value="hadoop18.jar" /> |
| |
| <!-- distribution properties --> |
| <property name="staging.dir" value="${build.dir}/staging"/> |
| <property name="dist.dir" value="${staging.dir}/${final.name}"/> |
| |
| <!-- jar names. TODO we might want to use the svn reversion name in the name in case it is a dev version --> |
| <property name="output.jarfile" value="${build.dir}/${final.name}.jar" /> |
| <property name="output.jarfile.core" value="${build.dir}/${final.name}-core.jar" /> |
| <property name="output.jarfile.sources" value="${build.dir}/${final.name}-sources.jar" /> |
| <!-- Maintain old pig.jar in top level directory. --> |
| <property name="output.jarfile.backcompat" value="${basedir}/${name}.jar" /> |
| |
| <!-- test properties --> |
| <property name="test.src.dir" value="${basedir}/test" /> |
| <property name="test.build.dir" value="${build.dir}/test" /> |
| <property name="test.build.classes" value="${test.build.dir}/classes" /> |
| <property name="test.log.dir" value="${test.build.dir}/logs" /> |
| <property name="test.timeout" value="900000" /> |
| <property name="test.junit.output.format" value="plain" /> |
| |
| <!-- test configuration, use ${user.home}/build.properties to configure values --> |
| <property name="ssh.gateway" value="" /> |
| <property name="hod.server" value="" /> |
| <property name="junit.hadoop.conf" value="" /> |
| <property name="test.log.dir" value="${basedir}/test/logs"/> |
| <property name="junit.hadoop.conf" value="${user.home}/pigtest/conf/"/> |
| <property name="test.output" value="no"/> |
| |
| <!-- javadoc properties --> |
| <property name="javadoc.link.java" value="http://java.sun.com/j2se/1.5.0/docs/api/" /> |
| |
| <!-- ====================================================== --> |
| <!-- Stuff needed by all targets --> |
| <!-- ====================================================== --> |
| <!-- setup the classpath --> |
| <path id="classpath"> |
| <fileset file="${lib.dir}/${hadoop.jarfile}" /> |
| <fileset file="${lib.dir}/javacc.jar" /> |
| <fileset file="${lib.dir}/jsch-0.1.33.jar" /> |
| <fileset file="${lib.dir}/junit-4.1.jar" /> |
| </path> |
| |
| <path id="test.classpath"> |
| <pathelement location="${build.classes}"/> |
| <pathelement location="${test.src.dir}"/> |
| <path refid="classpath"/> |
| </path> |
| |
| |
| <target name="init"> |
| <mkdir dir="${src.gen.query.parser.dir}" /> |
| <mkdir dir="${src.gen.script.parser.dir}" /> |
| <mkdir dir="${src.gen.param.parser.dir}" /> |
| <mkdir dir="${staging.dir}" /> |
| <mkdir dir="${dist.dir}" /> |
| <mkdir dir="${build.classes}" /> |
| <mkdir dir="${test.build.classes}" /> |
| <tstamp> |
| <format property="timestamp" pattern="MMM dd yyyy, HH:mm:ss" /> |
| </tstamp> |
| <svnversion outputproperty="svn.revision"/> |
| </target> |
| |
| <macrodef name="svnversion"> |
| <!-- the path needs to be small content otherwise it will take AGES ! --> |
| <attribute name="wcpath" default="${basedir}" /> |
| <attribute name="outputproperty" /> |
| <sequential> |
| <exec executable="svnversion" outputproperty="@{outputproperty}" failonerror="false" failifexecutionfails="false" > |
| <arg value="@{wcpath}" /> |
| <redirector> |
| <outputfilterchain> |
| <tokenfilter> |
| <!-- version can be xxxx, xxxx:yyyy, xxxxM, xxxxS or xxxx:yyyyMS , ... just get the working copy one --> |
| <replaceregex pattern="((\d+).*)" replace="\2" /> |
| </tokenfilter> |
| </outputfilterchain> |
| </redirector> |
| </exec> |
| </sequential> |
| </macrodef> |
| |
| |
| <!-- ================================================================== --> |
| <!-- Clean. Delete the build files, and their directories --> |
| <!-- ================================================================== --> |
| <target name="clean" description="Cleanup build artifacts"> |
| <delete dir="${src.gen.dir}" /> |
| <delete dir="${build.dir}" /> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Java Compiler Compiler, generate Parsers --> |
| <!-- ================================================================== --> |
| <target name="cc-compile" depends="init" description="Create and Compile Parser"> |
| <jjtree target="${src.dir}/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt" outputdirectory="${src.gen.query.parser.dir}" javacchome="${javacc.home}" /> |
| <javacc target="${src.gen.query.parser.dir}/QueryParser.jj" outputdirectory="${src.gen.query.parser.dir}" javacchome="${javacc.home}" /> |
| <javacc target="${src.dir}/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj" outputdirectory="${src.gen.script.parser.dir}" javacchome="${javacc.home}" /> |
| <javacc target="${src.dir}/org/apache/pig/tools/parameters/PigFileParser.jj" outputdirectory="${src.gen.param.parser.dir}" javacchome="${javacc.home}" /> |
| <javacc target="${src.dir}/org/apache/pig/tools/parameters/ParamLoader.jj" outputdirectory="${src.gen.param.parser.dir}" javacchome="${javacc.home}" /> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Build sources --> |
| <!-- ================================================================== --> |
| <target name="compile" depends="init, cc-compile" description="Compile all artifacts"> |
| <echo>*** Building Main Sources ***</echo> |
| <antcall target="compile-sources"> |
| <param name="sources" value="${src.dir};${src.gen.dir};${src.lib.dir}/shock;${src.lib.dir}/bzip2" /> |
| <param name="dist" value="${build.classes}" /> |
| <param name="cp" value="classpath" /> |
| </antcall> |
| </target> |
| |
| <target name="compile-test" depends="compile"> |
| <echo>*** Building Test Sources ***</echo> |
| <antcall target="compile-sources"> |
| <param name="sources" value="${test.src.dir}" /> |
| <param name="dist" value="${test.build.classes}" /> |
| <param name="cp" value="test.classpath" /> |
| </antcall> |
| </target> |
| |
| <target name="compile-sources"> |
| <javac encoding="${build.encoding}" srcdir="${sources}" includes="**/*.java" destdir="${dist}" debug="${javac.debug}" optimize="${javac.optimize}" target="${javac.version}" source="${javac.version}" deprecation="${javac.deprecation}"> |
| <compilerarg line="${javac.args} ${javac.args.warnings}" /> |
| <classpath refid="${cp}" /> |
| </javac> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Documentation --> |
| <!-- ================================================================== --> |
| <target name="javadoc" depends="jar" description="Create documentation"> |
| <mkdir dir="${build.javadoc}" /> |
| <javadoc overview="${src.docs.dir}/overview.html" packagenames="org.apache.pig.*" destdir="${build.javadoc}" author="true" version="true" use="true" windowtitle="${Name} ${version} API" doctitle="${Name} ${version} API" bottom="Copyright &copy; ${year} The Apache Software Foundation"> |
| <packageset dir="${src.dir}" /> |
| <link href="${javadoc.link.java}" /> |
| <classpath> |
| <path refid="classpath" /> |
| <pathelement path="${java.class.path}" /> |
| <pathelement path="${output.jarfile}" /> |
| </classpath> |
| <group title="pig" packages="org.apache.*" /> |
| </javadoc> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- @depricated, Documentation --> |
| <!-- ================================================================== --> |
| <target name="doc" depends="javadoc"> |
| </target> |
| |
| <target name="source-jar" depends="cc-compile"> |
| <jar duplicate="preserve" jarfile="${output.jarfile.sources}" basedir="${src.dir}"> |
| <manifest> |
| <section name="org/apache/pig"> |
| <attribute name="Implementation-Vendor" value="Apache" /> |
| <attribute name="Implementation-Title" value="Pig" /> |
| <attribute name="Implementation-Version" value="${version}" /> |
| </section> |
| </manifest> |
| <fileset dir="${src.gen.dir}"/> |
| <fileset dir="${src.lib.dir}/shock"/> |
| <fileset dir="${src.lib.dir}/bzip2"/> |
| </jar> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Make pig.jar --> |
| <!-- ================================================================== --> |
| <!-- TODO we should also exculte test here... --> |
| <!-- ================================================================== --> |
| <target name="jar" depends="compile" description="Create pig jar"> |
| <antcall target="jarWithSvn"/> |
| <antcall target="jarWithOutSvn"/> |
| </target> |
| |
| <target name="jarWithSvn" if="svn.revision"> |
| <antcall target="buildJar"> |
| <param name="svnString" value="${svn.revision}" /> |
| </antcall> |
| </target> |
| |
| <target name="jarWithOutSvn" unless="svn.revision"> |
| <antcall target="buildJar"> |
| <param name="svnString" value=": unknown" /> |
| </antcall> |
| </target> |
| |
| <target name="buildJar"> |
| <echo>svnString ${svnString}</echo> |
| <jar jarfile="${output.jarfile.core}" basedir="${build.classes}"> |
| <manifest> |
| <attribute name="Main-Class" value="org.apache.pig.Main" /> |
| <section name="org/apache/pig"> |
| <attribute name="Implementation-Vendor" value="Apache" /> |
| <attribute name="Implementation-Title" value="Pig" /> |
| <attribute name="Implementation-Version" value="${version}" /> |
| <attribute name="Build-TimeStamp" value="${timestamp}" /> |
| <attribute name="Svn-Revision" value="${svnString}" /> |
| </section> |
| </manifest> |
| <zipfileset src="${lib.dir}/junit-4.1.jar" /> |
| <zipfileset src="${lib.dir}/${hadoop.jarfile}" /> |
| <zipfileset src="${lib.dir}/jsch-0.1.33.jar" /> |
| </jar> |
| <!-- @depricated --> |
| <jar jarfile="${output.jarfile}" basedir="${build.classes}"> |
| <manifest> |
| <attribute name="Main-Class" value="org.apache.pig.Main" /> |
| <section name="org/apache/pig"> |
| <attribute name="Implementation-Vendor" value="Apache" /> |
| <attribute name="Implementation-Title" value="Pig" /> |
| <attribute name="Implementation-Version" value="${version}" /> |
| <attribute name="Build-TimeStamp" value="${timestamp}" /> |
| <attribute name="Svn-Revision" value="${svnString}" /> |
| </section> |
| </manifest> |
| <zipfileset src="${lib.dir}/junit-4.1.jar" /> |
| <zipfileset src="${lib.dir}/${hadoop.jarfile}" /> |
| <zipfileset src="${lib.dir}/jsch-0.1.33.jar" /> |
| </jar> |
| <copy file="${output.jarfile}" tofile="${output.jarfile.backcompat}"/> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Run unit tests --> |
| <!-- ================================================================== --> |
| <target name="test" depends="test-local,test-mapreduce" description="Run unit tests in local and mapreduce modes"/> |
| <target name="test-local" depends="compile-test,jar" description="Run unit tests in local mode"> |
| <antcall target="testOneMode"> |
| <param name="test.exectype" value="local" /> |
| </antcall> |
| </target> |
| <target name="test-mapreduce" depends="compile-test,jar" description="Run unit tests in mapreduce mode"> |
| <antcall target="testOneMode"> |
| <param name="test.exectype" value="mapreduce" /> |
| </antcall> |
| </target> |
| <target name="testOneMode"> |
| <delete dir="${test.log.dir}-${test.exectype}"/> |
| <mkdir dir="${test.log.dir}-${test.exectype}"/> |
| <junit showoutput="${test.output}" printsummary="yes" haltonfailure="no" fork="yes" maxmemory="256m" dir="${basedir}" timeout="${test.timeout}" errorProperty="tests.failed" failureProperty="tests.failed"> |
| <sysproperty key="test.exectype" value="${test.exectype}" /> |
| <sysproperty key="ssh.gateway" value="${ssh.gateway}" /> |
| <sysproperty key="hod.server" value="${hod.server}" /> |
| <!-- <sysproperty key="hod.command" value="${hod.command}"/> |
| <sysproperty key="hod.param" value="${hod.param}"/> --> |
| <sysproperty key="hadoop.log.dir" value="${test.log.dir}-${test.exectype}"/> |
| <classpath> |
| <pathelement location="${output.jarfile}" /> |
| <pathelement location="${test.build.classes}" /> |
| <pathelement location="${junit.hadoop.conf}" /> |
| <path refid="classpath"/> |
| </classpath> |
| <formatter type="${test.junit.output.format}" /> |
| <batchtest fork="yes" todir="${test.log.dir}-${test.exectype}" unless="testcase"> |
| <fileset dir="test"> |
| <include name="**/*Test*.java" /> |
| <exclude name="**/PigExecTestCase.java" /> |
| <exclude name="**/TestLargeFile.java" /> |
| <exclude name="**/TestOrderBy.java" /> |
| <exclude name="**/TestPi.java" /> |
| <exclude name="**/nightly/**" /> |
| </fileset> |
| </batchtest> |
| <batchtest fork="yes" todir="${test.log.dir}-${test.exectype}" if="testcase"> |
| <fileset dir="test" includes="**/${testcase}.java"/> |
| </batchtest> |
| </junit> |
| <fail if="tests.failed">Tests failed!</fail> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- D I S T R I B U T I O N --> |
| <!-- ================================================================== --> |
| <target name="package" depends="jar, javadoc" description="Create a Pig release"> |
| <mkdir dir="${dist.dir}" /> |
| <mkdir dir="${dist.dir}/lib" /> |
| <mkdir dir="${dist.dir}/bin" /> |
| <mkdir dir="${dist.dir}/docs" /> |
| <mkdir dir="${dist.dir}/docs/api" /> |
| |
| <copy todir="${dist.dir}/lib" includeEmptyDirs="false"> |
| <fileset dir="${lib.dir}"> |
| </fileset> |
| </copy> |
| |
| <copy file="${output.jarfile.core}" todir="${dist.dir}" /> |
| |
| <copy todir="${dist.dir}/bin"> |
| <fileset dir="bin" /> |
| </copy> |
| |
| <copy todir="${dist.dir}/docs"> |
| <fileset dir="${build.docs}" /> |
| </copy> |
| |
| <copy todir="${dist.dir}/test" includeEmptyDirs="true"> |
| <fileset dir="${test.src.dir}" /> |
| </copy> |
| |
| <copy todir="${dist.dir}/src" includeEmptyDirs="true"> |
| <fileset dir="${src.dir}" /> |
| </copy> |
| |
| <copy todir="${dist.dir}/lib-src" includeEmptyDirs="true"> |
| <fileset dir="${src.lib.dir}" /> |
| </copy> |
| |
| <copy todir="${dist.dir}/tutorial" includeEmptyDirs="true"> |
| <fileset dir="tutorial" /> |
| </copy> |
| |
| <copy todir="${dist.dir}/contrib" includeEmptyDirs="true"> |
| <fileset dir="contrib" /> |
| </copy> |
| |
| <copy todir="${dist.dir}/" file="build.xml" /> |
| |
| <copy todir="${dist.dir}"> |
| <fileset dir="."> |
| <include name="*.txt" /> |
| </fileset> |
| </copy> |
| |
| <chmod perm="ugo+x" type="file"> |
| <fileset dir="${dist.dir}/bin" /> |
| </chmod> |
| |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Make release tarball --> |
| <!-- ================================================================== --> |
| <target name="tar" depends="package" description="Create release tarball"> |
| <tar compression="gzip" longfile="gnu" destfile="${build.dir}/${final.name}.tar.gz"> |
| <tarfileset dir="${staging.dir}" mode="664"> |
| <exclude name="${final.name}/bin/*" /> |
| <include name="${final.name}/**" /> |
| </tarfileset> |
| <tarfileset dir="${staging.dir}" mode="755"> |
| <include name="${final.name}/bin/*" /> |
| </tarfileset> |
| </tar> |
| </target> |
| |
| </project> |