# -*- 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_debug malloc_functions c_strings c_string_formatting floating_point trigonometry stdlib_qsort pthread system_locale stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn # C++ cplusplus iostream group: PIC # Position-Independent Code (-fPIC) requires a Global Offset Table. _GLOBAL_OFFSET_TABLE_ group: system_debug __assert_fail __stack_chk_fail group: malloc_functions free malloc realloc 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 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 strtol strtoul sprintf # Additional symbols in an optimized build. __sprintf_chk group: floating_point abs fabs floor ceil modf fmod log pow sqrt 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 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 >::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::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. 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 uiter ucasemap ucasemap_titlecase_brkiter script_runs uprops ubidi_props ucase uscript uscript_props ubidi ushape listformatter resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat loclikely 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 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 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 utrie 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 group: canonical_iterator caniter.o deps normalizer2 usetiter group: loadednormalizer2 loadednormalizer2impl.o deps normalizer2 group: normalizer2 normalizer2.o normalizer2impl.o deps uniset_core utrie2_builder # for building CanonIterData & FCD uvector # for building CanonIterData uhash # for the instance cache udata group: punycode punycode.o deps platform 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 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 loclikely 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: 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 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: 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: ucasemap_titlecase_brkiter ucasemap_titlecase_brkiter.o deps ucasemap breakiterator utext group: ucasemap ucasemap.o deps ustring_case 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 group: ucase ucase.o deps utrie2 group: uinit uinit.o deps ucnv_io icuplug group: converter_selector ucnvsel.o deps conversion propsvec utrie2_builder 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: listformatter listformatter.o ulistformatter.o deps resourcebundle simpleformatter 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 loclikely resourcebundle ulist ustring_case_locale stdlib_qsort # for ucurr.o (which does not use ICU's uarrsort.o) group: icudataver # u_getDataVersion() icudataver.o deps resourcebundle group: loclikely loclikely.o deps resourcebundle uscript_props propname 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 deps udata ucol_swp sort stringenumeration uhash uvector 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: utrie2_builder utrie2_builder.o deps platform utrie2 utrie # for utrie2_fromUTrie() ucol_swp # for utrie_swap() group: utrie2 utrie2.o deps platform group: utrie # Callers should use utrie2 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: bytestream bytestream.o deps platform group: icuplug icuplug.o deps platform group: ucol_swp ucol_swp.o deps utrie2 # Format version 4 uses UTrie2. group: errorcode # ErrorCode base class errorcode.o deps utypes platform group: utypes # u_errorName() utypes.o 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_debug malloc_functions c_strings c_string_formatting floating_point pthread system_locale stdio_input readlink_function dir_io dlfcn # Move related code into icuplug.c? cplusplus # ICU i18n library ----------------------------------------------------------- # library: i18n deps region localedata genderinfo charset_detector spoof_detection alphabetic_index collation collation_builder string_search dayperiodrules formatting formattable_cnv regex regex_cnv translit 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 loclikely 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 uspoof_wsconf.o identifier_info.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 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: formatting # TODO: Try to subdivide this ball of wax. # currencyformat curramt.o currfmt.o currpinf.o currunit.o # decimalformat dcfmtsym.o numsys.o unumsys.o affixpatternparser.o decimfmtimpl.o digitaffix.o digitaffixesandpadding.o digitformatter.o digitgrouping.o digitinterval.o pluralaffix.o precision.o smallintformatter.o valueformatter.o decfmtst.o decimfmt.o decimalformatpattern.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 measunit.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 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 digitlist formattable format dayperiodrules pluralrules 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: digitlist digitlst.o decContext.o decNumber.o visibledigits.o deps platform group: formattable fmtable.o measure.o deps digitlist group: formattable_cnv fmtable_cnv.o deps formattable unistr_cnv conversion group: format format.o fphdlimp.o fpositer.o ufieldpositer.o deps resourcebundle parsepos uvector32 group: pluralrules standardplural.o plurrule.o upluralrules.o deps digitlist # plurals depend on decimals patternprops resourcebundle uvector uvector32 unifiedcache unistr_case_locale uclean_i18n 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 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