summaryrefslogblamecommitdiff
path: root/src/build/build-jvm15.xml
blob: 821f67395e786867b02ba6bf6bdf2d59aa488cc8 (plain) (tree)













































































































































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: $ -->

<project name="scala-jvm15" basedir="../.." default="build">

<!-- ===========================================================================
PROPERTIES
============================================================================ -->

  <import file="build-imports.xml"/>

  <!-- Loads custom properties definitions -->
  <property file="${scripts.dir}/build-jvm15.properties"/>

  <!-- Configuring how the compiler is run -->
  <property name="nsc.log-files" value="no"/>
  <property name="nsc.excludes.file" value="${basedir}/build.excludes"/>
  <property name="nsc.params" value=""/>
  <fail message="Use Ant script 'build-jvm14.xml' for targeting the Java 1.4 platform">
    <condition>
      <contains string="${ant.java.version}" substring="1.4"/>
    </condition>
  </fail>
  <property name="nsc.target" value="jvm-1.5"/>

  <!-- Sets location of build folders -->
  <property name="build.dir" value="${basedir}/build"/>
  <property name="locker.dir" value="${build.dir}/locker"/>
  <property name="quick.dir" value="${build.dir}/quick"/>
  <property name="strap.dir" value="${build.dir}/strap"/>
  <property name="dist.dir" value="${basedir}/dists"/>

<!-- ===========================================================================
SETUP
============================================================================ -->

  <target name="setup" depends="init">
  <!-- Removing any outdated stuff -->
    <if>
      <and>
        <available file="${locker.dir}/complete"/>
        <not><uptodate targetfile="${locker.dir}/complete">
          <srcfiles dir="${lib.dir}" includes="scala-*.jar"/>
        </uptodate></not>
      </and>
      <then>
        <echo level="warning"
          message="STARR updated: LOCKER is obsolete and will be rebuilt."/>
        <runtarget target="clean.build"/>
      </then>
    </if>
  <!-- Finding out what is available -->
    <available property="excludes.avail" file="${nsc.excludes.file}"/>
    <condition property="locker.avail">
      <available file="${locker.dir}/complete"/>
    </condition>
  <!-- Generating version number -->
    <property file="${number.file}"/>
    <property
      name="version.number"
      value="${version.major}.${version.minor}.${version.patch}.r${svn.number}-b${time.short}"/>
  <!-- And print-out what we are building -->
    <echo level="info" message="Build number is '${version.number}'"/>
    <echo level="info" message="Built ${time.human} from SVN revision ${svn.number}"/>
  </target>

<!-- ===========================================================================
BUILD
============================================================================ -->

  <target name="newlocker"
    depends="clean.unfreeze, build.locker"
    description="Rebuilds LOCKER from the current sources"/>

  <!-- Build the locker layer -->
  <target name="build.locker" depends="setup" unless="locker.avail">
    <buildlayer
      name="locker"
      libpath="${lib.dir}/${lib.jar.name}"
      comppath="${lib.dir}/${comp.jar.name}"
      outputdir="${locker.dir}"
    />
    <touch file="${locker.dir}/complete" verbose="no"/>
  </target>

  <target name="build" depends="build.quick"/>

  <!-- Build the quick layer -->
  <target name="build.quick" depends="build.locker"
    description="Builds a quick-test (QUICK) version of the compiler">
    <buildlayer
      name="quick"
      libpath="${locker.dir}/lib/library"
      comppath="${locker.dir}/lib/compiler"
      outputdir="${quick.dir}"
      buildall="true"
    />
  </target>

  <!-- Build the bootstrap layer -->
  <target name="build.strap" depends="build.quick">
    <buildlayer
      name="strap"
      libpath="${quick.dir}/lib/library"
      comppath="${quick.dir}/lib/compiler"
      outputdir="${strap.dir}"
      buildall="true"
    />
  </target>

