# -*- 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
    localebuilder

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: localebuilder
    localebuilder.o
  deps
    resourcebundle

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