You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/06/15 08:31:03 UTC

[29/48] git commit: [flex-utilities] [refs/heads/develop] - move installer into flex-installer

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/cda78507/flex-installer/installer/build.xml
----------------------------------------------------------------------
diff --git a/flex-installer/installer/build.xml b/flex-installer/installer/build.xml
new file mode 100644
index 0000000..2d1c83f
--- /dev/null
+++ b/flex-installer/installer/build.xml
@@ -0,0 +1,670 @@
+<?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="Installer" basedir="." default="build">
+
+    <!--load environment variables prefixed with env -->
+    <property environment="env"/>
+
+    <!--location of property file -->
+    <property file="${basedir}/local.properties" />
+	<condition property="CERT_PASSWORD_FILE" value="${CERT_PASSWORD_FILE_WIN}" >
+		<and>
+			<not>
+				<available file="${CERT_PASSWORD_FILE}" />
+			</not>
+			<available file="${CERT_PASSWORD_FILE_WIN}" />
+		</and>
+	</condition>
+	<condition property="CERT_PASSWORD_FILE" value="${CERT_PASSWORD_FILE_MAC}" >
+		<and>
+			<not>
+				<available file="${CERT_PASSWORD_FILE}" />
+			</not>
+			<available file="${CERT_PASSWORD_FILE_MAC}" />
+		</and>
+	</condition>
+	<condition property="RELEASE_KEYSTORE_FILE" value="${RELEASE_KEYSTORE_FILE_WIN}" >
+		<and>
+			<not>
+				<available file="${RELEASE_KEYSTORE_FILE}" />
+			</not>
+			<available file="${RELEASE_KEYSTORE_FILE_WIN}" />
+		</and>
+	</condition>
+	<condition property="RELEASE_KEYSTORE_FILE" value="${RELEASE_KEYSTORE_FILE_MAC}" >
+		<and>
+			<not>
+				<available file="${RELEASE_KEYSTORE_FILE}" />
+			</not>
+			<available file="${RELEASE_KEYSTORE_FILE_MAC}" />
+		</and>
+	</condition>
+
+    <property file="${basedir}/build.properties" description="Properties for Apache Flex SDK Installer project" />
+    <property file="${basedir}/build.number"/>
+	<property file="${CERT_PASSWORD_FILE}"/>
+
+    <property name="installer.version" value="${release.version}.${build.number}"/>
+    <property name="kit.prefix" value="apache-flex-sdk-installer-${installer.version}"/>
+    <property name="source.kit" value="${kit.prefix}-src"/>
+    <property name="binary.kit" value="${kit.prefix}-bin"/>
+    <property name="LOCAL_CONFIG_FILE" value="${basedir}/src/installer/sdk-installer-config-4.0.xml" />
+
+    <!--<property name="commons.zip" value="http://projects.yoolab.org/maven/content/repositories/releases/org/as3commons/as3commons-zip/1.0.0-alpha.1/as3commons-zip-1.0.0-alpha.1.swc" />-->
+    <!-- use this one for now until we find a better source -->
+    <property name="commons.zip" value="https://github.com/bigosmallm/MakeApacheFlexForFlashBuilder/blob/master/libs/as3commons-zip-1.0.0-alpha.1.swc?raw=true" />
+    
+    <!--
+        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="FLEX_HOME" value="${FLEX_HOME_WIN}">
+        <os family="windows"/>
+    </condition>
+    <condition property="FLEX_HOME" value="${FLEX_HOME_MAC}">
+        <os family="mac"/>
+    </condition>
+    <condition property="FLEX_HOME" value="${FLEX_HOME_LINUX}">
+        <os family="unix"/>
+    </condition>
+
+    <condition property="adl" value="adl.exe">
+        <os family="windows"/>
+    </condition>
+
+    <condition property="adl" value="adl">
+        <os family="mac"/>
+    </condition>
+
+    <condition property="runtime" value="win">
+        <os family="windows"/>
+    </condition>
+
+    <condition property="runtime" value="mac">
+        <os family="mac"/>
+    </condition>
+
+    <condition property="LOCAL_CONFIG_URL" value="file:///${LOCAL_CONFIG_FILE}">
+        <os family="windows"/>
+    </condition>
+    <property name="LOCAL_CONFIG_URL" value="file://${LOCAL_CONFIG_FILE}" />
+    
+    <!--
+        Properties are immutable so value frozen first time property is set.
+        If AIR_HOME is not set on the command line with -DAIR_HOME=/path/to/air/sdk on the
+        ant command line use the environment variable, if it exists. Else if windows, use
+        AIR_HOME_WIN else use AIR_HOME_MAC, which are both defined in build.properties.
+    -->
+    <condition property="AIR_HOME" value="${env.AIR_HOME}">
+        <isset property="env.AIR_HOME" />
+    </condition>
+    <condition property="AIR_HOME" value="${AIR_HOME_WIN}">
+        <os family="windows"/>
+    </condition>
+    <condition property="AIR_HOME" value="${AIR_HOME_MAC}">
+        <os family="mac"/>
+    </condition>
+    <condition property="AIR_HOME" value="${AIR_HOME_LINUX}">
+        <os family="unix"/>
+    </condition>
+	
+    <condition property="cert_pwd_not_found" >
+		<not>
+       		<available file="${CERT_PASSWORD_FILE}"/>
+		</not>
+    </condition>
+
+	<condition property="KEYSTORE" value="${RELEASE_KEYSTORE_FILE}" >
+		<available file="${CERT_PASSWORD_FILE}"/>
+	</condition>
+
+	<condition property="KEYSTORE" value="temp.p12" >
+		<not>
+			<available file="${CERT_PASSWORD_FILE}"/>
+		</not>
+	</condition>
+
+    <condition property="CERT_PASSWORD" value="${TEMP_PASS_CHANGE_THIS}" >
+		<not>
+       		<available file="${CERT_PASSWORD_FILE}"/>
+		</not>
+    </condition>
+
+    <!-- compilers -->
+    <property name="ADL" value="${AIR_HOME}/bin/adl"/>
+    <property name="ADT" value="${AIR_HOME}/lib/adt.jar"/>
+
+    <!-- additional tasks - mxmlc tag -->
+    <path id="flexTasks.path">
+        <fileset dir="${FLEX_HOME}">
+            <include name="lib/flexTasks.jar" />
+            <include name="ant/lib/flexTasks.jar" />
+        </fileset>
+    </path>
+    <taskdef resource="flexTasks.tasks" classpathref="flexTasks.path"/>
+
+    <!--
+        Optional jars but should be in place for a real release build.
+
+        For <rat> apache-rat-0.8.jar and apache-rat-tasks-0.8.jar should be in classpath.
+        See rat-report.
+    -->
+    <path id="anttask.classpath">
+        <fileset dir="${env.ANT_HOME}/lib">
+           <include name="**/apache-rat*.jar"/>
+        </fileset>
+        <fileset dir="${user.home}">
+           <include name=".ant/lib/**/apache-rat*.jar"/>
+        </fileset>
+    </path>
+
+    <!-- AIR package extension -->
+    <condition property="extension" value="exe">
+        <os family="windows" />
+    </condition>
+    <condition property="extension" value="dmg">
+        <os family="mac" />
+    </condition>
+    <condition property="extension" value="deb">
+        <os family="unix" />
+    </condition>
+
+    <target name="build" depends="init,certificate,compile,packagenative,cleanup"
+        description="Compiles and packages application"/>
+
+    <target name="release" depends="clean,build,source-package,rat-report,sign,copy-misc"
+        description="Build the application and package up the distros for release."/>
+
+    <target name="init" depends="clean,createDirs,update-version-in-xml-files"
+        description="Creates the deploy folders and sets app extension"/>
+
+    <target name="clean" description="Cleans up old files.">
+        <delete dir="${BUILD_DIR}" failOnError="false" includeEmptyDirs="true" />
+        <delete dir="${LIBRARY_DIR}" failOnError="false" includeEmptyDirs="true" />
+        <delete dir="${RELEASE_DIR}" failOnError="false" includeEmptyDirs="true" />
+        <delete file="${basedir}/rat.report" failOnError="false"/>
+    </target>
+
+    <target name="cleanup" description="Cleans up old files." unless="no.cleanup">
+        <delete dir="${BUILD_DIR}" failOnError="false" includeEmptyDirs="true" />
+    </target>
+
+    <target name="createDirs">
+        <echo>***************************************${line.separator}Execute the update-version target once,${line.separator}and only once, when you modifiy this app.${line.separator}This will increment the version number to allow${line.separator}the app to be updated by the AIR installer.${line.separator}***************************************
+        </echo>
+        <mkdir dir="${BUILD_DIR}"/>
+        <mkdir dir="${RELEASE_DIR}"/>
+    </target>
+
+    <!-- Make sure version, esp, build.number, in APP_NAME-app.xml is in sync.  -->
+    <target name="update-version-in-xml-files" description="Update version in APP_NAME-app.xml.">
+        <echo message="version in ${APP_NAME}-app.xml will be ${installer.version}"/>
+        <replaceregexp byline="true">
+            <regexp pattern="&lt;versionNumber&gt;(\d+\.)?(\d+\.)?(\d+)&lt;/versionNumber&gt;"/>
+            <substitution expression="&lt;versionNumber&gt;${installer.version}&lt;/versionNumber&gt;"/>
+            <fileset dir="${SOURCE_DIR}">
+                <include name="${APP_NAME}-app.xml"/>
+            </fileset>
+        </replaceregexp>
+		<replaceregexp byline="true">
+            <regexp pattern="&lt;latest&gt;(\d+\.)?(\d+\.)?(\d+)&lt;/latest&gt;"/>
+            <substitution expression="&lt;latest&gt;${installer.version}&lt;/latest&gt;"/>
+            <fileset dir="${SOURCE_DIR}">
+                <include name="${APP_CONFIG_XML_NAME}.xml"/>
+            </fileset>
+        </replaceregexp>
+    </target>
+
+    <!--
+        Run this target once, and then rebuild, when you make a change to this app
+        so that the AIR Installer will allow the app to be updated. The build.number
+        property in the file build.property will be read and then incremented and the
+        nano version number in the <version> tag in InstallApacheFlex-app.xml will be
+        updated.
+    -->
+    <target name="update-version" description="Update the app version number so the installer will be updated.">
+         <tstamp>
+            <format property="touch.year" pattern="yyyy"/>
+        </tstamp>
+
+        <propertyfile file="build.number"
+            comment="Copyright ${touch.year} The Apache Software Foundation.">
+            <entry key="build.number" type="int" default="0" operation="+"/>
+        </propertyfile>
+
+    </target>
+
+    <target name="packagenative" depends="packageair"
+       description="Packages the AIR file from the build directory to create a native installer (exe/dmg) file">
+
+       <java jar="${ADT}" fork="true"
+           failonerror="true"
+           maxmemory="512m">
+           <arg value="-package"/>
+           <arg value="-target"/>
+           <arg value="native"/>
+		   <arg value="${RELEASE_DIR}/${binary.kit}.${extension}"/>
+           <arg value="${BUILD_DIR}/${APP_NAME}.air"/>
+       </java>
+   </target>
+
+    <target name="check-as3commons.swc">
+        <available file="${LIBRARY_DIR}/as3commons-zip-1.0.0-alpha.1.swc" property="as3commons.swc.present"/>
+    </target>
+
+    <!-- This has a BSD license which is a reciprocal license with the Apache v2 license.  -->
+    <target name="get-as3commons.swc" depends="check-as3commons.swc" unless="as3commons.swc.present"
+        description="Download as3commons.swc and fail if checksum mismatch.">
+        <mkdir dir="${LIBRARY_DIR}"/>
+        <get src="${commons.zip}"
+            dest="${LIBRARY_DIR}/as3commons-zip-1.0.0-alpha.1.swc"
+            verbose="true"/>
+        <!-- skip checksum until we find a valid file
+        <get src="${commons.zip}.md5"
+            dest="${LIBRARY_DIR}/as3commons-zip-1.0.0-alpha.1.swc.md5"
+            verbose="true"/>
+        <checksum file="${LIBRARY_DIR}/as3commons-zip-1.0.0-alpha.1.swc" algorithm="md5" verifyProperty="isMD5ok"/>
+        <delete file="${LIBRARY_DIR}/as3commons-zip-1.0.0-alpha.1.swc.md5" failOnError="false"/>
+        <fail message="Checksum failure for ${LIBRARY_DIR}/as3commons-zip-1.0.0-alpha.1.swc">
+            <condition>
+                <isfalse value="${isMD5ok}"/>
+            </condition>
+        </fail>
+         -->
+    </target>
+
+    <target name="check-as3httpclient.swc">
+        <available file="${LIBRARY_DIR}/as3httpclient.swc" property="as3httpclient.swc.present"/>
+    </target>
+
+    <!-- This has a BSD license which is a reciprocal license with the Apache v2 license.  -->
+    <target name="get-as3httpclient.swc" depends="check-as3commons.swc" unless="as3httpclient.swc.present"
+            description="Download as3httpclient.swc">
+        <mkdir dir="${LIBRARY_DIR}"/>
+        <get src="https://github.com/quetwo/as3httpclient/releases/download/1.0/as3httpclient.swc"
+             dest="${LIBRARY_DIR}/as3httpclient.swc"
+             verbose="true"/>
+    </target>
+
+    <target name="compile" depends="get-as3commons.swc, get-as3httpclient.swc"
+        description="Compiles the AIR application to a SWF file and places SWF in a temp directory to be packaged.">
+        <mxmlc file="${SOURCE_DIR}/${APP_NAME}.${APP_EXTENSION}"
+            output="${BUILD_DIR}/${APP_NAME}.swf"
+            static-rsls="true"
+            accessible="true"
+            configname="air"
+            debug="${DEBUG_FLAG}"
+            failonerror="true"
+            fork="true"
+            link-report="${BUILD_DIR}/${APP_NAME}.lnk.xml"
+            maxmemory="512m">
+            <source-path path-element="${SOURCE_DIR}"/>
+            <source-path path-element="${COMMON_SOURCE_DIR}"/>
+            <external-library-path file="${AIR_HOME}/frameworks/libs/air/airglobal.swc" append="true"/>
+            <library-path dir="${LIBRARY_DIR}" includes="*.swc" append="true"/>
+            <library-path dir="${ANT_ON_AIR_DIR}" includes="*.swc" append="true"/>
+            <define name="INSTALLER::releaseVersion" value="${release.version}"/>
+            <define name="INSTALLER::buildNumber" value="${build.number}"/>
+        </mxmlc>
+    </target>
+
+    <!-- Make sure to use the same certificate each time so we can update the app. -->
+    <target name="certificate" if="cert_pwd_not_found">
+        <antcall target="generate-certificate"/>
+    </target>
+
+    <target name="generate-certificate">
+    	<echo message="Using cert ${KEYSTORE}" />
+        <java jar="${ADT}" fork="true"
+            failonerror="true">
+            <arg value="-certificate"/>
+            <arg value="-cn"/>
+            <arg value="${CERT_NAME}"/>
+            <arg value="-ou"/>
+            <arg value="${CERT_ORG_UNIT}"/>
+            <arg value="-o"/>
+            <arg value="${CERT_ORG_NAME}"/>
+            <arg value="-c"/>
+            <arg value="${CERT_COUNTRY}"/>
+            <arg value="${CERT_KEY_TYPE}"/>
+            <arg value="${KEYSTORE}"/>
+            <arg value="${CERT_PASSWORD}"/>
+        </java>
+    </target>
+
+    <target name="packageair"
+        description="Packages the build SWF file from a temp directory to create an AIR file">
+    	<echo message="Using cert ${KEYSTORE}" />
+        <java jar="${ADT}" fork="true"
+            failonerror="true"
+            maxmemory="512m">
+            <arg value="-package"/>
+            <arg value="-storetype"/>
+            <arg value="${STORETYPE}"/>
+            <arg value="-keystore"/>
+            <arg value="${KEYSTORE}"/>
+            <arg value="-storepass"/>
+            <arg value="${CERT_PASSWORD}"/>
+            <arg value="${BUILD_DIR}/${APP_NAME}.air"/>
+            <arg value="${SOURCE_DIR}/${APP_NAME}-app.xml"/>
+			<arg value="${basedir}/LICENSE"/>
+		    <arg value="${basedir}/NOTICE"/>
+            <arg value="-C"/>
+            <arg value="${BUILD_DIR}"/>
+            <arg value="${BUILD_DIR}/${APP_NAME}.swf"/>
+            <arg value="-C"/>
+            <arg value="${SOURCE_DIR}"/>
+            <arg value="${SOURCE_DIR}/${APP_CONFIG_XML_NAME}.xml"/>
+            <arg value="${ASSETS_DIR}"/>
+        </java>
+    </target>
+
+	<target name="copy-misc" description="Copy config files to release directory">
+		<copy file="${basedir}/README" tofile="${RELEASE_DIR}/READme"/>
+	</target>
+
+    <!--
+        Packages the source distribution with ZIP and TAR_GZIP.
+        The source file line endings match the package type.
+    -->
+    <target name="source-package" description="Package source files.">
+        <mkdir dir="${BUILD_DIR}/temp"/>
+        <copy todir="${BUILD_DIR}/temp/${COMMON_PROJECT_NAME}" includeEmptyDirs="false">
+			<fileset dir="${COMMON_PROJECT_DIR}">
+				<exclude name="*.p12"/>
+				<exclude name="*.password"/>
+                <exclude name="rat.report"/>
+                <exclude name="libs/**"/>
+				<exclude name="bin/**"/>
+				<exclude name="bin-debug/**"/>
+                <exclude name="release/**"/>
+				<exclude name=".settings/**"/>
+				<exclude name="**/.actionScriptProperties"/>
+                <exclude name="**/.flexProperties"/>
+				<exclude name="**/.flexLibProperties"/>
+                <exclude name="**/.project"/>
+                <exclude name="**/.idea/**"/>
+            </fileset>
+        </copy>
+
+        <copy todir="${BUILD_DIR}/temp/ant_on_air" includeEmptyDirs="false">
+            <fileset dir="${basedir}/../ant_on_air">
+                <include name="build.properties" />
+                <include name="build.xml" />
+            </fileset>
+        </copy>
+        <copy todir="${BUILD_DIR}/temp/ant_on_air/src" includeEmptyDirs="false">
+            <fileset dir="${basedir}/../ant_on_air/src">
+            </fileset>
+        </copy>
+        <copy todir="${BUILD_DIR}/temp/ant_on_air/locale" includeEmptyDirs="false">
+            <fileset dir="${basedir}/../ant_on_air/locale">
+            </fileset>
+        </copy>
+        <copy todir="${BUILD_DIR}/temp/ant_on_air/tests" includeEmptyDirs="false">
+            <fileset dir="${basedir}/../ant_on_air/tests">
+                <exclude name="*.swf" />
+            </fileset>
+        </copy>
+
+        <copy todir="${BUILD_DIR}/temp/${INSTALLER_PROJECT_NAME}" includeEmptyDirs="false">
+			<fileset dir="${basedir}">
+				<exclude name="*.p12"/>
+				<exclude name="*.password"/>
+                <exclude name="rat.report"/>
+                <exclude name="libs/**"/>
+				<exclude name="bin/**"/>
+				<exclude name="bin-debug/**"/>
+				<exclude name="build/**"/>
+                <exclude name="release/**"/>
+				<exclude name="rc/**"/>
+				<exclude name=".settings/**"/>
+				<exclude name="**/.actionScriptProperties"/>
+                <exclude name="**/.flexProperties"/>
+				<exclude name="**/.flexLibProperties"/>
+                <exclude name="**/.project"/>
+                <exclude name="**/.idea/**"/>
+				<exclude name="local.properties"/>
+				<!-- These are bumped up to the top-level release directory.  -->
+                <exclude name="DISCLAIMER"/>
+                <exclude name="LICENSE"/>
+                <exclude name="NOTICE"/>
+                <exclude name="README"/>
+                <exclude name="RELEASE_GUIDE"/>
+                <exclude name="RELEASE_NOTES"/>
+			</fileset>
+        </copy>
+
+		<!-- Bump these up to the top-level release directory.  -->
+		<copy todir="${BUILD_DIR}/temp" includeEmptyDirs="false">
+			<fileset dir="${basedir}">
+                <include name="DISCLAIMER"/>
+                <include name="LICENSE"/>
+                <include name="NOTICE"/>
+                <include name="README"/>
+                <include name="RELEASE_GUIDE"/>
+                <include name="RELEASE_NOTES"/>
+			</fileset>
+        </copy>
+
+        <fixcrlf srcdir="${BUILD_DIR}/temp" eol="crlf" encoding="UTF8" excludes="**/assets/**,**/*.ttf,**/*.png" fixlast="false"/>
+
+        <mkdir dir="${RELEASE_DIR}"/>
+        <zip destfile="${RELEASE_DIR}/${source.kit}.zip"
+            basedir="${BUILD_DIR}/temp"/>
+
+        <fixcrlf srcdir="${BUILD_DIR}/temp" eol="unix" encoding="UTF8" excludes="**/assets/**,**/*.ttf,**/*.png" fixlast="false"/>
+
+        <tar destfile="${RELEASE_DIR}/${source.kit}.tar.gz"
+            compression="gzip"
+            basedir="${BUILD_DIR}/temp"/>
+
+        <delete dir="${BUILD_DIR}/temp"/>
+		<delete dir="${BUILD_DIR}"/>
+    </target>
+
+    <!--
+        Packages the binary distribution with ZIP and TAR_GZIP.
+    -->
+    <target name="binary-package" description="Package binary files.">
+        <mkdir dir="${RELEASE_DIR}"/>
+
+        <zip destfile="${RELEASE_DIR}/${binary.kit}.zip">
+            <fileset dir="${basedir}/release">
+                <exclude name="**/*.zip"/>
+                <exclude name="**/*.tar*"/>
+            </fileset>
+        </zip>
+
+        <tar destfile="${RELEASE_DIR}/${binary.kit}.tar.gz" compression="gzip">
+          <zipfileset src="${RELEASE_DIR}/${binary.kit}.zip"/>
+        </tar>
+    </target>
+
+	<!--
+	    Run the Apache Rat audit tool against the source in the source kit.
+	    The report is written to rat.report.
+
+	    You need to place apache-rat-tasks-0.8.jar and apache-rat-0.8.jar in the
+	    anttask.classpath in order to do this.  If the jar isn't found, the report
+	    will not be generated.
+	-->
+    <target name="rat-report" depends="rat-taskdef" if="have.rattasks"
+        description="Report on licenses in source kit.">
+
+        <!-- Unzip the source kit -->
+        <unzip src="${RELEASE_DIR}/${source.kit}.zip" dest="${RELEASE_DIR}/temp"/>
+
+        <property name="rat.dir" value="${RELEASE_DIR}/temp"/>
+
+        <echo message="Checking files at ${rat.dir}, report is ${basedir}/rat.report"/>
+
+        <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
+            reportFile="${basedir}/rat.report">
+            <fileset dir="${rat.dir}">
+                <exclude name="**/Apache License Version 2.txt"/>
+                <!--          Start of source files           -->
+                <!-- Apache Category A: Authorized Licenses -->
+                <!-- "New BSD License" aka Modified BSD License" aka "BSD 3-Clause License" -->
+                <exclude name="${INSTALLER_PROJECT_NAME}/src/com/adobe/crypto/MD5Stream.as"/>
+                <exclude name="${INSTALLER_PROJECT_NAME}/src/com/adobe/utils/IntUtil.as"/>
+                <!-- generated source files that don't have Apache v2 license header -->
+                <exclude name="**/build.number"/>
+                <exclude name="**/.actionScriptProperties"/>
+                <exclude name="**/.flexProperties"/>
+				<exclude name="**/.flexLibProperties"/>
+                <exclude name="**/.project"/>
+                <exclude name="**/.fxpProperties"/>
+                <exclude name="**/.settings/**"/>
+                <exclude name="**/.idea/**"/>
+                <exclude name="**/*.iml"/>
+                <!--          End of source files           -->
+                <!--          Start of binary files           -->
+                <!-- exclude media (png, ico) -->
+                <exclude name="**/*.ico"/>
+                <exclude name="**/*.png"/>
+                <!-- exclude fonts -->
+                <exclude name="**/*.ttf"/>
+                <!--          End of binary files           -->
+            </fileset>
+        </rat:report>
+
+        <delete dir="${RELEASE_DIR}/temp" failOnError="false"/>
+    </target>
+
+    <target name="rat-taskdef" description="Rat taskdef">
+        <available property="have.rattasks"
+            resource="org/apache/rat/anttasks/antlib.xml"
+            classpathref="anttask.classpath"/>
+
+        <antcall target="have-rattasks"/>
+        <antcall target="no-rattasks"/>
+    </target>
+
+    <target name="have-rattasks" if="have.rattasks">
+        <typedef resource="org/apache/rat/anttasks/antlib.xml"
+                 uri="antlib:org.apache.rat.anttasks"
+                 classpathref="anttask.classpath"/>
+    </target>
+
+    <target name="no-rattasks" unless="have.rattasks">
+        <echo message="Rat report not generated."/>
+        <echo message="rat jars (apache-rat-*.jar, apache-rat-tasks-*.jar)"/>
+        <echo message="not found in anttask.classpath"/>
+    </target>
+
+    <target name="create-md5s" >
+        <checksum file="${RELEASE_DIR}/${source.kit}.zip" algorithm="md5" forceOverwrite="yes" />
+        <checksum file="${RELEASE_DIR}/${source.kit}.tar.gz" algorithm="md5" forceOverwrite="yes" />
+        <checksum file="${RELEASE_DIR}/${binary.kit}.${extension}" algorithm="md5" forceOverwrite="yes" />
+        
+    </target>
+    
+	<target name="sign" >
+		<exec executable="gpg">
+			<arg value="--armor" />
+			<arg value="--output" />
+			<arg value="${RELEASE_DIR}/${source.kit}.zip.asc" />
+			<arg value="--detach-sig" />
+			<arg value="${RELEASE_DIR}/${source.kit}.zip" />
+		</exec>
+
+		<exec executable="gpg">
+			<arg value="--armor" />
+			<arg value="--output" />
+			<arg value="${RELEASE_DIR}/${source.kit}.tar.gz.asc" />
+			<arg value="--detach-sig" />
+			<arg value="${RELEASE_DIR}/${source.kit}.tar.gz" />
+		</exec>
+
+		<exec executable="gpg">
+			<arg value="--armor" />
+			<arg value="--output" />
+			<arg value="${RELEASE_DIR}/${binary.kit}.${extension}.asc" />
+			<arg value="--detach-sig" />
+			<arg value="${RELEASE_DIR}/${binary.kit}.${extension}" />
+		</exec>
+	</target>
+
+	<target name="sign_exe" description="sign exe when on mac" >
+		<checksum file="${RELEASE_DIR}/${binary.kit}.exe" algorithm="md5" forceOverwrite="yes" />
+
+		<exec executable="gpg">
+			<arg value="--armor" />
+			<arg value="--output" />
+			<arg value="${RELEASE_DIR}/${binary.kit}.exe.asc" />
+			<arg value="--detach-sig" />
+			<arg value="${RELEASE_DIR}/${binary.kit}.exe" />
+		</exec>
+	</target>
+
+	<target name="sign_dmg" description="sign dmg when on win" >
+		<checksum file="${RELEASE_DIR}/${binary.kit}.dmg" algorithm="md5" forceOverwrite="yes" />
+
+		<exec executable="gpg">
+			<arg value="--armor" />
+			<arg value="--output" />
+			<arg value="${RELEASE_DIR}/${binary.kit}.dmg.asc" />
+			<arg value="--detach-sig" />
+			<arg value="${RELEASE_DIR}/${binary.kit}.dmg" />
+		</exec>
+	</target>
+	
+    <target name="debug" >
+        <copy file="${SOURCE_DIR}/${APP_NAME}-app.xml" todir="${BUILD_DIR}" />
+        <mkdir dir="${BUILD_DIR}/installer" />
+        <exec executable="${AIR_HOME}/bin/${adl}" dir="${BUILD_DIR}" failonerror="true">
+            <arg value="-runtime" />
+            <arg value="${AIR_HOME}/runtimes/air/${runtime}" />
+            <arg value="${BUILD_DIR}/${APP_NAME}-app.xml" />
+            <arg value="--" />
+            <arg value="-config=${LOCAL_CONFIG_URL}" />
+        </exec>
+    </target>
+
+    <target name="debug-locale" >
+        <copy file="${SOURCE_DIR}/${APP_NAME}-app.xml" todir="${BUILD_DIR}" />
+        <mkdir dir="${BUILD_DIR}/installer" />
+        <exec executable="${AIR_HOME}/bin/${adl}" dir="${BUILD_DIR}" failonerror="true">
+            <arg value="-runtime" />
+            <arg value="${AIR_HOME}/runtimes/air/${runtime}" />
+            <arg value="${BUILD_DIR}/${APP_NAME}-app.xml" />
+            <arg value="--" />
+            <arg value="-config=${LOCAL_CONFIG_URL}" />
+            <arg value="-language=${TEST_LOCALE}" />
+        </exec>
+    </target>
+
+    <target name="debug-for-real" >
+        <copy file="${SOURCE_DIR}/${APP_NAME}-app.xml" todir="${BUILD_DIR}" />
+        <mkdir dir="${BUILD_DIR}/installer" />
+        <exec executable="${AIR_HOME}/bin/${adl}" dir="${BUILD_DIR}" failonerror="true">
+            <arg value="-runtime" />
+            <arg value="${AIR_HOME}/runtimes/air/${runtime}" />
+            <arg value="${BUILD_DIR}/${APP_NAME}-app.xml" />
+        </exec>
+    </target>
+</project>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/cda78507/flex-installer/installer/releasecandidate.xml
----------------------------------------------------------------------
diff --git a/flex-installer/installer/releasecandidate.xml b/flex-installer/installer/releasecandidate.xml
new file mode 100644
index 0000000..3dca3d9
--- /dev/null
+++ b/flex-installer/installer/releasecandidate.xml
@@ -0,0 +1,449 @@
+<?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="CreateInstallerReleaseCandidate" default="main" basedir=".">
+
+
+    <!-- Required for OSX 10.6 / Snow Leopard Performance. -->
+    <!-- Java 7 on Mac requires OSX 10.7.3 or higher and is 64-bit only -->
+    <!-- local.d32 is set/used in build.properties so this needs to be done first. -->
+    <condition property="local.d32" value="-d32">
+        <and>
+            <os family="windows"/>
+            <equals arg1="${sun.arch.data.model}" arg2="64"/>
+            <equals arg1="${os.arch}" arg2="x86_64"/>
+            <equals arg1="${ant.java.version}" arg2="1.6"/>
+        </and>
+    </condition>
+
+    <condition property="isMac" value="mac">
+        <os family="mac" />
+    </condition>
+    <condition property="isWindows" value="windows">
+        <os family="windows" />
+    </condition>
+    <condition property="isLinux" value="linux">
+		<and>
+			<os family="unix" />
+			<not>
+				<isset property="isMac" />
+			</not>
+		</and>
+    </condition>
+	
+	<property name="rat.report" value="${basedir}/rat-report.txt"/>
+	<property name="apache.rat.jar" value="apache-rat-0.8.jar" />
+	<property name="apache.rat.tasks.jar" value="apache-rat-tasks-0.8.jar" />
+	<property name="apache.rat.url" value="http://people.apache.org/~aharui/rat" />
+    
+	<property file="${basedir}/local.properties" />
+	<condition property="CERT_PASSWORD_FILE" value="${CERT_PASSWORD_FILE_WIN}" >
+		<and>
+			<not>
+				<available file="${CERT_PASSWORD_FILE}" />
+			</not>
+			<available file="${CERT_PASSWORD_FILE_WIN}" />
+		</and>
+	</condition>
+	<condition property="CERT_PASSWORD_FILE" value="${CERT_PASSWORD_FILE_MAC}" >
+		<and>
+			<not>
+				<available file="${CERT_PASSWORD_FILE}" />
+			</not>
+			<available file="${CERT_PASSWORD_FILE_MAC}" />
+		</and>
+	</condition>
+	<condition property="RELEASE_KEYSTORE_FILE" value="${RELEASE_KEYSTORE_FILE_WIN}" >
+		<and>
+			<not>
+				<available file="${RELEASE_KEYSTORE_FILE}" />
+			</not>
+			<available file="${RELEASE_KEYSTORE_FILE_WIN}" />
+		</and>
+	</condition>
+	<condition property="RELEASE_KEYSTORE_FILE" value="${RELEASE_KEYSTORE_FILE_MAC}" >
+		<and>
+			<not>
+				<available file="${RELEASE_KEYSTORE_FILE}" />
+			</not>
+			<available file="${RELEASE_KEYSTORE_FILE_MAC}" />
+		</and>
+	</condition>
+	<property file="${basedir}/build.properties" />
+    <property file="${basedir}/build.number"/>
+	   
+    <property environment="env"/>
+    
+	<condition property="do.copy.downloads" >
+		<isset property="download.cache.dir" /> 
+	</condition>
+	
+    <condition property="CRLF" value="%0D%0A">
+        <isset property="isWindows" />
+    </condition>
+    <property name="CRLF" value="%0A" />
+    
+    <fail message="The my.name property is not set to the RM's name"
+    unless="my.name"/>
+    
+    <fail message="The ANT_HOME environment variable is not set."
+        unless="env.ANT_HOME"/>
+		
+	<available file="${svn.dist.dev}"
+		type="dir" 
+		property="dist.dev" value="${svn.dist.dev}" />
+    
+	<fail message="The svn.dist.dev property is not set to the working copy for https://dist.apache.org/repos/dist/dev."
+        unless="dist.dev"/>
+				
+	<available file="${env.AIR_HOME}"
+		type="dir" 
+		property="AIR_HOME" value="${env.AIR_HOME}" />
+
+    <fail message="The AIR_HOME property is not set in environment or command-line."
+        unless="AIR_HOME"/>
+		
+    <available file="${env.PLAYERGLOBAL_HOME}"
+        type="dir"
+        property="PLAYERGLOBAL_HOME" value="${env.PLAYERGLOBAL_HOME}" />
+    
+    <fail message="The PLAYERGLOBAL_HOME property is not set in environment or command-line."
+        unless="PLAYERGLOBAL_HOME"/>
+    
+    <available file="${env.FLASHPLAYER_DEBUGGER}"
+        type="dir"
+        property="FLASHPLAYER_DEBUGGER" value="${env.FLASHPLAYER_DEBUGGER}" />
+    
+    <available file="${env.FLASHPLAYER_DEBUGGER}"
+        type="file"
+        property="FLASHPLAYER_DEBUGGER" value="${env.FLASHPLAYER_DEBUGGER}" />
+    
+    <fail message="The FLASHPLAYER_DEBUGGER property is not set in environment or command-line."
+        unless="FLASHPLAYER_DEBUGGER"/>
+        
+    <available file="${env.ProgramFiles}/Mozilla Firefox/firefox.exe"
+		type="file"
+		property="browser" value="${env.ProgramFiles}/Mozilla Firefox/firefox.exe" />
+    <available file="${env.ProgramFiles(x86)}/Mozilla Firefox/firefox.exe"
+		type="file"
+		property="browser" value="${env.ProgramFiles}/Mozilla Firefox/firefox.exe" />
+    <available file="/Applications/Firefox.app/Contents/MacOS/firefox"
+		type="file"
+		property="browser" value="/Applications/Firefox.app/Contents/MacOS/firefox" />
+        
+    <available file="${env.ANT_HOME}/lib/${apache.rat.jar}"
+        type="file"
+        property="apache.rat.found"/>
+    <available file="${env.ANT_HOME}/lib/${apache.rat.tasks.jar}"
+        type="file"
+        property="apache.rat.tasks.found"/>
+		
+    <fail message="Could not locate Firefox.  Please specify a browser with
+    -Dbrowser=&lt;path-to-browser&gt;"
+        unless="browser"/>
+        
+    <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" />
+    <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="${env.ProgramFiles}/Git/bin/git.exe"
+		type="file"
+		property="git" value="${env.ProgramFiles}/Git/bin/git.exe" />
+    <available file="${env.ProgramFiles(x86)}/Git/bin/git.exe"
+		type="file"
+		property="git" value="${env.ProgramFiles}/Git/bin/git.exe" />
+    <available file="/usr/local/git/bin/git"
+		type="file"
+		property="git" value="/usr/local/git/bin/git" />
+    <fail message="Could not locate Git command-line.  Please specify the path to Git with
+    -Dgit=&lt;path-to-git&gt;"
+        unless="git"/>
+        
+    <available file="${env.ANT_HOME}/lib/${apache.rat.jar}"
+        type="file"
+        property="apache.rat.found"/>
+    <available file="${env.ANT_HOME}/lib/${apache.rat.tasks.jar}"
+        type="file"
+        property="apache.rat.tasks.found"/>
+		
+    <fail message="Could not locate Firefox.  Please specify a browser with
+    -Dbrowser=&lt;path-to-browser&gt;"
+        unless="browser"/>
+    <fail message="The release candidate number is not set.  Specify -Drc=&lt;rc number (e.g. 1, 2, 3, etc)&gt;"
+    unless="rc"/>
+        	
+	<target name="install-rat" depends="install-rat.jar,install-rat.tasks.jar" />
+	<target name="install-rat.jar" unless="apache.rat.found">
+		<get src="${apache.rat.url}/${apache.rat.jar}" dest="${env.ANT_HOME}/lib/${apache.rat.jar}" />
+	</target>
+	<target name="install-rat.tasks.jar" unless="apache.rat.tasks.found">
+		<get src="${apache.rat.url}/${apache.rat.tasks.jar}" dest="${env.ANT_HOME}/lib/${apache.rat.tasks.jar}" />
+	</target>
+	
+    <target name="rat-taskdef" description="Rat taskdef">
+        <typedef resource="org/apache/rat/anttasks/antlib.xml"
+        uri="antlib:org.apache.rat.anttasks"
+        classpathref="anttask.classpath"/>
+    </target>
+
+    <target name="main" depends="install-rat" description="Perform required release approval steps">
+		<antcall target="check-new-version" />
+		<antcall target="other-platform" />
+		<exec executable="${git}" dir="${basedir}/.." failonerror="true" >
+			<arg value="pull" />
+			<arg value="--rebase" />
+		</exec>
+		<ant antfile="build.xml" target="release" />
+		<mkdir dir="${dist.dev}/flex/installer/${release.version}/rc${rc}/binaries" />
+		<copy todir="${dist.dev}/flex/installer/${release.version}/rc${rc}" >
+			<fileset dir="${basedir}/release" >
+				<include name="apache-flex-sdk-installer-${release.version}.${build.number}-src*" />
+			</fileset>
+		</copy>
+		<copy todir="${dist.dev}/flex/installer/${release.version}/rc${rc}/binaries" >
+			<fileset dir="${basedir}/release" >
+				<include name="apache-flex-sdk-installer-${release.version}.${build.number}-bin*" />
+			</fileset>
+		</copy>
+		<copy file="${basedir}/README" tofile="${dist.dev}/flex/installer/${release.version}/rc${rc}/READme" />
+		<copy file="${basedir}/ApproveInstaller.xml" tofile="${dist.dev}/flex/installer/${release.version}/rc${rc}/ApproveInstaller.xml" />
+		<exec executable="${svn}" dir="${dist.dev}/flex/installer" failonerror="true" >
+			<arg value="add" />
+			<arg value="${dist.dev}/flex/installer/${release.version}/rc${rc}" />
+		</exec>
+		<exec executable="${svn}" dir="${dist.dev}/flex/installer" failonerror="true" >
+			<arg value="commit" />
+			<arg value="--force-interactive" />
+			<arg value="-m" />
+			<arg value="rc${rc} of Apache Flex Installer ${release.version}" />
+		</exec>
+		<exec executable="${git}" dir="${basedir}/.." failonerror="true" >
+			<arg value="tag" />
+			<arg value="-a" />
+			<arg value="apache-flex-sdk-installer-${release.version}-rc${rc}" />
+			<arg value="-m" />
+			<arg value="&quot;rc${rc} of apache-flex-sdk-installer-${release.version}&quot;" />
+		</exec>
+		<exec executable="${git}" dir="${basedir}/.." failonerror="true" >
+			<arg value="push" />
+			<arg value="--tags" />
+		</exec>
+		<antcall target="mail" />
+    </target>
+	
+	<target name="check-new-version" description="check if svn folder needs to be added" >
+		<condition property="version.folder" value="${dist.dev}/flex/installer/${release.version}" >
+			<not>
+				<available file="${dist.dev}/flex/installer/${release.version}" />
+			</not>
+		</condition>
+		<antcall target="add-version-folder" />
+	</target>
+    
+	<target name="add-version-folder" description="adds svn folder if needed" if="version.folder" >
+		<mkdir dir="${version.folder}" />
+		<exec executable="${svn}" dir="${dist.dev}/flex/installer" failonerror="true" >
+			<arg value="add" />
+			<arg value="${version.folder}" />
+		</exec>
+	</target>
+	
+	<target name="other-platform" depends="other-platform-mac, other-platform-win" unless="skip.other.platform" >
+	</target>
+	<target name="other-platform-mac" if="isMac" >
+		<available file="${basedir}/release/apache-flex-sdk-installer-${release.version}.${build.number}-bin.exe" 
+		           type="file" property="other.binary" />
+		<fail message="${basedir}/release/apache-flex-sdk-installer-${release.version}.${build.number}-bin.exe not found.  The windows version should be built before running this script" 
+		      unless="other.binary"/>
+		<ant antfile="build.xml" target="sign_exe" />
+		<mkdir dir="${dist.dev}/flex/installer/${release.version}/rc${rc}/binaries" />
+		<copy todir="${dist.dev}/flex/installer/${release.version}/rc${rc}/binaries" >
+			<fileset dir="${basedir}/release" >
+				<include name="apache-flex-sdk-installer-${release.version}.${build.number}-bin*" />
+			</fileset>
+		</copy>
+	</target>
+	<target name="other-platform-win" if="isWindows" >
+		<available file="${basedir}/release/apache-flex-sdk-installer-${release.version}.${build.number}-bin.dmg" 
+		           type="file" property="other.binary" />
+		<fail message="${basedir}/release/apache-flex-sdk-installer-${release.version}.${build.number}-bin.dmg not found.  The windows version should be built before running this script" 
+		      unless="other.binary"/>
+		<ant antfile="build.xml" target="sign_dmg" />
+		<mkdir dir="${dist.dev}/flex/installer/${release.version}/rc${rc}/binaries" />
+		<copy todir="${dist.dev}/flex/installer/${release.version}/rc${rc}/binaries" >
+			<fileset dir="${basedir}/release" >
+				<include name="apache-flex-sdk-installer-${release.version}.${build.number}-bin*" />
+			</fileset>
+		</copy>
+	</target>
+	
+    <target name="mail" >
+        <!-- try to set line breaks before the vertical line            | -->
+        <echo file="${basedir}/discussthread.properties">discuss.thread.body=This is the discussion thread.\n\
+\n\
+Changes in this RC include:\n\
+\n\
+\n\
+Thanks,\n\
+${my.name}
+</echo>
+        <replace file="${basedir}/discussthread.properties">
+            <replacefilter token=" " value="%20" />
+            <replacefilter token="\n" value="${CRLF}" />
+        </replace>
+        <property file="${basedir}/discussthread.properties" />
+
+        <!-- try to set line breaks before the vertical line            | -->
+        <echo file="${basedir}/votethread.properties">vote.thread.body=Hi,\n\
+\n\
+Please vote to approve Apache Flex SDK Installer version ${release.version} to be \n\
+released.\n\
+\n\
+The source distributions for Windows and Mac are available here:\n\
+https://dist.apache.org/repos/dist/dev/flex/installer/${release.version}/rc${rc}/\n\
+\n\
+The binary distributions as a convenience for the respective platforms,\n\
+are available here:\n\
+https://dist.apache.org/repos/dist/dev/flex/installer/${release.version}/rc${rc}/binaries\n\
+\n\
+As agreed, there are no Linux binaries for this version.\n\
+\n\
+Before voting  please review the sections:\n\
+What are the ASF requirements on approving a release? at\n\
+http://www.apache.org/dev/ and approving a release  at\n\
+http://www.apache.org/dev/release.html#approving-a-release\n\
+\n\
+For your convenience, there is an Ant script in the RC folder that\n\
+automates the checks a voter should perform on the RC.\n\
+It will:\n\
+  - download the default source package for your OS (use -Dpackage.suffix to override)\n\
+  - run md5 and gpg checks (this assumes you have gpg installed in your path)\n\
+  - uncompress the source package\n\
+  - install and run rat\n\
+  - display the rat report and ask you to verify\n\
+  - display the rat report without the AL files and ask you to verify the non-AL files\n\
+  - display the README and ask you to verify\n\
+  - display the RELEASE_NOTES and ask you to verify\n\
+  - display the NOTICE and ask you to verify\n\
+  - display the LICENSE and ask you to verify\n\
+  - run the build and any tests run by the build.\n\
+\n\
+\n\
+You should be able to go away for a while during the build. When it is\n\
+finished, it will display information to be copied into the vote thread.\n\
+You are not required to use this script, and more testing of the packages\n\
+and build results are always encouraged.\n\
+\n\
+\n\
+To use this script (assuming you have Ant installed), it should be as\n\
+simple as:\n\
+- Create an empty folder\n\
+- Download ApproveInstaller.xml into that folder from:\n\
+\n\
+https://dist.apache.org/repos/dist/dev/flex/installer/${release.version}/rc${rc}/ApproveInstaller.xml\n\
+\n\
+- Run: ant -e -f ApproveInstaller.xml -Drelease.version=${release.version} -Drc=${rc}\n\
+\n\
+\n\
+Vote\n\
+[ ] +1 Approve the release\n\
+[ ] -1 Veto the release (please provide specific comments)\n\
+\n\
+This vote will be open for at least 72 hours.\n\
+\n\
+Thanks,\n\
+${my.name}
+</echo>
+        <replace file="${basedir}/votethread.properties">
+            <replacefilter token=" " value="%20" />
+            <replacefilter token="\n" value="${CRLF}" />
+        </replace>
+        <property file="${basedir}/votethread.properties" />
+        <echo file="${basedir}/votethread.html">&lt;html&gt;&lt;body&gt;&lt;a href=&quot;mailto:dev@flex.apache.org?subject=[DISCUSS]%20Discuss%20Release%20Apache%20Flex%20SDK%20Installer%20${release.version}%20RC${rc}&amp;body=${discuss.thread.body}&quot;&gt;Click here to review discuss thread&lt;/a&gt;&lt;br/&gt;&lt;a href=&quot;mailto:dev@flex.apache.org?subject=[VOTE]%20Release%20Apache%20Flex%20SDK%20Installer%20${release.version}%20RC${rc}&amp;body=${vote.thread.body}&quot;&gt;Click here to review vote thread&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;</echo>
+        <makeurl file="${basedir}/votethread.html" property="vote.thread.url" />
+        <exec executable="${browser}">
+            <arg value="${vote.thread.url}" />
+        </exec>
+		<delete file="${basedir}/votethread.properties" />
+		<delete file="${basedir}/votethread.html" />
+		<delete file="${basedir}/discussthread.properties" />
+    </target>
+
+	<target name="release" >
+		<available file="${svn.dist.release}"
+			type="dir" 
+			property="dist.release" value="${svn.dist.release}" />
+    
+		<fail message="The svn.dist.release property is not set to the working copy for https://dist.apache.org/repos/dist/release."
+			unless="dist.release"/>
+				
+		<exec executable="${svn}" dir="${dist.release}/flex" failonerror="true" >
+			<arg value="update" />
+		</exec>
+		<mkdir dir="${dist.release}/flex/installer/${release.version}" />
+		<mkdir dir="${dist.release}/flex/installer/${release.version}/binaries" />
+		<copy todir="${dist.release}/flex/installer/${release.version}/binaries" >
+			<fileset dir="${dist.dev}/flex/installer/rc${rc}/binaries" >
+				<include name="apache-flex-sdk-installer-${release.version}.${build.number}-bin*" />
+			</fileset>
+		</copy>
+		<copy todir="${dist.release}/flex/installer/${release.version}" >
+			<fileset dir="${dist.dev}/flex/installer/rc${rc}" >
+				<include name="READme" />
+				<include name="apache-flex-sdk-installer-${release.version}.${build.number}-src*" />
+			</fileset>
+		</copy>
+		<exec executable="${svn}" dir="${dist.release}/flex/installer" failonerror="true" >
+			<arg value="add" />
+			<arg value="${release.version}" />
+		</exec>
+		<exec executable="${svn}" dir="${dist.release}/flex/installer" failonerror="true" >
+			<arg value="commit" />
+			<arg value="--username" />
+			<arg value="${apache.username}" />
+			<arg value="--password" />
+			<arg value="${apache.password}" />
+			<arg value="-m" />
+			<arg value="Apache Flex SDK Installer ${release.version}" />
+		</exec>
+		<exec executable="${git}" dir="${basedir}" failonerror="true" >
+			<arg value="tag" />
+			<arg value="-a" />
+			<arg value="apache-flex-sdk-installer-${release.version}.${build.number}" />
+			<arg value="-m" />
+			<arg value="&quot;Official release of apache-flex-sdk-installer-${release.version}.${build.number}&quot;" />
+		</exec>
+		<exec executable="${git}" dir="${basedir}" failonerror="true" >
+			<arg value="push" />
+			<arg value="--tags" />
+		</exec>
+		<echo>Wait at least 24 hours before updating sdk-installer-config-4.0.xml and installer page on website</echo>
+	</target>
+	
+</project>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/cda78507/flex-installer/installer/sign_and_hash.sh
----------------------------------------------------------------------
diff --git a/flex-installer/installer/sign_and_hash.sh b/flex-installer/installer/sign_and_hash.sh
new file mode 100644
index 0000000..0e2d3c2
--- /dev/null
+++ b/flex-installer/installer/sign_and_hash.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+#   Copyright 2004 The Apache Software Foundation
+#
+#   Licensed 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.
+#------------------------------------------------------------------------------
+# $Id$
+#
+# Creates detached ascii signatures and md5 hashes for each of the files in the
+# current directory.
+#
+# Also verifies the signatures.
+#
+# For each file in the current directory, two new files are created:
+#
+#   <name>.asc -- ascii-armored detached PGP digital signature
+#   <name>.md5 -- md5 hash (checksum)
+#
+# where <name> is the name of the file, not including file path.  
+# 
+# For example, foo-1.0-src.tar.gz in the current directory will result in 
+# foo-1.0-src.tar.gz.asc and foo-1.0-src.tar.gz.md5 added to the current 
+# directory. 
+#
+# Deletes any .asc or .md5 files in the current directory before processing
+# and does NOT recurse subdirectories.
+#
+# Assumes that you have a pgp id and keypair set up and prompts for the 
+# passphrase for each signature created.
+#
+# usage:
+#     sign_and_hash.sh
+#
+# requires:
+#    gpg
+#    md5sum
+#------------------------------------------------------------------------------
+rm -f *.asc
+rm -f *.md5
+for file in *; do
+    if [ -f "$file" ]; then
+		gpg --print-md MD5 $file > ${file}.md5
+        gpg --armor --output ${file}.asc --detach-sig $file
+        gpg --verify ${file}.asc $file
+    fi
+done

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/cda78507/flex-installer/installer/src/InstallApacheFlex-app.xml
----------------------------------------------------------------------
diff --git a/flex-installer/installer/src/InstallApacheFlex-app.xml b/flex-installer/installer/src/InstallApacheFlex-app.xml
new file mode 100755
index 0000000..79ff410
--- /dev/null
+++ b/flex-installer/installer/src/InstallApacheFlex-app.xml
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!--
+
+  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.
+
+-->
+<application xmlns="http://ns.adobe.com/air/application/4.0">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/3.8
+			The last segment of the namespace specifies the version
+			of the AIR runtime required for this application to run.
+
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run
+			the application. Optional.
+-->
+
+	<!-- A universally unique application identifier. Must be unique across all AIR applications.
+	Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
+	<id>org.apache.flex.installapacheflex</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>Apache Flex SDK Installer</filename>
+
+	<!-- The name that is displayed in the AIR application installer.
+	May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>Apache Flex SDK Installer</name>
+
+	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
+	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
+	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
+	<versionNumber>3.2.0</versionNumber>
+
+	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
+	<!-- <versionLabel></versionLabel> -->
+
+	<!-- Description, displayed in the AIR application installer.
+	May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<copyright>Copyright 2014 The Apache Software Foundation.</copyright>
+
+	<!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
+	<!-- <publisherID></publisherID> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flash Builder, the SWF reference is set automatically. -->
+		<content>InstallApacheFlex.swf</content>
+
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<!-- <systemChrome></systemChrome> -->
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<!-- <transparent></transparent> -->
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<!-- <resizable></resizable> -->
+
+		<!-- The window's initial width in pixels. Optional. -->
+		<!-- <width></width> -->
+
+		<!-- The window's initial height in pixels. Optional. -->
+		<!-- <height></height> -->
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+
+        <!-- The initial aspect ratio of the app when launched (either "portrait" or "landscape"). Optional. Mobile only. Default is the natural orientation of the device -->
+
+        <!-- <aspectRatio></aspectRatio> -->
+
+        <!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false -->
+
+        <!-- <autoOrients></autoOrients> -->
+
+        <!-- Whether the app launches in full screen. Optional. Mobile only. Default false -->
+
+        <!-- <fullScreen></fullScreen> -->
+
+        <!-- The render mode for the app (either auto, cpu, gpu, or direct). Optional. Default auto -->
+
+        <!-- <renderMode></renderMode> -->
+
+		<!-- Whether or not to pan when a soft keyboard is raised or lowered (either "pan" or "none").  Optional.  Defaults "pan." -->
+		<!-- <softKeyboardBehavior></softKeyboardBehavior> -->
+	<autoOrients>false</autoOrients>
+        <fullScreen>false</fullScreen>
+        <visible>false</visible>
+    </initialWindow>
+
+	<!-- We recommend omitting the supportedProfiles element, -->
+	<!-- which in turn permits your application to be deployed to all -->
+	<!-- devices supported by AIR. If you wish to restrict deployment -->
+	<!-- (i.e., to only mobile devices) then add this element and list -->
+	<!-- only the profiles which your application does support. -->
+	<!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
+	<supportedProfiles>extendedDesktop desktop</supportedProfiles>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<installFolder>Apache Flex</installFolder>
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<programMenuFolder>Apache Flex</programMenuFolder>
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+	specify the path to a PNG file included in the AIR package. Optional. -->
+	<icon>
+		<image16x16>assets/icons/16.png</image16x16>
+		<image29x29>assets/icons/29.png</image29x29>
+		<image32x32>assets/icons/32.png</image32x32>
+		<image36x36>assets/icons/36.png</image36x36>
+		<image48x48>assets/icons/48.png</image48x48>
+		<image57x57>assets/icons/57.png</image57x57>
+		<image72x72>assets/icons/72.png</image72x72>
+		<image114x114>assets/icons/114.png</image114x114>
+		<image128x128>assets/icons/128.png</image128x128>
+	</icon>
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+    <!-- iOS specific capabilities -->
+	<!-- <iPhone> -->
+		<!-- A list of plist key/value pairs to be added to the application Info.plist -->
+		<!-- <InfoAdditions>
+            <![CDATA[
+                <key>UIDeviceFamily</key>
+                <array>
+                    <string>1</string>
+                    <string>2</string>
+                </array>
+                <key>UIStatusBarStyle</key>
+                <string>UIStatusBarStyleBlackOpaque</string>
+                <key>UIRequiresPersistentWiFi</key>
+                <string>YES</string>
+            ]]>
+        </InfoAdditions> -->
+        <!-- A list of plist key/value pairs to be added to the application Entitlements.plist -->
+		<!-- <Entitlements>
+            <![CDATA[
+                <key>keychain-access-groups</key>
+                <array>
+                    <string></string>
+                    <string></string>
+                </array>
+            ]]>
+        </Entitlements> -->
+	<!-- Display Resolution for the app (either "standard" or "high"). Optional. Default "standard" -->
+	<!-- <requestedDisplayResolution></requestedDisplayResolution> -->
+	<!-- </iPhone> -->
+
+	<!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
+    <!--<android> -->
+    <!--	<manifestAdditions>
+		<![CDATA[
+			<manifest android:installLocation="auto">
+				<uses-permission android:name="android.permission.INTERNET"/>
+				<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+				<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+				<uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
+				<application android:enabled="true">
+					<activity android:excludeFromRecents="false">
+						<intent-filter>
+							<action android:name="android.intent.action.MAIN"/>
+							<category android:name="android.intent.category.LAUNCHER"/>
+						</intent-filter>
+					</activity>
+				</application>
+            </manifest>
+		]]>
+        </manifestAdditions> -->
+	    <!-- Color depth for the app (either "32bit" or "16bit"). Optional. Default 16bit before namespace 3.0, 32bit after -->
+        <!-- <colorDepth></colorDepth> -->
+    <!-- </android> -->
+	<!-- End of the schema for adding the android specific tags in AndroidManifest.xml file -->
+
+</application>