You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
9.6 KiB
281 lines
9.6 KiB
<?xml version="1.0" encoding="iso-8859-1"?> |
|
|
|
<!-- |
|
Copyright (c) 2004-2016 The JS 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="al,ar,bs,ca,cs,da,de-de,el,en-au,en-ca,en-gb,en-us,es-es,fi,fr-ch,fr-fr,he-il,hr,hu,id,it-it,ja-jp,ko-kr,mk,nb,nl,pl,pt-br,pt-pt,ro,ru,sk,sl,sr,sv,th,tr,zh,zh-cn,zh-hant,zh-hans,zh-hk,zh-tw" /> |
|
<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="clean, -fix-config, ldml" |
|
description="Transforms LDML from the CLDR into JSON"> |
|
|
|
<scriptdef name="removeEmptyOutput" language="javascript"> |
|
<attribute name="dir"/> |
|
<![CDATA[ |
|
var isEmpty = function(o){ |
|
for(x in o){ |
|
return false; |
|
} |
|
return true; |
|
} |
|
|
|
var delTask = project.createTask("delete"); |
|
var deleteResource = function(f){ |
|
f.isDirectory() ? delTask.setDir(f) : delTask.setFile(f); |
|
delTask.perform(); |
|
} |
|
|
|
importClass(java.io.File); |
|
var fs = project.createDataType("fileset"); |
|
var dir = new 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 = new 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 |
|
|
|
var value; |
|
|
|
try{ |
|
value = eval(contents); |
|
}catch(e){ |
|
java.lang.System.out.print("Syntax error in "+srcFile.getCanonicalPath()); |
|
java.lang.System.out.print(contents); |
|
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"> |
|
<classpath> |
|
<pathelement path="${java.class.path}"/> |
|
</classpath> |
|
<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[ |
|
importClass(java.io.File); |
|
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 File(locale == "root" ? destdir : destdir+"/"+locale); |
|
|
|
var ldml = project.createTask("processLdml"); |
|
ldml.setDynamicAttribute("in", new File(filename)); |
|
ldml.setDynamicAttribute("destdir", outdir); |
|
ldml.setDynamicAttribute("basedir", basedir); |
|
ldml.perform(); |
|
} |
|
]]> |
|
</scriptdef> |
|
|
|
<transformCldr destdir="${json}"> |
|
<fileset dir="${ldml}/core/common/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> |
|
<java jar="../../shrinksafe/js.jar" failonerror="true" fork="true" logError="true" > |
|
<arg value="wrap.js" /> |
|
<arg value="${json}" /> |
|
<arg value="${logDir}"/> |
|
<sysproperty key="DOJO_LOADER" value="${dojoLoader}" /> |
|
</java> |
|
</target> |
|
</project>
|
|
|