summaryrefslogtreecommitdiff
path: root/build.xml
diff options
context:
space:
mode:
Diffstat (limited to 'build.xml')
-rw-r--r--build.xml1911
1 files changed, 0 insertions, 1911 deletions
diff --git a/build.xml b/build.xml
deleted file mode 100644
index f8c0380f41..0000000000
--- a/build.xml
+++ /dev/null
@@ -1,1911 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<project name="sabbus" default="build"
- xmlns:artifact="urn:maven-artifact-ant"
- xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">
- <include file="build-ant-macros.xml" as="macros"/>
-
- <description>
-SuperSabbus for Scala core, builds the scala library and compiler. It can also package it as a simple distribution, tests it for stable bootstrapping and against the Scala test suite.
- </description>
-
-<!-- HINTS
- - for faster builds, have a build.properties in the same directory as build.xml that says:
- locker.skip=1
--->
-
-<!-- USAGE FROM JENKINS SCRIPTS IS (CURRENTLY) AS FOLLOWS:
-ant $antArgs $scalacArgs $targets
-
-antArgs tend to be:
- -Darchives.skipxz=true
- -Dscalac.args.optimise=-optimise
-
-scalacArgs examples:
- "-Dscalac.args=\"-Yrangepos\" -Dpartest.scalac_opts=\"-Yrangepos\""
-
-supported/exercised targets
- to publish: nightly publish-opt-nodocs
- to build: build build-opt locker.done
- to run tests: test.suite test.scaladoc
-
-DO NOT RELY ON ANY OTHER TARGETS (ok, you're probably ok assuming the ones defined in the first 100 lines of this file)
-
-To build your own Scala distribution, do, e.g.:
-
- ant publish-local-opt -Dmaven.version.suffix="-foo"
- cd ~/git
- hub clone scala/scala-dist
- cd scala-dist
- sbt 'set version := "2.11.0-foo"' 'set resolvers += Resolver.mavenLocal' universal:package-bin
-
-NOTE: `ant build` builds the essence of a Scala distribution under build/pack
- (The only thing missing are the docs; see `pack.doc` and `docs.done`.)
-
--->
-
-<!-- To use Zinc with the ant build:
- - install zinc and symlink the installed zinc script to ${basedir}/tools/zinc (${basedir} is where build.xml and the rest of your checkout resides)
- - make sure to set ZINC_OPTS to match ANT_OPTS!
--->
-
-<!--
-TODO:
- - detect zinc anywhere on PATH
- - automatically set ZINC_OPTS
- - skip locker (and test.stability) by default to speed up PR validation, still do full build & testing during nightly
- - (rework the build to pack locker and build using that when using zinc)
--->
-
-
-<!-- ===========================================================================
- END-USER TARGETS
-============================================================================ -->
- <target name="build" depends="pack.done" description="Builds the Scala compiler and library. Executables are in 'build/pack/bin'."/>
- <target name="test" depends="test.done" description="Runs test suite and bootstrapping test on Scala compiler and library."/>
- <target name="docs" depends="docs.done" description="Builds documentation for the Scala library. Scaladoc is in 'build/scaladoc/library'."/>
- <target name="docscomp" depends="docs.comp" description="Builds documentation for the Scala compiler and library. Scaladoc is in 'build/scaladoc'."/>
-
- <target name="build-opt" description="Optimized version of build."> <optimized name="build"/></target>
- <target name="test-opt" description="Optimized version of test."> <optimized name="test"/></target>
- <target name="test-core-opt" description="Optimized version of test.core."> <optimized name="test.core"/></target>
- <target name="test-stab-opt" description="Optimized version of test.stability."> <optimized name="test.stability"/></target>
-
- <target name="all.done" depends="test.done, pack-maven.done"/>
- <target name="nightly"><optimized name="all.done"/></target>
- <target name="nightly.checkall"> <antcall target="all.done"> <param name="partest.scalac_opts" value="-Ycheck:all"/></antcall></target>
-
- <!-- The IDE build requires actors/swing/continuations, so need to publish them during PR validation until they are modules -->
- <target name="publish-opt-nodocs" description="Publishes Scala (optimized) without generating docs/testing (library/reflect/compiler/actors/swing/continuations).">
- <antcall target="publish">
- <param name="docs.skip" value="1"/>
- <param name="scalac.args.optimise" value="-optimise"/>
- </antcall>
- </target>
- <target name="publish-core-opt-nodocs" description="Builds an untested, undocumented optimised core (library/reflect/compiler) and publishes to maven.">
- <antcall target="publish-core">
- <param name="docs.skip" value="1"/>
- <param name="scalac.args.optimise" value="-optimise"/>
- </antcall>
- </target>
- <target name="publish-core-local-nodocs" description="Builds an untested, undocumented core (library/reflect/compiler) and locally publishes to maven">
- <antcall target="publish-core-local">
- <param name="docs.skip" value="1"/>
- </antcall>
- </target>
-
- <!-- prefer the sbt names, but the dotted names are used in jenkins;
- rename there first before dropping the dotted ones -->
- <target name="publish-local" depends="publish.local"/>
- <target name="publish-local-opt"><optimized name="publish-local"/></target>
- <target name="publish-signed" depends="publish.signed"/>
-
-
-
-
-
-
-
-
-
-<!-- DEPRECATED -->
- <target name="dist" depends="all.clean, all.done" description="Cleans all and builds and tests a new distribution."/>
- <target name="partialdist" depends="pack.done" description="Makes a new distribution without testing it or removing partially build elements."/>
- <target name="fastdist" depends="pack.done, pack.doc" description="Makes a new distribution without testing it or removing partially build elements."/>
- <target name="dist-opt" description="Optimized version of dist."> <optimized name="dist"/></target>
- <target name="partialdist-opt" description="Optimized version of partialdist."> <optimized name="partialdist"/></target>
- <target name="fastdist-opt" description="Optimized version of fastdist."> <optimized name="fastdist"/></target>
-
- <!-- packaging -->
- <target name="distpack" depends="pack-maven.done"/>
- <target name="distpack-maven" depends="pack-maven.done"/>
- <target name="distpack-opt" description="Builds an optimised distribution."> <optimized name="distpack"/></target>
- <target name="distpack-maven-opt" description="Builds an optimised maven distribution."><optimized name="distpack-maven"/></target>
- <target name="distclean" depends="dist.clean" description="Removes all distributions. Binaries and documentation are untouched."/>
-
- <target name="nightly-nopt" depends="all.done"/>
-
- <target name="clean" depends="quick.clean" description="Removes binaries of compiler and library. Locker and distributions are untouched."/>
- <target name="docsclean" depends="docs.clean" description="Removes generated documentation. Distributions are untouched."/>
-
-
-
-<!-- ===========================================================================
- PROPERTIES
-============================================================================ -->
-
- <property environment="env"/>
- <!-- Prevents system classpath from being used -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- Defines the repository layout -->
- <property name="doc.dir" value="${basedir}/doc"/>
- <property name="lib.dir" value="${basedir}/lib"/>
- <property name="src.dir" value="${basedir}/src"/>
- <property name="partest.dir" value="${basedir}/test"/>
-
- <property name="lib-ant.dir" value="${lib.dir}/ant"/>
- <!-- For developers: any jars placed in this dir will be added to the classpath
- of all targets and copied into quick/pack/etc builds. -->
- <property name="lib-extra.dir" value="${lib.dir}/extra"/>
-
- <!-- Loads custom properties definitions -->
- <property file="${basedir}/build.properties"/>
-
- <!-- Generating version number -->
- <property file="${basedir}/build.number"/>
-
- <!-- read versions.properties -->
- <property file="${basedir}/versions.properties"/>
-
- <!-- Sets location of pre-compiled libraries -->
- <property name="ant.jar" value="${ant.home}/lib/ant.jar"/>
-
- <!-- Sets location of build folders -->
- <property name="build.dir" value="${basedir}/build"/>
- <property name="build-deps.dir" value="${build.dir}/deps"/>
- <property name="build-libs.dir" value="${build.dir}/libs"/>
- <property name="build-forkjoin.dir" value="${build-libs.dir}"/>
- <property name="build-locker.dir" value="${build.dir}/locker"/>
- <property name="build-quick.dir" value="${build.dir}/quick"/>
- <property name="build-pack.dir" value="${build.dir}/pack"/>
- <property name="build-manual.dir" value="${build.dir}/manual"/>
- <property name="build-osgi.dir" value="${build.dir}/osgi"/>
- <property name="build-junit.dir" value="${build.dir}/junit"/>
- <property name="build-strap.dir" value="${build.dir}/strap"/>
- <property name="build-docs.dir" value="${build.dir}/scaladoc"/>
- <property name="build-sbt.dir" value="${build.dir}/sbt-interface"/>
-
- <property name="test.osgi.src" value="${partest.dir}/osgi/src"/>
- <property name="test.osgi.classes" value="${build-osgi.dir}/classes"/>
-
- <property name="test.junit.src" value="${partest.dir}/junit"/>
- <property name="test.junit.classes" value="${build-junit.dir}/classes"/>
-
- <property name="dists.dir" value="${basedir}/dists"/>
-
- <property name="copyright.string" value="Copyright 2002-2017, LAMP/EPFL"/>
-
- <!-- These are NOT the flags used to run SuperSabbus, but the ones written
- into the script runners created with scala.tools.ant.ScalaTool -->
- <property name="java.flags" value="-Xmx256M -Xms32M"/>
- <property name="jvm.opts" value=""/>
-
- <!-- if ANT_OPTS is already set by the environment, it will be unaltered,
- but if it is unset it will take this default value. -->
- <property name="env.ANT_OPTS" value="-Xms1536M -Xmx1536M -Xss1M -XX:MaxPermSize=192M -XX:+UseParallelGC" />
-
- <property name="scalacfork.jvmargs" value="${env.ANT_OPTS} ${jvm.opts}"/>
-
-<!-- ===========================================================================
- INITIALIZATION
-============================================================================ -->
- <target name="desired.jars.uptodate">
- <patternset id="desired.jars">
- <include name="lib/**/*.desired.sha1"/>
- <include name="test/files/**/*.desired.sha1"/>
- <include name="tools/**/*.desired.sha1"/>
- </patternset>
-
- <uptodate property="lib.jars.uptodate">
- <srcfiles dir="${basedir}"><patternset refid="desired.jars"/></srcfiles>
- <mapper type="glob" from="*.desired.sha1" to="*"/>
- </uptodate>
- </target>
-
- <target name="boot" depends="desired.jars.uptodate" unless="lib.jars.uptodate">
- <echo level="warn" message="Updating bootstrap libs. (To do this by hand, run ./pull-binary-libs.sh)"/>
- <exec osfamily="unix" vmlauncher="false" executable="./pull-binary-libs.sh" failifexecutionfails="true" />
- <exec osfamily="windows" vmlauncher="false" executable="pull-binary-libs.sh" failifexecutionfails="true" />
- <!-- uptodate task needs to know these are what's in the sha. -->
- <touch>
- <fileset dir="${basedir}"><patternset refid="desired.jars"/></fileset>
- <mapper type="glob" from="*.desired.sha1" to="*"/>
- </touch>
- </target>
-
- <target name="init.git" depends="boot">
- <!-- replacestarr needs git.commit.sha, but doesn't want to run the init target (it computes maven.version.number) -->
- <exec osfamily="unix" executable="tools/get-scala-commit-sha" outputproperty="git.commit.sha" failifexecutionfails="false" />
- <exec osfamily="windows" executable="cmd.exe" outputproperty="git.commit.sha" failifexecutionfails="false">
- <arg value="/c"/>
- <arg value="tools\get-scala-commit-sha.bat"/>
- <arg value="-p"/>
- </exec>
- <exec osfamily="unix" executable="tools/get-scala-commit-date" outputproperty="git.commit.date" failifexecutionfails="false" />
- <exec osfamily="windows" executable="cmd.exe" outputproperty="git.commit.date" failifexecutionfails="false">
- <arg value="/c"/>
- <arg value="tools\get-scala-commit-date.bat"/>
- <arg value="-p"/>
- </exec>
-
- <!-- some default in case something went wrong getting the revision -->
- <property name="git.commit.sha" value="unknown"/>
- <property name="git.commit.date" value="unknown"/>
- </target>
-
- <target name="init" depends="init.git">
- <!-- Set up Ant contrib tasks so we can use <if><then><else> instead of the clunky `unless` attribute -->
- <taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${lib-ant.dir}/ant-contrib.jar"/>
-
- <property name="scala.ant.min.version" value="1.8.2"/>
- <if><not><antversion atleast="${scala.ant.min.version}"/></not>
- <then><fail message="Ant version ${scala.ant.min.version} is required. You are running ${ant.version}"/></then>
- </if>
-
- <!-- Add our maven ant tasks -->
- <path id="maven-ant-tasks.classpath" path="${lib-ant.dir}/maven-ant-tasks-2.1.1.jar" />
- <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath" />
-
- <!-- Resolve maven dependencies -->
-
- <!-- work around http://jira.codehaus.org/browse/MANTTASKS-203:
- java.lang.ClassCastException: org.codehaus.plexus.DefaultPlexusContainer cannot be cast to org.codehaus.plexus.PlexusContainer
- on repeated use of artifact:dependencies
- -->
- <if><not><isset property="maven-deps-done"></isset></not><then>
- <mkdir dir="${user.home}/.m2/repository"/>
-
- <artifact:remoteRepository id="sonatype-release" url="https://oss.sonatype.org/content/repositories/releases"/>
- <artifact:remoteRepository id="sonatype-snapshots" url="https://oss.sonatype.org/content/repositories/snapshots"/>
- <artifact:remoteRepository id="extra-repo" url="${extra.repo.url}"/>
-
- <!-- This task has an issue where if the user directory does not exist, so we create it above. UGH. -->
- <artifact:dependencies pathId="extra.tasks.classpath" filesetId="extra.tasks.fileset">
- <dependency groupId="biz.aQute" artifactId="bnd" version="1.50.0"/>
- </artifact:dependencies>
-
- <artifact:dependencies pathId="jarjar.classpath">
- <dependency groupId="com.googlecode.jarjar" artifactId="jarjar" version="1.3"/>
- </artifact:dependencies>
-
- <artifact:dependencies pathId="jarlister.classpath">
- <dependency groupId="com.github.rjolly" artifactId="jarlister_2.11" version="1.0"/>
- </artifact:dependencies>
-
- <!-- JUnit -->
- <property name="junit.version" value="4.11"/>
- <artifact:dependencies pathId="junit.classpath" filesetId="junit.fileset">
- <dependency groupId="junit" artifactId="junit" version="${junit.version}"/>
- </artifact:dependencies>
- <copy-deps project="junit"/>
-
- <!-- Pax runner -->
- <property name="pax.exam.version" value="3.5.0"/><!-- Last version which supports Java 6 -->
- <property name="osgi.felix.version" value="4.4.0"/>
- <property name="osgi.equinox.version" value="3.7.1"/>
- <artifact:dependencies pathId="pax.exam.classpath" filesetId="pax.exam.fileset">
- <dependency groupId="org.ops4j.pax.exam" artifactId="pax-exam-container-native" version="${pax.exam.version}">
- <exclusion groupId="org.osgi" artifactId="org.osgi.core"/><!-- Avoid dragging in a dependency which requires Java >6 -->
- </dependency>
- <dependency groupId="org.ops4j.pax.exam" artifactId="pax-exam-junit4" version="${pax.exam.version}"/>
- <dependency groupId="org.ops4j.pax.exam" artifactId="pax-exam-link-assembly" version="${pax.exam.version}"/>
- <dependency groupId="org.ops4j.pax.url" artifactId="pax-url-aether" version="2.2.0"/>
- <dependency groupId="org.ops4j.pax.swissbox" artifactId="pax-swissbox-tracker" version="1.8.0"/>
- <dependency groupId="ch.qos.logback" artifactId="logback-core" version="1.1.2"/>
- <dependency groupId="ch.qos.logback" artifactId="logback-classic" version="1.1.2"/>
- <dependency groupId="junit" artifactId="junit" version="${junit.version}"/>
- </artifact:dependencies>
- <copy-deps project="pax.exam"/>
-
- <artifact:dependencies pathId="osgi.framework.felix">
- <dependency groupId="org.apache.felix" artifactId="org.apache.felix.framework" version="${osgi.felix.version}"/>
- </artifact:dependencies>
-
- <artifact:dependencies pathId="osgi.framework.equinox">
- <dependency groupId="org.eclipse.osgi" artifactId="org.eclipse.osgi" version="${osgi.equinox.version}"/>
- </artifact:dependencies>
-
- <artifact:remoteRepository id="sonatype-release" url="https://oss.sonatype.org/content/repositories/releases"/>
- <artifact:remoteRepository id="extra-repo" url="${extra.repo.url}"/>
-
- <!-- scala-java8-compat, used by the experimental -target jvm-1.8 support. -->
- <if><isset property="scala-java8-compat.package"/><then>
- <property name="scala-java8-compat.version" value="0.5.0"/>
- <property name="scala-java8-compat.binary.version" value="2.11"/>
- <artifact:dependencies pathId="scala-java8-compat.classpath" filesetId="scala-java8-compat.fileset">
- <dependency groupId="org.scala-lang.modules" artifactId="scala-java8-compat_${scala-java8-compat.binary.version}" version="${scala-java8-compat.version}">
- <exclusion groupId="org.scala-lang" artifactId="scala-library"/>
- </dependency>
- </artifact:dependencies>
- <property name="scala-java8-compat-classes" value="${build-quick.dir}/scala-java8-compat"/>
- <delete dir="${scala-java8-compat-classes}"/>
- <unzip dest="${scala-java8-compat-classes}">
- <fileset refid="scala-java8-compat.fileset"/>
- <patternset>
- <include name="**/*.class"/>
- </patternset>
- </unzip>
- <path id="scala-java8-compat.libs">
- <pathelement location="${scala-java8-compat-classes}"/>
- </path>
- <fileset id="scala-java8-compat.fileset" dir="${scala-java8-compat-classes}">
- <include name="**/*"/>
- </fileset>
- </then>
- <else>
- <path id="scala-java8-compat.libs"/>
- <fileset id="scala-java8-compat.fileset" dir="." excludes="**"/>
- </else>
- </if>
-
- <!-- prepare, for each of the names below, the property "@{name}.cross", set to the
- necessary cross suffix (usually something like "_2.11.0-M6". -->
- <prepareCross name="scala-xml" />
- <prepareCross name="scala-parser-combinators" />
- <property name="scala-continuations-plugin.cross.suffix" value="_${scala.full.version}"/>
- <prepareCross name="scala-continuations-plugin" />
- <prepareCross name="scala-continuations-library"/>
- <prepareCross name="scala-swing"/>
- <prepareCross name="partest"/>
- <prepareCross name="scalacheck"/>
-
- <artifact:dependencies pathId="asm.classpath" filesetId="asm.fileset">
- <dependency groupId="org.scala-lang.modules" artifactId="scala-asm" version="${scala-asm.version}"/>
- </artifact:dependencies>
- <copy-deps project="asm"/>
-
- <!-- TODO: delay until absolutely necessary to allow minimal build, also move out partest dependency from scaladoc -->
- <artifact:dependencies pathId="partest.classpath" filesetId="partest.fileset" versionsId="partest.versions">
- <!-- uncomment the following if you're deploying your own partest locally -->
- <!-- <localRepository path="${user.home}/.m2/repository"/> -->
- <!-- so we don't have to wait for artifacts to synch to maven central
- (we don't distribute partest with Scala, so the risk of sonatype and maven being out of synch is irrelevant):
- -->
- <artifact:remoteRepository refid="sonatype-release"/>
- <artifact:remoteRepository refid="extra-repo"/>
- <dependency groupId="org.scala-lang.modules" artifactId="scala-partest${partest.cross}" version="${partest.version.number}" />
- </artifact:dependencies>
- <copy-deps project="partest"/>
-
- <artifact:dependencies pathId="scalacheck.classpath" filesetId="scalacheck.fileset" versionsId="scalacheck.versions">
- <artifact:remoteRepository refid="extra-repo"/>
- <dependency groupId="org.scalacheck" artifactId="scalacheck${scalacheck.cross}" version="${scalacheck.version.number}" />
- </artifact:dependencies>
-
- <artifact:dependencies pathId="repl.deps.classpath" filesetId="repl.fileset" versionsId="repl.deps.versions">
- <dependency groupId="jline" artifactId="jline" version="${jline.version}"/>
- </artifact:dependencies>
- <copy-deps project="repl"/>
-
- <!-- used by the test.osgi target to create osgi bundles for the xml, parser-combinator jars
- must specify sourcesFilesetId, javadocFilesetId to download these types of artifacts -->
- <artifact:dependencies pathId="external-modules.deps.classpath" sourcesFilesetId="external-modules.sources.fileset" javadocFilesetId="external-modules.javadoc.fileset">
- <artifact:remoteRepository refid="extra-repo"/>
- <dependency groupId="org.scala-lang.modules" artifactId="scala-xml${scala-xml.cross}" version="${scala-xml.version.number}"/>
- <dependency groupId="org.scala-lang.modules" artifactId="scala-parser-combinators${scala-parser-combinators.cross}" version="${scala-parser-combinators.version.number}"/>
- <dependency groupId="org.scala-lang.plugins" artifactId="scala-continuations-plugin${scala-continuations-plugin.cross}" version="${scala-continuations-plugin.version.number}"/>
- <dependency groupId="org.scala-lang.plugins" artifactId="scala-continuations-library${scala-continuations-library.cross}" version="${scala-continuations-library.version.number}"/>
- <dependency groupId="org.scala-lang.modules" artifactId="scala-swing${scala-swing.cross}" version="${scala-swing.version.number}"/>
- </artifact:dependencies>
-
- <!-- External modules, excluding the core -->
- <path id="external-modules-nocore">
- <restrict>
- <path refid="external-modules.deps.classpath"/>
- <rsel:not><rsel:or>
- <rsel:name name="scala-library*.jar"/>
- <rsel:name name="scala-reflect*.jar"/>
- <rsel:name name="scala-compiler*.jar"/>
- </rsel:or></rsel:not>
- </restrict>
- </path>
- <copy-deps refid="external-modules-nocore" project="scaladoc"/>
-
- <propertyForCrossedArtifact name="scala-parser-combinators" jar="org.scala-lang.modules:scala-parser-combinators"/>
- <propertyForCrossedArtifact name="scala-xml" jar="org.scala-lang.modules:scala-xml"/>
- <propertyForCrossedArtifact name="scala-continuations-plugin" jar="org.scala-lang.plugins:scala-continuations-plugin"/>
- <propertyForCrossedArtifact name="scala-continuations-library" jar="org.scala-lang.plugins:scala-continuations-library"/>
- <propertyForCrossedArtifact name="scala-swing" jar="org.scala-lang.modules:scala-swing"/>
-
- <!-- BND support -->
- <typedef resource="aQute/bnd/ant/taskdef.properties" classpathref="extra.tasks.classpath" />
-
- <echo message="Using Scala ${starr.version} for STARR."/>
- <artifact:dependencies pathId="starr.compiler.path" filesetId="starr.fileset">
- <artifact:remoteRepository refid="extra-repo"/>
- <dependency groupId="org.scala-lang" artifactId="scala-library" version="${starr.version}"/>
- <dependency groupId="org.scala-lang" artifactId="scala-reflect" version="${starr.version}"/>
- <dependency groupId="org.scala-lang" artifactId="scala-compiler" version="${starr.version}"/>
- </artifact:dependencies>
- <copy-deps project="starr"/>
-
- <property name="maven-deps-done" value="yep!"/>
- </then></if>
-
-
- <!-- NOTE: ant properties are write-once: second writes are silently discarded; the logic below relies on this -->
-
- <!-- Compute defaults (i.e., if not specified on command-line) for OSGi/maven version suffixes.
- Try to establish the invariant (verified below):
- `version.suffix == maven.version.suffix == osgi.version.suffix`,
- except for:
- - snapshot builds, where:
- - `maven.suffix == "-SNAPSHOT"`
- - `version.suffix == osgi.version.suffix == ""`
- - final builds, where:
- - `osgi.suffix == "-VFINAL"`
- - `version.suffix == maven.version.suffix == ""`
- -->
- <if><not><equals arg1="${version.bnum}" arg2="0"/></not><then>
- <property name="version.suffix" value="-${version.bnum}"/>
- </then></if>
-
- <if><or><not><isset property="version.suffix"/></not><equals arg1="${version.suffix}" arg2=""/></or><then>
- <if><isset property="build.release"/><then>
- <property name="maven.version.suffix" value=""/>
- <property name="version.suffix" value="${maven.version.suffix}"/>
- <if><equals arg1="${maven.version.suffix}" arg2=""/><then>
- <property name="osgi.version.suffix" value="-VFINAL"/></then>
- <else>
- <property name="osgi.version.suffix" value="${maven.version.suffix}"/></else></if></then></if></then>
- <else> <!-- version.suffix set and not empty -->
- <property name="maven.version.suffix" value="${version.suffix}"/>
- <property name="osgi.version.suffix" value="${version.suffix}"/></else></if>
-
- <!-- if a maven version suffix was set (or inferred), assume we're building a release -->
- <if><isset property="maven.version.suffix"/><then>
- <property name="build.release" value="1"/></then></if>
-
- <!-- not building a release and no version.suffix specified -->
- <property name="maven.version.suffix" value="-SNAPSHOT"/>
-
- <if><equals arg1="${maven.version.suffix}" arg2="-SNAPSHOT"/><then>
- <property name="osgi.version.suffix" value=""/>
- <property name="version.suffix" value=""/></then>
- <else>
- <property name="osgi.version.suffix" value="${maven.version.suffix}"/>
- <property name="version.suffix" value="${maven.version.suffix}"/></else></if>
-
- <!-- We use the git describe to determine the OSGi modifier for our build. -->
- <property name="maven.version.number"
- value="${version.major}.${version.minor}.${version.patch}${maven.version.suffix}"/>
- <property name="osgi.version.number"
- value="${version.major}.${version.minor}.${version.patch}.v${git.commit.date}${osgi.version.suffix}-${git.commit.sha}"/>
-
- <if><isset property="build.release"/><then>
- <property name="version.number" value="${maven.version.number}"/>
- </then><else>
- <property name="version.number" value="${version.major}.${version.minor}.${version.patch}${version.suffix}-${git.commit.date}-${git.commit.sha}"/>
- </else></if>
-
- <!-- some default in case something went wrong getting the revision -->
- <property name="version.number" value="-unknown-"/>
-
- <condition property="has.java6">
- <equals arg1="${ant.java.version}" arg2="1.6"/>
- </condition>
- <condition property="has.java7">
- <equals arg1="${ant.java.version}" arg2="1.7"/>
- </condition>
- <condition property="has.java8">
- <equals arg1="${ant.java.version}" arg2="1.8"/>
- </condition>
- <condition property="has.unsupported.jdk">
- <not><or>
- <isset property="has.java8" />
- <isset property="has.java7" />
- <isset property="has.java6" />
- </or></not>
- </condition>
-
- <fail if="has.unsupported.jdk" message="JDK ${ant.java.version} is not supported by this build!"/>
- <fail message="Ant 1.9+ required">
- <condition>
- <not><antversion atleast="1.9" /></not>
- </condition>
- </fail>
-
- <!-- Allow this to be overridden simply -->
- <property name="sbt.latest.version" value="0.12.4"/>
-
- <property name="sbt.src.dir" value="${build-sbt.dir}/${sbt.latest.version}/src"/>
- <property name="sbt.lib.dir" value="${build-sbt.dir}/${sbt.latest.version}/lib"/>
-
- <property name="sbt.interface.jar" value="${sbt.lib.dir}/interface.jar"/>
- <property name="sbt.interface.url" value="http://dl.bintray.com/typesafe/ivy-releases/org.scala-sbt/interface/${sbt.latest.version}/jars/interface.jar"/>
- <property name="sbt.interface.src.jar" value="${sbt.src.dir}/compiler-interface-src.jar"/>
- <property name="sbt.interface.src.url" value="http://dl.bintray.com/typesafe/ivy-releases/org.scala-sbt/compiler-interface/${sbt.latest.version}/jars/compiler-interface-src.jar"/>
-
-
- <!-- Additional command line arguments for scalac. They are added to all build targets -->
- <property name="scalac.args" value=""/>
- <property name="javac.args" value=""/>
-
- <property name="scalac.args.always" value="-feature" />
- <property name="scalac.args.optimise" value=""/> <!-- scalac.args.optimise is selectively overridden in certain antcall tasks. -->
- <property name="scalac.args.all" value="${scalac.args.always} ${scalac.args} ${scalac.args.optimise}"/>
- <property name="scalac.args.locker" value="${scalac.args.all}"/>
- <property name="scalac.args.quick" value="${scalac.args.all}"/>
- <property name="scalac.args.strap" value="${scalac.args.quick}"/>
-
- <property name="partest.scalac_opts" value=""/> <!-- set default value, otherwise the property name will be passed to partest if undefined -->
-
- <!-- This is the start time for the distribution -->
- <tstamp prefix="time">
- <format property="human" pattern="d MMMM yyyy, HH:mm:ss" locale="en,US"/>
- <format property="short" pattern="yyyyMMddHHmmss"/>
- </tstamp>
-
- <!-- Local libs (developer use.) -->
- <mkdir dir="${lib-extra.dir}"/>
-
- <!-- Auxiliary libs placed on every classpath. -->
- <path id="aux.libs">
- <pathelement location="${ant.jar}"/>
- <!-- needs ant 1.7.1 -->
- <!-- <fileset dir="${lib-extra.dir}" erroronmissingdir="false"> -->
- <fileset dir="${lib-extra.dir}">
- <include name="**/*.jar"/>
- </fileset>
- </path>
-
- <!-- And print-out what we are building -->
- <echo message=" build time: ${time.human}" />
- <echo message=" java version: ${java.vm.name} ${java.version} (${ant.java.version})" />
- <echo message=" java args: ${env.ANT_OPTS} ${jvm.opts}" />
- <echo message=" javac args: ${javac.args}" />
- <echo message=" scalac args: ${scalac.args.all}" />
- <echo message="scalac quick args: ${scalac.args.quick}" />
- <echo message=" git date: ${git.commit.date}" />
- <echo message=" git hash: ${git.commit.sha}" />
- <echo message=" maven version: ${maven.version.number}"/>
- <echo message=" OSGi version: ${osgi.version.number}" />
- <echo message="canonical version: ${version.number}" />
-
- <echoproperties destfile="buildcharacter.properties">
- <propertyset>
- <propertyref regex="time.*" />
- <propertyref regex="git.*" />
- <propertyref name="java.vm.name" />
- <propertyref regex=".*version.*" />
- <propertyref regex="scalac.args.*" />
- <propertyref name="scalacfork.jvmargs" />
- </propertyset>
- </echoproperties>
-
- <!-- validate version suffixes -->
- <if><equals arg1="${maven.version.suffix}" arg2="-SNAPSHOT"/><then>
- <condition property="version.suffixes.consistent"><and>
- <equals arg1="${osgi.version.suffix}" arg2=""/>
- <equals arg1="${version.suffix}" arg2=""/>
- </and></condition></then>
- <else>
- <if><equals arg1="${osgi.version.suffix}" arg2="-VFINAL"/><then>
- <condition property="version.suffixes.consistent"><and>
- <equals arg1="${maven.version.suffix}" arg2=""/>
- <equals arg1="${version.suffix}" arg2=""/>
- </and></condition></then>
- <else>
- <condition property="version.suffixes.consistent"><and>
- <equals arg1="${osgi.version.suffix}" arg2="${maven.version.suffix}"/>
- <equals arg1="${version.suffix}" arg2="${maven.version.suffix}"/>
- </and></condition></else></if></else></if>
-
- <!-- <echo message=" maven suffix: ${maven.version.suffix}"/>
- <echo message=" OSGi suffix: ${osgi.version.suffix}" />
- <echo message="canonical suffix: ${version.suffix}" /> -->
- <fail unless="version.suffixes.consistent" message="Version suffixes inconsistent!"/>
-
-
- <!-- used during releases to bump versions in versions.properties -->
- <if><isset property="update.versions"/><then>
- <echo message="Updating `versions.properties`:"/>
- <echo message="starr.version = ${starr.version}"/>
- <echo message="scala.binary.version = ${scala.binary.version}"/>
- <echo message="scala.full.version = ${scala.full.version}"/>
- <echo message="scala-xml.version.number = ${scala-xml.version.number}"/>
- <echo message="scala-parser-combinators.version.number = ${scala-parser-combinators.version.number}"/>
- <echo message="scala-continuations-plugin.version.number = ${scala-continuations-plugin.version.number}"/>
- <echo message="scala-continuations-library.version.number = ${scala-continuations-library.version.number}"/>
- <echo message="scala-swing.version.number = ${scala-swing.version.number}"/>
- <echo message="akka-actor.version.number = ${akka-actor.version.number}"/>
- <echo message="actors-migration.version.number = ${actors-migration.version.number}"/>
- <echo message="jline.version = ${jline.version}"/>
- <echo message="partest.version.number = ${partest.version.number}"/>
- <echo message="scalacheck.version.number = ${scalacheck.version.number}"/>
-
- <propertyfile file="versions.properties">
- <entry key="starr.version" value="${starr.version}"/>
- <entry key="scala.binary.version" value="${scala.binary.version}"/>
- <entry key="scala.full.version" value="${scala.full.version}"/>
- <entry key="scala-xml.version.number" value="${scala-xml.version.number}"/>
- <entry key="scala-parser-combinators.version.number" value="${scala-parser-combinators.version.number}"/>
- <entry key="scala-continuations-plugin.version.number" value="${scala-continuations-plugin.version.number}"/>
- <entry key="scala-continuations-library.version.number" value="${scala-continuations-library.version.number}"/>
- <entry key="scala-swing.version.number" value="${scala-swing.version.number}"/>
- <entry key="akka-actor.version.number" value="${akka-actor.version.number}"/>
- <entry key="actors-migration.version.number" value="${actors-migration.version.number}"/>
- <entry key="jline.version" value="${jline.version}"/>
- <entry key="partest.version.number" value="${partest.version.number}"/>
- <entry key="scalacheck.version.number" value="${scalacheck.version.number}"/>
- </propertyfile>
- </then></if>
-
- <path id="forkjoin.classpath" path="${build-forkjoin.dir}/classes/forkjoin"/>
- <property name="forkjoin-classes" refid="forkjoin.classpath"/>
-
- <!-- the following properties fully define staged-docs, staged-pack, make-bundle, copy-bundle and mvn-package for each of the projects -->
- <property name="library.description" value="Scala Standard Library"/>
- <property name="library.docroot" value="rootdoc.txt"/>
- <property name="library.skipPackages" value="scala.concurrent.impl"/>
-
- <property name="reflect.description" value="Scala Reflection Library"/>
- <property name="reflect.skipPackages" value="scala.reflect.macros.internal:scala.reflect.internal:scala.reflect.io"/>
-
- <property name="compiler.description" value="Scala Compiler"/>
- <property name="compiler.docroot" value="rootdoc.txt"/>
-
- <!-- these are not used used, preparation for the 'TODO modularize compiler' task -->
- <property name="interactive.description" value="Scala Interactive Compiler" />
- <property name="interactive.package" value="modules." />
- <property name="interactive.name" value="scala-compiler-interactive"/>
- <property name="interactive.namesuffix" value="_${scala.binary.version}"/>
- <property name="interactive.version" value="${scala-compiler-interactive.version.number}"/>
- <property name="interactive.targetjar" value="scala-compiler-interactive_${scala.binary.version}-${scala-compiler-interactive.version.number}.jar"/>
-
- <property name="scaladoc.description" value="Scala Documentation Generator"/>
- <property name="scaladoc.package" value="modules." />
- <property name="scaladoc.name" value="scala-compiler-doc" />
- <property name="scaladoc.namesuffix" value="_${scala.binary.version}"/>
- <property name="scaladoc.version" value="${scala-compiler-doc.version.number}"/>
- <property name="scaladoc.targetjar" value="scala-compiler-doc_${scala.binary.version}-${scala-compiler-doc.version.number}.jar"/>
-
- <property name="actors.description" value="Scala Actors Library"/>
-
- <property name="swing.description" value="Scala Swing Library"/>
- <property name="swing.package" value="modules."/>
- <property name="swing.jar" value="${scala-swing}"/>
- <property name="swing.src" value="false"/>
- <property name="swing.srcjar" value="${scala-swing-sources}"/>
-
- <property name="continuations-plugin.description" value="Scala Delimited Continuations Compiler Plugin"/>
- <property name="continuations-plugin.package" value="plugins." />
- <property name="continuations-plugin.jar" value="${scala-continuations-plugin}"/>
- <property name="continuations-plugin.src" value="false"/>
- <property name="continuations-plugin.srcjar" value="${scala-continuations-plugin-sources}"/>
-
- <property name="continuations-library.description" value="Scala Delimited Continuations Library"/>
- <property name="continuations-library.package" value="plugins." />
- <property name="continuations-library.jar" value="${scala-continuations-library}"/>
- <property name="continuations-library.src" value="false"/>
- <property name="continuations-library.srcjar" value="${scala-continuations-library-sources}"/>
-
- <property name="parser-combinators.description" value="Scala Parser Combinators Library"/>
- <property name="parser-combinators.package" value="modules."/>
- <property name="parser-combinators.jar" value="${scala-parser-combinators}"/>
- <property name="parser-combinators.src" value="false"/>
- <property name="parser-combinators.srcjar" value="${scala-parser-combinators-sources}"/>
-
- <property name="xml.description" value="Scala XML Library"/>
- <property name="xml.package" value="modules."/>
- <property name="xml.jar" value="${scala-xml}"/>
- <property name="xml.src" value="false"/>
- <property name="xml.srcjar" value="${scala-xml-sources}"/>
-
- <property name="scalap.description" value="Scala Bytecode Parser"/>
- <property name="scalap.targetjar" value="scalap.jar"/>
-
- <property name="partest.description" value="Scala Compiler Testing Tool"/>
- <property name="partest-extras.description" value="Scala Compiler Testing Tool (compiler-specific extras)"/>
- <property name="partest-javaagent.description" value="Scala Compiler Testing Tool (compiler-specific java agent)"/>
-
- <!-- projects without project-specific options: forkjoin, manual, bin, repl -->
- <for list="actors,compiler,interactive,scaladoc,library,parser-combinators,partest,partest-extras,partest-javaagent,reflect,scalap,swing,xml,continuations-plugin,continuations-library,repl-jline" param="project">
- <sequential>
- <!-- description is mandatory -->
- <init-project-prop project="@{project}" name="package" default=""/> <!-- used by mvn-package, copy-bundle, make-bundle -->
- <init-project-prop project="@{project}" name="dir" default=""/> <!-- used by mvn-package -->
- <init-project-prop project="@{project}" name="name" default="scala-@{project}"/> <!-- used for defaults in this block and by mvn-package, copy-bundle, make-bundle -->
- <init-project-prop project="@{project}" name="namesuffix" default=""/>
- <init-project-prop project="@{project}" name="version" default="${osgi.version.number}"/>
- <init-project-prop project="@{project}" name="targetdir" default="lib"/>
- <init-project-prop project="@{project}" name="targetjar" default="${@{project}.name}.jar"/>
- <init-project-prop project="@{project}" name="jar" default="${build-pack.dir}/${@{project}.targetdir}/${@{project}.targetjar}" />
- <init-project-prop project="@{project}" name="docroot" default="NOT SET"/>
- <init-project-prop project="@{project}" name="skipPackages" default=""/>
- <init-project-prop project="@{project}" name="srcdir" default="@{project}"/>
- <init-project-prop project="@{project}" name="src" default="true"/>
- <init-project-prop project="@{project}" name="srcjar" default="${build-osgi.dir}/${@{project}.name}-src.jar"/>
- </sequential>
- </for>
-
-
- <!-- Compilers to use for the various stages.
- There must be a variable of the shape @{stage}.compiler.path for all @{stage} in starr, locker, quick, strap.
- -->
-
- <!-- starr is resolved (to starr.compiler.path) in the block protected by maven-deps-done
- the maven task must not be executed twice, or you get a java.lang.ClassCastException:
- org.apache.maven.artifact.ant.RemoteRepository cannot be cast to org.apache.maven.artifact.ant.Repository
- -->
-
- <!-- To skip locker, use -Dlocker.skip=1 -->
- <if><isset property="locker.skip"/><then>
- <echo message="Using STARR to build the quick stage (skipping locker)."/>
- <path id="locker.compiler.path" refid="starr.compiler.path"/>
- <!-- this is cheating (we don't know the classpath used to build starr)
- but should be close enough: -->
- <path id="locker.compiler.build.path" refid="starr.compiler.path"/>
- <property name="locker.locked" value="locker skipped"/></then>
- <else>
- <path id="locker.compiler.path"><path refid="locker.compiler.build.path"/></path></else></if>
-
- <!-- compilerpathref for compiling with quick -->
- <path id="quick.compiler.path"> <path refid="quick.compiler.build.path"/></path>
-
-
- <!-- What to have on the compilation path when compiling during certain phases.
-
- There must be a variable of the shape @{stage}.@{project}.build.path
- for all @{stage} in locker, quick, strap
- and all @{project} in library, reflect, compiler
- when stage is quick, @{project} also includes: actors, repl, scalap
-
- NOTE: interactive, scaladoc, are only used upto quick; they are still packed into the compiler jar
- -->
-
- <!-- LOCKER -->
- <path id="locker.library.build.path">
- <pathelement location="${build-locker.dir}/classes/library"/>
- <path refid="forkjoin.classpath"/>
- <path refid="aux.libs"/>
- <path refid="scala-java8-compat.libs"/>
- </path>
-
- <path id="locker.reflect.build.path">
- <path refid="locker.library.build.path"/>
- <pathelement location="${build-locker.dir}/classes/reflect"/>
- </path>
-
- <if><not><isset property="locker.skip"/></not><then>
- <path id="locker.compiler.build.path">
- <path refid="locker.reflect.build.path"/>
- <pathelement location="${build-locker.dir}/classes/compiler"/>
- <path refid="asm.classpath"/>
- </path>
- </then></if>
- <!-- else, locker.compiler.build.path is set above -->
-
- <!-- QUICK -->
- <path id="quick.library.build.path">
- <pathelement location="${build-quick.dir}/classes/library"/>
- <path refid="forkjoin.classpath"/>
- <path refid="aux.libs"/>
- <path refid="scala-java8-compat.libs"/>
- </path>
-
- <path id="quick.actors.build.path">
- <path refid="quick.library.build.path"/>
- <pathelement location="${build-quick.dir}/classes/actors"/>
- </path>
-
- <path id="quick.reflect.build.path">
- <path refid="quick.library.build.path"/>
- <pathelement location="${build-quick.dir}/classes/reflect"/>
- </path>
-
- <path id="quick.compiler.build.path">
- <path refid="quick.reflect.build.path"/>
- <pathelement location="${build-quick.dir}/classes/compiler"/>
- <path refid="asm.classpath"/>
- </path>
-
- <path id="quick.repl.build.path">
- <path refid="quick.compiler.build.path"/>
- <path refid="quick.interactive.build.path"/>
- <pathelement location="${build-quick.dir}/classes/repl"/>
- </path>
-
- <path id="quick.repl-jline.build.path">
- <path refid="quick.repl.build.path"/>
- <pathelement location="${build-quick.dir}/classes/repl-jline"/>
- <path refid="repl.deps.classpath"/>
- </path>
-
- <path id="quick.scalap.build.path">
- <path refid="quick.compiler.build.path"/>
- <pathelement location="${build-quick.dir}/classes/scalap"/>
- </path>
-
- <path id="quick.partest-extras.build.path">
- <path refid="asm.classpath"/>
- <path refid="partest.classpath"/>
- <path refid="quick.compiler.build.path"/>
- <pathelement location="${build-quick.dir}/classes/repl"/>
- <!-- for the java dependency: Profiler.java -->
- <pathelement location="${build-quick.dir}/classes/partest-extras"/>
- </path>
-
- <path id="quick.partest-javaagent.build.path">
- <path refid="asm.classpath"/>
- </path>
-
- <path id="quick.scaladoc.build.path">
- <path refid="quick.compiler.build.path"/>
- <path refid="partest.classpath"/>
- <path refid="external-modules-nocore"/>
- <pathelement location="${build-quick.dir}/classes/scaladoc"/>
- </path>
-
- <path id="quick.interactive.build.path">
- <path refid="quick.compiler.build.path"/>
- <pathelement location="${build-quick.dir}/classes/interactive"/>
- </path>
-
- <path id="quick.bin.tool.path">
- <path refid="quick.repl-jline.build.path"/>
- <path refid="quick.actors.build.path"/>
- <pathelement location="${build-quick.dir}/classes/scalap"/>
- <pathelement location="${build-quick.dir}/classes/scaladoc"/>
- <path refid="external-modules-nocore"/>
- </path>
-
- <!-- PACK -->
- <path id="pack.compiler.path">
- <pathelement location="${library.jar}"/>
- <pathelement location="${reflect.jar}"/>
- <pathelement location="${compiler.jar}"/>
- <pathelement location="${ant.jar}"/>
- <path refid="forkjoin.classpath"/>
- <path refid="aux.libs"/>
- </path>
-
- <path id="pack.lib.path">
- <pathelement location="${library.jar}"/>
- <path refid="jarlister.classpath"/>
- </path>
-
- <path id="pack.bin.tool.path">
- <pathelement location="${library.jar}"/>
- <pathelement location="${xml.jar}"/>
- <pathelement location="${parser-combinators.jar}"/>
- <pathelement location="${actors.jar}"/>
- <pathelement location="${reflect.jar}"/>
- <pathelement location="${compiler.jar}"/>
- <!-- TODO modularize compiler: <pathelement location="${scaladoc.jar}"/> -->
- <pathelement location="${scalap.jar}"/>
- <path refid="repl.deps.classpath"/>
- <path refid="aux.libs"/>
- </path>
-
- <path id="pack.library.files">
- <fileset dir="${build-quick.dir}/classes/library"/>
- <fileset dir="${forkjoin-classes}"/>
- <fileset refid="scala-java8-compat.fileset"/>
- </path>
-
- <path id="pack.actors.files">
- <fileset dir="${build-quick.dir}/classes/actors"/>
- </path>
-
- <path id="pack.repl-jline.files"> <fileset dir="${build-quick.dir}/classes/repl-jline"/> </path>
-
- <path id="pack.compiler.files">
- <fileset dir="${build-quick.dir}/classes/compiler"/>
-
- <!-- TODO modularize compiler. Remove the other class dirs as soon as they become modules -->
- <fileset dir="${build-quick.dir}/classes/scaladoc"/>
- <fileset dir="${build-quick.dir}/classes/interactive"/>
- <fileset dir="${build-quick.dir}/classes/repl"/>
- </path>
- <fileset id="pack.compiler.include-jars" refid="asm.fileset"/>
- <property name="pack.compiler.include-jars.defined" value="yeah"/>
-
- <!-- TODO modularize compiler.
- <path id="pack.scaladoc.files"> <fileset dir="${build-quick.dir}/classes/scaladoc"/> </path>
- <path id="pack.interactive.files"><fileset dir="${build-quick.dir}/classes/interactive"/> </path>
- -->
-
- <path id="pack.reflect.files"> <fileset dir="${build-quick.dir}/classes/reflect"/> </path>
- <path id="pack.scalap.files"> <fileset dir="${build-quick.dir}/classes/scalap"/> </path>
-
- <path id="pack.partest-extras.files"> <fileset dir="${build-quick.dir}/classes/partest-extras"/> </path>
- <path id="pack.partest-javaagent.files"> <fileset dir="${build-quick.dir}/classes/partest-javaagent"/> </path>
-
- <!-- STRAP -->
- <path id="strap.library.build.path">
- <pathelement location="${build-strap.dir}/classes/library"/>
- <path refid="forkjoin.classpath"/>
- <path refid="aux.libs"/>
- </path>
-
- <path id="strap.reflect.build.path">
- <path refid="strap.library.build.path"/>
- <pathelement location="${build-strap.dir}/classes/reflect"/>
- </path>
-
- <path id="strap.compiler.build.path">
- <path refid="strap.reflect.build.path"/>
- <pathelement location="${build-strap.dir}/classes/compiler"/>
- <path refid="asm.classpath"/>
- </path>
-
- <!-- DOCS -->
- <path id="docs.library.build.path"> <path refid="quick.library.build.path"/> </path>
- <path id="docs.reflect.build.path"> <path refid="quick.reflect.build.path"/> </path>
- <path id="docs.compiler.build.path"> <path refid="quick.compiler.build.path"/> </path>
- <path id="docs.scaladoc.build.path"> <path refid="quick.scaladoc.build.path"/> </path>
- <path id="docs.interactive.build.path"> <path refid="quick.interactive.build.path"/> </path>
- <path id="docs.scalap.build.path"> <path refid="quick.scalap.build.path"/> </path>
- <path id="docs.actors.build.path"> <path refid="quick.actors.build.path"/> </path>
-
- <!-- run-time classpath for scaladoc TODO: resolve through maven -->
- <path id="scaladoc.classpath">
- <path refid="external-modules-nocore"/>
- <pathelement location="${library.jar}"/>
- <pathelement location="${reflect.jar}"/>
- <pathelement location="${compiler.jar}"/>
-
- <!-- TODO modularize compiler
- <pathelement location="${interactive.jar}"/>
- <pathelement location="${scaladoc.jar}"/>
- -->
-
- <pathelement location="${ant.jar}"/>
- <path refid="aux.libs"/>
- </path>
-
- <path id="manual.build.path">
- <path refid="external-modules-nocore"/> <!-- xml -->
- <pathelement location="${library.jar}"/>
- <pathelement location="${build.dir}/manmaker/classes"/>
- <path refid="aux.libs"/> <!-- for ant -->
- </path>
-
- <!-- MISC -->
- <path id="sbt.compile.build.path">
- <path refid="scaladoc.classpath"/>
- <!-- TODO modularize compiler: bring back when repl leaves compiler jar
- <pathelement location="${build-quick.dir}/classes/repl"/>
- -->
- <pathelement location="${sbt.interface.jar}"/>
- </path>
-
-
- <!--
- This is the classpath used to run partest, which is what it uses to run the compiler and find other required jars.
- "What's on the compiler's compilation path when compiling partest tests," you ask?
- Why, the compiler we're testing, of course, and partest with all its dependencies.
- -->
- <path id="partest.compilation.path">
- <path refid="partest.compilation.path.core"/>
- <path refid="partest.compilation.path.noncore"/>
- </path>
- <path id="partest.compilation.path.core">
- <pathelement location="${library.jar}"/>
- <pathelement location="${reflect.jar}"/>
- <pathelement location="${compiler.jar}"/>
- </path>
- <path id="partest.compilation.path.noncore">
-
- <!-- TODO modularize compiler
- <pathelement location="${scaladoc.jar}"/>
- <pathelement location="${interactive.jar}"/>
- -->
-
- <!-- TODO: move scalap & actors out of repo -->
- <pathelement location="${scalap.jar}"/>
- <pathelement location="${actors.jar}"/>
-
- <!-- partest's dependencies, which marks most of its dependencies as provided,
- (but not scala-library, so we filter that one out...)
- so we provide them: scala-[library/reflect/compiler], scalap built here,
- scala-xml, scala-parser-combinators via external-modules-nocore,
- scalacheck as part of `partest.classpath` -->
- <restrict>
- <path refid="partest.classpath"/>
- <rsel:not><rsel:or>
- <rsel:name name="scala-library*.jar"/>
- </rsel:or></rsel:not>
- </restrict>
- <pathelement location="${scala-xml}"/>
- <pathelement location="${scala-parser-combinators}"/>
- <!-- <pathelement location="${scala-swing}"/> -->
-
- <restrict>
- <path refid="scalacheck.classpath"/>
- <rsel:not><rsel:or>
- <rsel:name name="scala-library*.jar"/>
- <rsel:name name="scala-compiler*.jar"/>
- <rsel:name name="scala-reflect*.jar"/>
- <rsel:name name="scala-actors*.jar"/>
- <rsel:name name="scala-parser-combinators*.jar"/>
- <rsel:name name="scala-xml*.jar"/>
- </rsel:or></rsel:not>
- </restrict>
-
- <!-- partest classes specific to the core compiler build -->
- <pathelement location="${partest-extras.jar}"/>
- <pathelement location="${partest-javaagent.jar}"/>
-
- <!-- sneaky extras used in tests -->
- <fileset dir="${partest.dir}/files/lib" includes="*.jar" />
- </path>
-
- <path id="test.junit.compiler.build.path">
- <pathelement location="${test.junit.classes}"/>
- <path refid="quick.compiler.build.path"/>
- <path refid="quick.repl.build.path"/>
- <path refid="quick.scaladoc.build.path"/>
- <path refid="quick.partest-extras.build.path"/>
- <path refid="junit.classpath"/>
- </path>
-
- <path id="test.osgi.compiler.build.path">
- <pathelement location="${test.osgi.classes}"/>
- <pathelement location="${build-osgi.dir}/org.scala-lang.scala-library.jar"/>
- <pathelement location="${build-osgi.dir}/org.scala-lang.scala-reflect.jar"/>
- <pathelement location="${build-osgi.dir}/org.scala-lang.scala-compiler.jar"/>
- <pathelement location="${build-osgi.dir}/org.scala-lang.scala-actors.jar"/>
- <path refid="pax.exam.classpath"/>
- <path refid="forkjoin.classpath"/>
- </path>
-
- <path id="test.osgi.compiler.build.path.felix">
- <path refid="test.osgi.compiler.build.path"/>
- <path refid="osgi.framework.felix"/>
- </path>
-
- <path id="test.osgi.compiler.build.path.equinox">
- <path refid="test.osgi.compiler.build.path"/>
- <path refid="osgi.framework.equinox"/>
- </path>
-
- <path id="test.positions.sub.build.path" path="${build-quick.dir}/classes/library"/>
-
- <!-- TODO: consolidate *.includes -->
- <patternset id="lib.includes">
- <include name="**/*.tmpl"/>
- <include name="**/*.xml"/>
- <include name="**/*.js"/>
- <include name="**/*.css"/>
- </patternset>
-
- <patternset id="lib.rootdoc.includes">
- <include name="**/*.tmpl"/>
- <include name="**/*.xml"/>
- <include name="**/*.js"/>
- <include name="**/*.css"/>
- <include name="rootdoc.txt"/>
- </patternset>
-
- <patternset id="comp.includes">
- <include name="**/*.tmpl"/>
- <include name="**/*.xml"/>
- <include name="**/*.js"/>
- <include name="**/*.css"/>
- <include name="**/*.html"/>
- <include name="**/*.properties"/>
- <include name="**/*.swf"/>
- <include name="**/*.png"/>
- <include name="**/*.gif"/>
- <include name="**/*.txt"/>
- </patternset>
-
- <taskdef resource="scala/tools/ant/sabbus/antlib.xml" classpathref="starr.compiler.path"/>
- <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpathref="jarjar.classpath" />
- </target>
-
-<!-- ===========================================================================
- CLEANLINESS
-=============================================================================-->
- <target name="libs.clean"> <clean build="libs"/> </target>
- <target name="quick.clean" depends="libs.clean"> <clean build="quick"/> <clean build="pack"/> <clean build="strap"/> </target>
- <target name="locker.clean" depends="quick.clean"> <clean build="locker"/> </target>
-
- <target name="docs.clean"> <clean build="docs"/> <delete dir="${build.dir}/manmaker" includeemptydirs="yes" quiet="yes" failonerror="no"/> </target>
- <target name="dist.clean"> <delete dir="${dists.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> </target>
-
- <target name="junit.clean"> <clean build="junit"/> </target>
-
- <target name="all.clean" depends="locker.clean, docs.clean, junit.clean">
- <clean build="sbt"/> <clean build="osgi"/>
- </target>
-
- <!-- Used by the scala-installer script -->
- <target name="allallclean" depends="all.clean, dist.clean"/>
-
-<!-- ===========================================================================
- LOCAL DEPENDENCIES
-============================================================================ -->
-
- <target name="forkjoin.done" depends="init"> <simple-javac project="forkjoin" args="-XDignore.symbol.file" jar="no"/></target>
-
- <!-- For local development only. We only allow released versions of Scala for STARR.
- This builds quick (core only) and publishes it with a generated version number,
- saving it as starr.version in build.properties, so this compiler will be used as STARR in your next build
- NOTES:
- - to speed things up, you can also pass -Dlocker.skip=1
- -->
- <target name="replacestarr" depends="init.git" description="Produces a new STARR from current sources. Publishes core locally with a generated version number,
- stored in build.properties as starr.version (overriding the one in versions.properties).">
- <antcall target="publish-core-local">
- <param name="maven.version.suffix" value="-STARR-${git.commit.sha}-SNAPSHOT"/>
- <param name="docs.skip" value="1"/>
- <param name="scalac.args.optimise" value="-optimise"/>
- <param name="update.starr.version" value="alright then"/>
- </antcall>
- </target>
-
-
-<!-- ===========================================================================
- LOCAL REFERENCE BUILD (LOCKER)
-============================================================================ -->
- <target name="locker.start" depends="forkjoin.done">
- <condition property="locker.locked"><available file="${build-locker.dir}/locker.locked"/></condition></target>
-
- <target name="locker.lib" depends="locker.start" unless="locker.locked">
- <staged-build with="starr" stage="locker" project="library" srcpath="${src.dir}/library" includes="lib.includes"/></target>
-
- <target name="locker.reflect" depends="locker.lib" unless="locker.locked">
- <staged-build with="starr" stage="locker" project="reflect"/></target>
-
- <target name="locker.comp" depends="locker.reflect" unless="locker.locked">
- <staged-build with="starr" stage="locker" project="compiler"/></target>
-
- <target name="locker.done" depends="locker.comp">
- <mkdir dir="${build-locker.dir}"/>
- <touch file="${build-locker.dir}/locker.locked" verbose="no"/>
- </target>
- <target name="locker.unlock"> <delete file="${build-locker.dir}/locker.locked"/>
- <delete file="${build-locker.dir}/*.complete"/></target>
-
-<!-- ===========================================================================
- QUICK BUILD (QUICK)
-============================================================================ -->
- <target name="quick.start" depends="locker.done"/>
-
- <target name="quick.lib" depends="quick.start">
- <staged-build with="locker" stage="quick" project="library" srcpath="${src.dir}/library" includes="lib.rootdoc.includes"/></target>
-
- <target name="quick.reflect" depends="quick.lib">
- <staged-build with="locker" stage="quick" project="reflect"/> </target>
-
- <target name="quick.comp" depends="quick.reflect">
- <staged-build with="locker" stage="quick" project="compiler"/> </target>
-
- <target name="quick.repl" depends="quick.comp, quick.interactive">
- <staged-build with="locker" stage="quick" project="repl"/>
- <staged-build with="locker" stage="quick" project="repl-jline"/>
-
- <staged-pack project="repl-jline"/>
-
- <!-- make jline_embedded jar with classes of repl-jline and jline, then shade-->
- <jarjar jarfile="${build-pack.dir}/${repl-jline.targetdir}/scala-repl-jline-embedded.jar" whenmanifestonly="fail">
- <zipfileset src="${jline:jline:jar}"/>
- <zipfileset src="${build-pack.dir}/${repl-jline.targetdir}/${repl-jline.targetjar}"/>
-
- <rule pattern="org.fusesource.**" result="scala.tools.fusesource_embedded.@1"/>
- <rule pattern="jline.**" result="scala.tools.jline_embedded.@1"/>
- <rule pattern="scala.tools.nsc.interpreter.jline.**" result="scala.tools.nsc.interpreter.jline_embedded.@1"/>
- <keep pattern="scala.tools.**"/>
- </jarjar>
-
- <!-- unzip jar to repl's class dir to obtain
- - standard repl-jline
- - a shaded repl-jline (scala/tools/nsc/interpreter/jline_embedded) & jline (scala.tools.jline_embedded)
- -->
- <copy todir="${build-quick.dir}/classes/repl">
- <zipfileset src="${build-pack.dir}/${repl-jline.targetdir}/${repl-jline.targetjar}"/>
- <zipfileset src="${build-pack.dir}/${repl-jline.targetdir}/scala-repl-jline-embedded.jar"/>
- </copy>
- </target>
-
- <target name="quick.scaladoc" depends="quick.comp">
- <staged-build with="locker" stage="quick" project="scaladoc"/> </target>
-
- <target name="quick.interactive" depends="quick.comp, quick.scaladoc">
- <staged-build with="locker" stage="quick" project="interactive"/> </target>
-
- <target name="quick.scalap" depends="quick.repl">
- <staged-build with="locker" stage="quick" project="scalap"/> </target>
-
- <target name="quick.actors" depends="quick.lib">
- <staged-build with="locker" stage="quick" project="actors"/> </target>
-
-
-
- <target name="quick.modules" depends="quick.repl, quick.scaladoc, quick.interactive, quick.scalap"/>
-
- <target name="quick.bin" depends="quick.lib, quick.reflect, quick.comp, quick.modules">
- <staged-bin stage="quick" classpathref="quick.bin.tool.path"/>
- </target>
-
- <target name="quick.done" depends="quick.bin"/>
- <target name="quick-opt" description="Optimized version of quick.done."> <optimized name="quick.done"/></target>
-
-
-<!-- ===========================================================================
- PACKED QUICK BUILD (PACK)
-============================================================================ -->
- <target name="pack.lib" depends="quick.lib, forkjoin.done"> <staged-pack project="library"/>
- <taskdef resource="scala/tools/ant/antlib.xml" classpathref="pack.lib.path"/>
- <jarlister file="${library.jar}"/>
- </target>
-
- <target name="pack.reflect" depends="quick.reflect"> <staged-pack project="reflect"/> </target>
-
- <!-- TODO modularize compiler. Remove other quick targets when they become modules. -->
- <target name="pack.comp" depends="quick.comp, quick.scaladoc, quick.interactive, quick.repl">
- <staged-pack project="compiler" manifest="${build-pack.dir}/META-INF/MANIFEST.MF">
- <pre> <!-- TODO the files copied here do not influence actuality of this target (nor does the manifest) -->
- <copy todir="${build-pack.dir}/lib">
- <resources refid="repl.fileset"/>
- <mapper classpathref="maven-ant-tasks.classpath" classname="org.apache.maven.artifact.ant.VersionMapper" from="${repl.deps.versions}" to="flatten"/>
- </copy>
- <copy todir="${build-pack.dir}/lib">
- <fileset dir="${lib-extra.dir}">
- <include name="**/*.jar"/>
- </fileset>
- </copy>
- <mkdir dir="${build-pack.dir}/META-INF"/>
- <copy file="${basedir}/META-INF/MANIFEST.MF" toDir="${build-pack.dir}/META-INF"/>
- <manifest file="${build-pack.dir}/META-INF/MANIFEST.MF" mode="update">
- <attribute name="Bundle-Version" value="${version.number}"/>
- <attribute name="Class-Path" value="scala-reflect.jar scala-library.jar"/>
- </manifest>
- </pre>
- <!-- JSR-223 support introduced in 2.11 -->
- <jar-opts>
- <service type="javax.script.ScriptEngineFactory" provider="scala.tools.nsc.interpreter.IMain$Factory"/>
- </jar-opts>
- </staged-pack>
- </target>
-
- <!-- TODO modularize compiler. These targets are currently not used.
- <target name="pack.scaladoc" depends="quick.scaladoc"> <staged-pack project="scaladoc"/> </target>
- <target name="pack.interactive" depends="quick.interactive"> <staged-pack project="interactive"/> </target>
- -->
-
- <target name="pack.actors" depends="quick.actors"> <staged-pack project="actors"/> </target>
-
- <target name="pack.scalap" depends="quick.scalap"> <staged-pack project="scalap"/> </target>
-
- <target name="pack.core" depends="pack.reflect, pack.comp, pack.lib"/>
-
- <!-- TODO modularize compiler: pack.scaladoc, pack.interactive, -->
- <target name="pack.modules" depends="pack.actors, pack.scalap">
- <copy todir="${build-pack.dir}/lib">
- <path refid="external-modules-nocore" />
- <mapper type="flatten" />
- </copy>
- </target>
-
- <!-- depends on pack.core for scaladoc -->
- <target name="scaladoc.task" depends="pack.core, pack.modules" unless="docs.skip">
- <taskdef resource="scala/tools/ant/antlib.xml" classpathref="scaladoc.classpath"/>
- </target>
-
- <target name="pack.partest-extras" depends="quick.comp">
- <!-- compile compiler-specific parts of partest -->
- <staged-build with="quick" stage="quick" project="partest-extras" />
- <staged-build with="quick" stage="quick" project="partest-javaagent" />
-
- <staged-pack project="partest-extras"/>
- <staged-pack project="partest-javaagent"
- manifest="${src.dir}/partest-javaagent/scala/tools/partest/javaagent/MANIFEST.MF"/>
- </target>
-
- <target name="pack.bin" depends="pack.core, pack.modules, pack.partest-extras">
- <staged-bin stage="pack"/>
- </target>
-
- <!-- depend on quick.done so quick.bin is run when pack.done is -->
- <target name="pack.done" depends="quick.done, pack.bin"/>
-
-
-<!-- ===========================================================================
- BOOTSTRAPPING BUILD (STRAP)
-============================================================================ -->
- <target name="strap.done" depends="pack.done">
- <staged-build with="pack" stage="strap" project="library" srcpath="${src.dir}/library" includes="lib.rootdoc.includes"/>
- <staged-build with="pack" stage="strap" project="reflect"/>
- <staged-build with="pack" stage="strap" project="compiler"/>
- </target>
-
- <target name="strap-opt" description="Optimized version of strap.done."> <optimized name="strap.done"/></target>
-
-
-<!-- ===========================================================================
- OSGi Artifacts
-============================================================================ -->
- <!-- This task takes the output of the pack stage and OSGi-fies the jars based on the bnd files in src/build/bnd
- This means adding manifests and enforcing the Exports clauses (removing non-exported classes!)
- These jars are then copied to the distribution and published to maven.
- -->
-
-
- <target name="osgi.core" depends="pack.core">
- <mkdir dir="${build-osgi.dir}"/>
-
- <uptodate property="osgi.bundles.available" targetfile="${build-osgi.dir}/bundles.core.complete">
- <srcresources>
- <fileset dir="${basedir}">
- <include name="build.xml"/>
- <include name="build-ant-macros.xml"/>
- <include name="src/build/bnd/*.bnd"/>
- </fileset>
- <filelist>
- <file name="${library.jar}"/>
- <file name="${reflect.jar}"/>
- <file name="${compiler.jar}"/>
- </filelist>
- </srcresources>
- </uptodate>
-
- <if><not><isset property="osgi.bundles.available"/></not><then>
- <stopwatch name="osgi.core.timer"/>
- <make-bundle project="library">
- <fileset dir="${src.dir}/library"/>
- </make-bundle>
-
- <make-bundle project="reflect">
- <fileset dir="${src.dir}/reflect"/>
- </make-bundle>
-
- <!-- TODO modularize compiler. Remove the other class dirs as soon as they become modules -->
- <make-bundle project="compiler">
- <fileset dir="${src.dir}/compiler"/>
- <fileset dir="${src.dir}/scaladoc"/>
- <fileset dir="${src.dir}/interactive"/>
- <fileset dir="${src.dir}/repl"/>
- </make-bundle>
-
- <touch file="${build-osgi.dir}/bundles.core.complete" verbose="no"/>
- <stopwatch name="osgi.core.timer" action="total"/>
- </then></if>
- </target>
-
- <target name="osgi.done" depends="pack.done, osgi.core">
- <uptodate property="osgi.all.bundles.available" targetfile="${build-osgi.dir}/bundles.all.complete">
- <srcresources>
- <fileset dir="${basedir}">
- <include name="build.xml"/>
- <include name="build-ant-macros.xml"/>
- <include name="src/build/bnd/*.bnd"/>
- </fileset>
- <filelist>
- <!-- TODO modularize compiler
- <include name="${interactive.jar}"/>
- <include name="${scaladoc.jar}"/>
- -->
-
- <file name="${actors.jar}"/>
-
- <file name="${continuations-plugin.jar}"/>
- <file name="${continuations-library.jar}"/>
- <file name="${parser-combinators.jar}"/>
- <file name="${xml.jar}"/>
- <file name="${swing.jar}"/>
- </filelist>
- </srcresources>
- </uptodate>
-
- <if><not><isset property="osgi.all.bundles.available"/></not><then>
- <stopwatch name="osgi.all.timer"/>
-
- <!-- TODO modularize compiler
- TODO: refactor so that we can restrict exported packages to scala.tools.nsc.doc.*
- move ant task, partest stuff to other jars,
- and move scala.tools.nsc.ScalaDoc main class to scala.tools.nsc.doc
- <make-bundle project="scaladoc">
- <fileset dir="${src.dir}/scaladoc"/>
- </make-bundle>
-
- TODO: refactor so that we can restrict exported packages to scala.tools.nsc.interactive.*
- <make-bundle project="interactive">
- <fileset dir="${src.dir}/interactive"/>
- </make-bundle>
- -->
-
- <make-bundle project="actors">
- <fileset dir="${src.dir}/actors"/>
- </make-bundle>
-
-
- <make-bundle project="continuations-plugin"/>
- <make-bundle project="continuations-library"/>
- <make-bundle project="parser-combinators"/>
- <make-bundle project="xml"/>
- <make-bundle project="swing"/>
-
- <touch file="${build-osgi.dir}/bundles.all.complete" verbose="no"/>
- <stopwatch name="osgi.all.timer" action="total"/>
- </then></if>
- </target>
-
-
-<!-- ===========================================================================
- TEST SUITE
-============================================================================ -->
- <!-- bootstrapping stability: compare {quick,strap}/(lib|reflect|comp) -->
- <target name="test.stability" depends="strap.done">
- <exec osfamily="unix" vmlauncher="false" executable="${basedir}/tools/stability-test.sh" failonerror="true" />
- <!-- I think doing it this way means it will auto-pass on windows... that's the idea. If not, something like this. -->
- <!-- <exec osfamily="windows" executable="foo" failonerror="false" failifexecutionfails="false" /> -->
- </target>
-
- <target name="test.stability-opt" description="Optimized version of test.stability."> <optimized name="test.stability"/></target>
-
- <target name="test.osgi.init" depends="osgi.done">
- <uptodate property="test.osgi.available" targetfile="${build-osgi.dir}/test-compile.complete">
- <srcfiles dir="${test.osgi.src}">
- <include name="**/*.scala"/>
- </srcfiles>
- </uptodate>
- </target>
-
- <target name="test.osgi.comp" depends="test.osgi.init, quick.done" unless="test.osgi.available">
- <stopwatch name="test.osgi.compiler.timer"/>
- <mkdir dir="${test.osgi.classes}"/>
- <scalacfork
- destdir="${test.osgi.classes}"
- compilerpathref="quick.compiler.path"
- params="${scalac.args.quick}"
- srcdir="${test.osgi.src}"
- jvmargs="${scalacfork.jvmargs}">
- <include name="**/*.scala"/>
- <compilationpath refid="test.osgi.compiler.build.path.felix"/>
- </scalacfork>
- <touch file="${build-osgi.dir}/test-compile.complete" verbose="no"/>
- <stopwatch name="test.osgi.compiler.timer" action="total"/>
- </target>
-
- <target name="test.osgi" depends="test.osgi.comp">
- <if><isset property="test.osgi.skip"/><then>
- <echo message="Skipping OSGi JUnit tests"/>
- </then><else>
- <echo message="Running OSGi JUnit tests. Output in ${build-osgi.dir}"/>
- <stopwatch name="test.osgi.timer"/>
- <mkdir dir="${test.osgi.classes}"/>
-
- <echo message="Test pass 1 of 2 using Apache Felix ${osgi.felix.version}"/>
- <junit fork="yes" haltonfailure="yes">
- <classpath refid="test.osgi.compiler.build.path.felix"/>
- <jvmarg value="-Duser.home=${user.home}"/>
- <batchtest fork="yes" todir="${build-osgi.dir}">
- <fileset dir="${test.osgi.classes}">
- <include name="**/*Test.class"/>
- </fileset>
- </batchtest>
- <formatter type="xml" />
- </junit>
-
- <echo message="Test pass 2 of 2 using Eclipse Equinox ${osgi.equinox.version}"/>
- <junit fork="yes" haltonfailure="yes">
- <classpath refid="test.osgi.compiler.build.path.equinox"/>
- <jvmarg value="-Duser.home=${user.home}"/>
- <batchtest fork="yes" todir="${build-osgi.dir}">
- <fileset dir="${test.osgi.classes}">
- <include name="**/*Test.class"/>
- </fileset>
- </batchtest>
- <formatter type="xml" /> <!-- silenced by having it use a file; I tried for an hour to use other formatters but classpath issues drove me to this usefile="false" -->
- </junit>
- <stopwatch name="test.osgi.timer" action="total"/>
- </else></if>
- </target>
-
-
-<!-- ===========================================================================
- SBT Compiler Interface
-============================================================================ -->
- <target name="test.sbt" depends="quick.done">
- <if><not><and>
- <available file="${sbt.interface.jar}"/>
- <available file="${sbt.interface.src.jar}"/></and></not>
- <then>
- <!-- Ensure directories exist -->
- <mkdir dir="${sbt.src.dir}"/>
- <mkdir dir="${sbt.lib.dir}"/>
-
- <get src="${sbt.interface.url}" dest="${sbt.interface.jar}"/>
- <get src="${sbt.interface.src.url}" dest="${sbt.interface.src.jar}"/>
-
- <!-- Explode sources -->
- <unzip src="${sbt.interface.src.jar}" dest="${sbt.src.dir}"/>
- </then></if>
-
- <stopwatch name="quick.sbt-interface.timer"/>
- <mkdir dir="${build-sbt.dir}/classes"/>
- <scalacfork
- destdir="${build-sbt.dir}/classes"
- compilerpathref="quick.compiler.path"
- params="${scalac.args.quick}"
- srcdir="${sbt.src.dir}"
- jvmargs="${scalacfork.jvmargs}">
- <include name="**/*.scala"/>
- <compilationpath refid="sbt.compile.build.path"/>
- </scalacfork>
- <touch file="${build-sbt.dir}/sbt-interface.complete" verbose="no"/>
- <stopwatch name="quick.sbt-interface.timer" action="total"/>
- </target>
-
- <target name="test.junit.comp" depends="pack.done">
- <stopwatch name="test.junit.compiler.timer"/>
- <mkdir dir="${test.junit.classes}"/>
- <javac
- debug="true"
- srcdir="${test.junit.src}"
- destdir="${test.junit.classes}"
- classpathref="test.junit.compiler.build.path"
- target="1.6"
- source="1.5"
- compiler="javac1.6"
- includes="**/*.java"/>
- <scalacfork
- destdir="${test.junit.classes}"
- compilerpathref="quick.compiler.path"
- params="${scalac.args.quick}"
- srcdir="${test.junit.src}"
- jvmargs="${scalacfork.jvmargs}">
- <include name="**/*.scala"/>
- <compilationpath refid="test.junit.compiler.build.path"/>
- </scalacfork>
- <touch file="${build-junit.dir}/test-compile.complete" verbose="no"/>
- <stopwatch name="test.junit.compiler.timer" action="total"/>
- </target>
-
- <target name="test.junit" depends="test.junit.comp">
- <stopwatch name="test.junit.timer"/>
- <mkdir dir="${test.junit.classes}"/>
- <echo message="Note: details of failed tests will be output to ${build-junit.dir}"/>
-
- <if><isset property="test.method" /><then><property name="test.methods" value="${test.method}" /></then></if>
- <junit fork="yes" haltonfailure="yes" printsummary="on">
- <classpath refid="test.junit.compiler.build.path"/>
- <test fork="yes" todir="${build-junit.dir}" if="test.class" unless="test.methods" name="${test.class}" />
- <test fork="yes" todir="${build-junit.dir}" if="test.methods" name="${test.class}" methods="${test.methods}" />
- <batchtest fork="yes" todir="${build-junit.dir}" unless="test.class">
- <fileset dir="${test.junit.classes}">
- <include name="**/*Test.class"/>
- </fileset>
- </batchtest>
- <formatter type="plain"/>
- </junit>
- <stopwatch name="test.junit.timer" action="total"/>
- </target>
-
- <!-- See test/build-partest.xml for the macro(s) being used here. -->
- <target name="partest.task" depends="pack.done">
- <!-- note the classpathref! this is the classpath used to run partest,
- so it must have the new compiler.... -->
- <taskdef
- classpathref="partest.compilation.path"
- resource="scala/tools/partest/antlib.xml"/>
- </target>
-
- <target name="test.suite.init" depends="partest.task">
- <!-- read by test/partest to determine classpath used to run partest -->
- <propertyfile file = "build/pack/partest.properties">
- <!-- TODO: change "partest.classpath" to "partest.runtime.classpath" or something -->
- <entry key = "partest.classpath" value="${toString:partest.compilation.path}"/>
- </propertyfile>
- </target>
-
- <target name="test.suite" depends="test.suite.init">
- <testSuite kinds="pos neg run jvm res scalap scalacheck specialized instrumented"/>
- </target>
-
- <target name="test.suite.color" depends="test.suite.init">
- <testSuite colors="8" kinds="pos neg run jvm res scalap scalacheck specialized instrumented"/>
- </target>
-
- <target name="test.suite.quick" depends="init, quick.done">
- <path id="test.suite.path">
- <path refid="quick.bin.tool.path"/>
- <path refid="quick.interactive.build.path"/>
- <path refid="partest.compilation.path.noncore"/>
- </path>
- <property name="pcp" value="${toString:test.suite.path}"/>
- <taskdef classpathref="test.suite.path" resource="scala/tools/partest/antlib.xml"/>
- <testSuite colors="8" kinds="pos neg run jvm res scalap scalacheck specialized instrumented" pcp="${pcp}"/>
- </target>
-
- <target name="test.run" depends="test.suite.init">
- <testSuite kinds="run jvm"/>
- </target>
-
- <target name="test.scaladoc" depends="test.suite.init">
- <testSuite kinds="run scalacheck" srcdir="scaladoc"/>
- </target>
-
- <target name="test.interactive" depends="test.suite.init">
- <testSuite kinds="presentation"/>
- </target>
-
- <!-- for use in PR validation, where stability is rarely broken, so we're going to use starr for locker,
- and skip test.stability (which requires locker == quick) -->
- <target name="test.core" depends="test.osgi, test.sbt, test.bc, test.junit, test.interactive, test.scaladoc, test.suite"/>
- <target name="test.done" depends="test.core, test.stability"/>
-
-<!-- ===========================================================================
- BINARY COMPATIBILITY TESTING
-============================================================================ -->
- <target name="bc.init" depends="init" if="test.bc.skip">
- <!-- if test.bc.skip is set, make sure that pc.prepare is not executed either -->
- <property name="maven-deps-done-mima" value="true"/>
- </target>
-
- <target name="bc.prepare" depends="bc.init" unless="maven-deps-done-mima">
- <property name="bc-reference-version" value="2.11.0"/>
-
- <property name="bc-build.dir" value="${build.dir}/bc"/>
- <!-- Obtain mima -->
- <mkdir dir="${bc-build.dir}"/>
- <!-- Pull down MIMA -->
- <artifact:dependencies pathId="mima.classpath">
- <dependency groupId="com.typesafe" artifactId="mima-reporter_2.10" version="0.1.14"/>
- </artifact:dependencies>
- <artifact:dependencies pathId="old.bc.classpath">
- <dependency groupId="org.scala-lang" artifactId="scala-library" version="${bc-reference-version}"/>
- <dependency groupId="org.scala-lang" artifactId="scala-reflect" version="${bc-reference-version}"/>
- </artifact:dependencies>
- <property name="maven-deps-done-mima" value="true"/>
- </target>
-
- <target name="test.bc-opt" description="Optimized version of test.bc."> <optimized name="test.bc"/></target>
- <target name="test.bc" depends="bc.prepare, pack.lib, pack.reflect" unless="test.bc.skip">
- <bc.check project="library"/>
- <bc.check project="reflect"/>
- </target>
-
-<!-- ===========================================================================
- DOCUMENTATION
-============================================================================ -->
- <target name="docs.start" depends="scaladoc.task" unless="docs.skip">
- <!-- Set the github commit scaladoc sources point to -->
- <!-- For releases, look for the tag with the same name as the maven version -->
- <condition property="scaladoc.git.commit" value="v${maven.version.number}">
- <isset property="build.release"/>
- </condition>
- <!-- For snapshots, if we know the commit, point scaladoc to that particular commit instead of master -->
- <condition property="scaladoc.git.commit" value="${git.commit.sha}">
- <not><equals arg1="${git.commit.sha}" arg2="unknown"/></not>
- </condition>
- <!-- Fallback: point scaladoc to master -->
- <property name="scaladoc.git.commit" value="master"/>
- <!-- Compute the URL and show it -->
- <property name="scaladoc.url" value="https://github.com/scala/scala/tree/${scaladoc.git.commit}/src"/>
- <echo message="Scaladoc will point to ${scaladoc.url} for source files."/>
-
- <!-- Unless set with -Dscaladoc.<...>, these won't be activated -->
- <property name="scaladoc.raw.output" value="no"/>
- <property name="scaladoc.no.prefixes" value="no"/>
- </target>
-
- <target name="docs.lib" depends="docs.start" unless="docs.skip">
- <staged-docs project="library">
- <include name="**/*.scala"/>
- <exclude name="**/runtime/*$.scala"/>
- <exclude name="**/runtime/ScalaRunTime.scala"/>
- <exclude name="**/runtime/StringAdd.scala"/>
- </staged-docs>
- </target>
-
- <target name="docs.reflect" depends="docs.start" unless="docs.skip">
- <staged-docs project="reflect">
- <include name="**/*.scala"/>
- </staged-docs>
- </target>
-
- <target name="docs.comp" depends="docs.start" unless="docs.skip">
- <staged-docs project="compiler">
- <include name="**/*.scala"/>
- </staged-docs>
- </target>
-
- <!-- TODO modularize compiler. These targets are currently not used.
- <target name="docs.scaladoc" depends="docs.start" unless="docs.skip">
- <staged-docs project="scaladoc">
- <include name="**/*.scala"/>
- </staged-docs>
- </target>
-
- <target name="docs.interactive" depends="docs.start" unless="docs.skip">
- <staged-docs project="interactive">
- <include name="**/*.scala"/>
- </staged-docs>
- </target>
- -->
-
- <target name="docs.actors" depends="docs.start" unless="docs.skip">
- <staged-docs project="actors">
- <include name="**/*.scala"/>
- </staged-docs>
- </target>
-
- <target name="docs.scalap" depends="docs.start" unless="docs.skip">
- <staged-docs project="scalap">
- <include name="**/*.scala"/>
- </staged-docs>
- </target>
-
- <target name="docs.core" depends="docs.lib, docs.reflect, docs.comp" unless="docs.skip"/>
- <!-- TODO modularize compiler: docs.scaladoc, docs.interactive, -->
- <target name="docs.done" depends="docs.core, docs.actors, docs.scalap" unless="docs.skip"/>
-
- <!-- doc/ and man/ -->
- <target name="pack.doc" depends="scaladoc.task" unless="docs.skip"> <!-- depends on scaladoc.task for scalac taskdef -->
- <mkdir dir="${build-pack.dir}/doc"/>
- <copy toDir="${build-pack.dir}/doc" overwrite="true">
- <fileset dir="${doc.dir}"/>
- </copy>
-
- <mkdir dir="${build-pack.dir}/doc/tools"/>
- <mkdir dir="${build-pack.dir}/man/man1"/>
- <staged-uptodate stage="manual" project="manual">
- <check><srcfiles dir="${src.dir}/manual"/></check>
- <do>
- <mkdir dir="${build.dir}/manmaker/classes"/>
- <scalac
- destdir="${build.dir}/manmaker/classes"
- classpathref="manual.build.path"
- srcdir="${src.dir}/manual"
- includes="**/*.scala"
- addparams="${scalac.args.all} -language:implicitConversions"/>
- <mkdir dir="${build-manual.dir}/genman/man1"/>
- <taskdef name="genman"
- classname="scala.tools.docutil.ManMaker"
- classpathref="manual.build.path"/>
- <genman command="fsc, scala, scalac, scaladoc, scalap"
- htmlout="${build-pack.dir}/doc/tools"
- manout="${build-manual.dir}/genman"/>
- </do>
- </staged-uptodate>
-
- <!-- On Windows source and target files can't be the same ! -->
- <fixcrlf
- srcdir="${build-manual.dir}/genman"
- destdir="${build-pack.dir}/man"
- eol="unix" includes="**/*.1"/>
- <copy todir="${build-pack.dir}/doc/tools" overwrite="true">
- <fileset dir="${src.dir}/manual/scala/tools/docutil/resources">
- <include name="**/*.html"/>
- <include name="**/*.css"/>
- <include name="**/*.gif"/>
- <include name="**/*.png"/>
- </fileset>
- </copy>
- </target>
-
-<!-- ===========================================================================
-MAIN DISTRIBUTION PACKAGING
-============================================================================ -->
- <target name="pack-maven.core" depends="osgi.core, docs.core">
- <property name="dist.maven" value="${dists.dir}/maven/${version.number}"/>
- <mkdir dir="${dist.maven}"/>
-
- <mvn-package project="library"/>
- <mvn-package project="reflect"/>
- <mvn-package project="compiler"/>
-
- <copy tofile="${dist.maven}/scala-library-all/scala-library-all-pom.xml"
- file="${src.dir}/build/maven/scala-library-all-pom.xml" overwrite="true"/>
-
- <!-- for replacestarr -->
- <if><isset property="update.starr.version"/><then>
- <echo message="From now on, ${maven.version.number} will be used as STARR (`build.properties`'s `starr.version` was modified)."/>
- <propertyfile file = "build.properties">
- <entry key = "starr.version" value="${maven.version.number}"/>
- </propertyfile>
- </then></if>
- </target>
-
- <target name="pack-maven.done" depends="pack-maven.core, osgi.done, docs.done, pack.bin, pack.doc">
- <!-- TODO modularize compiler
- <mvn-package project="interactive"/>
- <mvn-package project="scaladoc"/>
- -->
-
- <mvn-package project="actors"/>
-
- <!-- don't bother fitting scalap into the mould: it will move out soon -->
- <copy tofile="${dist.maven}/scalap/scalap-pom.xml" file="${src.dir}/build/maven/scalap-pom.xml" overwrite="true"/>
- <copy tofile="${dist.maven}/scalap/scalap.jar" file="${scalap.jar}" overwrite="true"/>
- <jar destfile="${dist.maven}/scalap/scalap-src.jar" basedir="${src.dir}/scalap" whenmanifestonly="fail"/>
- <if><not><isset property="docs.skip"/></not><then>
- <jar destfile="${dist.maven}/scalap/scalap-docs.jar" basedir="${build-docs.dir}/scalap"/>
- </then></if>
-
- <copy tofile="${dist.maven}/scala-dist/scala-dist-pom.xml" file="${src.dir}/build/maven/scala-dist-pom.xml" overwrite="true"/>
- <jar whenmanifestonly="fail" destfile="${dist.maven}/scala-dist/scala-dist.jar" basedir="${build-pack.dir}">
- <include name="bin/" />
- <include name="doc/" />
- <include name="man/" />
- </jar>
- </target>
-
-<!-- ===========================================================================
- MAVEN PUBLISHING
-============================================================================ -->
- <target name="init.maven" depends="init">
- <property name="remote.snapshot.repository" value="https://oss.sonatype.org/content/repositories/snapshots" />
- <property name="remote.release.repository" value="https://oss.sonatype.org/service/local/staging/deploy/maven2" />
-
- <property name="local.snapshot.repository" value="${user.home}/.m2/repository" />
- <property name="local.release.repository" value="${user.home}/.m2/repository" />
-
- <property name="repository.credentials.id" value="sonatype-nexus" />
- <property name="settings.file" value="${user.home}/.m2/settings.xml" />
-
- <if><contains string="${maven.version.number}" substring="-SNAPSHOT"/><then>
- <property name="remote.repository" value="${remote.snapshot.repository}"/>
- <property name="local.repository" value="${local.snapshot.repository}"/>
- </then><else>
- <property name="remote.repository" value="${remote.release.repository}"/>
- <property name="local.repository" value="${local.release.repository}"/>
- </else></if>
- </target>
-
- <target name="publish" depends="pack-maven.done, init.maven" description="Publishes unsigned artifacts to the maven repo.">
- <deploy />
- <deploy-pom name="scala-library-all"/>
- <deploy-jar name="scala-dist"/>
- </target>
-
- <target name="publish.local" depends="pack-maven.done, init.maven" description="Publishes unsigned artifacts to the local maven repo.">
- <deploy local="true"/>
- <deploy-pom name="scala-library-all" local="true"/>
- <deploy-jar name="scala-dist" local="true"/>
- </target>
-
- <target name="publish.signed" depends="pack-maven.done, init.maven" description="Publishes signed artifacts to the remote maven repo.">
- <deploy signed="true"/>
- <deploy-pom name="scala-library-all" signed="true"/>
- <deploy-jar name="scala-dist" signed="true"/>
- </target>
-
- <target name="publish-core" depends="pack-maven.core, init.maven">
- <deploy-one name="scala-compiler" />
- <deploy-one name="scala-library" />
- <deploy-one name="scala-reflect" />
- </target>
-
- <target name="publish-core-local" depends="pack-maven.core, init.maven">
- <deploy-one name="scala-compiler" local="true"/>
- <deploy-one name="scala-library" local="true"/>
- <deploy-one name="scala-reflect" local="true"/>
- </target>
-
- <target name="publish-core-opt" description="Builds an untested optimised core (library/reflect/compiler) and publishes to maven.">
- <optimized name="publish-core"/>
- </target>
-
-<!-- ===========================================================================
- VISUALIZATION
-============================================================================ -->
-
- <target name="graph.init">
- <taskdef name="vizant" classname="vizant.Vizant" classpath="${lib-ant.dir}/vizant.jar"/>
- </target>
-
- <target name="graph.all" depends="graph.init">
- <vizant antfile="${ant.file}" outfile="${ant.project.name}.dot" from="all.done"/>
- </target>
-
- <target name="graph.sabbus" depends="graph.init">
- <vizant antfile="${ant.file}" outfile="${ant.project.name}.dot"/>
- </target>
-</project>