# *   Copyright (C) 1998-2012, International Business Machines
# *   Corporation and others.  All Rights Reserved.
COLLATION_CLDR_VERSION = 22.1.1
# 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 'collocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'collocal.mk' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  COLLATION_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  COLLATION_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)
COLLATION_SYNTHETIC_ALIAS = de_.txt de__PHONEBOOK.txt es_.txt es__TRADITIONAL.txt\
 hi_.txt hi__DIRECT.txt in.txt in_ID.txt iw.txt\
 iw_IL.txt mo.txt no.txt no_NO.txt pa_IN.txt\
 sh.txt sh_BA.txt sh_YU.txt sr_BA.txt sr_ME.txt\
 sr_RS.txt zh_.txt zh_CN.txt zh_HK.txt zh_MO.txt\
 zh_SG.txt zh_TW.txt zh_TW_STROKE.txt zh__PINYIN.txt


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


# Empty locales, used for validSubLocale fallback.
COLLATION_EMPTY_SOURCE = af_NA.txt af_ZA.txt ar_001.txt ar_AE.txt\
 ar_BH.txt ar_DJ.txt ar_DZ.txt ar_EG.txt ar_EH.txt\
 ar_ER.txt ar_IL.txt ar_IQ.txt ar_JO.txt ar_KM.txt\
 ar_KW.txt ar_LB.txt ar_LY.txt ar_MA.txt ar_MR.txt\
 ar_OM.txt ar_PS.txt ar_QA.txt ar_SA.txt ar_SD.txt\
 ar_SO.txt ar_SY.txt ar_TD.txt ar_TN.txt ar_YE.txt\
 as_IN.txt az_Latn.txt az_Latn_AZ.txt be_BY.txt bg_BG.txt\
 bn_BD.txt bn_IN.txt bs_Cyrl_BA.txt bs_Latn.txt bs_Latn_BA.txt\
 ca_AD.txt ca_ES.txt chr.txt chr_US.txt cs_CZ.txt\
 cy_GB.txt da_DK.txt de_AT.txt de_BE.txt de_CH.txt\
 de_DE.txt de_LI.txt de_LU.txt ee_GH.txt ee_TG.txt\
 el_CY.txt el_GR.txt en_150.txt en_AG.txt en_AS.txt\
 en_AU.txt en_BB.txt en_BE.txt en_BM.txt en_BS.txt\
 en_BW.txt en_BZ.txt en_CA.txt en_CM.txt en_DM.txt\
 en_FJ.txt en_FM.txt en_GB.txt en_GD.txt en_GG.txt\
 en_GH.txt en_GI.txt en_GM.txt en_GU.txt en_HK.txt\
 en_IE.txt en_IM.txt en_IN.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_MH.txt en_MP.txt\
 en_MT.txt en_MU.txt en_MW.txt en_NA.txt en_NG.txt\
 en_NZ.txt en_PG.txt en_PH.txt en_PK.txt en_PR.txt\
 en_PW.txt en_SB.txt en_SC.txt en_SG.txt en_SL.txt\
 en_SS.txt en_TC.txt en_TO.txt en_TT.txt en_TZ.txt\
 en_UG.txt en_UM.txt en_VC.txt en_VG.txt en_VI.txt\
 en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt en_ZW.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_EA.txt es_EC.txt\
 es_ES.txt es_GQ.txt es_GT.txt es_HN.txt es_IC.txt\
 es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PH.txt\
 es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\
 es_VE.txt et_EE.txt fa_IR.txt fi_FI.txt fil_PH.txt\
 fo_FO.txt fr_BE.txt fr_BF.txt fr_BI.txt fr_BJ.txt\
 fr_BL.txt fr_CD.txt fr_CF.txt fr_CG.txt fr_CH.txt\
 fr_CI.txt fr_CM.txt fr_DJ.txt fr_DZ.txt fr_FR.txt\
 fr_GA.txt fr_GN.txt fr_GP.txt fr_GQ.txt fr_HT.txt\
 fr_KM.txt fr_LU.txt fr_MA.txt fr_MC.txt fr_MF.txt\
 fr_MG.txt fr_ML.txt fr_MQ.txt fr_MR.txt fr_MU.txt\
 fr_NC.txt fr_NE.txt fr_PF.txt fr_RE.txt fr_RW.txt\
 fr_SC.txt fr_SN.txt fr_SY.txt fr_TD.txt fr_TG.txt\
 fr_TN.txt fr_VU.txt ga.txt ga_IE.txt gu_IN.txt\
 ha_Latn.txt ha_Latn_GH.txt ha_Latn_NE.txt ha_Latn_NG.txt he_IL.txt\
 hi_IN.txt hr_BA.txt hr_HR.txt hu_HU.txt hy_AM.txt\
 id.txt id_ID.txt ig_NG.txt is_IS.txt it.txt\
 it_CH.txt it_IT.txt it_SM.txt ja_JP.txt ka.txt\
 ka_GE.txt kk_KZ.txt kl_GL.txt km_KH.txt kn_IN.txt\
 ko_KP.txt ko_KR.txt kok_IN.txt ln_AO.txt ln_CD.txt\
 ln_CF.txt ln_CG.txt lt_LT.txt lv_LV.txt mk_MK.txt\
 ml_IN.txt mr_IN.txt ms.txt ms_BN.txt ms_MY.txt\
 ms_SG.txt mt_MT.txt my_MM.txt nb_NO.txt nl.txt\
 nl_AW.txt nl_BE.txt nl_CW.txt nl_NL.txt nl_SR.txt\
 nl_SX.txt nn_NO.txt om_ET.txt om_KE.txt or_IN.txt\
 pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt pa_Guru_IN.txt pl_PL.txt\
 ps_AF.txt pt.txt pt_AO.txt pt_BR.txt pt_CV.txt\
 pt_GW.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\
 pt_TL.txt ro_MD.txt ro_RO.txt ru_BY.txt ru_KG.txt\
 ru_KZ.txt ru_MD.txt ru_RU.txt ru_UA.txt si_LK.txt\
 sk_SK.txt sl_SI.txt sq_AL.txt sq_MK.txt sr_Cyrl.txt\
 sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_RS.txt sr_Latn_BA.txt sr_Latn_ME.txt\
 sr_Latn_RS.txt sv_AX.txt sv_FI.txt sv_SE.txt sw.txt\
 sw_KE.txt sw_TZ.txt sw_UG.txt ta_IN.txt ta_LK.txt\
 ta_MY.txt ta_SG.txt te_IN.txt th_TH.txt to_TO.txt\
 tr_CY.txt tr_TR.txt uk_UA.txt ur_IN.txt ur_PK.txt\
 vi_VN.txt yo_NG.txt zh_Hans.txt zh_Hans_CN.txt zh_Hans_SG.txt\
 zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt zu.txt zu_ZA.txt


# Ordinary resources
COLLATION_SOURCE = $(COLLATION_EMPTY_SOURCE) af.txt ar.txt as.txt az.txt\
 be.txt bg.txt bn.txt bs.txt bs_Cyrl.txt\
 ca.txt cs.txt cy.txt da.txt de.txt\
 dz.txt ee.txt el.txt en.txt en_US.txt\
 en_US_POSIX.txt eo.txt es.txt et.txt fa.txt\
 fa_AF.txt fi.txt fil.txt fo.txt fr.txt\
 fr_CA.txt gu.txt ha.txt haw.txt he.txt\
 hi.txt hr.txt hu.txt hy.txt ig.txt\
 is.txt ja.txt kk.txt kl.txt km.txt\
 kn.txt ko.txt kok.txt ln.txt lt.txt\
 lv.txt mk.txt ml.txt mr.txt mt.txt\
 my.txt nb.txt nn.txt om.txt or.txt\
 pa.txt pl.txt ps.txt ro.txt ru.txt\
 si.txt sk.txt sl.txt sq.txt sr.txt\
 sr_Latn.txt sv.txt ta.txt te.txt th.txt\
 to.txt tr.txt uk.txt ur.txt vi.txt\
 yo.txt zh.txt zh_Hant.txt

