# -*- icu-dependencies -*-
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# Copyright (C) 2011-2016, International Business Machines
# Corporation and others. All Rights Reserved.
#
# file name: dependencies.txt
#
# created on: 2011may26
# created by: Markus W. Scherer
#
# See http://site.icu-project.org/processes/release/tasks/healthy-code#TOC-Check-library-dependencies

# Standard library symbols used by ICU --------------------------------------- #

system_symbols:
  deps
    # C
    PIC system_misc system_debug malloc_functions ubsan
    c_strings c_string_formatting
    int_functions floating_point trigonometry
    stdlib_qsort
    system_locale
    stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn
    # C++
    cplusplus iostream
    std_mutex

group: PIC
    # Position-Independent Code (-fPIC) requires a Global Offset Table.
    _GLOBAL_OFFSET_TABLE_

group: system_misc
    abort

group: system_debug
    __assert_fail __stack_chk_fail

group: malloc_functions
    free malloc realloc

group: std_mutex
    std::condition_variable::notify_one()
    std::condition_variable::wait(std::unique_lock<std::mutex>&)
    std::condition_variable::notify_all()
    std::condition_variable::condition_variable()
    std::condition_variable::~condition_variable()
    std::condition_variable_any::condition_variable_any()
    std::condition_variable_any::~condition_variable_any()

group: ubsan
    # UBSan=UndefinedBehaviorSanitizer, clang -fsanitize=bounds
    __ubsan_handle_out_of_bounds

group: c_strings
    isspace isdigit
    __ctype_b_loc  # for <ctype.h>
    # We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
    strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
    memchr memcmp memcpy memmove memset
    # BSD version of memcmp().
    bcmp
    # Additional symbols in an optimized build.
    __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
    __rawmemchr __memcpy_chk __memmove_chk __memset_chk

group: c_string_formatting
    atoi atol strtod strtod_l strtol strtoul
    sprintf snprintf
    # Additional symbols in an optimized build.
    __sprintf_chk

group: int_functions
    div

group: floating_point
    abs fabs floor ceil modf fmod log pow round sqrt trunc

group: trigonometry
    acos asin atan atan2 cos sin tan
    # Additional symbols in an optimized build.
    sincos

group: stdlib_qsort
    qsort

group: system_locale
    getenv
    nl_langinfo setlocale newlocale freelocale
    gettimeofday localtime_r tzname tzset __timezone

group: stdio_input
    fopen fclose fgets fread fseek ftell rewind feof fileno
    # Additional symbols in an optimized build.
    __fgets_chk __fread_chk fread_unlocked

group: stdio_output
    fflush fwrite
    stdout

group: file_io
    open close stat
    # Additional symbols in an optimized build.
    __xstat

group: readlink_function
    readlink  # putil.cpp uprv_tzname() calls this in a hack to get the time zone name

group: dir_io
    opendir closedir readdir  # for a hack to get the time zone name

group: mmap_functions  # for memory-mapped data loading
    mmap munmap

group: dlfcn
    dlopen dlclose dlsym  # called by putil.o only for icuplug.o

group: cplusplus
    __dynamic_cast
    # The compiler generates references to the global operator delete
    # even when no code actually uses it.
    # ICU must not _use_ the global operator delete.
    "operator delete(void*)"
    # ICU also must not use the global operator new.
    # "operator new[](unsigned long)"

    # _Unwind_Resume is related to exceptions:
    # "A call to this routine is inserted as the end of a landing pad that performs cleanup,
    # but does not resume normal execution. It causes unwinding to proceed further."
    # (Linux Standard Base Specification 1.3)
    # Even though ICU does not actually use (nor handle) exceptions.
    _Unwind_Resume
    # std::terminate() looks similar to _Unwind_Resume:
    # "Calls the current terminate handler."
    std::terminate()

