1 # -*- icu-dependencies -*-
2 # Copyright (C) 2016 and later: Unicode, Inc. and others.
3 # License & terms of use: http://www.unicode.org/copyright.html
4 # Copyright (C) 2011-2016, International Business Machines
5 # Corporation and others. All Rights Reserved.
7 # file name: dependencies.txt
9 # created on: 2011may26
10 # created by: Markus W. Scherer
12 # See http://site.icu-project.org/processes/release/tasks/healthy-code#TOC-Check-library-dependencies
14 # Standard library symbols used by ICU --------------------------------------- #
19 PIC system_misc system_debug malloc_functions ubsan
20 c_strings c_string_formatting
21 int_functions floating_point trigonometry
24 stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn
29 # Position-Independent Code (-fPIC) requires a Global Offset Table.
36 __assert_fail __stack_chk_fail
38 group: malloc_functions
42 # UBSan=UndefinedBehaviorSanitizer, clang -fsanitize=bounds
43 __ubsan_handle_out_of_bounds
47 __ctype_b_loc # for <ctype.h>
48 # We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
49 strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
50 memcmp memcpy memmove memset
51 # Additional symbols in an optimized build.
52 __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
53 __rawmemchr __memcpy_chk __memmove_chk __memset_chk
55 group: c_string_formatting
56 atoi atol strtod strtod_l strtol strtoul
58 # Additional symbols in an optimized build.
65 abs fabs floor ceil modf fmod log pow round sqrt trunc
68 acos asin atan atan2 cos sin tan
69 # Additional symbols in an optimized build.
76 pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock
77 pthread_cond_wait pthread_cond_broadcast pthread_cond_signal
81 nl_langinfo setlocale newlocale freelocale
82 gettimeofday localtime_r tzname tzset __timezone
85 fopen fclose fgets fread fseek ftell rewind feof fileno
86 # Additional symbols in an optimized build.
87 __fgets_chk __fread_chk
95 # Additional symbols in an optimized build.
98 group: readlink_function
99 readlink # putil.cpp uprv_tzname() calls this in a hack to get the time zone name
102 opendir closedir readdir # for a hack to get the time zone name
104 group: mmap_functions # for memory-mapped data loading
108 dlopen dlclose dlsym # called by putil.o only for icuplug.o
112 # The compiler generates references to the global operator delete
113 # even when no code actually uses it.
114 # ICU must not _use_ the global operator delete.
115 "operator delete(void*)"
116 # ICU also must not use the global operator new.
117 # "operator new[](unsigned long)"
119 # _Unwind_Resume is related to exceptions:
120 # "A call to this routine is inserted as the end of a landing pad that performs cleanup,
121 # but does not resume normal execution. It causes unwinding to proceed further."
122 # (Linux Standard Base Specification 1.3)
123 # Even though ICU does not actually use (nor handle) exceptions.
125 # std::terminate() looks similar to _Unwind_Resume:
126 # "Calls the current terminate handler."
130 "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)"
131 "std::basic_ios<char, std::char_traits<char> >::eof() const"
132 "std::basic_ios<char, std::char_traits<char> >::fail() const"
133 "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)"
134 std::ios_base::Init::Init()
135 std::ios_base::Init::~Init()
137 std::istream::putback(char)
138 # Additional symbols in an optimized build.
139 "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)"
141 # ICU common library --------------------------------------------------------- #
144 stubdata.o # Exports icudt48_dat.
147 # All files in the common library are listed in its dependencies.
149 # Libraries and groups that the common library depends on.
153 uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
154 normlzr unormcmp unorm
157 unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
159 uniset_core uniset_props uniset_closure usetiter uset uset_props
162 ucasemap ucasemap_titlecase_brkiter script_runs
163 uprops ubidi_props ucase uscript uscript_props
164 ubidi ushape ubiditransform
166 resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
169 locale_display_names2
170 conversion converter_selector ucnv_set ucnvdisp
171 messagepattern simpleformatter
172 icu_utility icu_utility_with_props
175 ucharstriebuilder ucharstrieiterator
176 bytestriebuilder bytestrieiterator
177 hashtable uhash uvector uvector32 uvector64 ulist
178 propsvec utrie2 utrie2_builder
180 uinit utypes errorcode
185 # TODO: Move to i18n library, ticket #11926.
190 group: date_interval # class DateInterval
196 # We could try to split off a breakiterator_builder group,
197 # but we still need uniset_props for code like in the ThaiBreakEngine constructor
199 # fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
200 brkiter.o brkeng.o ubrk.o
201 rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
202 rbbidata.o rbbirb.o rbbi_cache.o
203 dictionarydata.o dictbe.o
204 # BreakIterator::makeInstance() factory implementation makes for circular dependency
205 # between BreakIterator base and FilteredBreakIteratorBuilder.
208 resourcebundle service_registration
209 schriter utext uniset_core uniset_props
212 ucharstriebuilder # for filteredbrk.o
213 normlzr # for dictbe.o, should switch to Normalizer2
214 uvector32 # for dictbe.o
216 group: unormcmp # unorm_compare()
220 uniset_props # for uniset_getUnicode32Instance()
223 group: unorm # old normalization C API
227 uniset_props # for uniset_getUnicode32Instance()
230 group: normlzr # old Normalizer C++ class
234 uniset_props # for uniset_getUnicode32Instance()
240 normalizer2 loadednormalizer2 punycode
241 uchar # for u_charType() (via U_GET_GC_MASK(c))
242 ubidi_props # for u_charDirection() & ubidi_getJoiningType()
245 group: filterednormalizer2
246 filterednormalizer2.o
258 unorm # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
262 group: canonical_iterator
267 group: loadednormalizer2
268 loadednormalizer2impl.o
277 bytestream bytesinkutil # for UTF-8 output
278 utrie2_builder # for building CanonIterData & FCD
279 uvector # for building CanonIterData
280 uhash # for the instance cache
288 group: static_unicode_sets
289 static_unicode_sets.o
291 resourcebundle uniset_props
296 uniset_closure uniset_props uniset_core
303 group: uniset_closure
306 uniset_core unistr_case_locale unistr_titlecase_brkiter
309 uniset_props.o ruleiter.o
311 uniset_core uprops unistr_case
321 group: usetiter # UnicodeSetIterator
328 uniset.o bmpset.o unisetspan.o
334 group: icu_utility_with_props
337 icu_utility uchar ucase
342 patternprops platform
349 group: stringenumeration
356 # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
357 # so it depends on UnicodeString, therefore it makes little sense to split
358 # schriter and uchriter into separate groups.
384 uscript.o # uscript_getCode() accepts a locale ID and loads its script code data
388 group: uscript_props # script metadata properties
396 normalizer2 loadednormalizer2
399 unistr_case ustring_case # only for case folding
422 group: messagepattern # for MessageFormat and tools
425 patternprops platform
427 group: simpleformatter
443 ubidi.o ubidiln.o ubidiwrt.o
446 uchar # for doWriteReverse() which uses IS_COMBINING(u_charType(c))
448 group: ubiditransform
463 group: unistr_case_locale
466 unistr_case ustring_case_locale
473 group: unistr_titlecase_brkiter
474 unistr_titlecase_brkiter.o
476 ustr_titlecase_brkiter
478 group: ustr_titlecase_brkiter
479 ustr_titlecase_brkiter.o
482 ustring_case_locale ucase
487 # Edits::Iterator::toString() calls ICU_Utility::appendNumber()
491 group: ucasemap_titlecase_brkiter
492 ucasemap_titlecase_brkiter.o
494 ucasemap breakiterator utext
495 ustr_titlecase_brkiter # ustrcase_getTitleBreakIterator()
500 ustring_case ustring_case_locale
501 bytestream bytesinkutil # for UTF-8 output
502 resourcebundle # uloc_getName() etc.
504 group: ustring_case_locale
508 resourcebundle # for uloc_getDefault()
525 group: converter_selector
528 conversion propsvec utrie2_builder uset ucnv_set
530 group: ucnvdisp # ucnv_getDisplayName()
533 conversion resourcebundle
535 group: ucnv_set # ucnv_getUnicodeSet
542 ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
544 ucnvmbcs.o ucnv_ext.o
545 ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
546 ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
547 ucnvbocu.o ucnvscsu.o
554 sort stringenumeration udata
556 group: service_registration
557 serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
560 locale_display_names resourcebundle
564 listformatter.o ulistformatter.o
566 resourcebundle simpleformatter
568 group: ucat # message-catalog-like API
573 group: locale_display_names
574 locdispnames.o # Locale.getDisplayName()
578 group: locale_display_names2
579 locdspnm.o # class LocaleDisplayNames
581 resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
586 loclikely resourcebundle ulist ustring_case_locale
587 stdlib_qsort # for ucurr.o (which does not use ICU's uarrsort.o)
588 static_unicode_sets usetiter
590 group: icudataver # u_getDataVersion()
598 resourcebundle uscript_props propname
601 # This was intended to collect locale functions that load resource bundle data.
602 # See the resourcebundle group about what else loads data.
607 group: resbund_cnv # paths are Unicode strings
610 conversion resourcebundle ures_cnv
612 group: ures_cnv # ures_openU, path is a Unicode string
615 conversion resourcebundle
617 group: resourcebundle
618 resource.o resbund.o uresbund.o uresdata.o
620 # uloc_tag.c and uloc_keytype.cpp convert between
621 # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
622 # They use data from resource bundles for some of the mappings.
623 # We might want to generate .h files for that data, to #include rather than load,
624 # to minimize dependencies from this code.
625 # Then we could separate this higher-level locale ID code from the resource bundle code.
626 uloc.o uloc_tag.o uloc_keytype.o
627 # Even basic locid.cpp via Locale constructors and Locale::getDefault()
628 # depend on canonicalization and data loading.
629 # We can probably only disentangle basic locale ID handling from resource bundle code
630 # by hardcoding all of the locale ID data.
631 locid.o locmap.o wintz.o
632 # Do we need class LocaleBased? http://bugs.icu-project.org/trac/ticket/8608
636 sort stringenumeration uhash uvector
639 udata.o ucmndata.o udatamem.o
642 uhash platform stubdata
643 file_io mmap_functions
651 group: ucharstriebuilder
654 ucharstrie stringtriebuilder sort
656 group: ucharstrieiterator
666 group: bytestriebuilder
669 bytestrie stringtriebuilder sort
671 group: bytestrieiterator
681 group: stringtriebuilder
691 group: utrie2_builder
696 utrie # for utrie2_fromUTrie()
697 ucol_swp # for utrie_swap()
704 group: utrie # Callers should use utrie2 instead.
709 group: hashtable # Maps UnicodeString to value.
728 sort # for UVector::sort()
773 utrie2 # Format version 4 uses UTrie2.
775 group: errorcode # ErrorCode base class
781 group: utypes # u_errorName()
787 # Files in the "platform" group.
789 cstring.o cwchar.o uinvchar.o
791 unistr.o # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
792 appendable.o stringpiece.o ustrtrns.o # for unistr.o
793 ustring.o # Other platform files really just need u_strlen
794 ustrfmt.o # uprv_itou
797 ucln_cmn.o # for putil.o which calls ucln_common_registerCleanup
798 udataswp.o # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
800 umutex.o sharedobject.o
803 # The "platform" group has no ICU dependencies.
804 PIC system_misc system_debug malloc_functions ubsan
805 c_strings c_string_formatting
806 floating_point pthread system_locale
807 stdio_input readlink_function dir_io
808 dlfcn # Move related code into icuplug.c?
811 # ICU i18n library ----------------------------------------------------------- #
815 region localedata genderinfo charset_detector spoof_detection
816 alphabetic_index collation collation_builder string_search
818 formatting formattable_cnv regex regex_cnv translit
819 double_conversion number_representation numberformatter numberparser
826 formatting # Temporary, TODO: Ticket #9982 class Region should use low-level ASCII-integer functions, and probably be moved to the common library.
833 uniset_props resourcebundle
834 uset_props # TODO: change to using C++ UnicodeSet, remove this dependency
843 group: charset_detector
844 csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
849 group: spoof_detection
850 uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
852 uniset_props regex unorm uscript
854 group: alphabetic_index
861 # The collation "runtime" code should not depend on the collation_builder code.
862 # For example, loading from resource bundles does not fall back to
863 # building from rules.
864 collation.o collationcompare.o collationdata.o
865 collationdatareader.o collationdatawriter.o
866 collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
867 collationroot.o collationrootelements.o collationsets.o
868 collationsettings.o collationtailoring.o rulebasedcollator.o
869 uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
870 bocsu.o coleitr.o coll.o sortkey.o ucol.o
871 ucol_res.o ucol_sit.o ucoleitr.o
873 bytestream normalizer2 resourcebundle service_registration unifiedcache
874 ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64
877 group: collation_builder
878 collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
879 collationruleparser.o collationweights.o
881 canonical_iterator collation ucharstriebuilder uset_props
884 search.o stsearch.o usearch.o
886 breakiterator collation
888 group: dayperiodrules
891 resourcebundle uclean_i18n
893 group: double_conversion
894 double-conversion.o double-conversion-bignum.o double-conversion-bignum-dtoa.o
895 double-conversion-cached-powers.o double-conversion-diy-fp.o
896 double-conversion-fast-dtoa.o double-conversion-strtod.o
900 group: number_representation
901 number_decimalquantity.o number_stringbuilder.o numparse_stringsegment.o number_utils.o
903 decnumber double_conversion
904 # for data loading; that could be split off
909 group: numberformatter
910 # ICU 60+ NumberFormatter API
911 number_affixutils.o number_asformat.o
912 number_capi.o number_compact.o number_currencysymbols.o
913 number_decimfmtprops.o
914 number_fluent.o number_formatimpl.o
915 number_grouping.o number_integerwidth.o number_longnames.o
916 number_mapper.o number_modifiers.o number_multiplier.o
917 number_notation.o number_padding.o
918 number_patternmodifier.o number_patternstring.o number_rounding.o
919 number_scientific.o number_skeletons.o
920 currpinf.o dcfmtsym.o numsys.o
922 standardplural.o plurrule.o
924 decnumber double_conversion formattable format units
925 number_representation
929 numparse_affixes.o numparse_compositions.o numparse_currency.o
930 numparse_decimal.o numparse_impl.o numparse_parsednumber.o
931 numparse_scientific.o numparse_symbols.o
932 numparse_validators.o
937 # TODO: Try to subdivide this ball of wax.
944 decimfmt.o compactdecimalformat.o
947 # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
948 scientificnumberformatter.o
950 nfrs.o nfrule.o nfsubs.o rbnf.o
952 measfmt.o quantityformatter.o
954 astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
955 gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
957 basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
958 vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
959 tzfmt.o tzgnames.o tznames.o tznames_impl.o
960 datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
961 smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
963 tmunit.o tmutamt.o tmutfmt.o
965 choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
967 decnumber formattable format units numberformatter numberparser
969 collation collation_builder # for rbnf
971 floating_point # sqrt() for astro.o
972 trigonometry # for astro.o
973 sharedbreakiterator # for reldatefmt.o
976 group: sharedbreakiterator
977 sharedbreakiterator.o
982 measunit.o currunit.o nounit.o
987 decContext.o decNumber.o
989 double_conversion uclean_i18n
995 decnumber number_representation
997 group: formattable_cnv
1000 formattable unistr_cnv conversion
1003 format.o fphdlimp.o fpositer.o ufieldpositer.o
1005 resourcebundle parsepos uvector32
1013 regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
1015 uniset_closure utext uvector32 uvector64 ustack
1017 uinit # TODO: Really needed?
1021 anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
1022 esctrn.o unesctrn.o nultrans.o
1023 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
1026 formatting # for Transliterator::getDisplayName()
1029 group: universal_time_scale
1039 # ICU io library ------------------------------------------------------------- #
1043 ustdio ustream uclean_io
1046 locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
1048 formatting conversion translit
1056 uchar # for u_isWhitespace()