<?xml version="1.0" encoding="utf-8"?>
 <!--
 * Licensed to the Apache Software Foundation (ASF) under one   *
 * or more contributor license agreements.  See the NOTICE file *
 * distributed with this work for additional information        *
 * regarding copyright ownership.  The ASF licenses this file   *
 * to you under the Apache License, Version 2.0 (the            *
 * "License"); you may not use this file except in compliance   *
 * with the License.  You may obtain a copy of the License at   *
 *                                                              *
 *   http://www.apache.org/licenses/LICENSE-2.0                 *
 *                                                              *
 * Unless required by applicable law or agreed to in writing,   *
 * software distributed under the License is distributed on an  *
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
 * KIND, either express or implied.  See the License for the    *
 * specific language governing permissions and limitations      *
 * under the License.                                           *
 -->
<project name="etch-Mixin-example" basedir="." default="build">
    <description>Mixin Example</description>

    <property name="etch.home" location="${basedir}/../.."/>
    <property name="etch.version" value="@EtchVersion@"/>
    <property name="etch.longversion" value="@EtchLongVersion@"/>
    <!-- todo clean up variables etch-java-runtime.jar, etch-csharp-runtime.dll -->
    <property name="etch-java-runtime-name" value="apache-etch-java-runtime-${etch.longversion}.jar"/>
    <property name="etch-csharp-runtime-name" value="ApacheEtchCsharp.dll"/>

    <property name="etch-ant-plugin.jar"     location="${etch.home}/lib/apache-etch-ant-plugin-${etch.longversion}.jar"/>
    <property name="etch-java-runtime.jar"   location="${etch.home}/binding-java/lib/${etch-java-runtime-name}"/>
    <property name="etch-csharp-runtime.dll" location="${etch.home}/binding-csharp/lib/${etch-csharp-runtime-name}"/>

    <property name="src"               location="${basedir}/src"/>
    <property name="src-main-etch"     location="${src}/main/etch"/>
    <property name="src-main-java"     location="${src}/main/java"/>
    <property name="src-main-csharp"   location="${src}/main/csharp"/>
    <property name="target"            location="${basedir}/target"/>
    <property name="generated-sources" location="${target}/generated-sources"/>
    <property name="gensrc-main-etch-java" location="${generated-sources}/main/etch/java"/>
    <property name="gensrc-main-etch-csharp" location="${generated-sources}/main/etch/csharp"/>
    <property name="gensrc-main-etch-c" location="${generated-sources}/main/etch/c"/>
    <property name="classes"           location="${target}/classes"/>
    <property name="bin"               location="${target}/bin"/>
    
    <condition property="BUILD.csharp" >
        <os family="windows" />
    </condition>    

    <taskdef resource="org/apache/etch/tools/ant/etch.xml" classpath="${etch-ant-plugin.jar}"/>
    <taskdef resource="org/apache/ant/dotnet/antlib.xml" classpath="${etch.home}/lib/ant-dotnet-1.1.jar" />

    <target name="build" depends="build-java, build-csharp, build-c, done"/>

    <target name="build-java" depends="gensrc-java">
        <javac destdir="${classes}" source="1.5" debug="true">
            <classpath>
                <pathelement location="${etch-java-runtime.jar}"/>
            </classpath>
            <src path="${src-main-java}"/>
            <src path="${gensrc-main-etch-java}"/>
        </javac>

        <jar jarfile="${bin}/examplemixin.jar">
            <manifest>
                <attribute name="Class-Path" value="${etch-java-runtime-name}"/>
            </manifest>
            <fileset dir="${classes}"/>
        </jar>

        <copy todir="${bin}" file="${etch-java-runtime.jar}"/>
    </target>

    <target name="done">
        <echo>

To run java Mixin example, open a cmd window and run these
commands:

> cd target\bin
> start java -cp examplemixin.jar org.apache.etch.examples.mixin.MainExampleListener
> start java -cp examplemixin.jar org.apache.etch.examples.mixin.MainExampleClient

To run csharp example:

> cd target\bin
> start ExampleListener.exe
> start ExampleClient.exe

To run the c example:
> first build using cmake (see below)

You have to set the following variable in CMake:
- ETCH_HOME must point to your Etch directory (this is were you installed Etch, or target/Installers/dist if building from trunk)

on the shell, you could do this using:

cd examples/example_mixin/target
cmake .. -DETCH_HOME:string=[YOUR ETCH INSTALLATION DIR]
make (or open visual studio on win32...)

You also have to set the following environment variable:
- APR_ICONV_PATH to [YOUR ETCH INSTALLATION DIR]/binding-c/extern/apr/iconv/

To run c example:

> cd target\bin
> start example-server.exe
> start example-client.exe


You can mix and match the various clients and listeners.

        </echo>
    </target>

    <target name="build-csharp" depends="gensrc-csharp" if="BUILD.csharp" >
        <csc
                debug="true"
                warnLevel="1"
                unsafe="false"
                targetType="exe"
                incremental="false"
                mainClass = "org.apache.etch.examples.mixin.MainExampleClient"
                destFile="${bin}/ExampleClient.exe">
            <src dir="${src-main-csharp}/ExampleClientProj" includes="**/*.cs"/>
            <src dir="${src-main-csharp}/org.apache.etch.examples.mixin" includes="**/*.cs"/>
            <src dir="${gensrc-main-etch-csharp}" includes="**/*.cs"/>
            <reference file="${etch-csharp-runtime.dll}"/>
        </csc>

        <csc
                debug="true"
                warnLevel="1"
                unsafe="false"
                targetType="exe"
                incremental="false"
                mainClass = "org.apache.etch.examples.mixin.MainExampleListener"
                destFile="${bin}/ExampleListener.exe">
            <src dir="${src-main-csharp}/ExampleListenerProj" includes="**/*.cs"/>
            <src dir="${src-main-csharp}/org.apache.etch.examples.mixin" includes="**/*.cs"/>
            <src dir="${gensrc-main-etch-csharp}" includes="**/*.cs"/>
            <reference file="${etch-csharp-runtime.dll}"/>
        </csc>

        <copy todir="${bin}" file="${etch-csharp-runtime.dll}"/>
    </target>

    <target name="build-c" depends="gensrc-c">
       <echo message="c binding sources can be built with cmake!"/>
    </target>

    <target name="gensrc-java" depends="init">
        <etch
            home="${etch.home}"
            binding="java"
            quiet="true"
            outputDir="${gensrc-main-etch-java}"
            file="${src-main-etch}/Example.etch"/>
    </target>

    <target name="gensrc-csharp" depends="init">
        <etch
            home="${etch.home}"
            binding="csharp"
            quiet="true"
            outputDir="${gensrc-main-etch-csharp}"
            file="${src-main-etch}/Example.etch"/>
    </target>

    <target name="gensrc-c" depends="init">
        <etch
            home="${etch.home}"
            binding="c"
            quiet="true"
            outputDir="${gensrc-main-etch-c}"
            file="${src-main-etch}/Example.etch"/>
    </target>

    <target name="init">
        <mkdir dir="${target}"/>
        <mkdir dir="${generated-sources}"/>
        <mkdir dir="${gensrc-main-etch-java}"/>
        <mkdir dir="${gensrc-main-etch-csharp}"/>
        <mkdir dir="${gensrc-main-etch-c}"/>
        <mkdir dir="${classes}"/>
        <mkdir dir="${bin}"/>
    </target>

    <target name="clean">
        <delete dir="${target}"/>
    </target>
</project>