group: iostream
    "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)"
    "std::basic_ios<char, std::char_traits<char> >::eof() const"
    "std::basic_ios<char, std::char_traits<char> >::fail() const"
    "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)"
    std::ios_base::Init::Init()
    std::ios_base::Init::~Init()
    std::istream::get()
    std::istream::putback(char)
    # Additional symbols in an optimized build.
    "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)"

# ICU common library --------------------------------------------------------- #

library: stubdata
    stubdata.o  # Exports icudt48_dat.

library: common
    # All files in the common library are listed in its dependencies.
  deps
    # Libraries and groups that the common library depends on.
    pluralmap
    date_interval
    breakiterator
    uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
    normlzr unormcmp unorm
    idna2003 stringprep
    stringenumeration
    unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
    cstr
    uniset_core uniset_props uniset_closure usetiter uset uset_props
    static_unicode_sets
    uiter edits
    ucasemap ucasemap_titlecase_brkiter script_runs
    uprops ubidi_props ucase uscript uscript_props characterproperties
    ubidi ushape ubiditransform
    resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
    currency
    locale_display_names2
    conversion converter_selector ucnv_set ucnvdisp
    messagepattern simpleformatter
    icu_utility icu_utility_with_props
    ustr_wcs
    unifiedcache
    ucharstriebuilder ucharstrieiterator
    bytestriebuilder bytestrieiterator
    hashtable uhash uvector uvector32 uvector64 ulist
    propsvec utrie2 utrie2_builder ucptrie umutablecptrie utrie_swap
    sort
    uinit utypes errorcode
    icuplug
    platform
    localematcher

group: pluralmap
    # TODO: Move to i18n library, ticket #11926.
    pluralmap.o
  deps
    platform

group: date_interval  # class DateInterval
    dtintrv.o
  deps
    platform

group: breakiterator
    # We could try to split off a breakiterator_builder group,
    # but we still need uniset_props for code like in the ThaiBreakEngine constructor
    # which does
    #   fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
    brkiter.o brkeng.o ubrk.o
    rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
    rbbidata.o rbbirb.o rbbi_cache.o
    dictionarydata.o dictbe.o
    # BreakIterator::makeInstance() factory implementation makes for circular dependency
    # between BreakIterator base and FilteredBreakIteratorBuilder.
    filteredbrk.o
  deps
    resourcebundle service_registration
    schriter utext uniset_core uniset_props
    uhash ustack utrie2_builder
    ucharstrie bytestrie
    ucharstriebuilder  # for filteredbrk.o
    normlzr  # for dictbe.o, should switch to Normalizer2
    uvector32 # for dictbe.o

group: unormcmp  # unorm_compare()
    unormcmp.o
  deps
    filterednormalizer2
    uniset_props  # for uniset_getUnicode32Instance()
    ucase

group: unorm  # old normalization C API
    unorm.o
  deps
    filterednormalizer2
    uniset_props  # for uniset_getUnicode32Instance()
    uiter

group: normlzr  # old Normalizer C++ class
    normlzr.o
  deps
    filterednormalizer2
    uniset_props  # for uniset_getUnicode32Instance()
    schriter

group: uts46
    uts46.o
  deps
    normalizer2 loadednormalizer2 punycode
    uchar  # for u_charType() (via U_GET_GC_MASK(c))
    ubidi_props  # for u_charDirection() & ubidi_getJoiningType()
    bytestream

group: filterednormalizer2
    filterednormalizer2.o
  deps
    normalizer2

group: idna2003
    uidna.o
  deps
    stringprep punycode

group: stringprep
    usprep.o
  deps
    unorm  # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
    normalizer2
    ubidi_props utrie

group: canonical_iterator
    caniter.o
  deps
    normalizer2 usetiter

group: loadednormalizer2
    loadednormalizer2impl.o
  deps
    normalizer2

