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 snprintf
     50     # Additional symbols in an optimized build.
     51     __sprintf_chk
     52 
     53 group: floating_point
     54     abs fabs floor ceil modf fmod log pow round 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::ios_base::Init::Init()
    124     std::ios_base::Init::~Init()
    125     std::istream::get()
    126     std::istream::putback(char)
    127     # Additional symbols in an optimized build.
    128     "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)"
    129 
    130 # ICU common library --------------------------------------------------------- #
    131 
    132 library: stubdata
    133     stubdata.o  # Exports icudt48_dat.
    134 
    135 library: common
    136     # All files in the common library are listed in its dependencies.
    137   deps
    138     # Libraries and groups that the common library depends on.
    139     pluralmap
    140     date_interval
    141     breakiterator
    142     uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
    143     normlzr unormcmp unorm
    144     idna2003 stringprep
    145     stringenumeration
    146     unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
    147     cstr
    148     uniset_core uniset_props uniset_closure usetiter uset uset_props
    149     uiter edits
    150     ucasemap ucasemap_titlecase_brkiter script_runs
    151     uprops ubidi_props ucase uscript uscript_props
    152     ubidi ushape ubiditransform
    153     listformatter
    154     resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
    155     loclikely
    156     currency
    157     locale_display_names2
    158     conversion converter_selector ucnv_set ucnvdisp
    159     messagepattern simpleformatter
    160     icu_utility icu_utility_with_props
    161     ustr_wcs
    162     unifiedcache
    163     ucharstriebuilder ucharstrieiterator
    164     bytestriebuilder bytestrieiterator
    165     hashtable uhash uvector uvector32 uvector64 ulist
    166     propsvec utrie2 utrie2_builder
    167     sort
    168     uinit utypes errorcode
    169     icuplug
    170     platform
    171 
    172 group: pluralmap
    173     # TODO: Move to i18n library, ticket #11926.
    174     pluralmap.o
    175   deps
    176     platform
    177 
    178 group: date_interval  # class DateInterval
    179     dtintrv.o
    180   deps
    181     platform
    182 
    183 group: breakiterator
    184     # We could try to split off a breakiterator_builder group,
    185     # but we still need uniset_props for code like in the ThaiBreakEngine constructor
    186     # which does
    187     #   fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
    188     brkiter.o brkeng.o ubrk.o
    189     rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
    190     rbbidata.o rbbirb.o rbbi_cache.o
    191     dictionarydata.o dictbe.o
    192     # BreakIterator::makeInstance() factory implementation makes for circular dependency
    193     # between BreakIterator base and FilteredBreakIteratorBuilder.
    194     filteredbrk.o
    195   deps
    196     resourcebundle service_registration
    197     schriter utext uniset_core uniset_props
    198     uhash ustack utrie
    199     ucharstrie bytestrie
    200     ucharstriebuilder  # for filteredbrk.o
    201     normlzr  # for dictbe.o, should switch to Normalizer2
    202     uvector32 # for dictbe.o
    203 
    204 group: unormcmp  # unorm_compare()
    205     unormcmp.o
    206   deps
    207     filterednormalizer2
    208     uniset_props  # for uniset_getUnicode32Instance()
    209     ucase
    210 
    211 group: unorm  # old normalization C API
    212     unorm.o
    213   deps
    214     filterednormalizer2
    215     uniset_props  # for uniset_getUnicode32Instance()
    216     uiter
    217 
    218 group: normlzr  # old Normalizer C++ class
    219     normlzr.o
    220   deps
    221     filterednormalizer2
    222     uniset_props  # for uniset_getUnicode32Instance()
    223     schriter
    224 
    225 group: uts46
    226     uts46.o
    227   deps
    228     normalizer2 loadednormalizer2 punycode
    229     uchar  # for u_charType() (via U_GET_GC_MASK(c))
    230     ubidi_props  # for u_charDirection() & ubidi_getJoiningType()
    231     bytestream
    232 
    233 group: filterednormalizer2
    234     filterednormalizer2.o
    235   deps
    236     normalizer2
    237 
    238 group: idna2003
    239     uidna.o
    240   deps
    241     stringprep punycode
    242 
    243 group: stringprep
    244     usprep.o
    245   deps
    246     unorm  # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
    247     normalizer2
    248     ubidi_props
    249 
    250 group: canonical_iterator
    251     caniter.o
    252   deps
    253     normalizer2 usetiter
    254 
    255 group: loadednormalizer2
    256     loadednormalizer2impl.o
    257   deps
    258     normalizer2
    259 
    260 group: normalizer2
    261     normalizer2.o
    262     normalizer2impl.o
    263   deps
    264     uniset_core
    265     bytestream bytesinkutil  # for UTF-8 output
    266     utrie2_builder  # for building CanonIterData & FCD
    267     uvector  # for building CanonIterData
    268     uhash  # for the instance cache
    269     udata
    270 
    271 group: punycode
    272     punycode.o
    273   deps
    274     platform
    275 
    276 group: uset_props
    277     uset_props.o
    278   deps
    279     uniset_closure uniset_props uniset_core
    280 
    281 group: uset
    282     uset.o
    283   deps
    284     uniset_core
    285 
    286 group: uniset_closure
    287     uniset_closure.o
    288   deps
    289     uniset_core unistr_case_locale unistr_titlecase_brkiter
    290 
    291 group: uniset_props
    292     uniset_props.o ruleiter.o
    293   deps
    294     uniset_core uprops unistr_case
    295     parsepos
    296     resourcebundle
    297     propname unames
    298 
    299 group: parsepos
    300     parsepos.o
    301   deps
    302     platform
    303 
    304 group: usetiter  # UnicodeSetIterator
    305     usetiter.o
    306   deps
    307     uniset_core
    308 
    309 group: uniset_core
    310     unifilt.o unifunct.o
    311     uniset.o bmpset.o unisetspan.o
    312   deps
    313     patternprops
    314     icu_utility
    315     uvector
    316 
    317 group: icu_utility_with_props
    318     util_props.o
    319   deps
    320     icu_utility uchar ucase
    321 
    322 group: icu_utility
    323     util.o
    324   deps
    325     patternprops platform
    326 
    327 group: utext
    328     utext.o
    329   deps
    330     ucase
    331 
    332 group: stringenumeration
    333     ustrenum.o uenum.o
    334   deps
    335     platform
    336 
    337 group: schriter
    338     schriter.o
    339     # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
    340     # so it depends on UnicodeString, therefore it makes little sense to split
    341     # schriter and uchriter into separate groups.
    342     uchriter.o
    343   deps
    344     chariter
    345 
    346 group: chariter
    347     chariter.o
    348   deps
    349     platform
    350 
    351 group: uiter
    352     uiter.o
    353   deps
    354     platform
    355 
    356 group: unistr_cnv
    357     unistr_cnv.o
    358   deps
    359     conversion
    360 
    361 group: cstr
    362     cstr.o
    363   deps
    364     unistr_cnv
    365 
    366 group: uscript
    367     uscript.o  # uscript_getCode() accepts a locale ID and loads its script code data
    368   deps
    369     propname loclikely
    370 
    371 group: uscript_props  # script metadata properties
    372     uscript_props.o
    373   deps
    374     platform
    375 
    376 group: uprops
    377     uprops.o
    378   deps
    379     normalizer2 loadednormalizer2
    380     uchar
    381     ubidi_props
    382     unistr_case ustring_case  # only for case folding
    383     ucase
    384 
    385 group: propname
    386     propname.o
    387   deps
    388     bytestrie
    389 
    390 group: unames
    391     unames.o
    392   deps
    393     uchar udata
    394 
    395 group: script_runs
    396     usc_impl.o
    397   deps
    398     uchar
    399 
    400 group: uchar
    401     uchar.o
    402   deps
    403     utrie2
    404 
    405 group: messagepattern  # for MessageFormat and tools
    406     messagepattern.o
    407   deps
    408     patternprops platform
    409 
    410 group: simpleformatter
    411     simpleformatter.o
    412   deps
    413     platform
    414 
    415 group: patternprops
    416     patternprops.o
    417   deps
    418     PIC
    419 
    420 group: ushape
    421     ushape.o
    422   deps
    423     ubidi_props
    424 
    425 group: ubidi
    426     ubidi.o ubidiln.o ubidiwrt.o
    427   deps
    428     ubidi_props
    429     uchar  # for doWriteReverse() which uses IS_COMBINING(u_charType(c))
    430 
    431 group: ubiditransform
    432     ubiditransform.o
    433   deps
    434     ubidi ushape
    435 
    436 group: ubidi_props
    437     ubidi_props.o
    438   deps
    439     utrie2
    440 
    441 group: unistr_props
    442     unistr_props.o
    443   deps
    444     uchar platform
    445 
    446 group: unistr_case_locale
    447     unistr_case_locale.o
    448   deps
    449     unistr_case ustring_case_locale
    450 
    451 group: unistr_case
    452     unistr_case.o
    453   deps
    454     ustring_case
    455 
    456 group: unistr_titlecase_brkiter
    457     unistr_titlecase_brkiter.o
    458   deps
    459     ustr_titlecase_brkiter
    460 
    461 group: ustr_titlecase_brkiter
    462     ustr_titlecase_brkiter.o
    463   deps
    464     breakiterator
    465     ustring_case_locale ucase
    466 
    467 group: edits
    468     edits.o
    469   deps
    470     platform
    471 
    472 group: ucasemap_titlecase_brkiter
    473     ucasemap_titlecase_brkiter.o
    474   deps
    475     ucasemap breakiterator utext
    476     ustr_titlecase_brkiter  # ustrcase_getTitleBreakIterator()
    477 
    478 group: ucasemap
    479     ucasemap.o
    480   deps
    481     ustring_case ustring_case_locale
    482     bytestream bytesinkutil  # for UTF-8 output
    483     resourcebundle  # uloc_getName() etc.
    484 
    485 group: ustring_case_locale
    486     ustrcase_locale.o
    487   deps
    488     ustring_case
    489     resourcebundle  # for uloc_getDefault()
    490 
    491 group: ustring_case
    492     ustrcase.o
    493   deps
    494     ucase uchar edits
    495 
    496 group: ucase
    497     ucase.o
    498   deps
    499     utrie2
    500 
    501 group: uinit
    502     uinit.o
    503   deps
    504     ucnv_io icuplug
    505 
    506 group: converter_selector
    507     ucnvsel.o
    508   deps
    509     conversion propsvec utrie2_builder uset ucnv_set
    510 
    511 group: ucnvdisp  # ucnv_getDisplayName()
    512     ucnvdisp.o
    513   deps
    514     conversion resourcebundle
    515 
    516 group: ucnv_set  # ucnv_getUnicodeSet
    517     ucnv_set.o
    518   deps
    519     uset
    520 
    521 group: conversion
    522     ustr_cnv.o
    523     ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
    524     ucnv_ct.o
    525     ucnvmbcs.o ucnv_ext.o
    526     ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
    527     ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
    528     ucnvbocu.o ucnvscsu.o
    529   deps
    530     ucnv_io
    531 
    532 group: ucnv_io
    533     ucnv_io.o
    534   deps
    535     sort stringenumeration udata
    536 
    537 group: service_registration
    538     serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
    539     locutil.o
    540   deps
    541     locale_display_names resourcebundle
    542     hashtable uvector
    543 
    544 group: listformatter
    545     listformatter.o ulistformatter.o
    546   deps
    547     resourcebundle simpleformatter
    548 
    549 group: ucat  # message-catalog-like API
    550     ucat.o
    551   deps
    552     resourcebundle
    553 
    554 group: locale_display_names
    555     locdispnames.o  # Locale.getDisplayName()
    556   deps
    557     locresdata
    558 
    559 group: locale_display_names2
    560     locdspnm.o  # class LocaleDisplayNames
    561   deps
    562     resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
    563 
    564 group: currency
    565     ucurr.o
    566   deps
    567     loclikely resourcebundle ulist ustring_case_locale
    568     stdlib_qsort  # for ucurr.o (which does not use ICU's uarrsort.o)
    569 
    570 group: icudataver  # u_getDataVersion()
    571     icudataver.o
    572   deps
    573     resourcebundle
    574 
    575 group: loclikely
    576     loclikely.o
    577   deps
    578     resourcebundle uscript_props propname
    579 
    580 group: locresdata
    581     # This was intended to collect locale functions that load resource bundle data.
    582     # See the resourcebundle group about what else loads data.
    583     locresdata.o
    584   deps
    585     resourcebundle
    586 
    587 group: resbund_cnv  # paths are Unicode strings
    588     resbund_cnv.o
    589   deps
    590     conversion resourcebundle ures_cnv
    591 
    592 group: ures_cnv  # ures_openU, path is a Unicode string
    593     ures_cnv.o
    594   deps
    595     conversion resourcebundle
    596 
    597 group: resourcebundle
    598     resource.o resbund.o uresbund.o uresdata.o
    599     locavailable.o
    600     # uloc_tag.c and uloc_keytype.cpp convert between
    601     # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
    602     # They use data from resource bundles for some of the mappings.
    603     # We might want to generate .h files for that data, to #include rather than load,
    604     # to minimize dependencies from this code.
    605     # Then we could separate this higher-level locale ID code from the resource bundle code.
    606     uloc.o uloc_tag.o uloc_keytype.o
    607     # Even basic locid.cpp via Locale constructors and Locale::getDefault()
    608     # depend on canonicalization and data loading.
    609     # We can probably only disentangle basic locale ID handling from resource bundle code
    610     # by hardcoding all of the locale ID data.
    611     locid.o locmap.o wintz.o
    612     # Do we need class LocaleBased? http://bugs.icu-project.org/trac/ticket/8608
    613     locbased.o
    614   deps
    615     udata ucol_swp
    616     sort stringenumeration uhash uvector
    617 
    618 group: udata
    619     udata.o ucmndata.o udatamem.o
    620     umapfile.o
    621   deps
    622     uhash platform stubdata
    623     file_io mmap_functions
    624 
    625 group: unifiedcache
    626     unifiedcache.o
    627   deps
    628     uhash
    629     platform
    630 
    631 group: ucharstriebuilder
    632     ucharstriebuilder.o
    633   deps
    634     ucharstrie stringtriebuilder sort
    635 
    636 group: ucharstrieiterator
    637     ucharstrieiterator.o
    638   deps
    639     ucharstrie uvector32
    640 
    641 group: ucharstrie
    642     ucharstrie.o
    643   deps
    644     platform
    645 
    646 group: bytestriebuilder
    647     bytestriebuilder.o
    648   deps
    649     bytestrie stringtriebuilder sort
    650 
    651 group: bytestrieiterator
    652     bytestrieiterator.o
    653   deps
    654     bytestrie uvector32
    655 
    656 group: bytestrie
    657     bytestrie.o
    658   deps
    659     platform
    660 
    661 group: stringtriebuilder
    662     stringtriebuilder.o
    663   deps
    664     uhash
    665 
    666 group: propsvec
    667     propsvec.o
    668   deps
    669     sort utrie2_builder
    670 
    671 group: utrie2_builder
    672     utrie2_builder.o
    673   deps
    674     platform
    675     utrie2
    676     utrie  # for utrie2_fromUTrie()
    677     ucol_swp  # for utrie_swap()
    678 
    679 group: utrie2
    680     utrie2.o
    681   deps
    682     platform
    683 
    684 group: utrie  # Callers should use utrie2 instead.
    685     utrie.o
    686   deps
    687     platform
    688 
    689 group: hashtable  # Maps UnicodeString to value.
    690     uhash_us.o
    691   deps
    692     uhash
    693 
    694 group: uhash
    695     uhash.o
    696   deps
    697     platform
    698 
    699 group: ustack
    700     ustack.o
    701   deps
    702     uvector
    703 
    704 group: uvector
    705     uvector.o
    706   deps
    707     platform
    708     sort  # for UVector::sort()
    709 
    710 group: uvector32
    711     uvectr32.o
    712   deps
    713     platform
    714 
    715 group: uvector64
    716     uvectr64.o
    717   deps
    718     platform
    719 
    720 group: ulist
    721     ulist.o
    722   deps
    723     platform
    724 
    725 group: sort
    726     uarrsort.o
    727   deps
    728     platform
    729 
    730 group: ustr_wcs
    731     ustr_wcs.o
    732   deps
    733     platform
    734 
    735 group: bytesinkutil
    736     bytesinkutil.o
    737   deps
    738     bytestream edits
    739 
    740 group: bytestream
    741     bytestream.o
    742   deps
    743     platform
    744 
    745 group: icuplug
    746     icuplug.o
    747   deps
    748     platform
    749 
    750 group: ucol_swp
    751     ucol_swp.o
    752   deps
    753     utrie2  # Format version 4 uses UTrie2.
    754 
    755 group: errorcode  # ErrorCode base class
    756     errorcode.o
    757   deps
    758     utypes
    759     platform
    760 
    761 group: utypes  # u_errorName()
    762     utypes.o
    763 
    764 group: platform
    765     # Files in the "platform" group.
    766     cmemory.o uobject.o
    767     cstring.o cwchar.o uinvchar.o
    768     charstr.o
    769     unistr.o  # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
    770     appendable.o stringpiece.o ustrtrns.o  # for unistr.o
    771     ustring.o  # Other platform files really just need u_strlen
    772     ustrfmt.o  # uprv_itou
    773     utf_impl.o
    774     putil.o
    775     ucln_cmn.o  # for putil.o which calls ucln_common_registerCleanup
    776     udataswp.o  # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
    777     umath.o
    778     umutex.o sharedobject.o
    779     utrace.o
    780   deps
    781     # The "platform" group has no ICU dependencies.
    782     PIC system_debug malloc_functions c_strings c_string_formatting
    783     floating_point pthread system_locale
    784     stdio_input readlink_function dir_io
    785     dlfcn  # Move related code into icuplug.c?
    786     cplusplus
    787 
    788 # ICU i18n library ----------------------------------------------------------- #
    789 
    790 library: i18n
    791   deps
    792     region localedata genderinfo charset_detector spoof_detection
    793     alphabetic_index collation collation_builder string_search
    794     dayperiodrules
    795     formatting formattable_cnv regex regex_cnv translit
    796     numberformatter
    797     universal_time_scale
    798     uclean_i18n
    799 
    800 group: region
    801     region.o uregion.o
    802   deps
    803     formatting  # Temporary, TODO: Ticket #9982 class Region should use low-level ASCII-integer functions, and probably be moved to the common library.
    804     resourcebundle
    805     uvector uclean_i18n
    806 
    807 group: localedata
    808     ulocdata.o
    809   deps
    810     uniset_props resourcebundle
    811     uset_props  # TODO: change to using C++ UnicodeSet, remove this dependency
    812     loclikely
    813 
    814 group: genderinfo
    815     gender.o
    816   deps
    817     resourcebundle
    818     uclean_i18n
    819 
    820 group: charset_detector
    821     csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
    822   deps
    823     conversion
    824     uclean_i18n
    825 
    826 group: spoof_detection
    827     uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
    828   deps
    829     uniset_props regex unorm uscript
    830 
    831 group: alphabetic_index
    832     alphaindex.o
    833   deps
    834     collation localedata
    835     uclean_i18n
    836 
    837 group: collation
    838     # The collation "runtime" code should not depend on the collation_builder code.
    839     # For example, loading from resource bundles does not fall back to
    840     # building from rules.
    841     collation.o collationcompare.o collationdata.o
    842     collationdatareader.o collationdatawriter.o
    843     collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
    844     collationroot.o collationrootelements.o collationsets.o
    845     collationsettings.o collationtailoring.o rulebasedcollator.o
    846     uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
    847     bocsu.o coleitr.o coll.o sortkey.o ucol.o
    848     ucol_res.o ucol_sit.o ucoleitr.o
    849   deps
    850     bytestream normalizer2 resourcebundle service_registration unifiedcache
    851     ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64
    852     uclean_i18n propname
    853 
    854 group: collation_builder
    855     collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
    856     collationruleparser.o collationweights.o
    857   deps
    858     canonical_iterator collation ucharstriebuilder uset_props
    859 
    860 group: string_search
    861     search.o stsearch.o usearch.o
    862   deps
    863     breakiterator collation
    864 
    865 group: dayperiodrules
    866     dayperiodrules.o
    867   deps
    868     resourcebundle uclean_i18n
    869 
    870 group: numberformatter
    871     # ICU 60+ NumberFormatter API
    872     number_affixutils.o number_compact.o number_decimalquantity.o
    873     number_decimfmtprops.o number_fluent.o number_formatimpl.o
    874     number_grouping.o number_integerwidth.o number_longnames.o
    875     number_modifiers.o number_notation.o number_padding.o
    876     number_patternmodifier.o number_patternstring.o number_rounding.o
    877     number_scientific.o number_stringbuilder.o
    878   deps
    879     digitlist formattable format units
    880     # TODO: fix: dependency on formatting needed for circular dependency pluralrules <-> decimfmt.o
    881     # We should be able to have a small pluralrules group and depend on that here.
    882     formatting
    883     uclean_i18n common
    884 
    885 group: formatting
    886     # TODO: Try to subdivide this ball of wax.
    887     # currencyformat
    888     curramt.o currfmt.o currpinf.o
    889     # decimalformat
    890     dcfmtsym.o numsys.o unumsys.o
    891     affixpatternparser.o decimfmtimpl.o digitaffix.o digitaffixesandpadding.o
    892     digitformatter.o digitgrouping.o digitinterval.o
    893     pluralaffix.o precision.o smallintformatter.o valueformatter.o
    894     decfmtst.o decimfmt.o decimalformatpattern.o compactdecimalformat.o
    895     numfmt.o unum.o
    896     winnmfmt.o
    897     # pluralrules
    898     standardplural.o plurrule.o upluralrules.o
    899     # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
    900     scientificnumberformatter.o
    901     # rbnf
    902     nfrs.o nfrule.o nfsubs.o rbnf.o
    903     # measureformat
    904     measfmt.o quantityformatter.o
    905     # dateformat
    906     astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
    907     gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
    908     ucal.o
    909     basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
    910     vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
    911     tzfmt.o tzgnames.o tznames.o tznames_impl.o
    912     datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
    913     smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
    914     udat.o
    915     tmunit.o tmutamt.o tmutfmt.o
    916     # messageformat
    917     choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
    918   deps
    919     digitlist formattable format units
    920     dayperiodrules
    921     collation collation_builder  # for rbnf
    922     common
    923     floating_point  # sqrt() for astro.o
    924     trigonometry  # for astro.o
    925     sharedbreakiterator # for reldatefmt.o
    926     uclean_i18n
    927 
    928 group: sharedbreakiterator
    929     sharedbreakiterator.o
    930   deps
    931     breakiterator
    932 
    933 group: units
    934     measunit.o currunit.o nounit.o
    935   deps
    936     stringenumeration
    937 
    938 group: digitlist
    939     digitlst.o decContext.o decNumber.o visibledigits.o
    940   deps
    941     uclean_i18n
    942 
    943 group: formattable
    944     fmtable.o
    945     measure.o
    946   deps
    947     digitlist
    948 
    949 group: formattable_cnv
    950     fmtable_cnv.o
    951   deps
    952     formattable unistr_cnv conversion
    953 
    954 group: format
    955     format.o fphdlimp.o fpositer.o ufieldpositer.o
    956   deps
    957     resourcebundle parsepos uvector32
    958 
    959 group: regex_cnv
    960     uregexc.o
    961   deps
    962     regex unistr_cnv
    963 
    964 group: regex
    965     regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
    966   deps
    967     uniset_closure utext uvector32 uvector64 ustack
    968     breakiterator
    969     uinit  # TODO: Really needed?
    970     uclean_i18n
    971 
    972 group: translit
    973     anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
    974     esctrn.o unesctrn.o nultrans.o
    975     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
    976   deps
    977     common
    978     formatting  # for Transliterator::getDisplayName()
    979     uclean_i18n
    980 
    981 group: universal_time_scale
    982     utmscale.o
    983 
    984 group: uclean_i18n
    985     ucln_in.o
    986   deps
    987     platform
    988 
    989 # ICU io library ------------------------------------------------------------- #
    990 
    991 library: io
    992   deps
    993     ustdio ustream uclean_io
    994 
    995 group: ustdio
    996     locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
    997   deps
    998     formatting conversion translit
    999     uclean_io
   1000     stdio_output
   1001 
   1002 group: ustream
   1003     ustream.o
   1004   deps
   1005     unistr_cnv
   1006     uchar  # for u_isWhitespace()
   1007     iostream
   1008 
   1009 group: uclean_io
   1010     ucln_io.o
   1011   deps
   1012     platform
   1013