<?xml version="1.0"?>
<!--
 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="libthrift-as3" default="compile" basedir="."
  xmlns:artifact="antlib:org.apache.maven.artifact.ant">
	
  <property name="as3.artifactid" value="${ant.project.name}"/>
	
  <property name="thrift.root" location="${basedir}/../../"/>
  <property name="thrift.java.dir" location="${thrift.root}/lib/java"/>
  <property name="build.tools.dir" location="${thrift.java.dir}/build/tools/"/>
  <property name="thrift_compiler" value="${thrift.root}/compiler/cpp/thrift"/> 

  <!-- inherit from the java build file for version and other properties -->
  <property file="${thrift.java.dir}/build.properties" />

  <property environment="env"/>

  <condition property="version" value="${thrift.version}">
    <isset property="release"/>
  </condition>
  <property name="version" value="${thrift.version}-snapshot"/>

  <property name="as3.final.name" value="${as3.artifactid}-${version}"/>

  <property name="src" value="${basedir}/src"/>
  <property name="build.dir" value="${basedir}/build"/>

  <property name="as3.swc.file" location="${build.dir}/${as3.final.name}.swc"/>
  <property name="as3.pom.xml" location="${build.dir}/${as3.final.name}.pom"/>

  <target name="init" depends="setup.init,flex.init" unless="init.finished">
    <property name="init.finished" value="true"/>
  </target>

  <target name="setup.init">
    <tstamp/>
    <mkdir dir="${build.dir}"/>
  </target>

  <target name="flex.check" unless="FLEX_HOME">
    <fail message='You must set the FLEX_HOME property pointing to your flex SDK, eg. ant -DFLEX_HOME="/Applications/Adobe Flex Builder 3/sdks/3.2.0"'/>
  </target>
	
  <target name="flex.init" depends="flex.check" unless="flex.finished">
    <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
    <property name="flex.finished" value="true"/>
  </target>

  <target name="compile" depends="init">
    <path id="as.src.files">
      <fileset dir="${src}/">
        <include name="**/*.as"/>
      </fileset>
    </path>
    <pathconvert 
      property="as.src.classes" 
      pathsep=" " 
      dirsep="." 
      refid="as.src.files"
    >
      <map from="${src}/" to=""/>
      <mapper type="glob" from="*.as" to="*"/>
    </pathconvert>

    <compc output="${as3.swc.file}" include-classes="${as.src.classes}">
      <source-path path-element="${src}"/>
    </compc>
  </target>

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

  <target name="mvn.ant.tasks.download" depends="setup.init,mvn.ant.tasks.check" unless="mvn.ant.tasks.found">
    <get src="${mvn.ant.task.url}/${mvn.ant.task.jar}" dest="${build.tools.dir}/${mvn.ant.task.jar}" usetimestamp="true"/>
  </target>

  <target name="mvn.ant.tasks.check">
    <condition property="mvn.ant.tasks.found">
      <typefound uri="antlib:org.apache.maven.artifact.ant" name="artifact"/>
    </condition>
  </target>

  <target name="mvn.init" depends="mvn.ant.tasks.download" unless="mvn.finished">
    <echo message="${mvn.ant.task.jar}"/>
    <!-- Download mvn ant tasks, download dependencies, and setup pom file -->
    <typedef uri="antlib:org.apache.maven.artifact.ant" classpath="${build.tools.dir}/${mvn.ant.task.jar}"/>

    <!-- remote repositories used to download dependencies from -->
    <artifact:remoteRepository id="central" url="${mvn.repo}"/>
    <artifact:remoteRepository id="apache" url="${apache.repo}"/>

    <!-- Pom file information -->
    <artifact:pom id="pom" 
      groupId="${thrift.groupid}" 
      artifactId="${as3.artifactid}"
      version="${version}" 
      url="http://thrift.apache.org"
      name="Apache Thrift"
      description="Thrift is a software framework for scalable cross-language services development."
      packaging="pom"
    >
      <remoteRepository refid="central"/>
      <remoteRepository refid="apache"/>
      <license name="The Apache Software License, Version 2.0" url="${license}"/>
      <scm connection="scm:svn:http://svn.apache.org/repos/asf/thrift/trunk/" 
        developerConnection="scm:svn:http://svn.apache.org/repos/asf/thrift/trunk/"
        url="http://svn.apache.org/viewcvs.cgi/thrift"
      />
      <!-- Thrift Developers -->
      <developer id="mcslee" name="Mark Slee"/>
      <developer id="dreiss" name="David Reiss"/>
      <developer id="aditya" name="Aditya Agarwal"/>
      <developer id="marck" name="Marc Kwiatkowski"/>
      <developer id="jwang" name="James Wang"/>
      <developer id="cpiro" name="Chris Piro"/>
      <developer id="bmaurer" name="Ben Maurer"/>
      <developer id="kclark" name="Kevin Clark"/>
      <developer id="jake" name="Jake Luciani"/>
      <developer id="bryanduxbury" name="Bryan Duxbury"/>
      <developer id="esteve" name="Esteve Fernandez"/>
      <developer id="todd" name="Todd Lipcon"/>
      <developer id="geechorama" name="Andrew McGeachie"/>
      <developer id="molinaro" name="Anthony Molinaro"/>
      <developer id="roger" name="Roger Meier"/>
      <developer id="jfarrell" name="Jake Farrell"/>
    </artifact:pom>

    <!-- Generate the pom file -->
    <artifact:writepom pomRefId="pom" file="${as3.pom.xml}"/>

    <property name="mvn.finished" value="true"/>
  </target>

  <macrodef name="signAndDeploy">
    <!-- Sign and deploy jars to apache repo -->
    <attribute name="file"/>
    <attribute name="classifier" default=""/>
    <attribute name="packaging" default="jar"/>
    <attribute name="pom" default=""/>
    <sequential>
      <artifact:mvn fork="true">
        <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.1:sign-and-deploy-file"/>
        <arg value="-DrepositoryId=${maven-repository-id}"/>
        <arg value="-Durl=${maven-repository-url}"/>
        <arg value="-DpomFile=@{pom}"/>
        <arg value="-Dfile=@{file}"/>
        <arg value="-Dclassifier=@{classifier}"/>
        <arg value="-Dpackaging=@{packaging}"/>
        <arg value="-Pgpg"/>
      </artifact:mvn>
    </sequential>
  </macrodef>

  <target name="publish" depends="clean,compile,mvn.init">
    <!-- Compile, packages and then send release to apache maven repo -->
    <!-- run with: ant -Drelease=true publish -->
    <signAndDeploy file="${as3.pom.xml}" packaging="pom" classifier="" pom="${as3.pom.xml}"/>
    <signAndDeploy file="${as3.swc.file}" packaging="swc" classifier="" pom="${as3.pom.xml}"/>
  </target>	
</project>
