505 lines
19 KiB
XML
505 lines
19 KiB
XML
<!--
|
|
Copyright 2009 Google Inc.
|
|
|
|
Licensed 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="compiler" basedir="." default="jar" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
|
|
|
|
<!--
|
|
Use -Dtest.class to change what tests are run on the command-line.
|
|
i.e., -Dtest.class=CommandLineRunnerTest will run just that test class.
|
|
-->
|
|
<property name="test.class" value="*Test"/>
|
|
|
|
<!--
|
|
Use -Dtest.fork to specify whether or not to fork the process.
|
|
Some machines run better with forking turned off.
|
|
-->
|
|
<property name="test.fork" value="true"/>
|
|
|
|
<!-- Force java 6 -->
|
|
<property name="ant.build.javac.source" value="1.6" />
|
|
<property name="ant.build.javac.target" value="1.6" />
|
|
|
|
<!-- define other variables -->
|
|
<property name="javac.debug" value="on" />
|
|
<property name="src.dir" value="${basedir}/src" />
|
|
<property name="gen.dir" value="${basedir}/gen" />
|
|
<property name="test.dir" value="${basedir}/test" />
|
|
<property name="externs.dir" value="${basedir}/externs" />
|
|
<!-- To workaround Ant limitation on overriding properties set on the
|
|
command-line, define a unique property to allow "build.dir" to
|
|
be change without forcing the build of Rhino to the same directory.
|
|
-->
|
|
<property name="closure.build.dir" value="${basedir}/build" />
|
|
<property name="build.dir" value="${closure.build.dir}" />
|
|
<property name="buildlib.dir" value="${build.dir}/lib" />
|
|
<property name="classes.dir" value="${build.dir}/classes" />
|
|
<property name="testClasses.dir" value="${build.dir}/test" />
|
|
<property name="javadoc.dir" value="${build.dir}/javadoc" />
|
|
<property name="stylesheetfile" value="${javadoc.dir}/dev_javadoc.css" />
|
|
<property name="lib.dir" value="${basedir}/lib" />
|
|
<property name="tools.dir" value="${basedir}/tools" />
|
|
<property name="compiler-jarfile"
|
|
value="${build.dir}/${ant.project.name}.jar" />
|
|
<property name="num-fuzz-tests" value="10000"/>
|
|
|
|
<property name="jsonml.dir" value="${basedir}/src/com/google/javascript/jscomp/jsonml" />
|
|
<property name="jsonml-classes.dir" value = "${build.dir}/jsonml-classes" />
|
|
<property name="jsonml-jarfile" value="${build.dir}/secure_compiler.jar" />
|
|
|
|
<property name="webservice.dir" value="${basedir}/src/com/google/javascript/jscomp/webservice" />
|
|
<property name="webservice-classes.dir" value = "${build.dir}/webservice-classes" />
|
|
<property name="webservice-jarfile" value="${build.dir}/webservice.jar" />
|
|
|
|
<!-- The following server is used to deploy releases to maven central via Sonatypes
|
|
publishing service which runs on oss.sonatype.org.
|
|
|
|
You will need to have an account on sonatype.org to push releases. You can
|
|
override these values if you want to deploy to a different repository
|
|
-->
|
|
<property name="maven-repository-url" value="https://oss.sonatype.org/service/local/staging/deploy/maven2/" />
|
|
<property name="maven-repository-id" value="sonatype-nexus-staging" />
|
|
|
|
<!-- proto compiler used to generate java classes from .proto files -->
|
|
<property name="protoc.executable" value="protoc"/>
|
|
|
|
<property file="build.properties" />
|
|
|
|
<!-- maven ant tasks -->
|
|
<path id="maven-ant-tasks.classpath" path="${tools.dir}/maven-ant-tasks-2.1.3.jar" />
|
|
<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
|
|
uri="antlib:org.apache.maven.artifact.ant"
|
|
classpathref="maven-ant-tasks.classpath" />
|
|
|
|
<!-- gather svn version -->
|
|
<target name="svnversion">
|
|
<exec outputproperty="build.svnVersion"
|
|
executable="svnversion"
|
|
failonerror="false"
|
|
failifexecutionfails="false"
|
|
dir="."/>
|
|
</target>
|
|
|
|
<!-- compile rhino -->
|
|
<target name="rhino">
|
|
<ant antfile="build.xml"
|
|
inheritAll="false"
|
|
dir="lib/rhino/"
|
|
target="jar">
|
|
<property name="build.dir" value="${buildlib.dir}"/>
|
|
<property name="no-e4x" value="true"/>
|
|
</ant>
|
|
</target>
|
|
|
|
<target name="rhino-jarjar"
|
|
depends="rhino"
|
|
description="Renamespaces Rhino">
|
|
<taskdef name="jarjar"
|
|
classname="com.tonicsystems.jarjar.JarJarTask"
|
|
classpath="lib/jarjar.jar"/>
|
|
<jarjar destfile="${buildlib.dir}/rhino.jar" update="true">
|
|
<zipfileset src="${buildlib.dir}/rhino1_7R5pre/js.jar"/>
|
|
<rule pattern="org.mozilla.javascript.**"
|
|
result="com.google.javascript.rhino.head.@1"/>
|
|
</jarjar>
|
|
</target>
|
|
|
|
<target name="protobuf-gen">
|
|
<fileset dir="${src.dir}" id="proto.classpath">
|
|
<include name="**/*.proto"/>
|
|
</fileset>
|
|
<pathconvert property="protofiles" pathsep=" " refid="proto.classpath"/>
|
|
<echo message="${protoc.executable} -I ${src.dir} --java_out=${gen.dir} ${protofiles}"/>
|
|
<exec executable="${protoc.executable}" searchpath="true">
|
|
<arg line="-I ${src.dir}"/>
|
|
<arg line="--java_out=${gen.dir}"/>
|
|
<arg line="${protofiles}"/>
|
|
</exec>
|
|
</target>
|
|
|
|
<!-- Generate pom.xml with the proper svn build number -->
|
|
<target name="pom" depends="svnversion">
|
|
<copy file="closure-compiler.pom" tofile="${build.dir}/pom.xml">
|
|
<filterset>
|
|
<filter token="build.svnVersion"
|
|
value="${build.svnVersion}"/>
|
|
</filterset>
|
|
</copy>
|
|
|
|
<property name="compiler-jarfile-nodeps" value="${build.dir}/closure-${ant.project.name}-r${build.svnVersion}.jar" />
|
|
<property name="compiler-jarfile-javadoc" value="${build.dir}/closure-${ant.project.name}-r${build.svnVersion}-javadoc.jar" />
|
|
<property name="compiler-jarfile-sources" value="${build.dir}/closure-${ant.project.name}-r${build.svnVersion}-sources.jar" />
|
|
|
|
<artifact:pom id="project" file="${build.dir}/pom.xml" />
|
|
</target>
|
|
|
|
<target name="mvn-install"
|
|
depends="jar-nodeps,jar-javadoc,jar-sources,pom"
|
|
description="Install closure-compiler artifacts into the local maven repo">
|
|
<artifact:install file="${compiler-jarfile-nodeps}">
|
|
<pom refid="project"/>
|
|
<attach file="${compiler-jarfile-javadoc}" classifier="javadoc"/>
|
|
<attach file="${compiler-jarfile-sources}" classifier="sources"/>
|
|
</artifact:install>
|
|
</target>
|
|
|
|
<!-- The mvn-deploy target takes the generated maven artifacts and pushes
|
|
them to the Sonatype repository. You will need to have a
|
|
gpg key defined and account set up. More docs on how to do this here:
|
|
|
|
https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
|
|
-->
|
|
|
|
<target name="mvn-deploy"
|
|
depends="mvn-install"
|
|
description="Signs and Deploys closure-compiler artifacts to the central maven repo">
|
|
|
|
<!-- sign and deploy the main artifact -->
|
|
<artifact:mvn>
|
|
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file" />
|
|
<arg value="-Durl=${maven-repository-url}" />
|
|
<arg value="-DrepositoryId=${maven-repository-id}" />
|
|
<arg value="-DpomFile=${build.dir}/pom.xml" />
|
|
<arg value="-Dfile=${compiler-jarfile-nodeps}" />
|
|
<arg value="-Pgpg" />
|
|
</artifact:mvn>
|
|
|
|
<!-- sign and deploy the sources artifact -->
|
|
<artifact:mvn>
|
|
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file" />
|
|
<arg value="-Durl=${maven-repository-url}" />
|
|
<arg value="-DrepositoryId=${maven-repository-id}" />
|
|
<arg value="-DpomFile=${build.dir}/pom.xml" />
|
|
<arg value="-Dfile=${compiler-jarfile-sources}" />
|
|
<arg value="-Dclassifier=sources" />
|
|
<arg value="-Pgpg" />
|
|
</artifact:mvn>
|
|
|
|
<!-- sign and deploy the javadoc artifact -->
|
|
<artifact:mvn>
|
|
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file" />
|
|
<arg value="-Durl=${maven-repository-url}" />
|
|
<arg value="-DrepositoryId=${maven-repository-id}" />
|
|
<arg value="-DpomFile=${build.dir}/pom.xml" />
|
|
<arg value="-Dfile=${compiler-jarfile-javadoc}" />
|
|
<arg value="-Dclassifier=javadoc" />
|
|
<arg value="-Pgpg" />
|
|
</artifact:mvn>
|
|
</target>
|
|
|
|
<!-- Sync maven dependencies listed in pom.xml -->
|
|
<target name="mvn-deps-sync" description="sync dependencies/jars in closure-compiler.pom to lib" depends="pom">
|
|
<artifact:dependencies filesetid="dependency.fileset"
|
|
pathid="dependency.classpath"
|
|
pomrefid="project"
|
|
versionsId="dependency.versions"/>
|
|
<mkdir dir="${lib.dir}"/>
|
|
<copy todir="${lib.dir}">
|
|
<fileset refid="dependency.fileset" />
|
|
<!-- This mapper strips off all leading directory information -->
|
|
<mapper classpathref="maven-ant-tasks.classpath"
|
|
classname="org.apache.maven.artifact.ant.VersionMapper"
|
|
from="${dependency.versions}" to="flatten" />
|
|
</copy>
|
|
</target>
|
|
|
|
<!-- set the classpath for the project -->
|
|
<!-- this includes the generated source class files -->
|
|
<!-- and every jar in the /lib directory -->
|
|
|
|
<path id="srcclasspath.path">
|
|
<pathelement location="${classes.dir}" />
|
|
<fileset dir="${lib.dir}">
|
|
<include name="args4j.jar"/>
|
|
<include name="guava.jar"/>
|
|
<include name="json.jar"/>
|
|
<include name="jsr305.jar"/>
|
|
<include name="protobuf-java.jar"/>
|
|
</fileset>
|
|
<fileset dir="${buildlib.dir}">
|
|
<include name="rhino.jar"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
<path id="allclasspath.path">
|
|
<pathelement location="${classes.dir}" />
|
|
<fileset dir="${lib.dir}">
|
|
<include name="*.jar"/>
|
|
</fileset>
|
|
<fileset dir="${buildlib.dir}">
|
|
<include name="rhino.jar"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
<target name="clean" description="delete generated files">
|
|
<delete dir="${build.dir}" />
|
|
</target>
|
|
|
|
<target name="compile"
|
|
description="compile the source code"
|
|
depends="rhino-jarjar,svnversion">
|
|
<mkdir dir="${classes.dir}" />
|
|
<javac debug="true" srcdir="${gen.dir}"
|
|
destdir="${classes.dir}"
|
|
excludes=".svn"
|
|
>
|
|
<classpath refid="srcclasspath.path" />
|
|
</javac>
|
|
<javac debug="true" srcdir="${src.dir}"
|
|
destdir="${classes.dir}"
|
|
excludes=".svn,**/jsonml/**,**/webservice/**,**/testing/**"
|
|
>
|
|
<classpath refid="srcclasspath.path" />
|
|
</javac>
|
|
|
|
<!-- Move Messages.properties where ScriptRuntime.java expects it. -->
|
|
<mkdir dir="${classes.dir}/rhino_ast/java/com/google/javascript/rhino/" />
|
|
<copy file="${src.dir}/com/google/javascript/rhino/Messages.properties"
|
|
todir="${classes.dir}/rhino_ast/java/com/google/javascript/rhino/" />
|
|
|
|
<!-- Move ParserConfig.properties where ParserRunner.java expects it. -->
|
|
<copy file="${src.dir}/com/google/javascript/jscomp/parsing/ParserConfig.properties"
|
|
todir="${classes.dir}/com/google/javascript/jscomp/parsing" />
|
|
|
|
<propertyfile
|
|
file="${classes.dir}/com/google/javascript/jscomp/parsing/ParserConfig.properties"
|
|
comment="Parser properties">
|
|
<entry key="compiler.date" type="date" value="now"/>
|
|
<entry key="compiler.version" value="${build.svnVersion}"/>
|
|
</propertyfile>
|
|
|
|
<!-- Move runtime_type_check.js where RuntimeTypeCheck.java expects it. -->
|
|
<mkdir dir="${classes.dir}/com/google/javascript/jscomp/js" />
|
|
<copy todir="${classes.dir}/com/google/javascript/jscomp/js">
|
|
<fileset dir="${src.dir}/com/google/javascript/jscomp/js" />
|
|
</copy>
|
|
</target>
|
|
|
|
<target name="jar-nodeps"
|
|
depends="compile,pom"
|
|
description="package compiler as an executable jar">
|
|
<zip destfile="${build.dir}/externs.zip" basedir="${externs.dir}" />
|
|
<jar destfile="${compiler-jarfile-nodeps}" update="true">
|
|
<fileset dir="${classes.dir}" />
|
|
<fileset dir="${build.dir}" includes="externs.zip" />
|
|
<zipfileset src="${build.dir}/lib/rhino.jar"/>
|
|
</jar>
|
|
</target>
|
|
|
|
|
|
<target name="jar"
|
|
depends="compile"
|
|
description="package compiler as an executable jar">
|
|
<zip destfile="${build.dir}/externs.zip" basedir="${externs.dir}" includes="*.js" />
|
|
<jar destfile="${compiler-jarfile}" update="true">
|
|
<fileset dir="${classes.dir}" />
|
|
<fileset dir="${build.dir}" includes="externs.zip" />
|
|
<zipfileset src="${lib.dir}/args4j.jar"/>
|
|
<zipfileset src="${lib.dir}/guava.jar"/>
|
|
<zipfileset src="${lib.dir}/json.jar"/>
|
|
<zipfileset src="${lib.dir}/jsr305.jar"/>
|
|
<zipfileset src="${lib.dir}/protobuf-java.jar"/>
|
|
|
|
<zipfileset src="${buildlib.dir}/rhino.jar"/>
|
|
|
|
<manifest>
|
|
<attribute name="Main-Class"
|
|
value="com.google.javascript.jscomp.CommandLineRunner" />
|
|
</manifest>
|
|
</jar>
|
|
</target>
|
|
|
|
<target name="compile-tests"
|
|
depends="compile"
|
|
description="compile the JUnit tests">
|
|
<mkdir dir="${testClasses.dir}" />
|
|
<javac debug="true" srcdir="${src.dir}"
|
|
destdir="${testClasses.dir}"
|
|
excludes=".svn"
|
|
>
|
|
<classpath refid="allclasspath.path" />
|
|
</javac>
|
|
<javac debug="true" srcdir="${test.dir}"
|
|
destdir="${testClasses.dir}"
|
|
excludes=".svn"
|
|
>
|
|
<classpath refid="allclasspath.path" />
|
|
</javac>
|
|
</target>
|
|
|
|
<target name="all-classes-jar"
|
|
depends="compile,compile-tests"
|
|
description="package the compiler and its tests into one jar">
|
|
<jar destfile="${compiler-jarfile}" update="true">
|
|
<fileset dir="${testClasses.dir}" />
|
|
<zipgroupfileset dir="${lib.dir}" includes="*.jar"/>
|
|
<zipfileset src="${buildlib.dir}/rhino.jar"/>
|
|
</jar>
|
|
</target>
|
|
|
|
<target name="test"
|
|
depends="compile-tests"
|
|
description="Compile and execute the JUnit tests.">
|
|
<mkdir dir="build/testoutput"/>
|
|
<junit printsummary="on" fork="${test.fork}"
|
|
forkmode="once" showoutput="true"
|
|
failureproperty="junit.failure">
|
|
<classpath refid="allclasspath.path" />
|
|
<classpath>
|
|
<pathelement location="${build.dir}/test" />
|
|
</classpath>
|
|
<batchtest todir="build/testoutput">
|
|
<formatter type="brief" usefile="false" />
|
|
<formatter type="xml" />
|
|
<fileset dir="${build.dir}/test">
|
|
<include name="**/${test.class}.class" />
|
|
</fileset>
|
|
</batchtest>
|
|
</junit>
|
|
<junitreport>
|
|
<fileset dir="build/testoutput" includes="*.xml"/>
|
|
<report todir="build/testoutput"/>
|
|
</junitreport>
|
|
<fail if="junit.failure"
|
|
message="Unit tests failed. See build/testoutput/index.html" />
|
|
</target>
|
|
|
|
<target name="fuzz-test"
|
|
depends="all-classes-jar"
|
|
description="checks the compiler against a variety of js programs">
|
|
<exec executable="java" failonerror="true">
|
|
<arg value="-cp" />
|
|
<arg value="${compiler-jarfile}" />
|
|
<arg value="com.google.javascript.jscomp.regtests.CompileEachLineOfProgramOutput" />
|
|
<arg value="generatejs"/>
|
|
<arg value="--stdout"/>
|
|
<arg value="${num-fuzz-tests}"/>
|
|
</exec>
|
|
</target>
|
|
|
|
<target name="javadoc"
|
|
description="generate Javadoc"
|
|
depends="rhino-jarjar">
|
|
<mkdir dir="${javadoc.dir}" />
|
|
<javadoc
|
|
destdir="${javadoc.dir}"
|
|
author="false"
|
|
protected="true"
|
|
windowtitle="Compiler"
|
|
additionalparam=" -notimestamp "
|
|
stylesheetfile="${stylesheetfile}">
|
|
<sourcepath>
|
|
<pathelement location="${src.dir}" />
|
|
<pathelement location="${gen.dir}" />
|
|
</sourcepath>
|
|
<classpath refid="allclasspath.path" />
|
|
<link href="http://java.sun.com/javase/6/docs/api/" />
|
|
<bottom><![CDATA[
|
|
<div id="footer">
|
|
<div id="footerlogo">
|
|
<img src="http://www.google.com/images/art.gif"
|
|
alt="Google colored balls">
|
|
</div>
|
|
|
|
<div id="copyright">
|
|
<p>© 2009 Google -
|
|
<a href="http://www.google.com/privacy.html">Privacy Policy</a> -
|
|
<a href="http://www.google.com/terms_of_service.html">Terms and Conditions</a> -
|
|
<a href="http://www.google.com/about.html">About Google</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
]]>
|
|
</bottom>
|
|
</javadoc>
|
|
</target>
|
|
|
|
<target name="jar-javadoc" depends="javadoc">
|
|
<jar jarfile="${compiler-jarfile-javadoc}">
|
|
<fileset dir="${javadoc.dir}" />
|
|
</jar>
|
|
</target>
|
|
|
|
<target name="jar-sources" depends="javadoc">
|
|
<jar jarfile="${compiler-jarfile-sources}">
|
|
<fileset dir="${src.dir}" />
|
|
<fileset dir="${gen.dir}" />
|
|
</jar>
|
|
</target>
|
|
|
|
<!-- JsonML package related targets -->
|
|
<!-- set the classpath for the project -->
|
|
<!-- this includes the generated source class files -->
|
|
<!-- and every jar in the /lib directory -->
|
|
<path id="jsonml-classpath.path">
|
|
<pathelement location="${classes.dir}" />
|
|
<fileset dir="${lib.dir}">
|
|
<include name="*.jar" />
|
|
</fileset>
|
|
<fileset dir="${classes.dir}">
|
|
<include name="*.class" />
|
|
</fileset>
|
|
<fileset dir="${buildlib.dir}">
|
|
<include name="rhino.jar"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
<target name="jsonml-compile"
|
|
description="compile the source code of classes from JsonML package"
|
|
depends="compile">
|
|
<mkdir dir="${jsonml-classes.dir}" />
|
|
<javac debug="true" srcdir="${jsonml.dir}"
|
|
destdir="${jsonml-classes.dir}"
|
|
excludes=".svn"
|
|
>
|
|
<classpath refid="jsonml-classpath.path" />
|
|
</javac>
|
|
</target>
|
|
|
|
<target name="jsonml-jar"
|
|
description="package the compiler and JsonML classes"
|
|
depends="jsonml-compile, compile">
|
|
<zip destfile="${build.dir}/externs.zip" basedir="${externs.dir}" includes="*.js" />
|
|
<jar destfile="${jsonml-jarfile}" update="true">
|
|
<zipgroupfileset dir="${lib.dir}" includes="*.jar"/>
|
|
<zipfileset src="${buildlib.dir}/rhino.jar"/>
|
|
<fileset dir="${classes.dir}" />
|
|
<fileset dir="${jsonml-classes.dir}" />
|
|
</jar>
|
|
</target>
|
|
|
|
<target name="webservice-compile"
|
|
description="compile the source code of classes from the webservice package"
|
|
depends="compile">
|
|
<mkdir dir="${webservice-classes.dir}" />
|
|
<javac debug="true" srcdir="${webservice.dir}"
|
|
destdir="${webservice-classes.dir}"
|
|
excludes=".svn"
|
|
>
|
|
<classpath refid="jsonml-classpath.path" />
|
|
</javac>
|
|
</target>
|
|
|
|
<target name="webservice-jar"
|
|
description="package the compiler and Webservice classes"
|
|
depends="webservice-compile, compile">
|
|
<zip destfile="${build.dir}/externs.zip" basedir="${externs.dir}" includes="*.js" />
|
|
<jar destfile="${webservice-jarfile}" update="true">
|
|
<zipgroupfileset dir="${lib.dir}" includes="*.jar"/>
|
|
<zipfileset src="${buildlib.dir}/rhino.jar"/>
|
|
<fileset dir="${classes.dir}" />
|
|
<fileset dir="${webservice-classes.dir}" />
|
|
</jar>
|
|
</target>
|
|
</project>
|