<?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="MD5Checker" basedir="." default="main">

    <!--load environment variables prefixed with env -->
    <property environment="env"/>
    <property file="${basedir}/local.properties" />

    <!--
        Properties are immutable so value frozen first time property is set.
        If FLEX_HOME is not set with -DFLEX_HOME=/path/to/flex/sdk on the ant command line
        use the environment variable, if it exists. Else if windows, use FLEX_HOME_WIN
        else use FLEX_HOME_MAC, which are both defined in build.properties.
    -->
    <condition property="FLEX_HOME" value="${env.FLEX_HOME}">
        <isset property="env.FLEX_HOME" />
    </condition>
    <condition property="AIR_HOME" value="${env.AIR_HOME}">
        <isset property="env.AIR_HOME" />
    </condition>

    <condition property="theOS" value="Windows">
		<os family="windows"/>
    </condition>
    <condition property="theOS" value="Mac">
		<os family="mac"/>
    </condition>
    <condition property="isMac" value="Mac">
		<os family="mac"/>
    </condition>

	<target name="main" depends="build">
        <exec executable="${AIR_HOME}/bin/adl.exe" dir="${basedir}/src" osfamily="windows" resultproperty="md5result" failonerror="false">
            <arg value="-runtime"/>
            <arg value="${AIR_HOME}/runtimes/air/win"/>
			<arg value="${basedir}/src/MD5Checker-app.xml"/>
			<arg value="--" />
			<arg value="-log=${basedir}/MD5CheckerLog.txt"/>
        </exec>
        <exec executable="${AIR_HOME}/bin/adl" dir="${basedir}/src" osfamily="mac" resultproperty="md5result" failonerror="false">
            <arg value="-runtime"/>
            <arg value="${AIR_HOME}/runtimes/air/mac"/>
			<arg value="${basedir}/src/MD5Checker-app.xml"/>
			<arg value="--" />
			<arg value="-log=${basedir}/MD5CheckerLog.txt"/>
            <arg value="-out=${basedir}/sdk-installer-config-4.0.xml"/>
        </exec>
		<loadfile property="md5log" srcfile="${basedir}/MD5CheckerLog.txt" />
		<echo>${md5log}</echo>
        <antcall target="autoupdate" />
        <fail message="MD5's changed!" >
            <condition>
				<not>
					<equals arg1="0" arg2="${md5result}" />
				</not>
            </condition>
        </fail>
    </target>
    
    <target name="load-task" >
        <!-- load the <mxmlc> task; we can't do this at the <project> level -->
        <!-- because targets that run before flexTasks.jar gets built would fail -->
        <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/lib/flexTasks.jar"/>
    </target>

    <target name="build" depends="load-task" description="compile it">

        <!-- compile the basic tests -->
        <mxmlc fork="true" debug="true"
               file="${basedir}/src/MD5Checker.mxml">
            <jvmarg line="-Xms64m -Xmx384m -ea -Dapple.awt.UIElement=true"/>
            <load-config filename="${FLEX_HOME}/frameworks/air-config.xml"/>
            <source-path path-element="${basedir}/../ant_on_air/src" />
        </mxmlc>
    </target>
    
    <target name="autoupdate" if="svn.site">
        <condition property="needsupdate">
            <not>
                <equals arg1="0" arg2="${md5result}" />
            </not>
        </condition>
        <antcall target="updatesvn" />
    </target>
    
    <target name="updatesvn" if="needsupdate">
        <available file="${env.ProgramFiles}/SlikSVN/bin/svn.exe"
            type="file"
            property="svn" value="${env.ProgramFiles}/SlikSVN/bin/svn.exe" />
        <available file="${env.ProgramFiles(x86)}/SlikSVN/bin/svn.exe"
            type="file"
            property="svn" value="${env.ProgramFiles}/SlikSVN/bin/svn.exe" />
        <available file="/opt/subversion/bin/svn"
            type="file"
            property="svn" value="/opt/subversion/bin/svn" />
        <available file="/usr/bin/svn"
            type="file"
            property="svn" value="/usr/bin/svn" />
        <fail message="Could not locate SVN command-line.  Please specify the path to SVN with
            -Dsvn=&lt;path-to-svn&gt;"
            unless="svn"/>
        
        <available file="${svn.site}"
            type="dir"
            property="site" value="${svn.site}" />
        
        <fail message="The svn.site property is not set to the working copy for https://flex.apache.org."
            unless="site"/>
        
        <echo>updating svn</echo>
        <exec executable="${svn}" dir="${site}" failonerror="true" >
            <arg value="update" />
            <arg value="sdk-installer-config-4.0.xml" />
        </exec>
        <copy file="${basedir}/sdk-installer-config-4.0.xml" tofile="${svn.site}/sdk-installer-config-4.0.xml" />
        <antcall target="commit" />
    </target>
    
    <target name="commit" depends="credentials">
        <exec executable="${svn}" dir="${site}" failonerror="true" >
            <arg value="commit" />
            <arg value="--username" />
            <arg value="${apache.username}" />
            <arg value="--password" />
            <arg value="${apache.password}" />
            <arg value="-m" />
            <arg value="&quot;update md5s&quot;" />
        </exec>
        <!-- pause to give buildbot chance to react -->
        <sleep seconds="5" />
        <get src="https://cms.apache.org/flex/publish" username="${apache.username}" password="${apache.password}" dest="${basedir}/getresult.txt" />
        <delete file="${basedir}/getresult.txt" />
    </target>
    
    <target name="credentials" depends="get-username,get-password">
        <echo>${apache.username}</echo>
        <echo>${apache.password}</echo>
    </target>
    <target name="get-username" unless="apache.username" >
        <input
        message="Enter Apache account username:"
        addproperty="apache.username"/>
        <condition property="have.username">
            <not>
                <equals trim="true" arg1="" arg2="${apache.username}"/>
            </not>
        </condition>
        <fail message="The apache.username property is not set.  It should be the username for Apache SVN and Git."
        unless="have.username"/>
    </target>
    <target name="get-password" unless="apache.password" >
        <input
        message="Enter Apache account password:"
        addproperty="apache.password"/>
        <condition property="have.password">
            <not>
                <equals trim="true" arg1="" arg2="${apache.password}"/>
            </not>
        </condition>
        <fail message="The apache.password property is not set.  It should be the password for Apache SVN and Git."
        unless="have.password"/>
    </target>

</project>
