summaryrefslogblamecommitdiff
path: root/src/build/build-cldc.xml
blob: 7f9964af57c56421c244a192e3ff80669550ba55 (plain) (tree)
























































































































































































































































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

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

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

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

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

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

  <property name="cldcapi.jar" value="${lib.dir}/cldcapi10.jar"/>
  <property name="midpapi.jar" value="${lib.dir}/midpapi10.jar"/>

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

  <target name="cldc.init" depends="init">
    <!-- Sets preverify command (Java WTK) -->
    <condition property="preverify.cmd" value="${unix.wtk.home}/bin/preverify">
      <and>
        <os family="unix"/><isset property="unix.wtk.home"/>
        <available file="${unix.wtk.home}/bin/preverify"/>
      </and>
    </condition>
    <condition property="preverify.cmd" value="${win.wtk.home}/preverify">
      <and>
        <os family="windows"/><isset property="win.wtk.home"/>
        <available file="${win.wtk.home}/bin/preverify.exe"/>
      </and>
    </condition>
    <echo level="verbose" message="Found: ${preverify.cmd}"/>
    <condition property="preverify.cmd" value="preverify">
      <and><available file="preverify" filepath="${env.PATH}"/></and>
    </condition>
    <fail message="Command 'preverify' not found">
      <condition><not><isset property="preverify.cmd"/></not></condition>
    </fail>
    <property file="${number.file}"/>
    <property
      name="version.number"
      value="${version.major}.${version.minor}.${version.patch}.r${svn.number}-b${time.short}"/>
    <echo level="verbose" message="${version.number}"/>
  </target>

  <target name="cldc.sources" depends="cldc.init"
          description="Create the source directory for the J2ME (CLDC) library"
  >
    <mkdir dir="${cldc.dir}/src"/>

    <copy todir="${cldc.dir}/src">
      <fileset dir="${src.dir}/library" includes="**/*.scala, **/*.java">
        <not>
          <present targetdir="${src.dir}/cldc-library"/>
        </not>
        <exclude name="**/jcl/**"/>
        <exclude name="**/ref/**"/>
        <exclude name="**/compat/**"/>
        <exclude name="**/concurrent/**"/>
        <exclude name="**/runtime/RichFloat.scala"/>
        <exclude name="**/runtime/RichDouble.scala"/>
        <exclude name="**/util/**"/>
        <exclude name="**/xml/**"/>
      </fileset>
    </copy>

    <copy todir="${cldc.dir}/src">
      <fileset dir="${src.dir}/cldc-library">
        <include name="**/*.scala"/>
        <include name="**/*.java"/>
      </fileset>
    </copy>

  </target>

  <target name="cldc.libraries" depends="cldc.sources"
    description="Builds the Scala library for J2ME (CLDC)"
  >
    <antcall target="build.quick"/>
    <mkdir dir="${cldc.dir}/lib/library"/>
    <!-- javac versions > 1.4 do not support 1.1 target anymore -->
    <javac
      srcdir="${cldc.dir}/src"
      destdir="${cldc.dir}/lib/library"
      compiler="javac1.4"
      source="1.1"
      target="1.1"
      deprecation="${jc.deprecation}"
    >
      <bootclasspath>
        <pathelement location="${cldcapi.jar}"/>
      </bootclasspath>
      <include name="**/*.java"/>
      <exclude name="scala/runtime/FloatRef.java"/>
      <exclude name="scala/runtime/DoubleRef.java"/>
    </javac>
    <property name="quick.dir" value="${build.dir}/quick"/>
    <path id="quick.classpath">
      <pathelement location="${quick.dir}/lib/library"/>
      <pathelement location="${quick.dir}/lib/compiler"/>
      <pathelement location="${fjbg.jar}"/>
      <pathelement location="${msil.jar}"/>
    </path>
    <taskdef
      name="quick" classname="scala.tools.ant.Scalac"
      classpathref="quick.classpath"/>
    <quick
      srcdir="${cldc.dir}/src"
      destdir="${cldc.dir}/lib/library"
      usepredefs="no"
      addparams="${nsc.params}"
      target="cldc"
      scalacdebugging="${nsc.log-files}"
    >
      <bootclasspath>
        <pathelement location="${cldcapi.jar}"/>
      </bootclasspath>
      <classpath>
        <pathelement location="${cldc.dir}"/>
      </classpath>
      <include name="scala/Predef.scala"/>
    </quick>
    <quick
      srcdir="${cldc.dir}/src"
      destdir="${cldc.dir}/lib/library"
      target="cldc"
      addparams="${nsc.params}"
      scalacdebugging="${nsc.log-files}"
    >
      <bootclasspath>
        <pathelement location="${cldcapi.jar}"/>
      </bootclasspath>
      <classpath>
        <pathelement location="${cldc.dir}"/>
      </classpath>
      <include name="**/*.scala"/>
      <exclude name="scala/Predef.scala"/>
      <exclude name="scala/BigDecimal.scala"/>
      <exclude name="scala/BigInt.scala"/>
      <exclude name="scala/collection/mutable/JavaMapAdaptor.scala"/>
      <exclude name="scala/collection/mutable/JavaSetAdaptor.scala"/>
      <exclude name="scala/collection/mutable/LinkedHashSet.scala"/>
      <exclude name="scala/util/Fluid.scala"/>
      <exclude name="scala/runtime/BoxedFloatArray.scala"/>
      <exclude name="scala/runtime/BoxedDoubleArray.scala"/>
      <exclude name="scala/io/**"/>
      <exclude name="scala/mobile/**"/>
      <exclude name="scala/reflect/**"/>
      <exclude name="scala/text/**"/>
      <exclude name="scala/testing/**"/>
      <exclude name="scala/xml/**"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </quick>
    <macrodef name="preverify">
      <attribute name="srcdir"/>
      <attribute name="destdir"/>
      <sequential>
        <exec executable="${preverify.cmd}" failonerror="false">
          <arg line="-classpath ${cldcapi.jar}${path.separator}${midpapi.jar}"/>
          <arg line="-target cldc1.0"/>
          <arg line="-d @{destdir}"/>
          <arg value="@{srcdir}"/>
        </exec>
      </sequential>
    </macrodef>
    <mkdir dir="${cldc.dir}/lib/preverified"/>
    <preverify
      srcdir="${cldc.dir}/lib/library"
      destdir="${cldc.dir}/lib/preverified"
    />
    <jar
      destfile="${cldc.dir}/lib/scalaapi10-unverified.jar"
      basedir="${cldc.dir}/lib/library"
      includes="scala/**/*.class">
      <manifest>
        <attribute name="Created-By" value="${version.number} (${vendor.name})"/>
      </manifest>
    </jar>
    <!-- see http://java.sun.com/j2me/docs/uei_specs.pdf -->
    <jar
      destfile="${cldc.dir}/lib/scalaapi10.jar"
      basedir="${cldc.dir}/lib/preverified"
      includes="scala/**/*.class">
      <manifest>
        <attribute name="Created-By" value="${version.number} (${vendor.name})"/>
        <attribute name="API-Specification-Version" value="1.0"/>
        <attribute name="API" value="Scala CLDC"/>
        <attribute name="API-Name" value="Scala Connected Limited Device Configuration"/>
        <attribute name="API-Type" value="Configuration"/>
      </manifest>
    </jar>
  </target>

  <target name="cldc.build" depends="cldc.libraries">
    <!-- exemples ? -->
  </target>

  <target name="cldc.dist" depends="cldc.build">
    <antcall target="binaries"/>
    <property name="dist.current.dir" value="${dist.dir}/scala-cldc-${version.number}"/>
    <mkdir dir="${dist.current.dir}"/>
    <copy todir="${dist.current.dir}/bin">
      <fileset dir="${dist.dir}/latest-jvm14/bin"/>
    </copy>
    <chmod perm="ugo+rx" dir="${dist.current.dir}/bin"/>
    <copy todir="${dist.current.dir}/lib">
      <fileset dir="${lib.dir}" includes="cldc*.jar,midp*.jar"/>
    </copy>
    <copy todir="${dist.current.dir}/lib">
      <fileset dir="${dist.dir}/latest-jvm14/lib" includes="scala*.jar"/>
    </copy>
    <!-- Recreate the 'latest' link to point to this distribution -->
    <if><isset property="os.win"/>
      <then>
        <copy todir="${dist.dir}/latest-cldc">
          <fileset dir="${dist.current.dir}"/>
        </copy>
      </then>
      <else>
        <symlink
          link="${dist.dir}/latest-cldc"
          resource="${dist.current.dir}"
          overwrite="yes" failonerror="no"/>
      </else>
    </if>
  </target>

<!-- ===========================================================================
CLEAN
============================================================================ -->

  <target name="cldc.clean" depends="ant-init">
    <remove dir="${build.dir}/cldc"/>
    <delete includeemptydirs="true" quiet="yes" failonerror="no">
      <fileset dir="@{dist.dir}" includes="**/scala-cldc*"/>
    </delete>
    <delete file="${dist.dir}/latest-cldc" quiet="yes" failonerror="no"/>
  </target>

</project>