# *   Copyright (C) 1998-2013, International Business Machines
# *   Corporation and others.  All Rights Reserved.
COLLATION_CLDR_VERSION = 24
# 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_CS.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 dz_BT.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\
 gl_ES.txt gu_IN.txt ha_Latn.txt ha_Latn_GH.txt ha_Latn_NE.txt\
 ha_Latn_NG.txt haw_US.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 ky.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 gl.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