group: normalizer2
    normalizer2.o
    normalizer2impl.o
  deps
    uniset_core
    bytestream bytesinkutil  # for UTF-8 output
    umutablecptrie  # for building CanonIterData & FCD
    utrie_swap  # TODO(ICU-20170): move unorm2_swap() to a separate file
    uvector  # for building CanonIterData
    uhash  # for the instance cache
    udata

group: punycode
    punycode.o
  deps
    platform

group: static_unicode_sets
    static_unicode_sets.o
  deps
    resourcebundle uniset_props

group: uset_props
    uset_props.o
  deps
    uniset_closure uniset_props uniset_core

group: uset
    uset.o
  deps
    uniset_core

group: uniset_closure
    uniset_closure.o
  deps
    uniset_core unistr_case_locale unistr_titlecase_brkiter

group: uniset_props
    uniset_props.o ruleiter.o
  deps
    uniset_core uprops unistr_case characterproperties
    parsepos
    resourcebundle
    propname unames

group: parsepos
    parsepos.o
  deps
    platform

group: usetiter  # UnicodeSetIterator
    usetiter.o
  deps
    uniset_core

group: uniset_core
    unifilt.o unifunct.o
    uniset.o bmpset.o unisetspan.o
  deps
    patternprops
    icu_utility
    uvector

group: icu_utility_with_props
    util_props.o
  deps
    icu_utility uchar ucase

group: icu_utility
    util.o
  deps
    patternprops platform

group: utext
    utext.o
  deps
    ucase

group: stringenumeration
    ustrenum.o uenum.o
  deps
    platform

group: schriter
    schriter.o
    # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
    # so it depends on UnicodeString, therefore it makes little sense to split
    # schriter and uchriter into separate groups.
    uchriter.o
  deps
    chariter

group: chariter
    chariter.o
  deps
    platform

group: uiter
    uiter.o
  deps
    platform

group: unistr_cnv
    unistr_cnv.o
  deps
    conversion

group: cstr
    cstr.o
  deps
    unistr_cnv

group: uscript
    uscript.o  # uscript_getCode() accepts a locale ID and loads its script code data
  deps
    propname resourcebundle

group: uscript_props  # script metadata properties
    uscript_props.o
  deps
    platform

group: uprops
    uprops.o
  deps
    normalizer2 loadednormalizer2
    uchar
    ubidi_props
    unistr_case ustring_case  # only for case folding
    ucase

group: characterproperties
    characterproperties.o
  deps
    uprops
    uniset_core

group: propname
    propname.o
  deps
    bytestrie

group: unames
    unames.o
  deps
    uchar udata

group: script_runs
    usc_impl.o
  deps
    uchar

group: uchar
    uchar.o
  deps
    utrie2

group: messagepattern  # for MessageFormat and tools
    messagepattern.o
  deps
    patternprops platform

group: simpleformatter
    simpleformatter.o
  deps
    platform

group: patternprops
    patternprops.o
  deps
    PIC ubsan

group: ushape
    ushape.o
  deps
    ubidi_props

group: ubidi
    ubidi.o ubidiln.o ubidiwrt.o
  deps
    ubidi_props
    uchar  # for doWriteReverse() which uses IS_COMBINING(u_charType(c))

group: ubiditransform
    ubiditransform.o
  deps
    ubidi ushape

group: ubidi_props
    ubidi_props.o
  deps
    utrie2

group: unistr_props
    unistr_props.o
  deps
    uchar platform

group: unistr_case_locale
    unistr_case_locale.o
  deps
    unistr_case ustring_case_locale

group: unistr_case
    unistr_case.o
  deps
    ustring_case

group: unistr_titlecase_brkiter
    unistr_titlecase_brkiter.o
  deps
    ustr_titlecase_brkiter

group: ustr_titlecase_brkiter
    ustr_titlecase_brkiter.o
  deps
    breakiterator
    ustring_case_locale ucase

group: edits
    edits.o
  deps
    # Edits::Iterator::toString() calls ICU_Utility::appendNumber()
    icu_utility
    platform

