# -*- 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::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 # 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 >::clear(std::_Ios_Iostate)" "std::basic_ios >::eof() const" "std::basic_ios >::fail() const" "std::basic_ostream >& std::operator<< >(std::basic_ostream >&, 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 >& std::__ostream_insert >(std::basic_ostream >&, 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. localedata 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: localedata # TODO: Apple moved this to common ulocdata.o deps uniset_props resourcebundle uset_props # TODO: change to using C++ UnicodeSet, remove this dependency 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 localedata # for rbbi.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 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 icu_utility resourcebundle uvector uclean_i18n 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-20429) 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_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 region 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