summaryrefslogblamecommitdiff
path: root/src/build/build-android.xml
blob: 25d24c118693659c563ee32eae1ff0266de191c9 (plain) (tree)


































































































































































































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

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

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

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

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

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

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

  <target name="android.init" depends="init">
    <condition property="android.home" value="${unix.android.home}">
      <and><os family="unix"/><isset property="unix.android.home"/></and>
    </condition>
    <condition property="android.home" value="${win.android.home}">
      <and><os family="windows"/><isset property="win.android.home"/></and>
    </condition>
    <property name="android.home" value="${env.ANDROID_HOME}"/>

    <fail message="Android home is not set or could not find android.jar in ${android.home}">
      <condition><not><and>
        <available file="${android.home}/android.jar"/>
        <available file="${android.home}/tools/lib/dx.jar"/>
      </and></not></condition>
    </fail>
    <property name="android.jar" value="${android.home}/android.jar"/>
    <property name="tools.lib.dir" value="${android.home}/tools/lib"/>
    <property name="dx.jar" value="${tools.lib.dir}/dx.jar"/>
    <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="android.sources" depends="android.init"
          description="Create the source directory for Android library"
  >
    <mkdir dir="${android.dir}/src"/>
    <copy todir="${android.dir}/src">
      <fileset dir="${src.dir}/library" 
               includes="**/*.scala, **/*.java"
               excludes="scala/reflect/ScalaBeanInfo.scala">
        <not>
          <present targetdir="${src.dir}/android-library"/>
        </not>
      </fileset>
    </copy>

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

  <target name="android.libraries" depends="android.sources"
          description="Builds the Scala library for Android">
    <antcall target="build.quick"/>
    <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"/>
    <mkdir dir="${android.dir}/lib/library"/>
    <javac
      srcdir="${android.dir}/src"
      destdir="${android.dir}/lib/library"
      deprecation="${jc.deprecation}"
    >
      <bootclasspath>
        <pathelement location="${android.jar}"/>
      </bootclasspath>
      <include name="**/*.java"/>
    </javac>

    <quick
      srcdir="${android.dir}/src"
      destdir="${android.dir}/lib/library"
      usepredefs="no"
      deprecation="yes" unchecked="yes"
      addparams="${nsc.params}"
      extdirs=""
      scalacdebugging="${nsc.log-files}"
    >
      <bootclasspath>
        <pathelement location="${android.jar}"/>
      </bootclasspath>
      <include name="scala/Predef.scala"/>
    </quick>

    <quick
      srcdir="${android.dir}/src"
      destdir="${android.dir}/lib/library"
      deprecation="yes" unchecked="yes"
      extdirs=""
      addparams="${nsc.params}"
      scalacdebugging="${nsc.log-files}"
    >
      <bootclasspath>
        <pathelement location="${android.jar}"/>
      </bootclasspath>
      <classpath>
        <pathelement location="${android.dir}"/>
      </classpath>
      <include name="**/*.scala"/>
      <exclude name="scala/Predef.scala"/>
      <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
    </quick>
  </target>

  <target name="android.build" depends="android.libraries"
          description="Convert this project's .class files into .dex files">
     <java jar="${dx.jar}" fork="true" failonerror="true">
      <jvmarg value="-Djava.ext.dirs=${tools.lib.dir}"/>
      <jvmarg value="-Xmx384M"/>
      <arg value="--dex"/>
      <arg value="--output=${android.dir}/lib/scala.dex"/>
      <arg value="--locals=full"/>
      <arg value="--positions=lines"/>
      <arg value="${android.dir}/lib/library"/>
    </java>
    <jar
      destfile="${android.dir}/lib/scala-dex.jar"
      basedir="${android.dir}/lib"
      includes="scala.dex"
    />
    <jar
      destfile="${android.dir}/lib/scala-android.jar"
      basedir="${android.dir}/lib/library"
      includes="scala/**/*.class"
    />
  </target>

  <target name="android.dist" depends="android.build">
    <antcall target="binaries"/>
    <property name="dist.current.dir" value="${dist.dir}/scala-android-${version.number}"/>
    <mkdir dir="${dist.current.dir}"/>
<!--
    <copy todir="${dist.current.dir}/bin">
      <fileset dir="${dist.dir}/latest/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>
-->
    <!-- Recreate the 'latest' link to point to this distribution -->
    <if><isset property="os.win"/>
      <then>
        <copy todir="${dist.dir}/latest-android">
          <fileset dir="${dist.current.dir}"/>
        </copy>
      </then>
      <else>
        <symlink
          link="${dist.dir}/latest-android"
          resource="${dist.current.dir}"
          overwrite="yes" failonerror="no"/>
      </else>
    </if>
  </target>

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

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

</project>