legacy-svn-scala/build.examples.xml

271 lines
8.8 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id$ -->
<project name="scala-examples" default="build">
<description>
I am SABBUS for ${ant.project.name}, the build system for the Scala compiler and core
library. Please check the 'docs/README' file for more information about me.
</description>
<echo level="info" message="Running SABBUS for ${ant.project.name}..."/>
<!-- ===========================================================================
PROPERTIES
============================================================================ -->
<property environment="env"/>
<!-- Prevents system classpath from being used -->
<property name="build.sysclasspath" value="ignore"/>
<!-- Base properties -->
<property name="src.dir" value="${basedir}/docs"/>
<property name="src.examples.dir" value="${src.dir}/examples"/>
<property name="lib.dir" value="${basedir}/lib"/>
<!-- User properties -->
<property file="${basedir}/build.examples.properties"/>
<!-- Location of pre-compiled libraries properties -->
<property name="scala.lib.jar" value="${lib.dir}/scala-library.jar"/>
<property name="scala.comp.jar" value="${lib.dir}/scala-compiler.jar"/>
<property name="jaco.jar" value="${lib.dir}/jaco.jar"/>
<property name="fjbg.name" value="fjbg.jar"/>
<property name="fjbg.jar" value="${lib.dir}/${fjbg.name}"/>
<property name="ant.jar" value="${ant.home}/lib/ant.jar"/>
<property name="ant-contrib.jar" value="${lib.dir}/ant-contrib.jar"/>
<!-- -->
<property name="build.dir" value="${basedir}/build"/>
<property name="build.examples.dir" value="${build.dir}/examples"/>
<!-- tbd -->
<property name="excludes.compile"
value="**/*current.*,**/fors.*,**/parsers2.*,**/typeinf.*"/>
<property name="excludes.run"
value="**/Parsers.*"/>
<!-- ===========================================================================
INITIALISATION
============================================================================ -->
<target name="init" unless="init.avail">
<tstamp prefix="start">
<format
property="human-time"
pattern="EEEE, d MMMM yyyy, HH:mm:ss (zz)"
/>
</tstamp>
<!-- Testing if everything is in place -->
<echo level="verbose" message="scala.lib.jar=${scala.lib.jar}"/>
<fail message="Scala library in 'lib/' is not available">
<condition><not><and>
<available
classname="scala.Predef"
classpath="${scala.lib.jar}"
/>
<available
classname="scala.List"
classpath="${scala.lib.jar}"
/>
<available
classname="scala.runtime.ObjectRef"
classpath="${scala.lib.jar}"
/>
</and></not></condition>
</fail>
<echo level="verbose" message="scala.comp.jar=${scala.comp.jar}"/>
<fail message="Scala compiler in 'lib/' is not available">
<condition><not>
<available
classname="scala.tools.ant.Scalac"
classpath="${scala.comp.jar}:${scala.lib.jar}"
/>
</not></condition>
</fail>
<echo level="verbose" message="fjbg.jar=${fjbg.jar}"/>
<fail message="FJBG library in 'lib/' is not available">
<condition><not>
<available
classname="ch.epfl.lamp.fjbg.JCode"
classpath="${fjbg.jar}"
/>
</not></condition>
</fail>
<echo level="verbose" message="jaco.jar=${jaco.jar}"/>
<fail message="JaCo compiler in 'lib/' is not available">
<condition><not>
<available classname="jaco.pizza.Main" classpath="${jaco.jar}"/>
</not></condition>
</fail>
<echo level="verbose" message="ant.jar=${ant.jar}"/>
<echo level="verbose" message="ant-contrib.jar=${ant-contrib.jar}"/>
<fail message="Additional Ant tasks in 'lib/' is not available">
<condition><not>
<available
classname="net.sf.antcontrib.AntContribVersion"
classpath="${ant-contrib.jar}"
/>
</not></condition>
</fail>
<!-- Creating class-pathes -->
<path id="common.classpath">
<pathelement location="${fjbg.jar}"/>
</path>
<path id="scala.classpath">
<pathelement location="${scala.lib.jar}"/>
<pathelement location="${scala.comp.jar}"/>
<path refid="common.classpath"/>
</path>
<!-- Creating boot-level tasks -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="${ant-contrib.jar}"/>
</classpath>
</taskdef>
<!-- Finding out what system architecture is being used -->
<condition property="os.win">
<os family="windows"/>
</condition>
<if><isset property="os.win"/>
<then>
<exec
executable="cygpath"
vmlauncher="no"
errorproperty="cygpath.err"
outputproperty="cygpath.out"
>
<arg value="--windir"/>
</exec>
<condition property="os.cygwin">
<equals arg1="${cygpath.err}" arg2=""/>
</condition>
</then>
</if>
<condition property="os.unix">
<or>
<os family="unix"/>
<os family="mac"/>
<isset property="os.cygwin"/>
</or>
</condition>
<if><isset property="os.cygwin"/>
<then><property name="os.type" value="Cygwin"/></then>
<elseif><isset property="os.win"/>
<then><property name="os.type" value="Windows"/></then>
</elseif>
<elseif><isset property="os.unix"/>
<then><property name="os.type" value="UNIX"/></then>
</elseif>
<else>
<fail>System environment could not be determined</fail>
</else>
</if>
<echo
level="info"
message="OS: ${os.type} (${os.name} ${os.arch} ${os.version});"
/>
<echo
level="info"
message="Java: ${java.version} ('${java.home}');"
/>
<echo
level="info"
message="JVM: ${java.vm.name} ${java.vm.version};"
/>
<echo
level="info"
message="Ant: ${ant.version}."
/>
<property name="init.avail" value="yes"/>
</target>
<target name="setup" depends="init">
<!-- Creating boot-level tasks -->
<taskdef name="scalac"
classname="scala.tools.ant.Scalac"
classpathref="scala.classpath"/>
<property name="init.avail" value="yes"/>
</target>
<!-- ===========================================================================
BUILD
============================================================================ -->
<target name="build" depends="setup">
<mkdir dir="${build.dir}"/>
<echo level="verbose">src.dir=${src.dir}</echo>
<pathconvert property="list" pathsep=",">
<path>
<fileset dir="${src.dir}" includes="examples/*.scala"
excludes="${excludes.compile}"/>
</path>
<mapper>
<globmapper from="${src.dir}/*" to="*"/>
</mapper>
</pathconvert>
<for list="${list}" param="file">
<sequential>
<scalac srcdir="${src.dir}"
destdir="${build.dir}">
<classpath>
<pathelement location="${scala.lib.jar}"/>
<pathelement location="${build.dir}"/>
</classpath>
<include name="@{file}"/>
</scalac>
</sequential>
</for>
</target>
<!-- ===========================================================================
RUN
============================================================================ -->
<target name="run" depends="build">
<pathconvert property="list" pathsep=",">
<path>
<fileset dir="${src.dir}" includes="examples/*.scala"
excludes="${excludes.run}"/>
</path>
<mapper>
<globmapper from="${src.dir}/*" to="*"/>
</mapper>
</pathconvert>
<for list="${list}" param="file">
<sequential>
<var name="classname" unset="true"/>
<basename property="classname" file="@{file}" suffix=".scala"/>
<echo>Executing Scala program examples.${classname}..</echo>
<java classname="examples.${classname}" fork="true"
output="${build.examples.dir}/${classname}.log"
error="${build.examples.dir}/${classname}.log"
append="true">
<classpath>
<pathelement location="${scala.lib.jar}"/>
<pathelement location="${build.dir}"/>
</classpath>
</java>
</sequential>
</for>
</target>
<!-- ===========================================================================
CLEAN
============================================================================ -->
<macrodef name="remove">
<attribute name="dir"/>
<sequential>
<delete
dir="@{dir}"
includeemptydirs="yes"
quiet="yes"
failonerror="no"
/>
</sequential>
</macrodef>
<target name="clean" description="Removes all build examples">
<remove dir="${build.examples.dir}"/>
</target>
</project>