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
30 # Position-Independent Code (-fPIC) requires a Global Offset Table.
37 __assert_fail __stack_chk_fail
39 group: malloc_functions
43 std::condition_variable::notify_one()
44 std::condition_variable::wait(std::unique_lock<std::mutex>&)
45 std::condition_variable::notify_all()
46 std::condition_variable::condition_variable()
47 std::condition_variable::~condition_variable()
48 std::condition_variable_any::condition_variable_any()
49 std::condition_variable_any::~condition_variable_any()
52 # UBSan=UndefinedBehaviorSanitizer, clang -fsanitize=bounds
53 __ubsan_handle_out_of_bounds
57 __ctype_b_loc # for <ctype.h>
58 # We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
59 strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
60 memchr memcmp memcpy memmove memset
61 # Additional symbols in an optimized build.
62 __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
63 __rawmemchr __memcpy_chk __memmove_chk __memset_chk
65 group: c_string_formatting
66 atoi atol strtod strtod_l strtol strtoul
68 # Additional symbols in an optimized build.
75 abs fabs floor ceil modf fmod log pow round sqrt trunc
78 acos asin atan atan2 cos sin tan
79 # Additional symbols in an optimized build.
87 nl_langinfo setlocale newlocale freelocale
88 gettimeofday localtime_r tzname tzset __timezone
91 fopen fclose fgets fread fseek ftell rewind feof fileno
92 # Additional symbols in an optimized build.
93 __fgets_chk __fread_chk fread_unlocked
101 # Additional symbols in an optimized build.
104 group: readlink_function
105 readlink # putil.cpp uprv_tzname() calls this in a hack to get the time zone name
108 opendir closedir readdir # for a hack to get the time zone name
110 group: mmap_functions # for memory-mapped data loading
114 dlopen dlclose dlsym # called by putil.o only for icuplug.o
118 # The compiler generates references to the global operator delete
119 # even when no code actually uses it.
120 # ICU must not _use_ the global operator delete.
121 "operator delete(void*)"
122 # ICU also must not use the global operator new.
123 # "operator new[](unsigned long)"
125 # _Unwind_Resume is related to exceptions:
126 # "A call to this routine is inserted as the end of a landing pad that performs cleanup,
127 # but does not resume normal execution. It causes unwinding to proceed further."
128 # (Linux Standard Base Specification 1.3)
129 # Even though ICU does not actually use (nor handle) exceptions.
131 # std::terminate() looks similar to _Unwind_Resume:
132 # "Calls the current terminate handler."
136 "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)"
137 "std::basic_ios<char, std::char_traits<char> >::eof() const"
138 "std::basic_ios<char, std::char_traits<char> >::fail() const"
139 "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)"
140 std::ios_base::Init::Init()
141 std::ios_base::Init::~Init()
143 std::istream::putback(char)
144 # Additional symbols in an optimized build.
145 "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)"
147 # ICU common library --------------------------------------------------------- #
150 stubdata.o # Exports icudt48_dat.
153 # All files in the common library are listed in its dependencies.
155 # Libraries and groups that the common library depends on.
160 uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
161 normlzr unormcmp unorm
164 unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
166 uniset_core uniset_props uniset_closure usetiter uset uset_props
169 ucasemap ucasemap_titlecase_brkiter script_runs
170 uprops ubidi_props ucase uscript uscript_props characterproperties
171 ubidi ushape ubiditransform
172 resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
174 locale_display_names2
175 conversion converter_selector ucnv_set ucnvdisp
176 messagepattern simpleformatter
177 icu_utility icu_utility_with_props
180 ucharstriebuilder ucharstrieiterator
181 bytestriebuilder bytestrieiterator
182 hashtable uhash uvector uvector32 uvector64 ulist
183 propsvec utrie2 utrie2_builder ucptrie umutablecptrie utrie_swap
185 uinit utypes errorcode
188 localebuilder localematcher
191 # TODO: Apple moved this to common
194 uniset_props resourcebundle
195 uset_props # TODO: change to using C++ UnicodeSet, remove this dependency
198 # TODO: Move to i18n library, ticket #11926.
203 group: date_interval # class DateInterval
209 # We could try to split off a breakiterator_builder group,
210 # but we still need uniset_props for code like in the ThaiBreakEngine constructor
212 # fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
213 brkiter.o brkeng.o ubrk.o
214 rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
215 rbbidata.o rbbirb.o rbbi_cache.o
216 dictionarydata.o dictbe.o
217 # BreakIterator::makeInstance() factory implementation makes for circular dependency
218 # between BreakIterator base and FilteredBreakIteratorBuilder.
221 resourcebundle service_registration
222 schriter utext uniset_core uniset_props
223 uhash ustack utrie2_builder
225 ucharstriebuilder # for filteredbrk.o
226 normlzr # for dictbe.o, should switch to Normalizer2
227 uvector32 # for dictbe.o
228 localedata # for rbbi.o
230 group: unormcmp # unorm_compare()
234 uniset_props # for uniset_getUnicode32Instance()
237 group: unorm # old normalization C API
241 uniset_props # for uniset_getUnicode32Instance()
244 group: normlzr # old Normalizer C++ class
248 uniset_props # for uniset_getUnicode32Instance()
254 normalizer2 loadednormalizer2 punycode
255 uchar # for u_charType() (via U_GET_GC_MASK(c))
256 ubidi_props # for u_charDirection() & ubidi_getJoiningType()
259 group: filterednormalizer2
260 filterednormalizer2.o
272 unorm # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
276 group: canonical_iterator
281 group: loadednormalizer2
282 loadednormalizer2impl.o
291 bytestream bytesinkutil # for UTF-8 output
292 umutablecptrie # for building CanonIterData & FCD
293 utrie_swap # TODO(ICU-20170): move unorm2_swap() to a separate file
294 uvector # for building CanonIterData
295 uhash # for the instance cache
303 group: static_unicode_sets
304 static_unicode_sets.o
306 resourcebundle uniset_props
311 uniset_closure uniset_props uniset_core
318 group: uniset_closure
321 uniset_core unistr_case_locale unistr_titlecase_brkiter
324 uniset_props.o ruleiter.o
326 uniset_core uprops unistr_case characterproperties
336 group: usetiter # UnicodeSetIterator
343 uniset.o bmpset.o unisetspan.o
349 group: icu_utility_with_props
352 icu_utility uchar ucase
357 patternprops platform
364 group: stringenumeration
371 # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
372 # so it depends on UnicodeString, therefore it makes little sense to split
373 # schriter and uchriter into separate groups.
399 uscript.o # uscript_getCode() accepts a locale ID and loads its script code data
401 propname resourcebundle
403 group: uscript_props # script metadata properties
411 normalizer2 loadednormalizer2
414 unistr_case ustring_case # only for case folding
417 group: characterproperties
418 characterproperties.o
443 group: messagepattern # for MessageFormat and tools
446 patternprops platform
448 group: simpleformatter
464 ubidi.o ubidiln.o ubidiwrt.o
467 uchar # for doWriteReverse() which uses IS_COMBINING(u_charType(c))
469 group: ubiditransform
484 group: unistr_case_locale
487 unistr_case ustring_case_locale
494 group: unistr_titlecase_brkiter
495 unistr_titlecase_brkiter.o
497 ustr_titlecase_brkiter
499 group: ustr_titlecase_brkiter
500 ustr_titlecase_brkiter.o
503 ustring_case_locale ucase
508 # Edits::Iterator::toString() calls ICU_Utility::appendNumber()
512 group: ucasemap_titlecase_brkiter
513 ucasemap_titlecase_brkiter.o
515 ucasemap breakiterator utext
516 ustr_titlecase_brkiter # ustrcase_getTitleBreakIterator()
521 ustring_case ustring_case_locale
522 bytestream bytesinkutil # for UTF-8 output
523 resourcebundle # uloc_getName() etc.
525 group: ustring_case_locale
529 resourcebundle # for uloc_getDefault()
546 group: converter_selector
549 conversion propsvec utrie2_builder utrie_swap uset ucnv_set
551 group: ucnvdisp # ucnv_getDisplayName()
554 conversion resourcebundle
556 group: ucnv_set # ucnv_getUnicodeSet
563 ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
565 ucnvmbcs.o ucnv_ext.o
566 ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
567 ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
568 ucnvbocu.o ucnvscsu.o
575 sort stringenumeration udata
577 group: service_registration
578 serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
581 locale_display_names resourcebundle
584 group: ucat # message-catalog-like API
589 group: locale_display_names
590 locdispnames.o # Locale.getDisplayName()
594 group: locale_display_names2
595 locdspnm.o # class LocaleDisplayNames
597 resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
602 resourcebundle ulist ustring_case_locale
603 stdlib_qsort # for ucurr.o (which does not use ICU's uarrsort.o)
604 static_unicode_sets usetiter
606 group: icudataver # u_getDataVersion()
612 # This was intended to collect locale functions that load resource bundle data.
613 # See the resourcebundle group about what else loads data.
618 group: resbund_cnv # paths are Unicode strings
621 conversion resourcebundle ures_cnv
623 group: ures_cnv # ures_openU, path is a Unicode string
626 conversion resourcebundle
628 group: resourcebundle
629 resource.o resbund.o uresbund.o uresdata.o
631 # uloc_tag.c and uloc_keytype.cpp convert between
632 # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
633 # They use data from resource bundles for some of the mappings.
634 # We might want to generate .h files for that data, to #include rather than load,
635 # to minimize dependencies from this code.
636 # Then we could separate this higher-level locale ID code from the resource bundle code.
637 uloc.o uloc_tag.o uloc_keytype.o
638 # Even basic locid.cpp via Locale constructors and Locale::getDefault()
639 # depend on canonicalization and data loading.
640 # We can probably only disentangle basic locale ID handling from resource bundle code
641 # by hardcoding all of the locale ID data.
642 locid.o locmap.o wintz.o
643 # Do we need class LocaleBased? https://unicode-org.atlassian.net/browse/ICU-8608
648 sort stringenumeration uhash uvector
649 uscript_props propname
661 localebuilder localeprioritylist loclikelysubtags locdistance lsr
663 group: localeprioritylist
673 group: loclikelysubtags
684 udata.o ucmndata.o udatamem.o restrace.o
687 uhash platform stubdata
688 file_io mmap_functions
697 group: ucharstriebuilder
700 ucharstrie stringtriebuilder sort
702 group: ucharstrieiterator
712 group: bytestriebuilder
715 bytestrie stringtriebuilder sort
717 group: bytestrieiterator
727 group: stringtriebuilder
742 group: umutablecptrie
752 group: utrie2_builder
757 utrie # for utrie2_fromUTrie()
759 group: utrie2 # Try to switch users to ucptrie.
764 group: utrie # Callers should use ucptrie instead.
769 group: hashtable # Maps UnicodeString to value.
788 sort # for UVector::sort()
835 group: errorcode # ErrorCode base class
841 group: utypes # u_errorName()
847 # Files in the "platform" group.
849 cstring.o cwchar.o uinvchar.o
851 unistr.o # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
852 appendable.o stringpiece.o ustrtrns.o # for unistr.o
853 ustring.o # Other platform files really just need u_strlen
854 ustrfmt.o # uprv_itou
857 ucln_cmn.o # for putil.o which calls ucln_common_registerCleanup
858 udataswp.o # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
860 umutex.o sharedobject.o
863 # The "platform" group has no ICU dependencies.
864 PIC system_misc system_debug malloc_functions ubsan
865 c_strings c_string_formatting
866 floating_point system_locale
867 stdio_input readlink_function dir_io
868 dlfcn # Move related code into icuplug.c?
872 # ICU i18n library ----------------------------------------------------------- #
876 region genderinfo charset_detector spoof_detection
877 alphabetic_index collation collation_builder string_search
880 formatting formattable_cnv regex regex_cnv translit
881 double_conversion number_representation number_output numberformatter numberparser
898 group: charset_detector
899 csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
904 group: spoof_detection
905 uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
907 uniset_props regex unorm uscript
909 group: alphabetic_index
916 # The collation "runtime" code should not depend on the collation_builder code.
917 # For example, loading from resource bundles does not fall back to
918 # building from rules.
919 collation.o collationcompare.o collationdata.o
920 collationdatareader.o collationdatawriter.o
921 collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
922 collationroot.o collationrootelements.o collationsets.o
923 collationsettings.o collationtailoring.o rulebasedcollator.o
924 uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
925 bocsu.o coleitr.o coll.o sortkey.o ucol.o
926 ucol_res.o ucol_sit.o ucoleitr.o
928 bytestream normalizer2 resourcebundle service_registration unifiedcache
929 ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64 utrie2
932 group: collation_builder
933 collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
934 collationruleparser.o collationweights.o
936 canonical_iterator collation ucharstriebuilder uset_props
939 search.o stsearch.o usearch.o
941 breakiterator collation
943 group: dayperiodrules
946 resourcebundle uclean_i18n
949 listformatter.o ulistformatter.o
951 uchar resourcebundle simpleformatter format uclean_i18n formatted_value_iterimpl
953 group: double_conversion
954 double-conversion-bignum.o double-conversion-double-to-string.o
955 double-conversion-bignum-dtoa.o double-conversion-cached-powers.o
956 double-conversion-string-to-double.o double-conversion-fast-dtoa.o
957 double-conversion-strtod.o
961 group: number_representation
962 number_decimalquantity.o string_segment.o number_utils.o
963 # TODO(ICU-20429) Move formatted_string_builder to its own unit.
964 formatted_string_builder.o
966 decnumber double_conversion
967 # for trimming whitespace around fields
969 # for data loading; that could be split off
976 # PluralRules and FormattedNumber
978 standardplural.o plurrule.o
980 # FormattedNumber internals:
981 number_representation format formatted_value_sbimpl
982 # PluralRules internals:
985 group: numberformatter
986 # ICU 60+ NumberFormatter API
987 number_affixutils.o number_asformat.o
988 number_capi.o number_compact.o number_currencysymbols.o
989 number_decimfmtprops.o
990 number_fluent.o number_formatimpl.o
991 number_grouping.o number_integerwidth.o number_longnames.o
992 number_mapper.o number_modifiers.o number_multiplier.o
993 number_notation.o number_padding.o
994 number_patternmodifier.o number_patternstring.o number_rounding.o
995 number_scientific.o number_skeletons.o
996 currpinf.o dcfmtsym.o numsys.o
997 numrange_fluent.o numrange_impl.o
999 decnumber double_conversion formattable units
1000 number_representation number_output
1004 numparse_affixes.o numparse_compositions.o numparse_currency.o
1005 numparse_decimal.o numparse_impl.o numparse_parsednumber.o
1006 numparse_scientific.o numparse_symbols.o
1007 numparse_validators.o
1012 # TODO: Try to subdivide this ball of wax.
1019 decimfmt.o compactdecimalformat.o
1022 # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
1023 scientificnumberformatter.o
1025 nfrs.o nfrule.o nfsubs.o rbnf.o
1027 measfmt.o quantityformatter.o
1029 astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
1030 gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
1031 erarules.o # mostly for Japanese eras
1033 basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
1034 vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
1035 tzfmt.o tzgnames.o tznames.o tznames_impl.o
1036 datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
1037 smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
1039 tmunit.o tmutamt.o tmutfmt.o
1041 choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
1043 decnumber formattable format units numberformatter numberparser formatted_value_sbimpl
1046 collation collation_builder # for rbnf
1048 floating_point # sqrt() for astro.o
1049 trigonometry # for astro.o
1050 sharedbreakiterator # for reldatefmt.o
1054 group: sharedbreakiterator
1055 sharedbreakiterator.o
1060 measunit.o currunit.o nounit.o
1065 decContext.o decNumber.o
1067 double_conversion uclean_i18n
1073 decnumber number_representation
1075 group: formattable_cnv
1078 formattable unistr_cnv conversion
1080 group: formatted_value
1085 group: formatted_value_iterimpl
1086 formattedval_iterimpl.o
1088 formatted_value format uvector32
1090 group: formatted_value_sbimpl
1091 formattedval_sbimpl.o
1093 number_representation
1096 format.o fphdlimp.o fpositer.o ufieldpositer.o
1098 resourcebundle parsepos uvector32
1106 regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
1108 uniset_closure utext uvector32 uvector64 ustack
1110 uinit # TODO: Really needed?
1114 anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
1115 esctrn.o unesctrn.o nultrans.o
1116 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
1119 formatting # for Transliterator::getDisplayName()
1122 group: universal_time_scale
1132 # ICU io library ------------------------------------------------------------- #
1136 ustdio ustream uclean_io
1139 locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
1141 formatting conversion translit
1149 uchar # for u_isWhitespace()