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_debug malloc_functions c_strings c_string_formatting
20 floating_point trigonometry
23 stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn
28 # Position-Independent Code (-fPIC) requires a Global Offset Table.
32 __assert_fail __stack_chk_fail
34 group: malloc_functions
39 __ctype_b_loc # for <ctype.h>
40 # We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
41 strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
42 memcmp memcpy memmove memset
43 # Additional symbols in an optimized build.
44 __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
45 __rawmemchr __memcpy_chk __memmove_chk __memset_chk
47 group: c_string_formatting
48 atoi atol strtod strtod_l strtol strtoul
50 # Additional symbols in an optimized build.
54 abs fabs floor ceil modf fmod log pow sqrt
57 acos asin atan atan2 cos sin tan
58 # Additional symbols in an optimized build.
65 pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock
66 pthread_cond_wait pthread_cond_broadcast pthread_cond_signal
70 nl_langinfo setlocale newlocale freelocale
71 gettimeofday localtime_r tzname tzset __timezone
74 fopen fclose fgets fread fseek ftell rewind feof fileno
75 # Additional symbols in an optimized build.
76 __fgets_chk __fread_chk
84 # Additional symbols in an optimized build.
87 group: readlink_function
88 readlink # putil.cpp uprv_tzname() calls this in a hack to get the time zone name
91 opendir closedir readdir # for a hack to get the time zone name
93 group: mmap_functions # for memory-mapped data loading
97 dlopen dlclose dlsym # called by putil.o only for icuplug.o
101 # The compiler generates references to the global operator delete
102 # even when no code actually uses it.
103 # ICU must not _use_ the global operator delete.
104 "operator delete(void*)"
105 # ICU also must not use the global operator new.
106 # "operator new[](unsigned long)"
108 # _Unwind_Resume is related to exceptions:
109 # "A call to this routine is inserted as the end of a landing pad that performs cleanup,
110 # but does not resume normal execution. It causes unwinding to proceed further."
111 # (Linux Standard Base Specification 1.3)
112 # Even though ICU does not actually use (nor handle) exceptions.
114 # std::terminate() looks similar to _Unwind_Resume:
115 # "Calls the current terminate handler."
119 "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)"
120 "std::basic_ios<char, std::char_traits<char> >::eof() const"
121 "std::basic_ios<char, std::char_traits<char> >::fail() const"
122 "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)"
124 std::istream::putback(char)
125 # Additional symbols in an optimized build.
126 "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)"
128 # ICU common library --------------------------------------------------------- #
131 stubdata.o # Exports icudt48_dat.
134 # All files in the common library are listed in its dependencies.
136 # Libraries and groups that the common library depends on.
140 uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
141 normlzr unormcmp unorm
144 unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
146 uniset_core uniset_props uniset_closure usetiter uset uset_props
148 ucasemap ucasemap_titlecase_brkiter script_runs
149 uprops ubidi_props ucase uscript uscript_props
150 ubidi ushape ubiditransform
152 resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
155 locale_display_names2
156 conversion converter_selector ucnv_set ucnvdisp
157 messagepattern simpleformatter
158 icu_utility icu_utility_with_props
161 ucharstriebuilder ucharstrieiterator
162 bytestriebuilder bytestrieiterator
163 hashtable uhash uvector uvector32 uvector64 ulist
164 propsvec utrie2 utrie2_builder
166 uinit utypes errorcode
171 # TODO: Move to i18n library, ticket #11926.
176 group: date_interval # class DateInterval
182 # We could try to split off a breakiterator_builder group,
183 # but we still need uniset_props for code like in the ThaiBreakEngine constructor
185 # fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
186 brkiter.o brkeng.o ubrk.o
187 rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
189 dictionarydata.o dictbe.o
190 # BreakIterator::makeInstance() factory implementation makes for circular dependency
191 # between BreakIterator base and FilteredBreakIteratorBuilder.
194 resourcebundle service_registration
195 schriter utext uniset_core uniset_props
198 ucharstriebuilder # for filteredbrk.o
199 normlzr # for dictbe.o, should switch to Normalizer2
200 uvector32 # for dictbe.o
202 group: unormcmp # unorm_compare()
206 uniset_props # for uniset_getUnicode32Instance()
209 group: unorm # old normalization C API
213 uniset_props # for uniset_getUnicode32Instance()
216 group: normlzr # old Normalizer C++ class
220 uniset_props # for uniset_getUnicode32Instance()
226 normalizer2 loadednormalizer2 punycode
227 uchar # for u_charType() (via U_GET_GC_MASK(c))
228 ubidi_props # for u_charDirection() & ubidi_getJoiningType()
231 group: filterednormalizer2
232 filterednormalizer2.o
244 unorm # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
248 group: canonical_iterator
253 group: loadednormalizer2
254 loadednormalizer2impl.o
263 utrie2_builder # for building CanonIterData & FCD
264 uvector # for building CanonIterData
265 uhash # for the instance cache
276 uniset_closure uniset_props uniset_core
283 group: uniset_closure
286 uniset_core unistr_case_locale unistr_titlecase_brkiter
289 uniset_props.o ruleiter.o
291 uniset_core uprops unistr_case
301 group: usetiter # UnicodeSetIterator
308 uniset.o bmpset.o unisetspan.o
314 group: icu_utility_with_props
317 icu_utility uchar ucase
322 patternprops platform
329 group: stringenumeration
336 # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
337 # so it depends on UnicodeString, therefore it makes little sense to split
338 # schriter and uchriter into separate groups.
364 uscript.o # uscript_getCode() accepts a locale ID and loads its script code data
368 group: uscript_props # script metadata properties
376 normalizer2 loadednormalizer2
379 unistr_case ustring_case # only for case folding
402 group: messagepattern # for MessageFormat and tools
405 patternprops platform
407 group: simpleformatter
423 ubidi.o ubidiln.o ubidiwrt.o
426 uchar # for doWriteReverse() which uses IS_COMBINING(u_charType(c))
428 group: ubiditransform
443 group: unistr_case_locale
446 unistr_case ustring_case_locale
453 group: unistr_titlecase_brkiter
454 unistr_titlecase_brkiter.o
456 ustr_titlecase_brkiter
458 group: ustr_titlecase_brkiter
459 ustr_titlecase_brkiter.o
462 ustring_case_locale ucase
464 group: ucasemap_titlecase_brkiter
465 ucasemap_titlecase_brkiter.o
467 ucasemap breakiterator utext
473 resourcebundle # uloc_getName() etc.
475 group: ustring_case_locale
479 resourcebundle # for uloc_getDefault()
496 group: converter_selector
499 conversion propsvec utrie2_builder uset ucnv_set
501 group: ucnvdisp # ucnv_getDisplayName()
504 conversion resourcebundle
506 group: ucnv_set # ucnv_getUnicodeSet
513 ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
515 ucnvmbcs.o ucnv_ext.o
516 ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
517 ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
518 ucnvbocu.o ucnvscsu.o
525 sort stringenumeration udata
527 group: service_registration
528 serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
531 locale_display_names resourcebundle
535 listformatter.o ulistformatter.o
537 resourcebundle simpleformatter
539 group: ucat # message-catalog-like API
544 group: locale_display_names
545 locdispnames.o # Locale.getDisplayName()
549 group: locale_display_names2
550 locdspnm.o # class LocaleDisplayNames
552 resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
557 loclikely resourcebundle ulist ustring_case_locale
558 stdlib_qsort # for ucurr.o (which does not use ICU's uarrsort.o)
560 group: icudataver # u_getDataVersion()
568 resourcebundle uscript_props propname
571 # This was intended to collect locale functions that load resource bundle data.
572 # See the resourcebundle group about what else loads data.
577 group: resbund_cnv # paths are Unicode strings
580 conversion resourcebundle ures_cnv
582 group: ures_cnv # ures_openU, path is a Unicode string
585 conversion resourcebundle
587 group: resourcebundle
588 resource.o resbund.o uresbund.o uresdata.o
590 # uloc_tag.c and uloc_keytype.cpp convert between
591 # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
592 # They use data from resource bundles for some of the mappings.
593 # We might want to generate .h files for that data, to #include rather than load,
594 # to minimize dependencies from this code.
595 # Then we could separate this higher-level locale ID code from the resource bundle code.
596 uloc.o uloc_tag.o uloc_keytype.o
597 # Even basic locid.cpp via Locale constructors and Locale::getDefault()
598 # depend on canonicalization and data loading.
599 # We can probably only disentangle basic locale ID handling from resource bundle code
600 # by hardcoding all of the locale ID data.
601 locid.o locmap.o wintz.o
602 # Do we need class LocaleBased? http://bugs.icu-project.org/trac/ticket/8608
606 sort stringenumeration uhash uvector
609 udata.o ucmndata.o udatamem.o
612 uhash platform stubdata
613 file_io mmap_functions
621 group: ucharstriebuilder
624 ucharstrie stringtriebuilder sort
626 group: ucharstrieiterator
636 group: bytestriebuilder
639 bytestrie stringtriebuilder sort
641 group: bytestrieiterator
651 group: stringtriebuilder
661 group: utrie2_builder
666 utrie # for utrie2_fromUTrie()
667 ucol_swp # for utrie_swap()
674 group: utrie # Callers should use utrie2 instead.
679 group: hashtable # Maps UnicodeString to value.
698 sort # for UVector::sort()
738 utrie2 # Format version 4 uses UTrie2.
740 group: errorcode # ErrorCode base class
746 group: utypes # u_errorName()
750 # Files in the "platform" group.
752 cstring.o cwchar.o uinvchar.o
754 unistr.o # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
755 appendable.o stringpiece.o ustrtrns.o # for unistr.o
756 ustring.o # Other platform files really just need u_strlen
757 ustrfmt.o # uprv_itou
760 ucln_cmn.o # for putil.o which calls ucln_common_registerCleanup
761 udataswp.o # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
763 umutex.o sharedobject.o
766 # The "platform" group has no ICU dependencies.
767 PIC system_debug malloc_functions c_strings c_string_formatting
768 floating_point pthread system_locale
769 stdio_input readlink_function dir_io
770 dlfcn # Move related code into icuplug.c?
773 # ICU i18n library ----------------------------------------------------------- #
777 region localedata genderinfo charset_detector spoof_detection
778 alphabetic_index collation collation_builder string_search
780 formatting formattable_cnv regex regex_cnv translit
787 formatting # Temporary, TODO: Ticket #9982 class Region should use low-level ASCII-integer functions, and probably be moved to the common library.
794 uniset_props resourcebundle
795 uset_props # TODO: change to using C++ UnicodeSet, remove this dependency
804 group: charset_detector
805 csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
810 group: spoof_detection
811 uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
813 uniset_props regex unorm uscript
815 group: alphabetic_index
822 # The collation "runtime" code should not depend on the collation_builder code.
823 # For example, loading from resource bundles does not fall back to
824 # building from rules.
825 collation.o collationcompare.o collationdata.o
826 collationdatareader.o collationdatawriter.o
827 collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
828 collationroot.o collationrootelements.o collationsets.o
829 collationsettings.o collationtailoring.o rulebasedcollator.o
830 uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
831 bocsu.o coleitr.o coll.o sortkey.o ucol.o
832 ucol_res.o ucol_sit.o ucoleitr.o
834 bytestream normalizer2 resourcebundle service_registration unifiedcache
835 ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64
838 group: collation_builder
839 collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
840 collationruleparser.o collationweights.o
842 canonical_iterator collation ucharstriebuilder uset_props
845 search.o stsearch.o usearch.o
847 breakiterator collation
849 group: dayperiodrules
852 resourcebundle uclean_i18n
855 # TODO: Try to subdivide this ball of wax.
857 curramt.o currfmt.o currpinf.o currunit.o
859 dcfmtsym.o numsys.o unumsys.o
860 affixpatternparser.o decimfmtimpl.o digitaffix.o digitaffixesandpadding.o
861 digitformatter.o digitgrouping.o digitinterval.o
862 pluralaffix.o precision.o smallintformatter.o valueformatter.o
863 decfmtst.o decimfmt.o decimalformatpattern.o compactdecimalformat.o
866 # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
867 scientificnumberformatter.o
869 nfrs.o nfrule.o nfsubs.o rbnf.o
871 measfmt.o measunit.o quantityformatter.o
873 astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
874 gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
876 basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
877 vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
878 tzfmt.o tzgnames.o tznames.o tznames_impl.o
879 datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
880 smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
882 tmunit.o tmutamt.o tmutfmt.o
884 choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
886 digitlist formattable format
887 dayperiodrules pluralrules
888 collation collation_builder # for rbnf
890 floating_point # sqrt() for astro.o
891 trigonometry # for astro.o
892 sharedbreakiterator # for reldatefmt.o
895 group: sharedbreakiterator
896 sharedbreakiterator.o
901 digitlst.o decContext.o decNumber.o visibledigits.o
911 group: formattable_cnv
914 formattable unistr_cnv conversion
917 format.o fphdlimp.o fpositer.o ufieldpositer.o
919 resourcebundle parsepos uvector32
922 standardplural.o plurrule.o upluralrules.o
924 digitlist # plurals depend on decimals
925 patternprops resourcebundle uvector uvector32 unifiedcache
935 regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
937 uniset_closure utext uvector32 uvector64 ustack
939 uinit # TODO: Really needed?
943 anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
944 esctrn.o unesctrn.o nultrans.o
945 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
948 formatting # for Transliterator::getDisplayName()
951 group: universal_time_scale
959 # ICU io library ------------------------------------------------------------- #
963 ustdio ustream uclean_io
966 locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
968 formatting conversion translit
976 uchar # for u_isWhitespace()