group: ucasemap_titlecase_brkiter
    ucasemap_titlecase_brkiter.o
  deps
    ucasemap breakiterator utext
    ustr_titlecase_brkiter  # ustrcase_getTitleBreakIterator()

group: ucasemap
    ucasemap.o
  deps
    ustring_case ustring_case_locale
    bytestream bytesinkutil  # for UTF-8 output
    resourcebundle  # uloc_getName() etc.

group: ustring_case_locale
    ustrcase_locale.o
  deps
    ustring_case
    resourcebundle  # for uloc_getDefault()

group: ustring_case
    ustrcase.o
  deps
    ucase uchar edits

group: ucase
    ucase.o
  deps
    utrie2

group: uinit
    uinit.o
  deps
    ucnv_io icuplug

group: converter_selector
    ucnvsel.o
  deps
    conversion propsvec utrie2_builder utrie_swap uset ucnv_set

group: ucnvdisp  # ucnv_getDisplayName()
    ucnvdisp.o
  deps
    conversion resourcebundle

group: ucnv_set  # ucnv_getUnicodeSet
    ucnv_set.o
  deps
    uset

group: conversion
    ustr_cnv.o
    ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
    ucnv_ct.o
    ucnvmbcs.o ucnv_ext.o
    ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
    ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
    ucnvbocu.o ucnvscsu.o
  deps
    ucnv_io

group: ucnv_io
    ucnv_io.o
  deps
    sort stringenumeration udata

group: service_registration
    serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
    locutil.o
  deps
    locale_display_names resourcebundle
    hashtable uvector

group: ucat  # message-catalog-like API
    ucat.o
  deps
    resourcebundle

group: locale_display_names
    locdispnames.o  # Locale.getDisplayName()
  deps
    locresdata

group: locale_display_names2
    locdspnm.o  # class LocaleDisplayNames
  deps
    resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar

group: currency
    ucurr.o
  deps
    resourcebundle ulist ustring_case_locale
    stdlib_qsort  # for ucurr.o (which does not use ICU's uarrsort.o)
    static_unicode_sets usetiter

group: icudataver  # u_getDataVersion()
    icudataver.o
  deps
    resourcebundle

group: locresdata
    # This was intended to collect locale functions that load resource bundle data.
    # See the resourcebundle group about what else loads data.
    locresdata.o
  deps
    resourcebundle

group: resbund_cnv  # paths are Unicode strings
    resbund_cnv.o
  deps
    conversion resourcebundle ures_cnv

group: ures_cnv  # ures_openU, path is a Unicode string
    ures_cnv.o
  deps
    conversion resourcebundle

group: resourcebundle
    resource.o resbund.o uresbund.o uresdata.o
    locavailable.o
    # uloc_tag.c and uloc_keytype.cpp convert between
    # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
    # They use data from resource bundles for some of the mappings.
    # We might want to generate .h files for that data, to #include rather than load,
    # to minimize dependencies from this code.
    # Then we could separate this higher-level locale ID code from the resource bundle code.
    uloc.o uloc_tag.o uloc_keytype.o
    # Even basic locid.cpp via Locale constructors and Locale::getDefault()
    # depend on canonicalization and data loading.
    # We can probably only disentangle basic locale ID handling from resource bundle code
    # by hardcoding all of the locale ID data.
    locid.o locmap.o wintz.o
    # Do we need class LocaleBased? https://unicode-org.atlassian.net/browse/ICU-8608
    locbased.o
    loclikely.o
    localebuilder.o
  deps
    udata ucol_swp
    sort stringenumeration uhash uvector
    uscript_props propname
    bytesinkutil
    errorcode

group: localematcher
    localematcher.o
  deps
    resourcebundle localeprioritylist loclikelysubtags locdistance lsr

group: localeprioritylist
    localeprioritylist.o
  deps
    resourcebundle

group: locdistance
    locdistance.o
  deps
    loclikelysubtags

