You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
9.1 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!--
Copyright (c) 2004-2007 The Dojo Foundation, Licensed under the Academic
Free License version 2.1 or BSD licenses
-->
<project name="dojo" default="cldr" basedir=".">
<description>Build the Dojo toolkit</description>
<property name="project" value="dojo"/>
<property name="root" location="../../.."/>
<property name="dojoLoader" value="default"/>
<property name="ldml" location="ldml"/>
<property name="logDir" location="."/>
<property name="json" location="${root}/dojo/cldr/nls"/>
<!-- Arbitrary defaults. locales and currencies properties can be altered or eliminated to build the entire set -->
<!--property name="locales" value="ar,hi,he,hu,ru,en-au,en-ca,en-gb,en-us,de-de,es-es,fr-fr,it-it,pt-br,ko-kr,zh-hant,zh-tw,zh-hans,zh-cn,ja-jp"/-->
<property name="currencies" value="GBP,USD,CAD,AUD,EUR,CHF,HKD,JPY,CNY" />
<target name="-check-config"
description="checks to make sure than we're sane before doing anything else">
<available property="bsf_ok" file="${user.home}/.ant/lib/bsf.jar" />
<available property="ant_bsf_ok" file="${user.home}/.ant/lib/ant-apache-bsf.jar" />
<available property="js_ok" file="${user.home}/.ant/lib/js.jar" />
<available property="saxon9_ok" file="${user.home}/.ant/lib/saxon9.jar" />
<available property="resolver_ok" file="${user.home}/.ant/lib/resolver.jar" />
<available property="logger_ok" file="${user.home}/.ant/lib/commons-logging-1.1.1.jar" />
<condition property="config_ok">
<and>
<isset property="bsf_ok" />
<isset property="ant_bsf_ok" />
<isset property="js_ok" />
<isset property="saxon9_ok" />
<isset property="resolver_ok" />
<isset property="logger_ok" />
</and>
</condition>
</target>
<target name="-fix-config"
depends="-check-config"
unless="config_ok"
description="fixes our ant classpath (if possible)">
<copy todir="${user.home}/.ant/lib"
preservelastmodified="true">
<fileset dir="lib/">
<include name="bsf.jar"/>
<include name="ant-apache-bsf.jar"/>
<include name="saxon9.jar"/>
<include name="resolver.jar"/>
<include name="commons-logging-1.1.1.jar"/>
</fileset>
</copy>
<copy todir="${user.home}/.ant/lib"
preservelastmodified="true">
<fileset dir="../../shrinksafe">
<include name="js.jar"/>
</fileset>
</copy>
<echo message=""/>
<echo message="+--------------------------------------------------------+" />
<echo message="| Due to some horrendous design decisions by the authors |" />
<echo message="| of Ant, it has been necessary to install some jar |" />
<echo message="| files to your ~/.ant/ directory. Given the nature of |" />
<echo message="| the problem, it will be necessary for you to re-run |" />
<echo message="| your build command. |" />
<echo message="| |" />
<echo message="| The Dojo team apologies for this inconvenience. |" />
<echo message="| |" />
<echo message="| The system will now exit. |" />
<echo message="+--------------------------------------------------------+" />
<echo message=""/>
<fail message="Sorry, please re-run your build command, it should work now"/>
</target>
<target name="ldml" depends="-ldml-check" unless="ldmlUnpacked"
description="Unpack LDML (CLDR repository XML markup)">
<mkdir dir="${ldml}/core" />
<unzip src="${ldml}/core.zip" dest="${ldml}/core" />
</target>
<target name="-ldml-check">
<available property="ldmlUnpacked" file="${ldml}/core" type="dir" />
</target>
<target name="clean">
<delete dir="${ldml}/core" />
<delete dir="${json}" />
<mkdir dir="${json}" />
</target>
<target name="cldr" depends="-fix-config, ldml"
description="Transforms LDML from the CLDR into JSON">
<scriptdef name="removeEmptyOutput" language="javascript">
<attribute name="dir"/>
<![CDATA[
function isEmpty(o){
for(x in o){
return false;
}
return true;
}
var delTask = project.createTask("delete");
function deleteResource(f){
f.isDirectory() ? delTask.setDir(f) : delTask.setFile(f);
delTask.perform();
}
var fs = project.createDataType("fileset");
var dir = new java.io.File(attributes.get("dir"));
fs.setDir(dir);
fs.setIncludes("*.js");
ds = fs.getDirectoryScanner(project);
jsFiles = ds.getIncludedFiles();
var load = project.createTask("loadfile");
load.setEncoding("UTF8");
for (var i=0; i<jsFiles.length; i++) {
var srcFile = java.io.File(dir, jsFiles[i]);
load.setSrcFile(srcFile);
//FIXME: spawn task as separate ant process to avoid stale properties, collisions?
var uniqueId = "removeEmptyOutput.json."+dir+"."+i;
load.setProperty(uniqueId);
load.perform();
var contents = String(project.getProperty(uniqueId));
if(contents.charCodeAt(0) == 0xfeff){ contents = contents.substring(1); } // JDK bug workaround
try{
var value = eval(contents);
}catch(e){
java.lang.System.out.print("Syntax error in "+srcFile.getCanonicalPath());
throw e;
}
if(isEmpty(value)){
deleteResource(srcFile);
}
}
// delete the directory if empty
ds.scan();
if(!ds.getIncludedFilesCount()){
deleteResource(dir);
}
]]>
</scriptdef>
<macrodef name="processLdml">
<attribute name="in"/>
<attribute name="basedir"/>
<attribute name="destdir"/>
<sequential>
<mkdir dir="@{destdir}"/>
<transform in="@{in}" style="calendar.xsl" basedir="@{basedir}" destdir="@{destdir}"/>
<transform in="@{in}" style="number.xsl" basedir="@{basedir}" destdir="@{destdir}"/>
<transform in="@{in}" style="currency.xsl" basedir="@{basedir}" destdir="@{destdir}"/>
<echo level="info" message="Transformed @{in} to @{destDir}" taskName="cldr"/>
<removeEmptyOutput dir="@{destdir}" />
</sequential>
</macrodef>
<macrodef name="transform">
<attribute name="in"/>
<attribute name="style"/>
<attribute name="basedir"/>
<attribute name="destdir"/>
<sequential>
<xslt includes="@{in}" style="@{style}" destdir="@{destdir}" basedir="@{basedir}" extension=".tmp">
<factory name="net.sf.saxon.TransformerFactoryImpl" />
<xmlcatalog>
<catalogpath path="ldml/catalog" />
</xmlcatalog>
<param name="basedir" expression="@{basedir}/" />
<param name="currencyList" expression="${currencies}" />
</xslt>
<delete>
<fileset dir="@{destdir}" includes="*.tmp" />
</delete>
</sequential>
</macrodef>
<scriptdef name="transformCldr" language="javascript">
<attribute name="destdir"/>
<element name="fileset" type="fileset"/>
<![CDATA[
var fs = elements.get("fileset").get(0);
var basedir = fs.getDir(project);
var filter = project.getProperty("locales");
if(filter){
filter = String(filter).replace(/-/g,'_').split(",");
for(var i in filter){
filter[i] = filter[i].replace(/\s/g,'');
var variants = filter[i].split("_");
for(var j = 1; j <= variants.length - 1; j++){
var partial = variants.slice(0, j).join("_");
for(var k = 0; k < filter.length; k++){
if(filter[k]==partial){
partial=null; continue;
}
}
if(partial){filter.push(partial)};
}
}
filter.push("root");
var fs = project.createDataType("fileset");
fs.setDir(basedir);
fs.setCaseSensitive(false);
var orSelector = new Packages.org.apache.tools.ant.types.selectors.OrSelector();
for(i in filter){
var locale=filter[i];
var selector = new Packages.org.apache.tools.ant.types.selectors.FilenameSelector();
selector.setName(locale + ".xml");
selector.setCasesensitive(false);
orSelector.addFilename(selector);
}
fs.addOr(orSelector);
}
ds = fs.getDirectoryScanner(project);
srcFiles = ds.getIncludedFiles();
var destdir = attributes.get("destdir");
for (i=0; i<srcFiles.length; i++) {
var filename = srcFiles[i];
var locale = filename.substring(0, filename.indexOf(".")).replace("_","-").toLowerCase();
var outdir = new java.io.File(locale == "root" ? destdir : destdir+"/"+locale);
var ldml = project.createTask("processLdml");
ldml.setDynamicAttribute("in", new java.io.File(filename));
ldml.setDynamicAttribute("destdir", outdir);
ldml.setDynamicAttribute("basedir", basedir);
ldml.perform();
}
]]>
</scriptdef>
<transformCldr destdir="${json}">
<fileset dir="${ldml}/core/main" includes="**/*.xml" />
</transformCldr>
<java jar="../../shrinksafe/js.jar" failonerror="true" fork="true" logError="true" >
<arg value="arrayInherit.js" />
<arg value="${json}" />
<arg value="${logDir}"/>
<sysproperty key="DOJO_LOADER" value="${dojoLoader}" />
</java>
<java jar="../../shrinksafe/js.jar" failonerror="true" fork="true" logError="true" >
<arg value="specialLocale.js" />
<arg value="${json}" />
<arg value="${locales}" />
<arg value="${logDir}"/>
<sysproperty key="DOJO_LOADER" value="${dojoLoader}" />
</java>
<java jar="../../shrinksafe/js.jar" failonerror="true" fork="true" logError="true" >
<arg value="alias.js" />
<arg value="${json}" />
<arg value="${logDir}"/>
<sysproperty key="DOJO_LOADER" value="${dojoLoader}" />
</java>
</target>
</project>