# *   Copyright (C) 1998-2014, International Business Machines
# *   Corporation and others.  All Rights Reserved.
UNIT_CLDR_VERSION = %version%
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a '%local%' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example '%local%' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  UNIT_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  UNIT_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
UNIT_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt fil_PH.txt ha_GH.txt ha_Latn_GH.txt\
 ha_Latn_NE.txt ha_Latn_NG.txt ha_NE.txt ha_NG.txt he_IL.txt\
 id_ID.txt in.txt in_ID.txt iw.txt iw_IL.txt\
 ja_JP.txt ja_JP_TRADITIONAL.txt kk_Cyrl_KZ.txt kk_KZ.txt ks_Arab_IN.txt\
 ks_IN.txt ky_Cyrl_KG.txt ky_KG.txt mn_Cyrl_MN.txt mn_MN.txt\
 mo.txt ms_BN.txt ms_Latn_BN.txt ms_Latn_MY.txt ms_Latn_SG.txt\
 ms_MY.txt ms_SG.txt nb_NO.txt nn_NO.txt no.txt\
 no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt pa_IN.txt\
 pa_PK.txt ro_MD.txt sh.txt sh_BA.txt sh_CS.txt\
 sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt\
 sr_Cyrl_BA.txt sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt\
 sr_Latn_BA.txt sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_YU.txt\
 sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt\
 th_TH_TRADITIONAL.txt tl.txt tl_PH.txt tzm_Latn_MA.txt tzm_MA.txt\
 ug_Arab_CN.txt ug_CN.txt uz_AF.txt uz_Arab_AF.txt uz_Latn_UZ.txt\
 uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt zh_CN.txt zh_HK.txt\
 zh_Hans_CN.txt zh_Hant_TW.txt zh_MO.txt zh_SG.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
UNIT_ALIAS_SOURCE = $(UNIT_SYNTHETIC_ALIAS)


# Ordinary resources
UNIT_SOURCE = af.txt agq.txt ak.txt am.txt\
 ar.txt ar_AE.txt as.txt asa.txt az.txt\
 az_Cyrl.txt az_Latn.txt bas.txt be.txt bem.txt\
 bez.txt bg.txt bm.txt bm_Latn.txt bn.txt\
 bn_IN.txt bo.txt br.txt brx.txt bs.txt\
 bs_Cyrl.txt bs_Latn.txt ca.txt cgg.txt chr.txt\
 cs.txt cy.txt da.txt dav.txt de.txt\
 de_CH.txt dje.txt dsb.txt dua.txt dyo.txt\
 dz.txt ebu.txt ee.txt el.txt en.txt\
 en_001.txt en_150.txt en_AG.txt en_AI.txt en_AU.txt\
 en_BB.txt en_BE.txt en_BM.txt en_BS.txt en_BW.txt\
 en_BZ.txt en_CC.txt en_CK.txt en_CM.txt en_CX.txt\
 en_DG.txt en_DM.txt en_ER.txt en_FJ.txt en_FK.txt\
 en_FM.txt en_GB.txt en_GD.txt en_GG.txt en_GH.txt\
 en_GI.txt en_GM.txt en_GY.txt en_HK.txt en_IE.txt\
 en_IM.txt en_IN.txt en_IO.txt en_JE.txt en_JM.txt\
 en_KE.txt en_KI.txt en_KN.txt en_KY.txt en_LC.txt\
 en_LR.txt en_LS.txt en_MG.txt en_MO.txt en_MS.txt\
 en_MT.txt en_MU.txt en_MW.txt en_MY.txt en_NA.txt\
 en_NF.txt en_NG.txt en_NR.txt en_NU.txt en_NZ.txt\
 en_PG.txt en_PH.txt en_PK.txt en_PN.txt en_PW.txt\
 en_RW.txt en_SB.txt en_SC.txt en_SD.txt en_SG.txt\
 en_SH.txt en_SL.txt en_SS.txt en_SX.txt en_SZ.txt\
 en_TC.txt en_TK.txt en_TO.txt en_TT.txt en_TV.txt\
 en_TZ.txt en_UG.txt en_VC.txt en_VG.txt en_VU.txt\
 en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt eo.txt\
 es.txt es_419.txt es_AR.txt es_BO.txt es_CL.txt\
 es_CO.txt es_CR.txt es_CU.txt es_DO.txt es_EC.txt\
 es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt\
 es_PE.txt es_PR.txt es_PY.txt es_SV.txt es_US.txt\
 es_UY.txt es_VE.txt et.txt eu.txt ewo.txt\
 fa.txt ff.txt fi.txt fil.txt fo.txt\
 fr.txt fr_CA.txt fur.txt fy.txt ga.txt\
 gd.txt gl.txt gsw.txt gu.txt guz.txt\
 gv.txt ha.txt ha_Latn.txt haw.txt he.txt\
 hi.txt hr.txt hsb.txt hu.txt hy.txt\
 id.txt ig.txt ii.txt is.txt it.txt\
 ja.txt jgo.txt jmc.txt ka.txt kab.txt\
 kam.txt kde.txt kea.txt khq.txt ki.txt\
 kk.txt kk_Cyrl.txt kkj.txt kl.txt kln.txt\
 km.txt kn.txt ko.txt kok.txt ks.txt\
 ks_Arab.txt ksb.txt ksf.txt ksh.txt kw.txt\
 ky.txt ky_Cyrl.txt lag.txt lb.txt lg.txt\
 lkt.txt ln.txt lo.txt lt.txt lu.txt\
 luo.txt luy.txt lv.txt mas.txt mer.txt\
 mfe.txt mg.txt mgh.txt mgo.txt mk.txt\
 ml.txt mn.txt mn_Cyrl.txt mr.txt ms.txt\
 ms_Latn.txt mt.txt mua.txt my.txt naq.txt\
 nb.txt nd.txt ne.txt ne_IN.txt nl.txt\
 nmg.txt nn.txt nnh.txt nus.txt nyn.txt\
 om.txt or.txt os.txt pa.txt pa_Arab.txt\
 pa_Guru.txt pl.txt ps.txt pt.txt pt_AO.txt\
 pt_CV.txt pt_GW.txt pt_MO.txt pt_MZ.txt pt_PT.txt\
 pt_ST.txt pt_TL.txt qu.txt rm.txt rn.txt\
 ro.txt rof.txt ru.txt rw.txt rwk.txt\
 sah.txt saq.txt sbp.txt se.txt seh.txt\
 ses.txt sg.txt shi.txt shi_Latn.txt shi_Tfng.txt\
 si.txt sk.txt sl.txt smn.txt sn.txt\
 so.txt sq.txt sr.txt sr_Cyrl.txt sr_Latn.txt\
 sv.txt sv_FI.txt sw.txt swc.txt ta.txt\
 te.txt teo.txt th.txt ti.txt to.txt\
 tr.txt twq.txt tzm.txt tzm_Latn.txt ug.txt\
 ug_Arab.txt uk.txt ur.txt ur_IN.txt uz.txt\
 uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt vai_Latn.txt\
 vai_Vaii.txt vi.txt vun.txt wae.txt xog.txt\
 yav.txt yi.txt yo.txt zgh.txt zh.txt\
 zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt\
 zh_Hant_HK.txt zh_Hant_MO.txt zu.txt