group: loclikelysubtags
    loclikelysubtags.o
  deps
    lsr resourcebundle

group: lsr
    lsr.o
  deps
    platform

group: udata
    udata.o ucmndata.o udatamem.o restrace.o
    umapfile.o
  deps
    uhash platform stubdata
    file_io mmap_functions
    icu_utility

group: unifiedcache
    unifiedcache.o
  deps
    uhash
    platform

group: ucharstriebuilder
    ucharstriebuilder.o
  deps
    ucharstrie stringtriebuilder sort

group: ucharstrieiterator
    ucharstrieiterator.o
  deps
    ucharstrie uvector32

group: ucharstrie
    ucharstrie.o
  deps
    platform

group: bytestriebuilder
    bytestriebuilder.o
  deps
    bytestrie stringtriebuilder sort

group: bytestrieiterator
    bytestrieiterator.o
  deps
    bytestrie uvector32

group: bytestrie
    bytestrie.o
  deps
    platform

group: stringtriebuilder
    stringtriebuilder.o
  deps
    uhash

group: propsvec
    propsvec.o
  deps
    sort utrie2_builder

group: utrie_swap
    utrie_swap.o
  deps
    udata

group: umutablecptrie
    umutablecptrie.o
  deps
    ucptrie

group: ucptrie
    ucptrie.o
  deps
    platform

group: utrie2_builder
    utrie2_builder.o
  deps
    platform
    utrie2
    utrie  # for utrie2_fromUTrie()

group: utrie2  # Try to switch users to ucptrie.
    utrie2.o
  deps
    platform

group: utrie  # Callers should use ucptrie instead.
    utrie.o
  deps
    platform

group: hashtable  # Maps UnicodeString to value.
    uhash_us.o
  deps
    uhash

group: uhash
    uhash.o
  deps
    platform

group: ustack
    ustack.o
  deps
    uvector

group: uvector
    uvector.o
  deps
    platform
    sort  # for UVector::sort()

group: uvector32
    uvectr32.o
  deps
    platform

group: uvector64
    uvectr64.o
  deps
    platform

group: ulist
    ulist.o
  deps
    platform

group: sort
    uarrsort.o
  deps
    platform

group: ustr_wcs
    ustr_wcs.o
  deps
    platform

group: bytesinkutil
    bytesinkutil.o
  deps
    bytestream edits

group: bytestream
    bytestream.o
  deps
    platform

group: icuplug
    icuplug.o
  deps
    platform

group: ucol_swp
    ucol_swp.o
  deps
    utrie_swap

group: errorcode  # ErrorCode base class
    errorcode.o
  deps
    utypes
    platform

group: utypes  # u_errorName()
    utypes.o
  deps
    ubsan

group: platform
    # Files in the "platform" group.
    cmemory.o uobject.o
    cstring.o cwchar.o uinvchar.o
    charstr.o
    unistr.o  # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
    appendable.o stringpiece.o ustrtrns.o  # for unistr.o
    ustring.o  # Other platform files really just need u_strlen
    ustrfmt.o  # uprv_itou
    utf_impl.o
    putil.o
    ucln_cmn.o  # for putil.o which calls ucln_common_registerCleanup
    udataswp.o  # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
    umath.o
    umutex.o sharedobject.o
    utrace.o
  deps
    # The "platform" group has no ICU dependencies.
    PIC system_misc system_debug malloc_functions ubsan
    c_strings c_string_formatting
    floating_point system_locale
    stdio_input readlink_function dir_io
    dlfcn  # Move related code into icuplug.c?
    cplusplus
    std_mutex

# ICU i18n library ----------------------------------------------------------- #

library: i18n
  deps
    region localedata genderinfo charset_detector spoof_detection
    alphabetic_index collation collation_builder string_search
    dayperiodrules
    listformatter
    formatting formattable_cnv regex regex_cnv translit
    double_conversion number_representation number_output numberformatter
    number_skeletons number_usageprefs numberparser
    units_extra unitsformatter
    universal_time_scale
    uclean_i18n

