update approval script with binary package checks
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/b36f9d6f Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/b36f9d6f Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/b36f9d6f Branch: refs/heads/master Commit: b36f9d6f2cd9e74c85ce7a0a5bff7ff7aecaa562 Parents: 8e696c7 Author: Alex Harui <aha...@apache.org> Authored: Fri Nov 20 17:46:51 2015 -0800 Committer: Alex Harui <aha...@apache.org> Committed: Fri Nov 20 17:46:51 2015 -0800 ---------------------------------------------------------------------- ApproveSDK.xml | 1041 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 926 insertions(+), 115 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/b36f9d6f/ApproveSDK.xml ---------------------------------------------------------------------- diff --git a/ApproveSDK.xml b/ApproveSDK.xml index 1048fba..77aba4a 100644 --- a/ApproveSDK.xml +++ b/ApproveSDK.xml @@ -52,12 +52,13 @@ </condition> <property name="package.suffix" value="tar.gz" /> - <property name="rat.report" value="${basedir}/rat-report.txt"/> + <property name="src.rat.report" value="${basedir}/rat-report-src.txt"/> + <property name="bin.rat.report" value="${basedir}/rat-report-bin.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}/approvefalcon.properties"/> + <property file="${basedir}/approvesdk.properties"/> <property name="mac.text.display" value="cat" /> <property name="win.text.display" value="type" /> @@ -108,13 +109,24 @@ <fail message="The release version is not set. Specify -Drelease.version=<release version (e.g. 3.1, 3.2, etc)>" unless="release.version"/> - - <condition property="package.url.path" value="http://apacheflexbuild.cloudapp.net:8080/job/flex-sdk_release-candidate/lastSuccessfulBuild/artifact/out"> - <isset property="nightly" /> + <condition property="package.url.path" + value="http://apacheflexbuild.cloudapp.net:8080/job/flex-sdk_release-candidate/lastSuccessfulBuild/artifact/out"> + <not> + <isset property="rc" /> + </not> </condition> - + <condition property="bin.package.url.path" + value="${package.url.path}"> + <not> + <isset property="rc" /> + </not> + </condition> + <property name="package.url.path" value="https://dist.apache.org/repos/dist/dev/flex/sdk/${release.version}/rc${rc}" /> - <property name="package.url.name" value="apache-flex-sdk-${release.version}-src" /> + <property name="src.package.url.path" value="${package.url.path}" /> + <property name="bin.package.url.path" value="${package.url.path}/binaries" /> + <property name="src.package.url.name" value="apache-flex-sdk-${release.version}-src" /> + <property name="bin.package.url.name" value="apache-flex-sdk-${release.version}-bin" /> <condition property="zip.package"> <equals arg1="zip" arg2="${package.suffix}" /> @@ -171,10 +183,10 @@ <echo>Testing nightly build of release ${release.version}</echo> </target> - <target name="main" depends="install-rat,echo-mode,download,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps"> + <target name="main" depends="write-out-jars-list,install-rat,download,check-sigs,uncompress,rat-check,examine-jars,external-jar-folder-dump,check-notices,build,approve" description="Perform required release approval steps"> </target> - <target name="main-no-download" depends="install-rat,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps"> + <target name="main-no-download" depends="write-out-jars-list,install-rat,check-sigs,uncompress,rat-check,examine-jars,external-jar-folder-dump,check-notices,build,approve" description="Perform required release approval steps"> </target> <target name="test" > @@ -182,6 +194,16 @@ <replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/> </target> + <target name="write-out-jars-list" > + <delete file="jars.txt" /> + <!-- this is a comma-delimited, no spaces, no-line-breaks list used to decide which jars + to skip in the rat-check of the binaries and which jars to examine before approval --> + <property name="jars-list" value="ant/lib/flexTasks.jar,lib/asc.jar,lib/asdoc.jar,lib/batik-all-flex.jar,lib/compc.jar,lib/copylocale.jar,lib/digest.jar,lib/fcsh.jar,lib/fdb.jar,lib/flex-compiler-oem.jar,lib/flex-messaging-common.jar,lib/flex-tool-api.jar,lib/fxgutils.jar,lib/mxmlc.jar,lib/mxmlc_da.jar,lib/mxmlc_de.jar,lib/mxmlc_es.jar,lib/mxmlc_fi.jar,lib/mxmlc_fr.jar,lib/mxmlc_it.jar,lib/mxmlc_ja.jar,lib/mxmlc_ko.jar,lib/mxmlc_nb.jar,lib/mxmlc_nl.jar,lib/mxmlc_pt.jar,lib/mxmlc_ru.jar,lib/mxmlc_sv.jar,lib/mxmlc_zh_CN.jar,lib/mxmlc_zh_TW.jar,lib/optimizer.jar,lib/swcdepends.jar,lib/swfdump.jar,lib/swfutils.jar,lib/velocity-dep-1.4-flex.jar"/> + <echo file="${basedir}/jars.txt" message="${jars-list}"/> + <echo file="${basedir}/jarexcludes.txt" message="${jars-list}"/> + <replaceregexp file="${basedir}/jarexcludes.txt" match="," flags="g" replace="${line.separator}" /> + </target> + <target name="display-text" > <antcall target="display-text-mac" /> <antcall target="display-text-win" /> @@ -195,60 +217,89 @@ </target> <target name="download" description="download the release package"> - <get src="${package.url.path}/${package.url.name}.${package.suffix}" - dest="${basedir}/${package.url.name}.${package.suffix}" /> - <get src="${package.url.path}/${package.url.name}.${package.suffix}.md5" - dest="${basedir}/${package.url.name}.${package.suffix}.md5" /> - <antcall target="downloadasc" /> + <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}" + dest="${basedir}/${src.package.url.name}.${package.suffix}" /> + <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}.md5" + dest="${basedir}/${src.package.url.name}.${package.suffix}.md5" /> + <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}" + dest="${basedir}/${bin.package.url.name}.${package.suffix}" /> + <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}.md5" + dest="${basedir}/${bin.package.url.name}.${package.suffix}.md5" /> + <antcall target="asc_get" /> </target> - <target name="downloadasc" if="rc" > - <get src="${package.url.path}/${package.url.name}.${package.suffix}.asc" - dest="${basedir}/${package.url.name}.${package.suffix}.asc" /> + + <target name="asc_get" if="rc" > + <get src="${src.package.url.path}/${src.package.url.name}.${package.suffix}.asc" + dest="${basedir}/${src.package.url.name}.${package.suffix}.asc" /> + <get src="${bin.package.url.path}/${bin.package.url.name}.${package.suffix}.asc" + dest="${basedir}/${bin.package.url.name}.${package.suffix}.asc" /> </target> <target name="check-sigs" description="check md5 and gpg sigs"> - <replace file="${basedir}/${package.url.name}.${package.suffix}.md5" - token=" " /> - <checksum file="${basedir}/${package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="md5.ok" /> - <condition property="MD5Invalid"> - <not> - <equals arg1="${md5.ok}" arg2="true" /> - </not> + <replace file="${basedir}/${src.package.url.name}.${package.suffix}.md5" + token=" " /> + <checksum file="${basedir}/${src.package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="src.md5.ok" /> + <condition property="SourceMD5Invalid"> + <not> + <equals arg1="${src.md5.ok}" arg2="true" /> + </not> + </condition> + <fail message="Source Package MD5 checksum did not match" if="SourceMD5Invalid" /> + <replace file="${basedir}/${bin.package.url.name}.${package.suffix}.md5" + token=" " /> + <checksum file="${basedir}/${bin.package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="bin.md5.ok" /> + <condition property="BinaryMD5Invalid"> + <not> + <equals arg1="${bin.md5.ok}" arg2="true" /> + </not> </condition> - <fail message="MD5 checksum did not match" if="MD5Invalid" /> - <antcall target="checkasc" /> + <fail message="Binary Package MD5 checksum did not match" if="BinaryMD5Invalid" /> + <echo>rc is ${rc}</echo> + <antcall target="gpg_check" /> </target> - <target name="checkasc" if="rc" > - <exec executable="gpg" failonerror="true"> - <arg value="--verify" /> - <arg value="${basedir}/${package.url.name}.${package.suffix}.asc" /> - <arg value="${basedir}/${package.url.name}.${package.suffix}" /> - </exec> + + <target name="gpg_check" if="rc"> + <exec executable="gpg" failonerror="true"> + <arg value="--verify" /> + <arg value="${basedir}/${src.package.url.name}.${package.suffix}.asc" /> + <arg value="${basedir}/${src.package.url.name}.${package.suffix}" /> + </exec> + <exec executable="gpg" failonerror="true"> + <arg value="--verify" /> + <arg value="${basedir}/${bin.package.url.name}.${package.suffix}.asc" /> + <arg value="${basedir}/${bin.package.url.name}.${package.suffix}" /> + </exec> </target> + <target name="uncompress" depends="pre-clean, untar-file, unzip-file" /> <target name="pre-clean" description="remove old uncompressed package" > - <delete dir="${basedir}/${package.url.name}" failonerror="false" /> - </target> - + <delete dir="${basedir}/${src.package.url.name}" failonerror="false" /> + <delete dir="${basedir}/${bin.package.url.name}" failonerror="false" /> + </target> + <target name="untar-file" unless="zip.package" description="Untars zipFile"> - <untar src="${basedir}/${package.url.name}.${package.suffix}" - dest="${basedir}" compression="gzip"/> + <untar src="${basedir}/${src.package.url.name}.${package.suffix}" + dest="${basedir}" compression="gzip"/> + <untar src="${basedir}/${bin.package.url.name}.${package.suffix}" + dest="${basedir}" compression="gzip"/> </target> <target name="unzip-file" if="zip.package" description="Unzips zipFile"> - <unzip src="${basedir}/${package.url.name}.${package.suffix}" - dest="${basedir}/${package.url.name}"/> + <unzip src="${basedir}/${src.package.url.name}.${package.suffix}" + dest="${basedir}/${src.package.url.name}"/> + <unzip src="${basedir}/${bin.package.url.name}.${package.suffix}" + dest="${basedir}/${bin.package.url.name}"/> </target> <target name="rat-check" > - <echo message="Checking files at ${basedir}/${package.url.name}, report is ${rat.report}"/> + <echo message="Checking files at ${basedir}/${src.package.url.name}, report is ${src.rat.report}"/> <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" - reportFile="${rat.report}"> - <fileset dir="${basedir}/${package.url.name}"> + reportFile="${src.rat.report}"> + <fileset dir="${basedir}/${src.package.url.name}"> <!-- Start of binary files --> <!-- exclude Flash Professional file used for integration with Flash Professional --> <exclude name="frameworks/projects/flash-integration/FLA/ContentHolder.fla"/> @@ -289,90 +340,835 @@ </fileset> </rat:report> <antcall target="display-text" > - <param name="file" value="${rat.report}" /> + <param name="file" value="${src.rat.report}" /> </antcall> <input message="Check that there are no unknown or unapproved licenses or archives. Is it ok?" validargs="y,n" defaultvalue="y" - addproperty="rat.license.ok"/> + addproperty="rat.src.license.ok"/> <echo>filtering out AL files to make it easier to see binary files</echo> - <copy file="${rat.report}" tofile="${rat.report}.bin.txt" /> - <replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/> - <antcall target="display-text" > - <param name="file" value="${rat.report}.bin.txt" /> + <copy file="${src.rat.report}" tofile="${src.rat.report}.bin.txt" /> + <replaceregexp file="${src.rat.report}.bin.txt" match="..AL.*" replace="__AL" byline="true"/> + <replaceregexp file="${src.rat.report}.bin.txt" flags="gs" match="__AL." replace="" byline="false"/> + <antcall target="display-text" > + <param name="file" value="${src.rat.report}.bin.txt" /> </antcall> <input - message="Check that there are no unexpected binaries. Is it ok?" - validargs="y,n" + message="Check that there are no unexpected binaries. Is it ok?" + validargs="y,n" + defaultvalue="n" + addproperty="rat.src.binaries.ok"/> + + <echo message="Checking files at ${basedir}/${bin.package.url.name}, report is ${bin.rat.report}"/> + + <antcall target="binary-rat" /> + <antcall target="display-text" > + <param name="file" value="${bin.rat.report}" /> + </antcall> + <input + message="Check that there are no unknown or unapproved licenses or archives. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="rat.bin.license.ok"/> + <echo>filtering out AL files to make it easier to see binary files</echo> + <copy file="${bin.rat.report}" tofile="${bin.rat.report}.bin.txt" /> + <replaceregexp file="${bin.rat.report}.bin.txt" match="..AL.*" replace="__AL" byline="true"/> + <replaceregexp file="${bin.rat.report}.bin.txt" flags="gs" match="__AL." replace="" byline="false"/> + <antcall target="display-text" > + <param name="file" value="${bin.rat.report}.bin.txt" /> + </antcall> + <input + message="Check that there are no unexpected binaries. Is it ok?" + validargs="y,n" defaultvalue="n" - addproperty="rat.binaries.ok"/> + addproperty="rat.bin.binaries.ok"/> + </target> + + <target name="binary-rat" > + <echo>${jars-list}</echo> + <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" + reportFile="${bin.rat.report}"> + <fileset dir="${basedir}/${bin.package.url.name}"> + <!-- Start of binary files --> + <!-- exclude Flash Professional file used for integration with Flash Professional --> + <exclude name="frameworks/projects/flash-integration/FLA/ContentHolder.fla"/> + <!-- exclude font embedded in asdoc example --> + <exclude name="frameworks/projects/framework/asdoc/en_US/mx/effects/examples/assets/OpenSans-Regular.ttf"/> + <!-- exclude media (png, gif, jpg, mp3, flv) --> + <exclude name="**/*.png"/> + <exclude name="**/*.gif"/> + <exclude name="**/*.jpg"/> + <exclude name="**/*.mp3"/> + <exclude name="**/*.flv"/> + <!-- exclude batik icon --> + <exclude name="modules/thirdparty/batik/sources/*.icns"/> + <!-- End of binary files --> + <!-- exclude batik manifests --> + <exclude name="modules/thirdparty/batik/sources/*.mf"/> + <!-- exclude text files --> + <exclude name="CONTRIBUTING"/> + <exclude name="CONTRIBUTORS"/> + <exclude name="LICENSE.bin"/> + <exclude name="NOTICE.bin"/> + <exclude name="NOTICE.asc"/> + <exclude name="NOTICE.base"/> + <exclude name="modules/thirdparty/batik/lib/**/LICENSE*.txt"/> + <exclude name="modules/thirdparty/batik/lib/**/README*.txt"/> + <exclude name="frameworks/projects/flatspark/src/flatspark/assets/fonts/**/OFL.txt"/> + <!-- exclude w3c sources --> + <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.mod"/> + <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.dtd"/> + <exclude name="modules/thirdparty/batik/sources/org/w3c/css/sac/LexicalUnit.java"/> + <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/*.java"/> + <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/helpers/ParserFactory.java"/> + <!-- exclude config files --> + <exclude name="modules/thirdparty/batik/svn-revision"/> + <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/javax.xml.parsers.SAXParserFactory"/> + <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration"/> + <exclude name="modules/thirdparty/xerces-patch/src/java/org/apache/xerces/jaxp/javax.xml.parsers.SAXParserFactory"/> + <exclude name="frameworks/libs/advancedgrids.swc"/> + <exclude name="frameworks/libs/air/airframework.swc"/> + <exclude name="frameworks/libs/air/airspark.swc"/> + <exclude name="frameworks/libs/apache.swc"/> + <exclude name="frameworks/libs/authoringsupport.swc"/> + <exclude name="frameworks/libs/automation/automation.swc"/> + <exclude name="frameworks/libs/automation/automation_agent.swc"/> + <exclude name="frameworks/libs/automation/automation_air.swc"/> + <exclude name="frameworks/libs/automation/automation_airspark.swc"/> + <exclude name="frameworks/libs/automation/automation_dmv.swc"/> + <exclude name="frameworks/libs/automation/automation_flashflexkit.swc"/> + <exclude name="frameworks/libs/automation/automation_spark.swc"/> + <exclude name="frameworks/libs/automation/tool.swc"/> + <exclude name="frameworks/libs/automation/tool_air.swc"/> + <exclude name="frameworks/libs/charts.swc"/> + <exclude name="frameworks/libs/core.swc"/> + <exclude name="frameworks/libs/experimental.swc"/> + <exclude name="frameworks/libs/experimental_mobile.swc"/> + <exclude name="frameworks/libs/flash-integration.swc"/> + <exclude name="frameworks/libs/flatspark.swc"/> + <exclude name="frameworks/libs/framework.swc"/> + <exclude name="frameworks/libs/mobile/mobilecomponents.swc"/> + <exclude name="frameworks/libs/mx/mx.swc"/> + <exclude name="frameworks/libs/rpc.swc"/> + <exclude name="frameworks/libs/spark.swc"/> + <exclude name="frameworks/libs/spark_dmv.swc"/> + <exclude name="frameworks/libs/sparkskins.swc"/> + <exclude name="frameworks/libs/textLayout.swc"/> + <exclude name="frameworks/locale/da_DK/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/da_DK/airframework_rb.swc"/> + <exclude name="frameworks/locale/da_DK/airspark_rb.swc"/> + <exclude name="frameworks/locale/da_DK/apache_rb.swc"/> + <exclude name="frameworks/locale/da_DK/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/da_DK/automation_rb.swc"/> + <exclude name="frameworks/locale/da_DK/charts_rb.swc"/> + <exclude name="frameworks/locale/da_DK/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/da_DK/experimental_rb.swc"/> + <exclude name="frameworks/locale/da_DK/framework_rb.swc"/> + <exclude name="frameworks/locale/da_DK/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/da_DK/mx_rb.swc"/> + <exclude name="frameworks/locale/da_DK/rpc_rb.swc"/> + <exclude name="frameworks/locale/da_DK/spark_rb.swc"/> + <exclude name="frameworks/locale/da_DK/textLayout_rb.swc"/> + <exclude name="frameworks/locale/da_DK/tool_air_rb.swc"/> + <exclude name="frameworks/locale/de_CH/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/de_CH/airframework_rb.swc"/> + <exclude name="frameworks/locale/de_CH/apache_rb.swc"/> + <exclude name="frameworks/locale/de_CH/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/de_CH/automation_rb.swc"/> + <exclude name="frameworks/locale/de_CH/charts_rb.swc"/> + <exclude name="frameworks/locale/de_CH/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/de_CH/experimental_rb.swc"/> + <exclude name="frameworks/locale/de_CH/framework_rb.swc"/> + <exclude name="frameworks/locale/de_CH/mx_rb.swc"/> + <exclude name="frameworks/locale/de_CH/rpc_rb.swc"/> + <exclude name="frameworks/locale/de_CH/spark_rb.swc"/> + <exclude name="frameworks/locale/de_CH/tool_air_rb.swc"/> + <exclude name="frameworks/locale/de_DE/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/de_DE/airframework_rb.swc"/> + <exclude name="frameworks/locale/de_DE/airspark_rb.swc"/> + <exclude name="frameworks/locale/de_DE/apache_rb.swc"/> + <exclude name="frameworks/locale/de_DE/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/de_DE/automation_rb.swc"/> + <exclude name="frameworks/locale/de_DE/charts_rb.swc"/> + <exclude name="frameworks/locale/de_DE/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/de_DE/experimental_rb.swc"/> + <exclude name="frameworks/locale/de_DE/flash-integration_rb.swc"/> + <exclude name="frameworks/locale/de_DE/framework_rb.swc"/> + <exclude name="frameworks/locale/de_DE/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/de_DE/mx_rb.swc"/> + <exclude name="frameworks/locale/de_DE/playerglobal_rb.swc"/> + <exclude name="frameworks/locale/de_DE/rpc_rb.swc"/> + <exclude name="frameworks/locale/de_DE/spark_rb.swc"/> + <exclude name="frameworks/locale/de_DE/textLayout_rb.swc"/> + <exclude name="frameworks/locale/de_DE/tool_air_rb.swc"/> + <exclude name="frameworks/locale/el_GR/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/el_GR/airframework_rb.swc"/> + <exclude name="frameworks/locale/el_GR/airspark_rb.swc"/> + <exclude name="frameworks/locale/el_GR/apache_rb.swc"/> + <exclude name="frameworks/locale/el_GR/automation_rb.swc"/> + <exclude name="frameworks/locale/el_GR/charts_rb.swc"/> + <exclude name="frameworks/locale/el_GR/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/el_GR/experimental_rb.swc"/> + <exclude name="frameworks/locale/el_GR/framework_rb.swc"/> + <exclude name="frameworks/locale/el_GR/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/el_GR/mx_rb.swc"/> + <exclude name="frameworks/locale/el_GR/rpc_rb.swc"/> + <exclude name="frameworks/locale/el_GR/spark_rb.swc"/> + <exclude name="frameworks/locale/el_GR/textLayout_rb.swc"/> + <exclude name="frameworks/locale/en_AU/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/en_AU/airframework_rb.swc"/> + <exclude name="frameworks/locale/en_AU/airspark_rb.swc"/> + <exclude name="frameworks/locale/en_AU/apache_rb.swc"/> + <exclude name="frameworks/locale/en_AU/automation_rb.swc"/> + <exclude name="frameworks/locale/en_AU/charts_rb.swc"/> + <exclude name="frameworks/locale/en_AU/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/en_AU/experimental_rb.swc"/> + <exclude name="frameworks/locale/en_AU/framework_rb.swc"/> + <exclude name="frameworks/locale/en_AU/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/en_AU/mx_rb.swc"/> + <exclude name="frameworks/locale/en_AU/rpc_rb.swc"/> + <exclude name="frameworks/locale/en_AU/spark_rb.swc"/> + <exclude name="frameworks/locale/en_AU/textLayout_rb.swc"/> + <exclude name="frameworks/locale/en_CA/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/en_CA/airframework_rb.swc"/> + <exclude name="frameworks/locale/en_CA/airspark_rb.swc"/> + <exclude name="frameworks/locale/en_CA/apache_rb.swc"/> + <exclude name="frameworks/locale/en_CA/automation_rb.swc"/> + <exclude name="frameworks/locale/en_CA/charts_rb.swc"/> + <exclude name="frameworks/locale/en_CA/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/en_CA/experimental_rb.swc"/> + <exclude name="frameworks/locale/en_CA/framework_rb.swc"/> + <exclude name="frameworks/locale/en_CA/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/en_CA/mx_rb.swc"/> + <exclude name="frameworks/locale/en_CA/rpc_rb.swc"/> + <exclude name="frameworks/locale/en_CA/spark_rb.swc"/> + <exclude name="frameworks/locale/en_CA/textLayout_rb.swc"/> + <exclude name="frameworks/locale/en_GB/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/en_GB/airframework_rb.swc"/> + <exclude name="frameworks/locale/en_GB/airspark_rb.swc"/> + <exclude name="frameworks/locale/en_GB/apache_rb.swc"/> + <exclude name="frameworks/locale/en_GB/automation_rb.swc"/> + <exclude name="frameworks/locale/en_GB/charts_rb.swc"/> + <exclude name="frameworks/locale/en_GB/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/en_GB/experimental_rb.swc"/> + <exclude name="frameworks/locale/en_GB/framework_rb.swc"/> + <exclude name="frameworks/locale/en_GB/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/en_GB/mx_rb.swc"/> + <exclude name="frameworks/locale/en_GB/rpc_rb.swc"/> + <exclude name="frameworks/locale/en_GB/spark_rb.swc"/> + <exclude name="frameworks/locale/en_GB/textLayout_rb.swc"/> + <exclude name="frameworks/locale/en_US/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/en_US/airframework_rb.swc"/> + <exclude name="frameworks/locale/en_US/airspark_rb.swc"/> + <exclude name="frameworks/locale/en_US/apache_rb.swc"/> + <exclude name="frameworks/locale/en_US/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/en_US/automation_rb.swc"/> + <exclude name="frameworks/locale/en_US/charts_rb.swc"/> + <exclude name="frameworks/locale/en_US/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/en_US/experimental_rb.swc"/> + <exclude name="frameworks/locale/en_US/flash-integration_rb.swc"/> + <exclude name="frameworks/locale/en_US/framework_rb.swc"/> + <exclude name="frameworks/locale/en_US/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/en_US/mx_rb.swc"/> + <exclude name="frameworks/locale/en_US/playerglobal_rb.swc"/> + <exclude name="frameworks/locale/en_US/rpc_rb.swc"/> + <exclude name="frameworks/locale/en_US/spark_rb.swc"/> + <exclude name="frameworks/locale/en_US/textLayout_rb.swc"/> + <exclude name="frameworks/locale/en_US/tool_air_rb.swc"/> + <exclude name="frameworks/locale/es_ES/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/es_ES/airframework_rb.swc"/> + <exclude name="frameworks/locale/es_ES/airspark_rb.swc"/> + <exclude name="frameworks/locale/es_ES/apache_rb.swc"/> + <exclude name="frameworks/locale/es_ES/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/es_ES/automation_rb.swc"/> + <exclude name="frameworks/locale/es_ES/charts_rb.swc"/> + <exclude name="frameworks/locale/es_ES/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/es_ES/experimental_rb.swc"/> + <exclude name="frameworks/locale/es_ES/framework_rb.swc"/> + <exclude name="frameworks/locale/es_ES/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/es_ES/mx_rb.swc"/> + <exclude name="frameworks/locale/es_ES/rpc_rb.swc"/> + <exclude name="frameworks/locale/es_ES/spark_rb.swc"/> + <exclude name="frameworks/locale/es_ES/textLayout_rb.swc"/> + <exclude name="frameworks/locale/es_ES/tool_air_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/airframework_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/airspark_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/apache_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/automation_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/charts_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/experimental_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/framework_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/mx_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/rpc_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/spark_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/textLayout_rb.swc"/> + <exclude name="frameworks/locale/fi_FI/tool_air_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/airframework_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/airspark_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/apache_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/automation_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/charts_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/experimental_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/framework_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/mx_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/rpc_rb.swc"/> + <exclude name="frameworks/locale/fr_CH/spark_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/airframework_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/airspark_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/apache_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/automation_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/charts_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/experimental_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/flash-integration_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/framework_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/mx_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/playerglobal_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/rpc_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/spark_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/textLayout_rb.swc"/> + <exclude name="frameworks/locale/fr_FR/tool_air_rb.swc"/> + <exclude name="frameworks/locale/it_IT/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/it_IT/airframework_rb.swc"/> + <exclude name="frameworks/locale/it_IT/airspark_rb.swc"/> + <exclude name="frameworks/locale/it_IT/apache_rb.swc"/> + <exclude name="frameworks/locale/it_IT/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/it_IT/automation_rb.swc"/> + <exclude name="frameworks/locale/it_IT/charts_rb.swc"/> + <exclude name="frameworks/locale/it_IT/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/it_IT/experimental_rb.swc"/> + <exclude name="frameworks/locale/it_IT/framework_rb.swc"/> + <exclude name="frameworks/locale/it_IT/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/it_IT/mx_rb.swc"/> + <exclude name="frameworks/locale/it_IT/rpc_rb.swc"/> + <exclude name="frameworks/locale/it_IT/spark_rb.swc"/> + <exclude name="frameworks/locale/it_IT/textLayout_rb.swc"/> + <exclude name="frameworks/locale/it_IT/tool_air_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/airframework_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/airspark_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/apache_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/automation_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/charts_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/experimental_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/flash-integration_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/framework_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/mx_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/playerglobal_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/rpc_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/spark_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/textLayout_rb.swc"/> + <exclude name="frameworks/locale/ja_JP/tool_air_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/airframework_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/airspark_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/apache_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/automation_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/charts_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/experimental_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/framework_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/mx_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/rpc_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/spark_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/textLayout_rb.swc"/> + <exclude name="frameworks/locale/ko_KR/tool_air_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/airframework_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/airspark_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/apache_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/automation_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/charts_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/experimental_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/framework_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/mx_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/rpc_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/spark_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/textLayout_rb.swc"/> + <exclude name="frameworks/locale/nb_NO/tool_air_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/airframework_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/airspark_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/apache_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/automation_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/charts_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/experimental_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/framework_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/mx_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/rpc_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/spark_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/textLayout_rb.swc"/> + <exclude name="frameworks/locale/nl_NL/tool_air_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/airframework_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/airspark_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/apache_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/automation_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/charts_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/experimental_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/framework_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/mx_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/rpc_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/spark_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/textLayout_rb.swc"/> + <exclude name="frameworks/locale/pt_BR/tool_air_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/airframework_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/airspark_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/apache_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/automation_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/charts_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/experimental_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/framework_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/mx_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/rpc_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/spark_rb.swc"/> + <exclude name="frameworks/locale/pt_PT/textLayout_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/airframework_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/airspark_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/apache_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/automation_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/charts_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/experimental_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/flash-integration_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/framework_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/mx_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/playerglobal_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/rpc_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/spark_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/textLayout_rb.swc"/> + <exclude name="frameworks/locale/ru_RU/tool_air_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/airframework_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/airspark_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/apache_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/automation_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/charts_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/experimental_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/framework_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/mx_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/rpc_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/spark_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/textLayout_rb.swc"/> + <exclude name="frameworks/locale/sv_SE/tool_air_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/airframework_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/airspark_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/apache_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/automation_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/charts_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/experimental_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/flash-integration_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/framework_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/mx_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/playerglobal_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/rpc_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/spark_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/textLayout_rb.swc"/> + <exclude name="frameworks/locale/zh_CN/tool_air_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/advancedgrids_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/airframework_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/airspark_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/apache_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/automation_agent_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/automation_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/charts_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/experimental_mobile_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/experimental_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/framework_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/mobilecomponents_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/mx_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/rpc_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/spark_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/textLayout_rb.swc"/> + <exclude name="frameworks/locale/zh_TW/tool_air_rb.swc"/> + <exclude name="frameworks/projects/flash-integration/libs/flash-integration.swc"/> + <exclude name="frameworks/themes/Halo/halo.swc"/> + <exclude name="frameworks/themes/Mobile/mobile.swc"/> + <exclude name="frameworks/themes/Wireframe/wireframe.swc"/> + <exclude name="samples/themes/arcade/arcade.swc"/> + <exclude name="samples/themes/cobalt/cobalt.swc"/> + <exclude name="samples/themes/graphite/graphite.swc"/> + <exclude name="frameworks/localFonts.ser"/> + <exclude name="frameworks/macFonts.ser"/> + <exclude name="frameworks/projects/advancedgrids/bundles.properties"/> + <exclude name="frameworks/projects/airframework/bundles.properties"/> + <exclude name="frameworks/projects/airspark/bundles.properties"/> + <exclude name="frameworks/projects/apache/bundles.properties"/> + <exclude name="frameworks/projects/authoringsupport/bundles.properties"/> + <exclude name="frameworks/projects/automation/bundles.properties"/> + <exclude name="frameworks/projects/automation_agent/bundles.properties"/> + <exclude name="frameworks/projects/automation_air/bundles.properties"/> + <exclude name="frameworks/projects/automation_airspark/bundles.properties"/> + <exclude name="frameworks/projects/charts/bundles.properties"/> + <exclude name="frameworks/projects/core/bundles.properties"/> + <exclude name="frameworks/projects/experimental/bundles.properties"/> + <exclude name="frameworks/projects/experimental_mobile/bundles.properties"/> + <exclude name="frameworks/projects/flash-integration/bundles.properties"/> + <exclude name="frameworks/projects/flatspark/bundles.properties"/> + <exclude name="frameworks/projects/framework/bundles.properties"/> + <exclude name="frameworks/projects/halo/bundles.properties"/> + <exclude name="frameworks/projects/mobilecomponents/bundles.properties"/> + <exclude name="frameworks/projects/mobiletheme/bundles.properties"/> + <exclude name="frameworks/projects/mx/bundles.properties"/> + <exclude name="frameworks/projects/rpc/bundles.properties"/> + <exclude name="frameworks/projects/spark/bundles.properties"/> + <exclude name="frameworks/projects/spark_dmv/bundles.properties"/> + <exclude name="frameworks/projects/sparkskins/bundles.properties"/> + <exclude name="frameworks/projects/tool/bundles.properties"/> + <exclude name="frameworks/projects/tool_air/bundles.properties"/> + <exclude name="frameworks/projects/wireframe/bundles.properties"/> + <exclude name="frameworks/winFonts.ser"/> + <!-- external jars. If you add an external jar, also add it to the external-jar-folder-dump target --> + <exclude name="lib/external/commons-collections.jar"/> + <exclude name="lib/external/commons-discovery.jar"/> + <exclude name="lib/external/commons-logging.jar"/> + <exclude name="lib/external/javacc.jar"/> + <exclude name="lib/external/saxon9.jar"/> + <exclude name="lib/external/xalan.jar"/> + <exclude name="lib/external/xercesImpl.jar"/> + <exclude name="lib/external/xercesPatch.jar"/> + <exclude name="lib/external/xml-apis-ext.jar"/> + <exclude name="lib/external/xml-apis.jar"/> + <!-- end list of external jars. Next is their collateral files --> + <exclude name="lib/external/README.xml-apis-ext.txt"/> + <exclude name="lib/external/commons-collections-LICENSE.txt"/> + <exclude name="lib/external/commons-discovery-LICENSE"/> + <exclude name="lib/external/commons-logging-NOTICE.txt"/> + <exclude name="lib/external/saxon9-NOTICES/APACHE-ANT.txt"/> + <exclude name="lib/external/saxon9-NOTICES/APACHE-RESOLVER.txt"/> + <exclude name="lib/external/saxon9-NOTICES/APACHE-XERCES.txt"/> + <exclude name="lib/external/saxon9-NOTICES/FRIJTERS.txt"/> + <exclude name="lib/external/saxon9-NOTICES/GPL+CLASSPATH.txt"/> + <exclude name="lib/external/saxon9-NOTICES/JAMESCLARK.txt"/> + <exclude name="lib/external/saxon9-NOTICES/LEGAL.txt"/> + <exclude name="lib/external/saxon9-NOTICES/THAI.txt"/> + <exclude name="lib/external/xalan-LICENSES/BCEL.README.txt"/> + <exclude name="lib/external/xalan-LICENSES/java_cup.README.txt"/> + <exclude name="lib/external/xalan-LICENSES/regexp.README.txt"/> + <exclude name="lib/external/xalan-LICENSES/runtime.README.txt"/> + <exclude name="lib/external/xalan-NOTICE"/> + <exclude name="lib/external/xerces-LICENSE/LICENSE-SAX.html"/> + <exclude name="lib/external/xerces-NOTICES/NOTICE.resolver.txt"/> + <exclude name="lib/external/xerces-NOTICES/NOTICE.serializer.txt"/> + <exclude name="lib/external/xml-apis-LICENSES/LICENSE.sax.txt"/> + <exclude name="lib/external/xml-apis-LICENSES/README.dom.txt"/> + <exclude name="lib/external/xml-apis-LICENSES/README.sax.txt"/> + <exclude name="lib/external/xml-apis-ext-LICENSES/LICENSE.sac.html"/> + <exclude name="lib/external/xml-apis-ext-LICENSES/README.dom.txt"/> + <!-- this list is generated from a list at the top of this file --> + <excludesfile name="${basedir}/jarexcludes.txt" /> + </fileset> + </rat:report> + </target> + + <target name="external-jar-folder-dump" > + <echo>list of folders in external jars. This may impact LICENSE and NOTICE</echo> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/commons-collections.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/commons-discovery.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/commons-logging.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/javacc.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/saxon9.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/xalan.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/xercesImpl.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/xercesPatch.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/xml-apis-ext.jar" /> + </antcall> + <antcall target="show-jar-folders" > + <param name="thisFile" value="lib/external/xml-apis.jar" /> + </antcall> + <echo>end of list of folders in external jars. This may impact LICENSE and NOTICE</echo> + </target> + + <!-- someday figure out how to use + find . -name "*.jar" -exec tar ft {} \; | sort -u > paths.txt --> + + <!-- how to do tar and sort on Windows? --> + <target name="examine-jars" if="isMac"> + <!-- comma delimited list, no spaces, not one file per line --> + <copy file="jars.txt" tofile="loop.txt" /> + <ant antfile="ApproveSDK.xml" target="loopOnce" inheritAll="false" /> + </target> + <target name="loopOnce" > + <!-- make a copy of the list so we can munge it to + get the first item in the list --> + <delete file="loop1.txt" /> + <copy file="loop.txt" tofile="loop1.txt" /> + <loadfile srcFile="loop.txt" property="checkiflast" /> + <condition property="islast" value="true"> + <not> + <contains string="${checkiflast}" substring="," /> + </not> + </condition> + <antcall target="notlast" /> + <antcall target="lastone" /> + </target> + <target name="notlast" unless="islast"> + <loadfile srcFile="loop1.txt" property="echoFile" /> + <replaceregexp file="loop1.txt" match="^(.*),(.*)" replace="\2" /> + <loadfile srcFile="loop1.txt" property="thisFile" /> + <antcall target="jar-check" /> + <replaceregexp file="loop.txt" match="^(.*),(.*)" replace="\1" /> + <ant antfile="ApproveSDK.xml" target="loopOnce" inheritAll="false"/> + </target> + <target name="lastone" if="islast"> + <loadfile srcFile="loop1.txt" property="thisFile" /> + <antcall target="jar-check" /> + <delete file="loop.txt" /> + <delete file="loop1.txt" /> + </target> + + <target name="show-jar-folders"> + <delete dir="${basedir}/jar" failonerror="false" /> + <mkdir dir="${basedir}/jar" /> + <unjar src="${basedir}/${bin.package.url.name}/${thisFile}" dest="${basedir}/jar" /> + <exec executable="tar" output="${basedir}/jarclasses.txt"> + <arg value="tf" /> + <arg value="${basedir}/${bin.package.url.name}/${thisFile}" /> + </exec> + <replaceregexp file="${basedir}/jarclasses.txt" match="(.*)/(.*)" replace="\1" flags="m" byline="true"/> + <exec executable="sort" output="${basedir}/jarpaths.txt"> + <arg value="-u" /> + <arg value="${basedir}/jarclasses.txt" /> + </exec> + <antcall target="display-text" > + <param name="file" value="${basedir}/jarpaths.txt" /> + </antcall> + </target> + + <target name="jar-check" > + <antcall target="show-jar-folders" /> + <input + message="Above is the list of folders in this ${thisFile}.
Folder names can sometimes indicate presence of third-party content that needs to be in LICENSE and/or NOTICE files.
Press the Enter key to see the LICENSE for this jar."/> + <fail message="LICENSE not in ${basedir}/${bin.package.url.name}/${thisFile}"> + <condition> + <not> + <available file="${basedir}/jar/META-INF/LICENSE" /> + </not> + </condition> + </fail> + <fail message="NOTICE not in ${basedir}/${bin.package.url.name}/${thisFile}"> + <condition> + <not> + <available file="${basedir}/jar/META-INF/NOTICE" /> + </not> + </condition> + </fail> + <antcall target="display-text" > + <param name="file" value="${basedir}/jar/META-INF/LICENSE" /> + </antcall> + <input + message="Check the LICENSE for the Apache License and third-party licenses. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="jar.license.ok"/> + <fail message="LICENSE for ${basedir}/${bin.package.url.name}/${thisFile} not correct"> + <condition> + <not> + <equals arg1="${jar.license.ok}" arg2="y" /> + </not> + </condition> + </fail> + <antcall target="display-text" > + <param name="file" value="${basedir}/jar/META-INF/NOTICE" /> + </antcall> + <input + message="Check the NOTICE for required notices from third-parties. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="jar.notice.ok"/> + <fail message="NOTICE for ${basedir}/${bin.package.url.name}/${thisFile} not correct"> + <condition> + <not> + <equals arg1="${jar.notice.ok}" arg2="y" /> + </not> + </condition> + </fail> + </target> <target name="check-notices" description="open each notice file for review, grep for a few things" > - <fail message="README not in package"> - <condition> - <not> - <available file="${basedir}/${package.url.name}/README" /> - </not> - </condition> + <fail message="README not in source package"> + <condition> + <not> + <available file="${basedir}/${src.package.url.name}/README" /> + </not> + </condition> </fail> - <fail message="RELEASE_NOTES not in package"> - <condition> - <not> - <available file="${basedir}/${package.url.name}/RELEASE_NOTES" /> - </not> - </condition> + <fail message="RELEASE_NOTES not in source package"> + <condition> + <not> + <available file="${basedir}/${src.package.url.name}/RELEASE_NOTES" /> + </not> + </condition> </fail> - <fail message="NOTICE not in package"> - <condition> - <not> - <available file="${basedir}/${package.url.name}/NOTICE" /> - </not> - </condition> + <fail message="NOTICE not in source package"> + <condition> + <not> + <available file="${basedir}/${src.package.url.name}/NOTICE" /> + </not> + </condition> </fail> - <fail message="LICENSE not in package"> - <condition> - <not> - <available file="${basedir}/${package.url.name}/LICENSE" /> - </not> - </condition> + <fail message="LICENSE not in source package"> + <condition> + <not> + <available file="${basedir}/${src.package.url.name}/LICENSE" /> + </not> + </condition> </fail> - <antcall target="display-text" > - <param name="file" value="${basedir}/${package.url.name}/README" /> + <fail message="README not in binary package"> + <condition> + <not> + <available file="${basedir}/${bin.package.url.name}/README" /> + </not> + </condition> + </fail> + <fail message="RELEASE_NOTES not in binary package"> + <condition> + <not> + <available file="${basedir}/${bin.package.url.name}/RELEASE_NOTES" /> + </not> + </condition> + </fail> + <fail message="NOTICE not in binary package"> + <condition> + <not> + <available file="${basedir}/${bin.package.url.name}/NOTICE" /> + </not> + </condition> + </fail> + <fail message="LICENSE not in binary package"> + <condition> + <not> + <available file="${basedir}/${bin.package.url.name}/LICENSE" /> + </not> + </condition> + </fail> + <checksum file="${basedir}/${src.package.url.name}/RELEASE_NOTES" property="src.rnmd5" /> + <checksum file="${basedir}/${bin.package.url.name}/RELEASE_NOTES" property="bin.rnmd5" /> + <fail message="RELEASE_NOTES in binary package does not match source package"> + <condition> + <not> + <equals arg1="${src.rnmd5}" arg2="${bin.rnmd5}" /> + </not> + </condition> + </fail> + <checksum file="${basedir}/${src.package.url.name}/README" property="src.rmd5" /> + <checksum file="${basedir}/${bin.package.url.name}/README" property="bin.rmd5" /> + <fail message="README in binary package does not match source package"> + <condition> + <not> + <equals arg1="${src.rmd5}" arg2="${bin.rmd5}" /> + </not> + </condition> + </fail> + <antcall target="display-text" > + <param name="file" value="${basedir}/${src.package.url.name}/README" /> </antcall> - <input - message="Check the README for version numbers, spelling, grammar, accuracy. Is it ok?" - validargs="y,n" + <input + message="Check the README for version numbers, spelling, grammar, accuracy. Is it ok?" + validargs="y,n" defaultvalue="y" addproperty="readme.ok"/> - <antcall target="display-text" > - <param name="file" value="${basedir}/${package.url.name}/RELEASE_NOTES" /> + + <antcall target="display-text" > + <param name="file" value="${basedir}/${src.package.url.name}/RELEASE_NOTES" /> </antcall> - <input - message="Check the RELEASE_NOTES for copyright years, spelling, grammar, accuracy. Is it ok?" - validargs="y,n" + <input + message="Check the RELEASE_NOTES for copyright years, spelling, grammar, accuracy. Is it ok?" + validargs="y,n" defaultvalue="y" addproperty="releasenotes.ok"/> - - <antcall target="display-text" > - <param name="file" value="${basedir}/${package.url.name}/NOTICE" /> + <antcall target="display-text" > + <param name="file" value="${basedir}/${src.package.url.name}/NOTICE" /> </antcall> - <input - message="Check the NOTICE for required notices from third-parties. Is it ok?" - validargs="y,n" + <input + message="Check the source package NOTICE for required notices from third-parties. Is it ok?" + validargs="y,n" defaultvalue="y" - addproperty="notice.ok"/> - - <antcall target="display-text" > - <param name="file" value="${basedir}/${package.url.name}/LICENSE" /> + addproperty="src.notice.ok"/> + + <antcall target="display-text" > + <param name="file" value="${basedir}/${src.package.url.name}/LICENSE" /> </antcall> - <input - message="Check the LICENSE for the Apache License and third-party licenses. Is it ok?" - validargs="y,n" + <input + message="Check the source package LICENSE for the Apache License and third-party licenses. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="src.license.ok"/> + + <antcall target="display-text" > + <param name="file" value="${basedir}/${bin.package.url.name}/NOTICE" /> + </antcall> + <input + message="Check the binary package NOTICE for required notices from third-parties. Is it ok?" + validargs="y,n" defaultvalue="y" - addproperty="license.ok"/> + addproperty="bin.notice.ok"/> + + <antcall target="display-text" > + <param name="file" value="${basedir}/${bin.package.url.name}/LICENSE" /> + </antcall> + <input + message="Check the binary package LICENSE for the Apache License and third-party licenses. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="bin.license.ok"/> </target> <target name="build" depends="copy.downloads"> @@ -380,16 +1176,16 @@ message="The final step is to run the build and any tests the build script runs. This can take several minutes. Press y to start the build." validargs="y" defaultvalue="y" /> - <chmod file="${basedir}/${package.url.name}/bin/compc" perm="ugo+rx"/> - <chmod file="${basedir}/${package.url.name}/bin/mxmlc" perm="ugo+rx"/> + <chmod file="${basedir}/${src.package.url.name}/bin/compc" perm="ugo+rx"/> + <chmod file="${basedir}/${src.package.url.name}/bin/mxmlc" perm="ugo+rx"/> <property name="build.noprompt" value="true" /> - <ant dir="${basedir}/${package.url.name}" target="main" /> - <ant dir="${basedir}/${package.url.name}" target="checkintests" /> + <ant dir="${basedir}/${src.package.url.name}" target="main" /> + <ant dir="${basedir}/${src.package.url.name}" target="checkintests" /> </target> <target name="copy.downloads" if="${do.copy.downloads}" description="instead of actually downloading all of the dependencies, you can save lots of time by just copying from some other folder in some other SDK."> <echo>Copying downloads</echo> - <copy todir="${basedir}/${package.url.name}/in" > + <copy todir="${basedir}/${src.package.url.name}/in" > <fileset dir="${download.cache.dir}" /> </copy> </target> @@ -397,28 +1193,43 @@ <target name="approve" > <condition property="vote" value="+1"> <and> - <equals arg1="${rat.license.ok}" arg2="y" /> - <equals arg1="${rat.binaries.ok}" arg2="y" /> - <equals arg1="${readme.ok}" arg2="y" /> - <equals arg1="${releasenotes.ok}" arg2="y" /> - <equals arg1="${notice.ok}" arg2="y" /> - <equals arg1="${license.ok}" arg2="y" /> + <equals arg1="${rat.src.license.ok}" arg2="y" /> + <equals arg1="${rat.src.binaries.ok}" arg2="y" /> + <equals arg1="${rat.bin.license.ok}" arg2="y" /> + <equals arg1="${rat.bin.binaries.ok}" arg2="y" /> + <equals arg1="${readme.ok}" arg2="y" /> + <equals arg1="${releasenotes.ok}" arg2="y" /> + <equals arg1="${src.notice.ok}" arg2="y" /> + <equals arg1="${bin.notice.ok}" arg2="y" /> + <equals arg1="${readmejx.ok}" arg2="y" /> + <equals arg1="${releasenotesjx.ok}" arg2="y" /> + <equals arg1="${src.license.ok}" arg2="y" /> + <equals arg1="${bin.license.ok}" arg2="y" /> </and> </condition> <property name="vote" value="-1" /> <echo> ${vote} -Package ${package.url.path}/${package.url.name}.${package.suffix} +Package ${src.package.url.path}/${src.package.url.name}.${package.suffix} Java ${ant.java.version} OS: ${os.name} ${os.arch} ${os.version} Source kit signatures match: y Source kit builds: y README is ok: ${readme.ok} RELEASE_NOTES is ok: ${releasenotes.ok} -NOTICE is ok: ${notice.ok} -LICENSE is ok: ${license.ok} -No unapproved licenses or archives: ${rat.license.ok} -No unapproved binaries: ${rat.binaries.ok} +NOTICE is ok: ${src.notice.ok} +LICENSE is ok: ${src.license.ok} +No unapproved licenses or archives: ${rat.src.license.ok} +No unapproved binaries: ${rat.src.binaries.ok} + +Package ${bin.package.url.path}/${bin.package.url.name}.${package.suffix} +Binary kit signatures match: y +NOTICE is ok: ${bin.notice.ok} +LICENSE is ok: ${bin.license.ok} +No unapproved licenses or files in jars: y +No unapproved licenses or archives in binary package: ${rat.bin.license.ok} +No unapproved binaries in binary package: ${rat.bin.binaries.ok} + </echo> <fail> <condition>