<!-- ===========================================================================
DIST
============================================================================ -->

  <target name="dist"
    depends="clean.build, test, binaries"
    description="Creates a (stability-)tested, complete Scala distribution *from scratch*"/>

  <target name="binaries"
    depends="setup, build.strap"
    description="Creates a binary Scala distribution">
    <property name="dist.current.dir"
              value="${dist.dir}/scala-${version.number}"/>
    <if><and>
      <isset property="os.unix"/>
      <isset property="dist.resource"/></and>
    <then>
      <symlink
        link="${dist.dir}"
        resource="${dist.resource}" overwrite="yes" failonerror="no"/>
      <touch file="${dist.dir}/is_symlink" verbose="no"/>
    </then></if>
    <mkdir dir="${dist.current.dir}"/>
  <!-- Copy all requires libraries -->
    <mkdir dir="${dist.current.dir}/lib"/>
    <property name="ant.version.number" value="[1.6"/>
    <!-- version ::= major('.'minor('.'micro('.'qualifier)?)?)?              -->
    <!-- see http://www2.osgi.org/javadoc/r4/org/osgi/framework/Version.html -->
    <propertyregex
      property="osgi.version.number" input="${version.number}"
      regexp="([^-]*)(-.*)?" select="\1"
    />
    <echo level="verbose" message="OSGi version: ${osgi.version.number}"/>
    <jar destfile="${dist.current.dir}/lib/${comp.jar.name}">
      <fileset dir="${strap.dir}/lib/compiler"/>
      <zipfileset src="${fjbg.jar}"/>
      <zipfileset src="${msil.jar}"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Main-Class" value="scala.tools.nsc.Main"/>
        <attribute name="Class-Path" value="${lib.jar.name}"/>
        <section name="scala/tools/nsc">
          <attribute name="Extension-Name" value="scala.tools.nsc"/>
          <attribute name="Specification-Title" value="Scala Compiler"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala.tools.nsc"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala Compiler Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala.tools.ant;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast.parser;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.backend;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.doc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.io;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.matching;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.models;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.classfile;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.clr;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.transform;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.typechecker;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.util;version=&#34;${osgi.version.number}&#34;,scala.tools.util;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="org.apachge.ant.tools;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.taskdefs;version=&#34;${ant.version.number}&#34;,org.apachge.ant.types;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.util;version=&#34;${ant.version.number}&#34;,org.xml.sax"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${lib.jar.name}">
      <fileset dir="${strap.dir}/lib/library"/>
      <fileset dir="${strap.dir}/lib/actors"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Main-Class" value="scala.util.Properties"/>
        <section name="scala">
          <attribute name="Extension-Name" value="scala"/>
          <attribute name="Specification-Title" value="Scala Library"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala Library Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_library"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.actors;version=&#34;${osgi.version.number}&#34;,scala.actors.remote;version=&#34;${osgi.version.number}&#34;,scala.collection;version=&#34;${osgi.version.number}&#34;,scala.collection.immutable;version=&#34;${osgi.version.number}&#34;,scala.collection.jcl;version=&#34;${osgi.version.number}&#34;,scala.collection.mutable;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;,scala.concurrent;version=&#34;${osgi.version.number}&#34;,scala.io;version=&#34;${osgi.version.number}&#34;,scala.mobile;version=&#34;${osgi.version.number}&#34;,scala.ref;version=&#34;${osgi.version.number}&#34;,scala.reflect;version=&#34;${osgi.version.number}&#34;,scala.runtime;version=&#34;${osgi.version.number}&#34;,scala.testing;version=&#34;${osgi.version.number}&#34;,scala.text;version=&#34;${osgi.version.number}&#34;,scala.util;version=&#34;${osgi.version.number}&#34;,scala.util.automata;version=&#34;${osgi.version.number}&#34;,scala.util.grammar;version=&#34;${osgi.version.number}&#34;,scala.util.logging;version=&#34;${osgi.version.number}&#34;,scala.util.parsing;version=&#34;${osgi.version.number}&#34;,scala.util.regexp;version=&#34;${osgi.version.number}&#34;,scala.xml;version=&#34;${osgi.version.number}&#34;,scala.xml.dtd;version=&#34;${osgi.version.number}&#34;,scala.xml.factory;version=&#34;${osgi.version.number}&#34;,scala.xml.parsing;version=&#34;${osgi.version.number}&#34;,scala.xml.path;version=&#34;${osgi.version.number}&#34;,scala.xml.pull;version=&#34;${osgi.version.number}&#34;,scala.xml.transform;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="javax.xml.parsers,org.xml.sax,org.xml.sax.helpers"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${dbc.jar.name}">
      <fileset dir="${strap.dir}/lib/dbc"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Class-Path" value="${lib.jar.name}"/>
        <section name="scala/dbc">
          <attribute name="Extension-Name" value="scala.dbc"/>
          <attribute name="Specification-Title" value="Scala DBC Library"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala.dbc"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala DBC Library Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_dbc_library"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala.dbc;version=&#34;${osgi.version.number}&#34;,scala.dbc.datatype;version=&#34;${osgi.version.number}&#34;,scala.dbc.exception;version=&#34;${osgi.version.number}&#34;,scala.dbc.result;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement.expression;version=&#34;${osgi.version.number}&#34;,scala.dbc.syntax;version=&#34;${osgi.version.number}&#34;,scala.dbc.value;version=&#34;${osgi.version.number}&#34;,scala.dbc.vendor;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${partest.jar.name}">
      <fileset dir="${strap.dir}/lib/partest"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Main-Class" value="scala.tools.partest.TestRunner"/>
        <attribute name="Class-Path" value="${lib.jar.name}"/>
        <section name="scala/tools/partest">
          <attribute name="Extension-Name" value="scala.tools.partest"/>
          <attribute name="Specification-Title" value="Scala Test Utility"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala.tools.partest"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala Test Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala.tools.partest;version=&#34;${osgi.version.number}&#34;,scala.tools.partest.utils;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="javax.swing"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>

    <!-- build source jars -->
    <mkdir dir="${dist.current.dir}/src"/>
    <jar
      destfile="${dist.current.dir}/src/${libsrc.jar.name}">
      <fileset dir="${src.dir}/library"/>
      <fileset dir="${src.dir}/actors"/>
    </jar>
    <jar
      destfile="${dist.current.dir}/src/${dbcsrc.jar.name}"
      basedir="${src.dir}/dbc"
      includes="**/*.scala"
      />
    <jar
      destfile="${dist.current.dir}/src/${parsrc.jar.name}"
      basedir="${src.dir}/partest"
      includes="**/*.scala"
      />
    <jar
      destfile="${dist.current.dir}/src/${compsrc.jar.name}"
      basedir="${src.dir}/compiler"
      includes="**/*.scala"
    />

    <!-- Copy executable files -->
    <mkdir dir="${dist.current.dir}/bin"/>
    <copy todir="${dist.current.dir}/bin">
      <fileset dir="${strap.dir}/bin"/>
    </copy>
    <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scalac.exec.name}"/>
    <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scala.exec.name}"/>
    <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scaladoc.exec.name}"/>
    <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${fsc.exec.name}"/>
    <!-- Recreate the 'latest' link to point to this distribution -->
    <if><isset property="os.win"/>
      <then>
        <copy todir="${dist.dir}/latest">
          <fileset dir="${dist.current.dir}"/>
        </copy>
      </then>
      <else>
        <symlink
          link="${dist.dir}/latest"
          resource="${dist.current.dir}"
          overwrite="yes" failonerror="no"/>
      </else>
    </if>
  </target>

</project>