blob: 9009967a33c30b85ebcb362e4178f409e2f48b8c (
plain) (
tree)
|
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: $ -->
<project name="build-imports" basedir="../.." default=".">
<property environment="env"/>
<!-- Prevents system classpath from being used -->
<property name="build.sysclasspath" value="ignore"/>
<!-- Defines the repository layout -->
<property name="lib.dir" value="${basedir}/lib"/>
<property name="src.dir" value="${basedir}/src"/>
<property name="test.dir" value="${basedir}/test"/>
<property name="docs.dir" value="${basedir}/docs"/>
<property name="scripts.dir" value="${src.dir}/build"/>
<!-- Loads custom properties definitions -->
<property file="${scripts.dir}/build-imports.properties"/>
<!-- Defines the product being built -->
<property name="vendor.name" value="LAMP/EPFL"/>
<property name="copyright.string" value="(c) 2002-2008 ${vendor.name}"/>
<property name="java.flags" value="-Xmx768M -Xms16M"/>
<property name="number.file" value="${basedir}/build.number"/>
<!-- Sets location of pre-compiled libraries -->
<property name="lib.starr.jar" value="${lib.dir}/scala-library.jar"/>
<property name="comp.starr.jar" value="${lib.dir}/scala-compiler.jar"/>
<property name="fjbg.jar" value="${lib.dir}/fjbg.jar"/>
<property name="msil.jar" value="${lib.dir}/msil.jar"/>
<property name="jline.jar" value="${lib.dir}/jline.jar"/>
<property name="ant.jar" value="${ant.home}/lib/ant.jar"/>
<property name="ant-contrib.jar" value="${lib.dir}/ant-contrib.jar"/>
<property name="lib.jar.name" value="scala-library.jar"/>
<property name="dbc.jar.name" value="scala-dbc.jar"/>
<property name="comp.jar.name" value="scala-compiler.jar"/>
<property name="partest.jar.name" value="scala-partest.jar"/>
<property name="libsrc.jar.name" value="scala-library-src.jar"/>
<property name="dbcsrc.jar.name" value="scala-dbc-src.jar"/>
<property name="parsrc.jar.name" value="scala-partest-src.jar"/>
<property name="compsrc.jar.name" value="scala-compiler-src.jar"/>
<property name="scala.exec.name" value="scala"/>
<property name="scalac.exec.name" value="scalac"/>
<property name="scaladoc.exec.name" value="scaladoc"/>
<property name="fsc.exec.name" value="fsc"/>
<property name="comp.prop.name" value="compiler.properties"/>
<property name="lib.prop.name" value="library.properties"/>
<property name="par.prop.name" value="partest.properties"/>
<!-- if available, faster stability checking -->
<property name="stability.tool" value="/home/linuxsoft/apps/stability/stability"/>
<!-- ===========================================================================
ANT INITIALISATION
============================================================================ -->
<target name="ant-init" unless="ant-init.avail">
<!-- Making sure lib/ contains everything that is needed -->
<fail message="A required library is missing in 'lib/'. The README file describes what should be there.">
<condition><not><and>
<available file="${lib.starr.jar}"/>
<available file="${comp.starr.jar}"/>
<available file="${fjbg.jar}"/>
<available file="${msil.jar}"/>
<available file="${jline.jar}"/>
<available file="${ant-contrib.jar}"/>
</and></not></condition>
</fail>
<!-- Setting-up Ant contrib tasks -->
<taskdef resource="net/sf/antcontrib/antlib.xml"
classpath="${ant-contrib.jar}"/>
<fail message="External library ${ant-contrib.jar} requires the optional Ant tasks to be installed">
<condition><not><and>
<available file="${ant.home}/lib/ant-nodeps.jar"/>
</and></not></condition>
</fail>
<property name="ant-init.avail" value="yes"/>
</target>
<!-- ===========================================================================
INITIALISATION
============================================================================ -->
<target name="init" depends="ant-init" unless="init.avail">
<!-- Making sure enough memory is available -->
<propertyregex
property="memory.set" input="${env.ANT_OPTS}" select="\1"
regexp="-Xmx([1-9][0-9]{3,}|[6-9][0-9]{2}|5[2-9][0-9]|51[2-9])(M|m)"/>
<fail
unless="memory.set"
message="SABBUS requires additional memory. Please set the 'ANT_OPTS' environment property to '-Xmx512M' or more."/>
<propertyregex
property="memory.info" input="${env.ANT_OPTS}" defaultValue=""
select=" (raise to 600 MB for performance)"
regexp="-Xmx([1-5][0-9]{2})(M|m)"/>
<!-- This is the start time for the distribution -->
<stopwatch name="timer.dist"/>
<tstamp prefix="time">
<format property="human" pattern="EEEE, d MMMM yyyy, HH:mm:ss (zz)"/>
<format property="short" pattern="yyyyMMddHHmmss"/>
</tstamp>
<!-- 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>
<!-- Finding out SVN revision -->
<exec
executable="svn" vmlauncher="no"
errorproperty="svn.err" outputproperty="svn.out">
<arg line=" info ${basedir}"/>
</exec>
<propertyregex
property="svn.number" input="${svn.out}" select="\1"
regexp="Revision: ([0-9]+)"
defaultValue="x"/>
<property name="init.avail" value="yes"/>
<!-- Printing out some information about what environment I am running in -->
<echo level="info"
message="OS: ${os.type} (${os.name} ${os.arch} ${os.version});"/>
<echo level="info"
message="Java: ${java.vm.name} ${java.vm.version} ('${java.home}');"/>
<echo level="info"
message="Memory: ${memory.set} MB${memory.info};"/>
<echo level="info"
message="Ant: ${ant.version}."/>
</target>
<!-- ===========================================================================
DIST
============================================================================ -->
<target name="dist.devel" depends="init">
<property file="${number.file}"/>
<property name="version.number"
value="${version.major}.${version.minor}.${version.patch}.r${svn.number}"/>
<runtarget target="pack"/>
</target>
<target name="dist.patch" depends="init">
<property file="${number.file}"/>
<property name="version.number"
value="${version.major}.${version.minor}.${version.patch}.${version.suffix}"/>
<runtarget target="pack"/>
</target>
<target name="dist.minor" depends="init">
<property file="${number.file}"/>
<property name="version.number"
value="${version.major}.${version.minor}.${version.patch}.${version.suffix}"/>
<runtarget target="pack"/>
</target>
<target name="pack"
depends="build.archive"
description="Packs a distribution for SBaz and ZIP/TAR"/>
<target name="build.dist" depends="binaries"
description="Creates the latest Scala distribution">
<!-- Copy the API, examples and man -->
<copy todir="${dist.current.dir}/doc/scala">
<fileset dir="${docs.dir}" includes="README,LICENSE"/>
</copy>
<!--
<copy todir="${dist.current.dir}/doc/scala/api">
<fileset dir="${api-lib.dir}"/>
</copy>
-->
<copy todir="${dist.current.dir}/doc/scala/examples">
<fileset dir="${docs.dir}/examples"/>
</copy>
<!--
<copy todir="${dist.current.dir}/man/man1">
<fileset dir="${tooldocs.dir}" includes="**/*.1"/>
</copy>
<copy todir="${dist.current.dir}/doc/scala/tools">
<fileset dir="${tooldocs.dir}">
<include name="**/*.html"/>
<include name="**/*.css"/>
<include name="**/*.gif"/>
<include name="**/*.png"/>
</fileset>
</copy>
-->
<stopwatch name="timer.dist" action="total"/>
</target>
<target name="build.archive" depends="build.dist">
<tar
destfile="${dist.dir}/scala-${version.number}.tgz"
compression="gzip">
<tarfileset
prefix="scala-${version.number}"
dir="${dist.current.dir}"
includes="bin/**" mode="755"
/>
<tarfileset
prefix="scala-${version.number}"
dir="${dist.current.dir}"
excludes="bin/**"
/>
</tar>
<checksum
file="${dist.dir}/scala-${version.number}.tgz"
forceOverwrite="yes"
fileext=".md5"/>
<!-- Create zip archive -->
<zip
destfile="${dist.dir}/scala-${version.number}.zip">
<zipfileset
prefix="scala-${version.number}"
dir="${dist.current.dir}"
/>
</zip>
<checksum
file="${dist.dir}/scala-${version.number}.zip"
forceOverwrite="yes"
fileext=".md5"/>
<!-- Create source archive -->
<copy todir="${dist.dir}/scala-${version.number}">
<fileset
dir="${basedir}"
excludes="build,build/**,dists/**"
/>
</copy>
<tar basedir="${dist.dir}"
destfile="${dist.dir}/scala-${version.number}-sources.tgz"
compression="gzip"
includes="scala-${version.number}/**"
/>
</target>
<!-- ===========================================================================
TEST
============================================================================ -->
<target name="test" depends="test.stability"
description="Tests the build for stability"/>
<!-- Compares quick and test level -->
<target name="test.stability" depends="build.strap">
<if><available file="${stability.tool}"/>
<then> <!-- use stability tool for fast checking -->
<exec executable="${stability.tool}" failonerror="true">
<arg value="${quick.dir}"/>
<arg value="${strap.dir}"/>
</exec>
</then><else> <!-- check stability the slow way -->
<checksum totalproperty="quick.md5">
<fileset dir="${quick.dir}/lib">
<include name="library/**"/>
<include name="compiler/**"/>
</fileset>
</checksum>
<delete quiet="yes" failonerror="no">
<fileset dir="${quick.dir}" includes="**/*.MD5"/>
</delete>
<checksum totalproperty="strap.md5">
<fileset dir="${strap.dir}/lib">
<include name="library/**"/>
<include name="compiler/**"/>
</fileset>
</checksum>
<delete quiet="yes" failonerror="no">
<fileset dir="${strap.dir}" includes="**/*.MD5"/>
</delete>
<fail message="Build ${version.number} is not stable">
<condition><not>
<equals arg1="${quick.md5}" arg2="${strap.md5}"/>
</not></condition>
</fail>
<echo level="info" message="Build ${version.number} is stable."/>
</else></if>
</target>
<!-- ===========================================================================
CLEAN
============================================================================ -->
<macrodef name="remove">
<attribute name="dir"/>
<sequential>
<if>
<available file="@{dir}/is_symlink"/>
<then>
<delete includeemptydirs="true" quiet="yes" failonerror="no">
<fileset dir="@{dir}" includes="**/*"/>
</delete>
</then></if>
<delete dir="@{dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/>
</sequential>
</macrodef>
<target name="clean" depends="ant-init" description="Removes QUICK, STRAP and API build products">
<remove dir="${quick.dir}"/>
<remove dir="${strap.dir}"/>
<remove dir="${api.dir}"/>
</target>
<target name="clean.build" depends="ant-init"
description="Removes all build products">
<remove dir="${build.dir}"/>
</target>
<target name="clean.all" depends="ant-init"
description="Removes all build products and distributions">
<remove dir="${build.dir}"/>
<remove dir="${dist.dir}"/>
</target>
<target name="clean.unfreeze" depends="init">
<delete file="${locker.dir}/complete" quiet="yes" failonerror="no"/>
<remove dir="${quick.dir}"/>
</target>
<!-- ===========================================================================
MACROS
============================================================================ -->
<macrodef name="build.support">
<attribute name="outputdir"/>
<sequential>
<copy todir="@{outputdir}/lib/library">
<fileset dir="${src.dir}/library">
<include name="**/*.tmpl"/>
<include name="**/*.xml"/>
<include name="**/*.js"/>
<include name="**/*.css"/>
</fileset>
</copy>
<copy todir="@{outputdir}/lib/compiler">
<fileset dir="${src.dir}/compiler">
<include name="**/*.tmpl"/>
<include name="**/*.xml"/>
<include name="**/*.js"/>
<include name="**/*.css"/>
</fileset>
</copy>
</sequential>
</macrodef>
<macrodef name="buildlayer">
<attribute name="name"/>
<attribute name="libpath"/>
<attribute name="comppath"/>
<attribute name="outputdir"/>
<attribute name="buildall" default=""/>
<sequential>
<property name="built.@{name}" value="yes"/>
<stopwatch name="timer.@{name}"/>
<!-- Create layer-specific task 'scalac' -->
<path id="starr.classpath">
<pathelement location="@{libpath}"/>
<pathelement location="@{comppath}"/>
<pathelement location="${fjbg.jar}"/>
<pathelement location="${msil.jar}"/>
<pathelement location="${jline.jar}"/>
<pathelement location="${ant.jar}"/>
</path>
<taskdef
name="scalac"
classname="scala.tools.ant.Scalac"
classpathref="starr.classpath"
/>
<!-- Build library -->
<mkdir dir="@{outputdir}/lib/library"/>
<javac
srcdir="${src.dir}/library"
destdir="@{outputdir}/lib/library"
source="1.4" target="1.4" deprecation="yes"
classpath="@{outputdir}/lib/library"
includes="**/*.java"/>
<scalac
srcdir="${src.dir}/library"
destdir="@{outputdir}/lib/library"
usepredefs="no"
addparams="${nsc.params}" target="${nsc.target}"
deprecation="yes" unchecked="yes"
classpath="@{outputdir}/lib/library"
includes="scala/Predef.scala"/>
<scalac
srcdir="${src.dir}/library"
destdir="@{outputdir}/lib/library"
addparams="${nsc.params}" target="${nsc.target}"
deprecation="yes" unchecked="yes"
classpath="@{outputdir}/lib/library">
<include name="**/*.scala"/>
<exclude name="scala/Predef.scala"/>
<exclude name="scala/dbc/**"/>
<exclude name="scala/actors/**"/>
<excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
</scalac>
<echo
file="@{outputdir}/lib/library/${lib.prop.name}"
message="version.number=${version.number}${line.separator}"
append="false"
/>
<echo
file="@{outputdir}/lib/library/${lib.prop.name}"
message="copyright.string=${copyright.string}${line.separator}"
append="true"
/>
<!-- Build compiler -->
<mkdir dir="@{outputdir}/lib/compiler"/>
<scalac
srcdir="${src.dir}/compiler"
destdir="@{outputdir}/lib/compiler"
addparams="${nsc.params}" target="${nsc.target}"
deprecation="yes" unchecked="yes">
<classpath>
<pathelement location="@{outputdir}/lib/library"/>
<pathelement location="@{outputdir}/lib/compiler"/>
<pathelement location="${fjbg.jar}"/>
<pathelement location="${msil.jar}"/>
<pathelement location="${jline.jar}"/>
<pathelement location="${ant.jar}"/>
</classpath>
<include name="**/*.scala"/>
<excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
</scalac>
<echo
file="@{outputdir}/lib/compiler/${comp.prop.name}"
message="version.number=${version.number}${line.separator}"
append="false"
/>
<echo
file="@{outputdir}/lib/compiler/${comp.prop.name}"
message="copyright.string=${copyright.string}${line.separator}"
append="true"
/>
<if>
<length string="@{buildall}" when="greater" length="0"/>
<then>
<!-- Build DBC library -->
<mkdir dir="@{outputdir}/lib/dbc"/>
<scalac
srcdir="${src.dir}/dbc"
destdir="@{outputdir}/lib/dbc"
addparams="${nsc.params}" target="${nsc.target}"
deprecation="yes" unchecked="yes"
scalacdebugging="${nsc.log-files}">
<classpath>
<pathelement location="@{outputdir}/lib/library"/>
<pathelement location="@{outputdir}/lib/dbc"/>
</classpath>
<include name="scala/dbc/**/*.scala"/>
<excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
</scalac>
<!-- Build actors library -->
<mkdir dir="@{outputdir}/lib/actors"/>
<javac
srcdir="${src.dir}/actors"
destdir="@{outputdir}/lib/actors"
source="1.4" target="1.4" deprecation="yes"
classpath="@{build.dir}/lib/actors"
includes="scala/actors/**/*.java"/>
<scalac
srcdir="${src.dir}/actors"
destdir="@{outputdir}/lib/actors"
addparams="${nsc.params}" target="${nsc.target}"
deprecation="yes" unchecked="yes"
scalacdebugging="${nsc.log-files}">
<classpath>
<pathelement location="@{outputdir}/lib/library"/>
<pathelement location="@{outputdir}/lib/actors"/>
</classpath>
<include name="scala/actors/**/*.scala"/>
<excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
</scalac>
<!-- Build partest -->
<mkdir dir="@{outputdir}/lib/partest"/>
<javac
srcdir="${src.dir}/partest"
destdir="@{outputdir}/lib/partest"
source="1.4" target="1.4" deprecation="yes"
classpath="@{outputdir}/lib/partest"
includes="scala/tools/partest/**/*.java"/>
<scalac
srcdir="${src.dir}/partest"
destdir="@{outputdir}/lib/partest"
addparams="${nsc.params}" target="${nsc.target}"
deprecation="yes" unchecked="yes">
<classpath>
<pathelement location="@{outputdir}/lib/library"/>
<pathelement location="@{outputdir}/lib/compiler"/>
<pathelement location="@{outputdir}/lib/actors"/>
</classpath>
</scalac>
<echo
file="@{outputdir}/lib/partest/${par.prop.name}"
message="version.number=${version.number}${line.separator}"
append="false"
/>
<echo
file="@{outputdir}/lib/partest/${par.prop.name}"
message="copyright.string=${copyright.string}${line.separator}"
append="true"
/>
</then>
</if>
<!-- Timing the build -->
<stopwatch name="timer.@{name}" action="total"/>
<!-- Copy support files to build folder and links external libraries-->
<build.support outputdir="@{outputdir}"/>
<!-- Build executable files -->
<path id="build.classpath">
<pathelement location="@{outputdir}/lib/library"/>
<pathelement location="@{outputdir}/lib/compiler"/>
<pathelement location="${fjbg.jar}"/>
<pathelement location="${msil.jar}"/>
<pathelement location="${jline.jar}"/>
<pathelement location="${ant.jar}"/>
</path>
<taskdef
name="scalatool"
classname="scala.tools.ant.ScalaTool"
classpathref="build.classpath"/>
<mkdir dir="@{outputdir}/bin"/>
<scalatool
file="@{outputdir}/bin/${scala.exec.name}"
version="${version.number}"
copyright="${copyright.string}"
name="Scala code runner"
class="scala.tools.nsc.MainGenericRunner"
javaFlags="${java.flags}"/>
<scalatool
file="@{outputdir}/bin/${scalac.exec.name}"
name="Scala compiler"
class="scala.tools.nsc.Main"
version="${version.number}"
copyright="${copyright.string}"
javaFlags="${java.flags}"/>
<scalatool
file="@{outputdir}/bin/${scaladoc.exec.name}"
name="Scala doc generator"
class="scala.tools.nsc.Main"
toolflags="-Ydoc"
version="${version.number}"
copyright="${copyright.string}"
javaFlags="${java.flags}"/>
<scalatool
file="@{outputdir}/bin/${fsc.exec.name}"
name="Fast Scala compiler"
class="scala.tools.nsc.CompileClient"
version="${version.number}"
copyright="${copyright.string}"
javaFlags="${java.flags}"/>
<chmod perm="ugo+rx"
file="@{outputdir}/bin/${scalac.exec.name}"/>
<chmod perm="ugo+rx"
file="@{outputdir}/bin/${scala.exec.name}"/>
<chmod perm="ugo+rx"
file="@{outputdir}/bin/${scaladoc.exec.name}"/>
<chmod perm="ugo+rx"
file="@{outputdir}/bin/${fsc.exec.name}"/>
<fixcrlf
srcdir="@{outputdir}/bin"
eol="dos"
includes="**/*.bat"/>
<!-- Mark layer as being completely built -->
<touch file="@{outputdir}/complete" verbose="no"/>
</sequential>
</macrodef>
</project>
|