<?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.

-->
<!--
    Usage ant -f set-version.xml -Dmajor="4" -Dminor="9" [-Dnano="0"]
    
    Run this to update the Apache Flex version numbers in
        - build.properties
        - modules/compiler/src/java/flex2/tools/VersionInfo.java
        - all the frameworks Version.as files

    You may need to **manually** update
        - modules/compiler/src/java/flex2/compiler/common/MxmlConfiguration.java
        - frameworks/projects/framework/src/mx/core/FlexVersion.as.
-->
    
<project name="set-version" default="main" basedir="..">

    <property name="FLEX_HOME" location="${basedir}"/>
    
    <property file="${FLEX_HOME}/env.properties"/>
    <property environment="env"/>

    <!-- 
        For <grep> put AntelopeTasks_*.jar in this path.
        See set-version.
    -->
    <path id="anttask.classpath">
        <fileset dir="${env.ANT_HOME}/lib">
           <include name="**/AntelopeTasks_*.jar"/>
        </fileset>
        <fileset dir="${user.home}">
           <include name=".ant/lib/**/AntelopeTasks_*.jar"/>
        </fileset>
    </path>

    <target name="main" depends="set-version" description=""/>
    
	<!--
	==============================================================
	target: set-version
		-Update VersionInfo.java with the latest version
		-Update all version.as with the latest version info
		-Update build.properties with the latest version info
		-Update flex and air configs with the latest version info
	============================================================== 
	-->
	<target name="set-version"
	    description="Update all frameworks/Version.as files">

        <available property="have.greptask"
            classname="ise.antelope.tasks.Find" 
            classpathref="anttask.classpath"/>
        
        <property name="nano" value="0"/>
        
        <condition property="required.args.set">
            <and>
                <isset property="major"/>
                <isset property="minor"/>
            </and>
        </condition>
        
        <fail message="You must define the new version number using major and minor, and optionally nano." 
            unless="required.args.set"/>
        
        <antcall target="have-greptask"/>
        <antcall target="no-greptask"/>
    </target>

    <target name="no-greptask" unless="have.greptask">
        <fail message="Version files not updated.  AntelopeTasks_*.jar not found in anttask.classpath"/>
    </target>   

    <target name="have-greptask" if="have.greptask">
		<taskdef name="grep" classname="ise.antelope.tasks.Find" classpathref="anttask.classpath"/>                 
<echo>
update ${FLEX_HOME}/modules/compiler/src/java/flex2/tools/VersionInfo.java
with latest version info ${major} ${minor} ${nano}
</echo>
			
			<loadfile property="currVerInfo" srcFile="${FLEX_HOME}/modules/compiler/src/java/flex2/tools/VersionInfo.java"/>

			<grep in="${currVerInfo}"
				regex="(public static String FLEX_MAJOR_VERSION =) (&quot;)([0-9])(&quot;+)"
				group="3"
	            property="MAJOR"/>
			<grep in="${currVerInfo}"
				regex="(public static String FLEX_MINOR_VERSION =) (&quot;)([0-9])(&quot;+)"
				group="3"
	            property="MINOR"/>
			<grep in="${currVerInfo}"
				regex="(public static String FLEX_NANO_VERSION  =) (&quot;)([0-9])(&quot;+)"
				group="3"
	            property="NANO"/>			
			
<echo>
update all ${FLEX_HOME}/frameworks Version.as
with latest version info ${major}.${minor}.${nano}.0
</echo>
			
			<!-- Update all Version.as files in the frameworks directory-->
			<replaceregexp>
				<regexp pattern='"[0-9].[0-9].[0-9].[0-9]";'/>
				<substitution expression='"${major}.${minor}.${nano}.0";'/>
				<fileset dir="${FLEX_HOME}/frameworks">
					<include name="**/Version.as"/>
				</fileset>
			</replaceregexp>

<echo>
update ${FLEX_HOME}/build.properties release.version to ${major}.${minor}.${nano}
</echo>
			
			<!--update build.properties-->
			<replaceregexp file="${FLEX_HOME}/build.properties">
				<regexp pattern="release.version = [0-9].[0-9].[0-9]"/>
				<substitution expression="release.version = ${major}.${minor}.${nano}"/>
			</replaceregexp>
			<replaceregexp file="${FLEX_HOME}/build.properties">
				<regexp pattern="release = Apache Flex [0-9].[0-9]"/>
				<substitution expression="release = Apache Flex ${major}.${minor}"/>
			</replaceregexp>

<echo>
update ${FLEX_HOME}/modules/compiler/src/java/flex2/tools/VersionInfo.java with ${major}.${minor}.${nano}
</echo>
			
			<!--update VersionInfo.java-->
			<replaceregexp file="${FLEX_HOME}/modules/compiler/src/java/flex2/tools/VersionInfo.java">
				<regexp pattern='FLEX_MAJOR_VERSION = "[0-9]";'/>
				<substitution expression='FLEX_MAJOR_VERSION = "${major}";'/>
			</replaceregexp>
			<replaceregexp file="${FLEX_HOME}/modules/compiler/src/java/flex2/tools/VersionInfo.java">
				<regexp pattern='FLEX_MINOR_VERSION = "[0-9]";'/>
				<substitution expression='FLEX_MINOR_VERSION = "${minor}";'/>
			</replaceregexp>
			<replaceregexp file="${FLEX_HOME}/modules/compiler/src/java/flex2/tools/VersionInfo.java">
				<regexp pattern='FLEX_NANO_VERSION  = "[0-9]";'/>
				<substitution expression='FLEX_NANO_VERSION  = "${nano}";'/>
			</replaceregexp>
			
<echo>
*****************************************************************************************
You may also need to manually update the compiler.mxml.compatibility-version constants in
${FLEX_HOME}/modules/compiler/src/java/flex2/compiler/common/MxmlConfiguration.java
and CURRENT_VERSiON in
${FLEX_HOME}/frameworks/projects/framework/src/mx/core/FlexVersion.as.
*****************************************************************************************
</echo>
	</target>
  
</project>
