# -*- 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
    # 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
    localebuilder 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
  deps
    udata ucol_swp
    sort stringenumeration uhash uvector
    uscript_props propname
    bytesinkutil
    errorcode

group: localebuilder
    localebuilder.o
  deps
    resourcebundle

group: localematcher
    localematcher.o
  deps
    localebuilder 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 numberparser
    units_extra
    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_iterimpl

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
  deps
    # FormattedNumber internals:
    number_representation format formatted_value_sbimpl
    # 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_multiplier.o
    number_notation.o number_padding.o
    number_patternmodifier.o number_patternstring.o number_rounding.o
    number_scientific.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: 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: 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

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