diff options
-rw-r--r-- | fabientestbuild.xml | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/fabientestbuild.xml b/fabientestbuild.xml new file mode 100644 index 0000000000..b0010bde99 --- /dev/null +++ b/fabientestbuild.xml @@ -0,0 +1,333 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- $Id$ --> +<project name="nsc" default="build"> + + <description> + This build-file builds the Scala NSC compiler as well as various related + tools. The 'build.TEMPLATE.properties' file must be customised for your own + particular system, no other customisation should be required. The build + file expects the file structure of a Scala CVS distribution. + </description> + + <!-- The system classpath should not be used --> + <property name="build.sysclasspath" value="ignore" /> + + <!-- Properties in 'build.${user.name}.properties' take precedence over + properties in 'build.default.properties'. + --> + <echo level="verbose">Loading properties from '${basedir}/build.support/build.${user.name}.properties'</echo> + <property file="${basedir}/build.support/build.${user.name}.properties"/> + <echo level="verbose">Loading properties from '${basedir}/build.support/build.default.properties'</echo> + <property file="${basedir}/build.support/build.default.properties"/> + + <!-- A path containing pre-compiled Scala libraries found typically + in a Scala distribution. + --> + <path id="osc.classpath"> + <pathelement location="${oslib.jar}"/> + <pathelement location="${oslib.src}"/> + <pathelement location="${ostools.jar}"/> + <pathelement location="${fjbg.jar}"/> + <pathelement location="${msil.jar}"/> + </path> + + <!-- A path containing the Pico library --> + <path id="pico.classpath"> + <pathelement location="${jaco.jar}" /> + </path> + + <target name="all" + description="Builds and tests everything; creates a distribution." /> + + <!-- + ##################################################################### + INIT + ##################################################################### + --> + + <target name="init.osc"> + <echo level="verbose">oslib.jar=${oslib.jar}</echo> + <echo level="verbose">ostools.jar=${ostools.jar}</echo> + <echo level="verbose">fjbg.jar=${fjbg.jar}</echo> + <echo level="verbose">msil.jar=${msil.jar}</echo> + <fail message="Required classes for OSC are missing; check the 'oslib.jar', 'ostools.jar' properties in 'build.${user.name}.properties'."> + <condition><not><and> + <available classname="scala.List" classpathref="osc.classpath" /> + <available classname="scala.runtime.RunTime" classpathref="osc.classpath" /> + <available classname="scala.tools.scalac.Main" classpathref="osc.classpath" /> + <available classname="scala.tools.scalac.ant.Scalac" classpathref="osc.classpath" /> + </and></not></condition> + </fail> + <fail message="Required classes for OSC are missing; check the 'fjbg.jar' property in 'build.${user.name}.properties'."> + <condition><not><and> + <available classname="ch.epfl.lamp.fjbg.JField" classpathref="osc.classpath"/> + <available classname="ch.epfl.lamp.util.ByteArray" classpathref="osc.classpath"/> + </and></not></condition> + </fail> + <fail message="Required classes for OSC are missing; check the 'msil.jar' property in 'build.${user.name}.properties'."> + <condition><not><and> + <available classname="ch.epfl.lamp.compiler.msil.Module" classpathref="osc.classpath"/> + <available classname="ch.epfl.lamp.compiler.msil.Type" classpathref="osc.classpath"/> + </and></not></condition> + </fail> + <taskdef name="osc" classname="scala.tools.scalac.ant.Scalac" classpathref="osc.classpath"/> + </target> + + <target name="init.nsc" depends="build.osc.nstools, build.pico.nslib"> + <taskdef name="nsc" classname="scala.tools.nsc.ant.NSC$class"> + <classpath> + <pathelement location="${build.osc-nstools.dir}" /> + <pathelement location="${build.nslib.dir}" /> + <pathelement location="${oslib.jar}" /> + <pathelement location="${fjbg.jar}" /> + <pathelement location="${msil.jar}" /> + </classpath> + </taskdef> + </target> + + <target name="init.pico"> + <echo level="verbose">jaco.jar=${jaco.jar}</echo> + <fail message="Required classes for PiCo are missing; check the 'jaco.jar' property in 'build.properties'."> + <condition><not><and> + <available classname="jaco.pizza.Main" classpathref="pico.classpath"/> + <available classname="jaco.pizza.ant.Pico" classpathref="pico.classpath"/> + </and></not></condition> + </fail> + <taskdef name="pico" classname="jaco.pizza.ant.Pico" classpathref="pico.classpath"/> + </target> + + <!-- + ##################################################################### + BUILD + ##################################################################### + --> + + <target name="build" depends="build.nsc.nstools" + description="Builds new Scala (compiler and library)." /> + + <target name="build.pico.nslib" depends="init.pico" + description="Builds the runtime and pico libraries of the new Scala library."> + <mkdir dir="${build.nslib.dir}"/> + <pico srcdir="${sources.dir}" destdir="${build.nslib.dir}" + scalahack="true"> + <classpath> + <pathelement location="${build.nslib.dir}" /> + </classpath> + <include name="scala/runtime/*.java" /> + <include name="scala/runtime/**/*.java" /> + <include name="scala/tools/util/*.java" /> + <include name="scala/*.java" /> + <not> + <present targetdir="${newsources.dir}" present="both"> + <mapper type="glob" from="*.scala" to="*.java" /> + </present> + </not> + </pico> + <delete> + <fileset dir="${build.nslib.dir}"> + <present targetdir="${newsources.dir}" present="both"> + <mapper type="glob" from="*.class" to="*.scala" /> + </present> + </fileset> + </delete> + </target> + + <target name="build.osc.nstools" depends="init.osc" + description="Builds the new Scala compiler."> + <mkdir dir="${build.osc-nstools.dir}"/> + <osc srcdir="${sources.dir}" destdir="${build.osc-nstools.dir}" + force="changed"> + <classpath> + <pathelement location="${build.osc-nstools.dir}"/> + <pathelement location="${oslib.jar}"/> + <pathelement location="${fjbg.jar}"/> + <pathelement location="${ant.jar}"/> + </classpath> + <include name="scala/tools/nsc/**/*.scala"/> + <include name="scala/runtime/*.scala"/> + <include name="scala/runtime/**/*.scala"/> + </osc> + </target> + + <target name="build.nsc.nslib" depends="init.nsc, build.pico.nslib" + description="Builds the Scala library with the new Scala compiler."> + <mkdir dir="${build.nslib.dir}"/> + <nsc srcdir="${sources.dir}" destdir="${build.nslib.dir}" + usepredefs="false" + stop="${nsc.stop}" skip="${nsc.skip}" check="${nsc.check}" + logging="${nsc.logging}"> + <classpath> + <pathelement location="${build.nslib.dir}"/> + <pathelement location="${sources.dir}"/> + <pathelement location="${newsources.dir}"/> + <pathelement location="${fjbg.jar}"/> + </classpath> + <include name="scala/Predef.scala"/> + <include name="scala/runtime/ScalaRunTime.scala"/> + </nsc> + <nsc srcdir="${sources.dir}" destdir="${build.nslib.dir}" + excludesfile="${nsc.nslib.excludes}" + stop="${nsc.stop}" skip="${nsc.skip}" check="${nsc.check}" + logging="${nsc.logging}"> + <classpath> + <pathelement location="${build.nslib.dir}"/> + <pathelement location="${sources.dir}"/> + <pathelement location="${newsources.dir}"/> + <pathelement location="${fjbg.jar}"/> + </classpath> + <include name="scala/**/*.scala"/> + <exclude name="scala/Predef.scala"/> + <exclude name="scala/runtime/ScalaRunTime.scala"/> + <exclude name="scala/tools/**"/> + </nsc> + </target> + + <target name="build.nsc.nstools" depends="init.nsc, build.nsc.nslib" + description="Builds the Scala tools (NSC and Scalap) with the new Scala compiler."> + <mkdir dir="${build.nstools.dir}"/> + <nsc srcdir="${sources.dir}" destdir="${build.nstools.dir}" + excludesfile="${nsc.nstools.excludes}" + stop="${nsc.stop}" skip="${nsc.skip}" check="${nsc.check}" + logging="${nsc.logging}"> + <classpath> + <pathelement location="${build.nslib.dir}" /> + <pathelement location="${build.nstools.dir}" /> + <pathelement location="${fjbg.jar}" /> + <pathelement location="${ant.jar}" /> + </classpath> + <include name="scala/tools/nsc/**/*.scala" /> + <exclude name="scala/tools/nsc/ant/*.scala" /> + </nsc> + </target> + + <!-- + ##################################################################### + DISTRIB + ##################################################################### + --> + + <condition property="os.unix"> + <or> + <os family="unix" /> + <os family="mac" /> + </or> + </condition> + + <condition property="os.mac"> + <os family="mac"/> + </condition> + + <condition property="os.win"> + <os family="windows"/> + </condition> + + <target name="distrib" + depends="distrib.unix, distrib.mac, distrib.win" + description="Creates a (simplified) Scala distribution." /> + + <target name="distrib.unix" depends="build" if="os.unix"> + <tstamp prefix="start"/> + <property name="distrib.current.dir" value="${distrib.dir}/${distrib.current.prefix}-${start.DSTAMP}-${start.TSTAMP}"/> + <mkdir dir="${distrib.current.dir}/share/scala"/> + <mkdir dir="${distrib.current.dir}/share/scala/lib"/> + <symlink resource="${distrib.current.dir}/share/scala/lib/" link="${distrib.current.dir}/lib" /> + <jar destfile="${distrib.current.dir}/share/scala/lib/${distrib.osc-nstools.jar}" basedir="${build.osc-nstools.dir}"> + <include name="**" /> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="Main-Class" value="scala.tools.nsc.Main$class"/> + </manifest> + </jar> + <jar destfile="${distrib.current.dir}/share/scala/lib/${distrib.nstools.jar}" + basedir="${build.nstools.dir}"> + <include name="**" /> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="Main-Class" value="scala.tools.nsc.Main$class"/> + </manifest> + </jar> + <jar destfile="${distrib.current.dir}/share/scala/lib/${distrib.nslib.jar}" basedir="${build.nslib.dir}"> + <include name="**" /> + <manifest> + <attribute name="Built-By" value="${user.name}" /> + </manifest> + </jar> + <mkdir dir="${distrib.current.dir}/share/scala/bin" /> + <symlink resource="${distrib.current.dir}/share/scala/bin/" + link="${distrib.current.dir}/bin" /> + <!-- Set up bin --> + <mkdir dir="${distrib.current.dir}/share/scala/man" /> + <!-- Set up man --> + <mkdir dir="${distrib.current.dir}/share/scala/doc" /> + <!-- Set up doc --> + <symlink resource="${distrib.current.dir}/" + link="${distrib.dir}/latest" /> + </target> + + <target name="distrib.mac" depends="distrib.unix, build" if="os.mac"> + + </target> + + <target name="distrib.win" depends="build" if="os.win"> + <fail>Windows distribution is not supported yet.</fail> + </target> + + <!-- + ##################################################################### + TEST + ##################################################################### + --> + + <target name="test" description="Runs the Scala test suite."> + <fail>'test' is not implemented yet.</fail> + </target> + + <!-- + ##################################################################### + DOCS + ##################################################################### + --> + + <target name="docs" description="Generates all documentation."> + <fail>'docs' is not implemented yet.</fail> + </target> + + <!-- + ##################################################################### + CLEAN + ##################################################################### + --> + + <target name="clean" + depends="clean.build, clean.distrib" + description="Deletes all generated files, both build and distribution files." /> + + <target name="clean.build" description="Deletes all generated build files."> + <delete dir="${build.dir}" includeemptydirs="true" + quiet="true" failonerror="false" /> + </target> + + <target name="clean.distrib" + description="Deletes all generated distribution files."> + <delete dir="${distrib.dir}" includeemptydirs="true" + quiet="true" failonerror="false"> + <fileset> + <include name="${distrib.current.prefix}-*" /> + </fileset> + </delete> + </target> + + <!-- + ##################################################################### + HELP + ##################################################################### + --> + + <target name="help" depends="usage"/> + + <target name="usage" description="Display usage information."> + <echo>Execute 'ant -projecthelp' for build file help.</echo> + <echo>Execute 'ant -help' for Ant help.</echo> + </target> + +</project> |