# *   Copyright (C) 1998-2013, International Business Machines
# *   Corporation and others.  All Rights Reserved.
COLLATION_CLDR_VERSION = 23.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\
 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_CN.txt\
 zh_HK.txt zh_MO.txt zh_SG.txt zh_TW.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_Latn.txt ms_Latn_BN.txt\
 ms_Latn_MY.txt ms_Latn_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\
 sq_XK.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_RS.txt\
 sr_Cyrl_XK.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_XK.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