group: region
    region.o uregion.o
  deps
    icu_utility
    resourcebundle
    uvector uclean_i18n

group: localedata
    ulocdata.o
  deps
    uniset_props resourcebundle
    uset_props  # TODO: change to using C++ UnicodeSet, remove this dependency

group: genderinfo
    gender.o
  deps
    resourcebundle
    uclean_i18n

group: charset_detector
    csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
  deps
    conversion
    uclean_i18n

group: spoof_detection
    uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
  deps
    uniset_props regex unorm uscript

group: alphabetic_index
    alphaindex.o
  deps
    collation localedata
    uclean_i18n

group: collation
    # The collation "runtime" code should not depend on the collation_builder code.
    # For example, loading from resource bundles does not fall back to
    # building from rules.
    collation.o collationcompare.o collationdata.o
    collationdatareader.o collationdatawriter.o
    collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
    collationroot.o collationrootelements.o collationsets.o
    collationsettings.o collationtailoring.o rulebasedcollator.o
    uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
    bocsu.o coleitr.o coll.o sortkey.o ucol.o
    ucol_res.o ucol_sit.o ucoleitr.o
  deps
    bytestream normalizer2 resourcebundle service_registration unifiedcache
    ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64 utrie2
    uclean_i18n propname

group: collation_builder
    collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
    collationruleparser.o collationweights.o
  deps
    canonical_iterator collation ucharstriebuilder uset_props

group: string_search
    search.o stsearch.o usearch.o
  deps
    breakiterator collation

group: dayperiodrules
    dayperiodrules.o
  deps
    resourcebundle uclean_i18n

group: listformatter
    listformatter.o ulistformatter.o
  deps
    uchar resourcebundle simpleformatter format uclean_i18n formatted_value_sbimpl

group: double_conversion
    double-conversion-bignum.o double-conversion-double-to-string.o
    double-conversion-bignum-dtoa.o double-conversion-cached-powers.o
    double-conversion-string-to-double.o double-conversion-fast-dtoa.o
    double-conversion-strtod.o
  deps
    platform

group: number_representation
    number_decimalquantity.o string_segment.o number_utils.o
    # TODO(ICU-21058) Move formatted_string_builder to its own unit.
    formatted_string_builder.o
  deps
    decnumber double_conversion
    # for trimming whitespace around fields
    static_unicode_sets
    # for data loading; that could be split off
    resourcebundle
    int_functions
    ucase uniset_core
    formatted_value

group: number_output
    # PluralRules and FormattedNumber
    number_output.o
    standardplural.o plurrule.o pluralranges.o
  deps
    # FormattedNumber internals:
    number_representation format formatted_value_sbimpl units
    # PluralRules internals:
    unifiedcache

group: numberformatter
    # ICU 60+ NumberFormatter API
    number_affixutils.o
    number_compact.o number_currencysymbols.o
    number_decimfmtprops.o
    number_fluent.o number_formatimpl.o
    number_grouping.o number_integerwidth.o number_longnames.o
    number_mapper.o number_modifiers.o
    number_notation.o number_padding.o
    number_patternmodifier.o number_patternstring.o
    number_scientific.o
    currpinf.o
    numrange_fluent.o numrange_impl.o
  deps
    decnumber double_conversion formattable units unitsformatter
    listformatter number_representation number_output
    numsys
    number_usageprefs
    number_rounding
    number_symbolswrapper
    uclean_i18n common

group: numsys
    dcfmtsym.o
    numsys.o
  deps
    currency
    resourcebundle
    uclean_i18n

group: number_usageprefs
    number_multiplier.o
    number_usageprefs.o
  deps
    number_rounding
    number_symbolswrapper
    unitsformatter

group: number_rounding
    number_rounding.o
  deps
    currency
    number_representation

