Home | History | Annotate | Download | only in depstest
      1 # -*- icu-dependencies -*-
      2 # Copyright (C) 2016 and later: Unicode, Inc. and others.
      3 # License & terms of use: http://www.unicode.org/copyright.html
      4 # Copyright (C) 2011-2016, International Business Machines
      5 # Corporation and others. All Rights Reserved.
      6 #
      7 # file name: dependencies.txt
      8 #
      9 # created on: 2011may26
     10 # created by: Markus W. Scherer
     11 #
     12 # See http://site.icu-project.org/processes/release/tasks/healthy-code#TOC-Check-library-dependencies
     13 
     14 # Standard library symbols used by ICU --------------------------------------- #
     15 
     16 system_symbols:
     17   deps
     18     # C
     19     PIC system_debug malloc_functions c_strings c_string_formatting
     20     floating_point trigonometry
     21     stdlib_qsort
     22     pthread system_locale
     23     stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn
     24     # C++
     25     cplusplus iostream
     26 
     27 group: PIC
     28     # Position-Independent Code (-fPIC) requires a Global Offset Table.
     29     _GLOBAL_OFFSET_TABLE_
     30 
     31 group: system_debug
     32     __assert_fail __stack_chk_fail
     33 
     34 group: malloc_functions
     35     free malloc realloc
     36 
     37 group: c_strings
     38     isspace isdigit
     39     __ctype_b_loc  # for <ctype.h>
     40     # We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
     41     strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
     42     memcmp memcpy memmove memset
     43     # Additional symbols in an optimized build.
     44     __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
     45     __rawmemchr __memcpy_chk __memmove_chk __memset_chk
     46 
     47 group: c_string_formatting
     48     atoi atol strtod strtod_l strtol strtoul
     49     sprintf
     50     # Additional symbols in an optimized build.
     51     __sprintf_chk
     52 
     53 group: floating_point
     54     abs fabs floor ceil modf fmod log pow sqrt
     55 
     56 group: trigonometry
     57     acos asin atan atan2 cos sin tan
     58     # Additional symbols in an optimized build.
     59     sincos
     60 
     61 group: stdlib_qsort
     62     qsort
     63 
     64 group: pthread
     65     pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock
     66     pthread_cond_wait pthread_cond_broadcast pthread_cond_signal
     67 
     68 group: system_locale
     69     getenv
     70     nl_langinfo setlocale newlocale freelocale
     71     gettimeofday localtime_r tzname tzset __timezone
     72 
     73 group: stdio_input
     74     fopen fclose fgets fread fseek ftell rewind feof fileno
     75     # Additional symbols in an optimized build.
     76     __fgets_chk __fread_chk
     77 
     78 group: stdio_output
     79     fflush fwrite
     80     stdout
     81 
     82 group: file_io
     83     open close stat
     84     # Additional symbols in an optimized build.
     85     __xstat
     86 
     87 group: readlink_function
     88     readlink  # putil.cpp uprv_tzname() calls this in a hack to get the time zone name
     89 
     90 group: dir_io
     91     opendir closedir readdir  # for a hack to get the time zone name
     92 
     93 group: mmap_functions  # for memory-mapped data loading
     94     mmap munmap
     95 
     96 group: dlfcn
     97     dlopen dlclose dlsym  # called by putil.o only for icuplug.o
     98 
     99 group: cplusplus
    100     __dynamic_cast
    101     # The compiler generates references to the global operator delete
    102     # even when no code actually uses it.
    103     # ICU must not _use_ the global operator delete.
    104     "operator delete(void*)"
    105     # ICU also must not use the global operator new.
    106     # "operator new[](unsigned long)"
    107 
    108     # _Unwind_Resume is related to exceptions:
    109     # "A call to this routine is inserted as the end of a landing pad that performs cleanup,
    110     # but does not resume normal execution. It causes unwinding to proceed further."
    111     # (Linux Standard Base Specification 1.3)
    112     # Even though ICU does not actually use (nor handle) exceptions.
    113     _Unwind_Resume
    114     # std::terminate() looks similar to _Unwind_Resume:
    115     # "Calls the current terminate handler."
    116     std::terminate()
    117 
    118 group: iostream
    119     "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)"
    120     "std::basic_ios<char, std::char_traits<char> >::eof() const"
    121     "std::basic_ios<char, std::char_traits<char> >::fail() const"
    122     "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)"
    123     std::istream::get()
    124     std::istream::putback(char)
    125     # Additional symbols in an optimized build.
    126     "std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)"
    127 
    128 # ICU common library --------------------------------------------------------- #
    129 
    130 library: stubdata
    131     stubdata.o  # Exports icudt48_dat.
    132 
    133 library: common
    134     # All files in the common library are listed in its dependencies.
    135   deps
    136     # Libraries and groups that the common library depends on.
    137     pluralmap
    138     date_interval
    139     breakiterator
    140     uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
    141     normlzr unormcmp unorm
    142     idna2003 stringprep
    143     stringenumeration
    144     unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
    145     cstr
    146     uniset_core uniset_props uniset_closure usetiter uset uset_props
    147     uiter
    148     ucasemap ucasemap_titlecase_brkiter script_runs
    149     uprops ubidi_props ucase uscript uscript_props
    150     ubidi ushape ubiditransform
    151     listformatter
    152     resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
    153     loclikely
    154     currency
    155     locale_display_names2
    156     conversion converter_selector ucnv_set ucnvdisp
    157     messagepattern simpleformatter
    158     icu_utility icu_utility_with_props
    159     ustr_wcs
    160     unifiedcache
    161     ucharstriebuilder ucharstrieiterator
    162     bytestriebuilder bytestrieiterator
    163     hashtable uhash uvector uvector32 uvector64 ulist
    164     propsvec utrie2 utrie2_builder
    165     sort
    166     uinit utypes errorcode
    167     icuplug
    168     platform
    169 
    170 group: pluralmap
    171     # TODO: Move to i18n library, ticket #11926.
    172     pluralmap.o
    173   deps
    174     platform
    175 
    176 group: date_interval  # class DateInterval
    177     dtintrv.o
    178   deps
    179     platform
    180 
    181 group: breakiterator
    182     # We could try to split off a breakiterator_builder group,
    183     # but we still need uniset_props for code like in the ThaiBreakEngine constructor
    184     # which does
    185     #   fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
    186     brkiter.o brkeng.o ubrk.o
    187     rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
    188     rbbidata.o rbbirb.o
    189     dictionarydata.o dictbe.o
    190     # BreakIterator::makeInstance() factory implementation makes for circular dependency
    191     # between BreakIterator base and FilteredBreakIteratorBuilder.
    192     filteredbrk.o
    193   deps
    194     resourcebundle service_registration
    195     schriter utext uniset_core uniset_props
    196     uhash ustack utrie
    197     ucharstrie bytestrie
    198     ucharstriebuilder  # for filteredbrk.o
    199     normlzr  # for dictbe.o, should switch to Normalizer2
    200     uvector32 # for dictbe.o
    201 
    202 group: unormcmp  # unorm_compare()
    203     unormcmp.o
    204   deps
    205     filterednormalizer2
    206     uniset_props  # for uniset_getUnicode32Instance()
    207     ucase
    208 
    209 group: unorm  # old normalization C API
    210     unorm.o
    211   deps
    212     filterednormalizer2
    213     uniset_props  # for uniset_getUnicode32Instance()
    214     uiter
    215 
    216 group: normlzr  # old Normalizer C++ class
    217     normlzr.o
    218   deps
    219     filterednormalizer2
    220     uniset_props  # for uniset_getUnicode32Instance()
    221     schriter
    222 
    223 group: uts46
    224     uts46.o
    225   deps
    226     normalizer2 loadednormalizer2 punycode
    227     uchar  # for u_charType() (via U_GET_GC_MASK(c))
    228     ubidi_props  # for u_charDirection() & ubidi_getJoiningType()
    229     bytestream
    230 
    231 group: filterednormalizer2
    232     filterednormalizer2.o
    233   deps
    234     normalizer2
    235 
    236 group: idna2003
    237     uidna.o
    238   deps
    239     stringprep punycode
    240 
    241 group: stringprep
    242     usprep.o
    243   deps
    244     unorm  # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
    245     normalizer2
    246     ubidi_props
    247 
    248 group: canonical_iterator
    249     caniter.o
    250   deps
    251     normalizer2 usetiter
    252 
    253 group: loadednormalizer2
    254     loadednormalizer2impl.o
    255   deps
    256     normalizer2
    257 
    258 group: normalizer2
    259     normalizer2.o
    260     normalizer2impl.o
    261   deps
    262     uniset_core
    263     utrie2_builder  # for building CanonIterData & FCD
    264     uvector  # for building CanonIterData
    265     uhash  # for the instance cache
    266     udata
    267 
    268 group: punycode
    269     punycode.o
    270   deps
    271     platform
    272 
    273 group: uset_props
    274     uset_props.o
    275   deps
    276     uniset_closure uniset_props uniset_core
    277 
    278 group: uset
    279     uset.o
    280   deps
    281     uniset_core
    282 
    283 group: uniset_closure
    284     uniset_closure.o
    285   deps
    286     uniset_core unistr_case_locale unistr_titlecase_brkiter
    287 
    288 group: uniset_props
    289     uniset_props.o ruleiter.o
    290   deps
    291     uniset_core uprops unistr_case
    292     parsepos
    293     resourcebundle
    294     propname unames
    295 
    296 group: parsepos
    297     parsepos.o
    298   deps
    299     platform
    300 
    301 group: usetiter  # UnicodeSetIterator
    302     usetiter.o
    303   deps
    304     uniset_core
    305 
    306 group: uniset_core
    307     unifilt.o unifunct.o
    308     uniset.o bmpset.o unisetspan.o
    309   deps
    310     patternprops
    311     icu_utility
    312     uvector
    313 
    314 group: icu_utility_with_props
    315     util_props.o
    316   deps
    317     icu_utility uchar ucase
    318 
    319 group: icu_utility
    320     util.o
    321   deps
    322     patternprops platform
    323 
    324 group: utext
    325     utext.o
    326   deps
    327     ucase
    328 
    329 group: stringenumeration
    330     ustrenum.o uenum.o
    331   deps
    332     platform
    333 
    334 group: schriter
    335     schriter.o
    336     # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
    337     # so it depends on UnicodeString, therefore it makes little sense to split
    338     # schriter and uchriter into separate groups.
    339     uchriter.o
    340   deps
    341     chariter
    342 
    343 group: chariter
    344     chariter.o
    345   deps
    346     platform
    347 
    348 group: uiter
    349     uiter.o
    350   deps
    351     platform
    352 
    353 group: unistr_cnv
    354     unistr_cnv.o
    355   deps
    356     conversion
    357 
    358 group: cstr
    359     cstr.o
    360   deps
    361     unistr_cnv
    362 
    363 group: uscript
    364     uscript.o  # uscript_getCode() accepts a locale ID and loads its script code data
    365   deps
    366     propname loclikely
    367 
    368 group: uscript_props  # script metadata properties
    369     uscript_props.o
    370   deps
    371     platform
    372 
    373 group: uprops
    374     uprops.o
    375   deps
    376     normalizer2 loadednormalizer2
    377     uchar
    378     ubidi_props
    379     unistr_case ustring_case  # only for case folding
    380     ucase
    381 
    382 group: propname
    383     propname.o
    384   deps
    385     bytestrie
    386 
    387 group: unames
    388     unames.o
    389   deps
    390     uchar udata
    391 
    392 group: script_runs
    393     usc_impl.o
    394   deps
    395     uchar
    396 
    397 group: uchar
    398     uchar.o
    399   deps
    400     utrie2
    401 
    402 group: messagepattern  # for MessageFormat and tools
    403     messagepattern.o
    404   deps
    405     patternprops platform
    406 
    407 group: simpleformatter
    408     simpleformatter.o
    409   deps
    410     platform
    411 
    412 group: patternprops
    413     patternprops.o
    414   deps
    415     PIC
    416 
    417 group: ushape
    418     ushape.o
    419   deps
    420     ubidi_props
    421 
    422 group: ubidi
    423     ubidi.o ubidiln.o ubidiwrt.o
    424   deps
    425     ubidi_props
    426     uchar  # for doWriteReverse() which uses IS_COMBINING(u_charType(c))
    427 
    428 group: ubiditransform
    429     ubiditransform.o
    430   deps
    431     ubidi ushape
    432 
    433 group: ubidi_props
    434     ubidi_props.o
    435   deps
    436     utrie2
    437 
    438 group: unistr_props
    439     unistr_props.o
    440   deps
    441     uchar platform
    442 
    443 group: unistr_case_locale
    444     unistr_case_locale.o
    445   deps
    446     unistr_case ustring_case_locale
    447 
    448 group: unistr_case
    449     unistr_case.o
    450   deps
    451     ustring_case
    452 
    453 group: unistr_titlecase_brkiter
    454     unistr_titlecase_brkiter.o
    455   deps
    456     ustr_titlecase_brkiter
    457 
    458 group: ustr_titlecase_brkiter
    459     ustr_titlecase_brkiter.o
    460   deps
    461     breakiterator
    462     ustring_case_locale ucase
    463 
    464 group: ucasemap_titlecase_brkiter
    465     ucasemap_titlecase_brkiter.o
    466   deps
    467     ucasemap breakiterator utext
    468 
    469 group: ucasemap
    470     ucasemap.o
    471   deps
    472     ustring_case
    473     resourcebundle  # uloc_getName() etc.
    474 
    475 group: ustring_case_locale
    476     ustrcase_locale.o
    477   deps
    478     ustring_case
    479     resourcebundle  # for uloc_getDefault()
    480 
    481 group: ustring_case
    482     ustrcase.o
    483   deps
    484     ucase
    485 
    486 group: ucase
    487     ucase.o
    488   deps
    489     utrie2
    490 
    491 group: uinit
    492     uinit.o
    493   deps
    494     ucnv_io icuplug
    495 
    496 group: converter_selector
    497     ucnvsel.o
    498   deps
    499     conversion propsvec utrie2_builder uset ucnv_set
    500 
    501 group: ucnvdisp  # ucnv_getDisplayName()
    502     ucnvdisp.o
    503   deps
    504     conversion resourcebundle
    505 
    506 group: ucnv_set  # ucnv_getUnicodeSet
    507     ucnv_set.o
    508   deps
    509     uset
    510 
    511 group: conversion
    512     ustr_cnv.o
    513     ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
    514     ucnv_ct.o
    515     ucnvmbcs.o ucnv_ext.o
    516     ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
    517     ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
    518     ucnvbocu.o ucnvscsu.o
    519   deps
    520     ucnv_io
    521 
    522 group: ucnv_io
    523     ucnv_io.o
    524   deps
    525     sort stringenumeration udata
    526 
    527 group: service_registration
    528     serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
    529     locutil.o
    530   deps
    531     locale_display_names resourcebundle
    532     hashtable uvector
    533 
    534 group: listformatter
    535     listformatter.o ulistformatter.o
    536   deps
    537     resourcebundle simpleformatter
    538 
    539 group: ucat  # message-catalog-like API
    540     ucat.o
    541   deps
    542     resourcebundle
    543 
    544 group: locale_display_names
    545     locdispnames.o  # Locale.getDisplayName()
    546   deps
    547     locresdata
    548 
    549 group: locale_display_names2
    550     locdspnm.o  # class LocaleDisplayNames
    551   deps
    552     resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
    553 
    554 group: currency
    555     ucurr.o
    556   deps
    557     loclikely resourcebundle ulist ustring_case_locale
    558     stdlib_qsort  # for ucurr.o (which does not use ICU's uarrsort.o)
    559 
    560 group: icudataver  # u_getDataVersion()
    561     icudataver.o
    562   deps
    563     resourcebundle
    564 
    565 group: loclikely
    566     loclikely.o
    567   deps
    568     resourcebundle uscript_props propname
    569 
    570 group: locresdata
    571     # This was intended to collect locale functions that load resource bundle data.
    572     # See the resourcebundle group about what else loads data.
    573     locresdata.o
    574   deps
    575     resourcebundle
    576 
    577 group: resbund_cnv  # paths are Unicode strings
    578     resbund_cnv.o
    579   deps
    580     conversion resourcebundle ures_cnv
    581 
    582 group: ures_cnv  # ures_openU, path is a Unicode string
    583     ures_cnv.o
    584   deps
    585     conversion resourcebundle
    586 
    587 group: resourcebundle
    588     resource.o resbund.o uresbund.o uresdata.o
    589     locavailable.o
    590     # uloc_tag.c and uloc_keytype.cpp convert between
    591     # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
    592     # They use data from resource bundles for some of the mappings.
    593     # We might want to generate .h files for that data, to #include rather than load,
    594     # to minimize dependencies from this code.
    595     # Then we could separate this higher-level locale ID code from the resource bundle code.
    596     uloc.o uloc_tag.o uloc_keytype.o
    597     # Even basic locid.cpp via Locale constructors and Locale::getDefault()
    598     # depend on canonicalization and data loading.
    599     # We can probably only disentangle basic locale ID handling from resource bundle code
    600     # by hardcoding all of the locale ID data.
    601     locid.o locmap.o wintz.o
    602     # Do we need class LocaleBased? http://bugs.icu-project.org/trac/ticket/8608
    603     locbased.o
    604   deps
    605     udata ucol_swp
    606     sort stringenumeration uhash uvector
    607 
    608 group: udata
    609     udata.o ucmndata.o udatamem.o
    610     umapfile.o
    611   deps
    612     uhash platform stubdata
    613     file_io mmap_functions
    614 
    615 group: unifiedcache
    616     unifiedcache.o
    617   deps
    618     uhash
    619     platform
    620 
    621 group: ucharstriebuilder
    622     ucharstriebuilder.o
    623   deps
    624     ucharstrie stringtriebuilder sort
    625 
    626 group: ucharstrieiterator
    627     ucharstrieiterator.o
    628   deps
    629     ucharstrie uvector32
    630 
    631 group: ucharstrie
    632     ucharstrie.o
    633   deps
    634     platform
    635 
    636 group: bytestriebuilder
    637     bytestriebuilder.o
    638   deps
    639     bytestrie stringtriebuilder sort
    640 
    641 group: bytestrieiterator
    642     bytestrieiterator.o
    643   deps
    644     bytestrie uvector32
    645 
    646 group: bytestrie
    647     bytestrie.o
    648   deps
    649     platform
    650 
    651 group: stringtriebuilder
    652     stringtriebuilder.o
    653   deps
    654     uhash
    655 
    656 group: propsvec
    657     propsvec.o
    658   deps
    659     sort utrie2_builder
    660 
    661 group: utrie2_builder
    662     utrie2_builder.o
    663   deps
    664     platform
    665     utrie2
    666     utrie  # for utrie2_fromUTrie()
    667     ucol_swp  # for utrie_swap()
    668 
    669 group: utrie2
    670     utrie2.o
    671   deps
    672     platform
    673 
    674 group: utrie  # Callers should use utrie2 instead.
    675     utrie.o
    676   deps
    677     platform
    678 
    679 group: hashtable  # Maps UnicodeString to value.
    680     uhash_us.o
    681   deps
    682     uhash
    683 
    684 group: uhash
    685     uhash.o
    686   deps
    687     platform
    688 
    689 group: ustack
    690     ustack.o
    691   deps
    692     uvector
    693 
    694 group: uvector
    695     uvector.o
    696   deps
    697     platform
    698     sort  # for UVector::sort()
    699 
    700 group: uvector32
    701     uvectr32.o
    702   deps
    703     platform
    704 
    705 group: uvector64
    706     uvectr64.o
    707   deps
    708     platform
    709 
    710 group: ulist
    711     ulist.o
    712   deps
    713     platform
    714 
    715 group: sort
    716     uarrsort.o
    717   deps
    718     platform
    719 
    720 group: ustr_wcs
    721     ustr_wcs.o
    722   deps
    723     platform
    724 
    725 group: bytestream
    726     bytestream.o
    727   deps
    728     platform
    729 
    730 group: icuplug
    731     icuplug.o
    732   deps
    733     platform
    734 
    735 group: ucol_swp
    736     ucol_swp.o
    737   deps
    738     utrie2  # Format version 4 uses UTrie2.
    739 
    740 group: errorcode  # ErrorCode base class
    741     errorcode.o
    742   deps
    743     utypes
    744     platform
    745 
    746 group: utypes  # u_errorName()
    747     utypes.o
    748 
    749 group: platform
    750     # Files in the "platform" group.
    751     cmemory.o uobject.o
    752     cstring.o cwchar.o uinvchar.o
    753     charstr.o
    754     unistr.o  # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
    755     appendable.o stringpiece.o ustrtrns.o  # for unistr.o
    756     ustring.o  # Other platform files really just need u_strlen
    757     ustrfmt.o  # uprv_itou
    758     utf_impl.o
    759     putil.o
    760     ucln_cmn.o  # for putil.o which calls ucln_common_registerCleanup
    761     udataswp.o  # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
    762     umath.o
    763     umutex.o sharedobject.o
    764     utrace.o
    765   deps
    766     # The "platform" group has no ICU dependencies.
    767     PIC system_debug malloc_functions c_strings c_string_formatting
    768     floating_point pthread system_locale
    769     stdio_input readlink_function dir_io
    770     dlfcn  # Move related code into icuplug.c?
    771     cplusplus
    772 
    773 # ICU i18n library ----------------------------------------------------------- #
    774 
    775 library: i18n
    776   deps
    777     region localedata genderinfo charset_detector spoof_detection
    778     alphabetic_index collation collation_builder string_search
    779     dayperiodrules
    780     formatting formattable_cnv regex regex_cnv translit
    781     universal_time_scale
    782     uclean_i18n
    783 
    784 group: region
    785     region.o uregion.o
    786   deps
    787     formatting  # Temporary, TODO: Ticket #9982 class Region should use low-level ASCII-integer functions, and probably be moved to the common library.
    788     resourcebundle
    789     uvector uclean_i18n
    790 
    791 group: localedata
    792     ulocdata.o
    793   deps
    794     uniset_props resourcebundle
    795     uset_props  # TODO: change to using C++ UnicodeSet, remove this dependency
    796     loclikely
    797 
    798 group: genderinfo
    799     gender.o
    800   deps
    801     resourcebundle
    802     uclean_i18n
    803 
    804 group: charset_detector
    805     csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
    806   deps
    807     conversion
    808     uclean_i18n
    809 
    810 group: spoof_detection
    811     uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
    812   deps
    813     uniset_props regex unorm uscript
    814 
    815 group: alphabetic_index
    816     alphaindex.o
    817   deps
    818     collation localedata
    819     uclean_i18n
    820 
    821 group: collation
    822     # The collation "runtime" code should not depend on the collation_builder code.
    823     # For example, loading from resource bundles does not fall back to
    824     # building from rules.
    825     collation.o collationcompare.o collationdata.o
    826     collationdatareader.o collationdatawriter.o
    827     collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
    828     collationroot.o collationrootelements.o collationsets.o
    829     collationsettings.o collationtailoring.o rulebasedcollator.o
    830     uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
    831     bocsu.o coleitr.o coll.o sortkey.o ucol.o
    832     ucol_res.o ucol_sit.o ucoleitr.o
    833   deps
    834     bytestream normalizer2 resourcebundle service_registration unifiedcache
    835     ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64
    836     uclean_i18n propname
    837 
    838 group: collation_builder
    839     collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
    840     collationruleparser.o collationweights.o
    841   deps
    842     canonical_iterator collation ucharstriebuilder uset_props
    843 
    844 group: string_search
    845     search.o stsearch.o usearch.o
    846   deps
    847     breakiterator collation
    848 
    849 group: dayperiodrules
    850     dayperiodrules.o
    851   deps
    852     resourcebundle uclean_i18n
    853 
    854 group: formatting
    855     # TODO: Try to subdivide this ball of wax.
    856     # currencyformat
    857     curramt.o currfmt.o currpinf.o currunit.o
    858     # decimalformat
    859     dcfmtsym.o numsys.o unumsys.o
    860     affixpatternparser.o decimfmtimpl.o digitaffix.o digitaffixesandpadding.o
    861     digitformatter.o digitgrouping.o digitinterval.o
    862     pluralaffix.o precision.o smallintformatter.o valueformatter.o
    863     decfmtst.o decimfmt.o decimalformatpattern.o compactdecimalformat.o
    864     numfmt.o unum.o
    865     winnmfmt.o
    866     # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
    867     scientificnumberformatter.o
    868     # rbnf
    869     nfrs.o nfrule.o nfsubs.o rbnf.o
    870     # measureformat
    871     measfmt.o measunit.o quantityformatter.o
    872     # dateformat
    873     astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
    874     gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
    875     ucal.o
    876     basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
    877     vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
    878     tzfmt.o tzgnames.o tznames.o tznames_impl.o
    879     datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
    880     smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
    881     udat.o
    882     tmunit.o tmutamt.o tmutfmt.o
    883     # messageformat
    884     choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
    885   deps
    886     digitlist formattable format
    887     dayperiodrules pluralrules
    888     collation collation_builder  # for rbnf
    889     common
    890     floating_point  # sqrt() for astro.o
    891     trigonometry  # for astro.o
    892     sharedbreakiterator # for reldatefmt.o
    893     uclean_i18n
    894 
    895 group: sharedbreakiterator
    896     sharedbreakiterator.o
    897   deps
    898     breakiterator
    899 
    900 group: digitlist
    901     digitlst.o decContext.o decNumber.o visibledigits.o
    902   deps
    903     uclean_i18n
    904 
    905 group: formattable
    906     fmtable.o
    907     measure.o
    908   deps
    909     digitlist
    910 
    911 group: formattable_cnv
    912     fmtable_cnv.o
    913   deps
    914     formattable unistr_cnv conversion
    915 
    916 group: format
    917     format.o fphdlimp.o fpositer.o ufieldpositer.o
    918   deps
    919     resourcebundle parsepos uvector32
    920 
    921 group: pluralrules
    922     standardplural.o plurrule.o upluralrules.o
    923   deps
    924     digitlist  # plurals depend on decimals
    925     patternprops resourcebundle uvector uvector32 unifiedcache
    926     unistr_case_locale
    927     uclean_i18n
    928 
    929 group: regex_cnv
    930     uregexc.o
    931   deps
    932     regex unistr_cnv
    933 
    934 group: regex
    935     regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
    936   deps
    937     uniset_closure utext uvector32 uvector64 ustack
    938     breakiterator
    939     uinit  # TODO: Really needed?
    940     uclean_i18n
    941 
    942 group: translit
    943     anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
    944     esctrn.o unesctrn.o nultrans.o
    945     funcrepl.o quant.o rbt.o rbt_data.o rbt_pars.o rbt_rule.o rbt_set.o strmatch.o strrepl.o translit.o transreg.o tridpars.o utrans.o
    946   deps
    947     common
    948     formatting  # for Transliterator::getDisplayName()
    949     uclean_i18n
    950 
    951 group: universal_time_scale
    952     utmscale.o
    953 
    954 group: uclean_i18n
    955     ucln_in.o
    956   deps
    957     platform
    958 
    959 # ICU io library ------------------------------------------------------------- #
    960 
    961 library: io
    962   deps
    963     ustdio ustream uclean_io
    964 
    965 group: ustdio
    966     locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
    967   deps
    968     formatting conversion translit
    969     uclean_io
    970     stdio_output
    971 
    972 group: ustream
    973     ustream.o
    974   deps
    975     unistr_cnv
    976     uchar  # for u_isWhitespace()
    977     iostream
    978 
    979 group: uclean_io
    980     ucln_io.o
    981   deps
    982     platform
    983