# -*- 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
    pthread 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
    # 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: pthread
    pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock
    pthread_cond_wait pthread_cond_broadcast pthread_cond_signal

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

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

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? http://bugs.icu-project.org/trac/ticket/8608
    locbased.o
    loclikely.o
  deps
    udata ucol_swp
    sort stringenumeration uhash uvector
    uscript_props propname
    bytesinkutil

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

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 pthread 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 numberparser
    universal_time_scale
    uclean_i18n

group: region
    region.o uregion.o
  deps
    formatting  # Temporary, TODO: Ticket #9982 class Region should use low-level ASCII-integer functions, and probably be moved to the common library.
    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
    resourcebundle simpleformatter format uclean_i18n formatted_value_iterimpl

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

group: number_representation
    number_decimalquantity.o number_stringbuilder.o numparse_stringsegment.o number_utils.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
  deps
    # FormattedNumber internals:
    number_representation format
    # PluralRules internals:
    unifiedcache

group: numberformatter
    # ICU 60+ NumberFormatter API
    number_affixutils.o number_asformat.o
    number_capi.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_multiplier.o
    number_notation.o number_padding.o
    number_patternmodifier.o number_patternstring.o number_rounding.o
    number_scientific.o number_skeletons.o
    currpinf.o dcfmtsym.o numsys.o
    numrange_fluent.o numrange_impl.o
  deps
    decnumber double_conversion formattable units
    number_representation number_output
    uclean_i18n common

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 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

group: sharedbreakiterator
    sharedbreakiterator.o
  deps
    breakiterator

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

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