group: number_skeletons
    # Number skeleton support; separated from numberformatter
    number_skeletons.o number_capi.o number_asformat.o numrange_capi.o
  deps
    numberformatter
    units_extra

group: number_symbolswrapper
    number_symbolswrapper.o
  deps
    platform
    numsys

group: numberparser
    numparse_affixes.o numparse_compositions.o numparse_currency.o
    numparse_decimal.o numparse_impl.o numparse_parsednumber.o
    numparse_scientific.o numparse_symbols.o
    numparse_validators.o
  deps
    numberformatter

group: formatting
    # TODO: Try to subdivide this ball of wax.
    # currencyformat
    curramt.o currfmt.o
    # pluralrules C API
    upluralrules.o
    # decimalformat
    unumsys.o
    decimfmt.o compactdecimalformat.o
    numfmt.o unum.o
    winnmfmt.o
    # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
    scientificnumberformatter.o
    # rbnf
    nfrs.o nfrule.o nfsubs.o rbnf.o
    # measureformat
    measfmt.o quantityformatter.o
    # dateformat
    astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
    gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
    erarules.o  # mostly for Japanese eras
    ucal.o
    basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
    vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
    tzfmt.o tzgnames.o tznames.o tznames_impl.o
    datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
    smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
    udat.o
    tmunit.o tmutamt.o tmutfmt.o
    # messageformat
    choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
  deps
    decnumber formattable format units numberformatter number_skeletons numberparser
    formatted_value_sbimpl
    listformatter
    dayperiodrules
    collation collation_builder  # for rbnf
    common
    floating_point  # sqrt() for astro.o
    trigonometry  # for astro.o
    sharedbreakiterator # for reldatefmt.o
    uclean_i18n
    region
    formatted_value_iterimpl  # NOTE (2020-08-27): Not currently used.

group: sharedbreakiterator
    sharedbreakiterator.o
  deps
    breakiterator

group: units_extra
    measunit_extra.o
  deps
    units bytestriebuilder bytestrie resourcebundle uclean_i18n

group: units
    measunit.o currunit.o
  deps
    stringenumeration errorcode

group: unitsformatter
    units_data.o units_converter.o units_complexconverter.o units_router.o
  deps
    resourcebundle units_extra double_conversion number_representation formattable sort
    number_rounding

group: decnumber
    decContext.o decNumber.o
  deps
    double_conversion uclean_i18n

group: formattable
    fmtable.o
    measure.o
  deps
    decnumber number_representation

group: formattable_cnv
    fmtable_cnv.o
  deps
    formattable unistr_cnv conversion

group: formatted_value
    formattedvalue.o
  deps
    platform

group: formatted_value_iterimpl
    formattedval_iterimpl.o
  deps
    formatted_value format uvector32

group: formatted_value_sbimpl
    formattedval_sbimpl.o
  deps
    number_representation

group: format
    format.o fphdlimp.o fpositer.o ufieldpositer.o
  deps
    resourcebundle parsepos uvector32

group: regex_cnv
    uregexc.o
  deps
    regex unistr_cnv

group: regex
    regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
  deps
    uniset_closure utext uvector32 uvector64 ustack
    breakiterator
    uinit  # TODO: Really needed?
    uclean_i18n

group: translit
    anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
    esctrn.o unesctrn.o nultrans.o
    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
  deps
    common
    formatting  # for Transliterator::getDisplayName()
    uclean_i18n

group: universal_time_scale
    utmscale.o
  deps
    ubsan

group: uclean_i18n
    ucln_in.o
  deps
    platform

# ICU io library ------------------------------------------------------------- #

library: io
  deps
    ustdio ustream uclean_io

group: ustdio
    locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
  deps
    formatting conversion translit
    uclean_io
    stdio_output

group: ustream
    ustream.o
  deps
    unistr_cnv
    uchar  # for u_isWhitespace()
    iostream

group: uclean_io
    ucln_io.o
  deps
    platform
