1 # -*- icu-dependencies -*-
2 # Copyright (C) 2011-2016, International Business Machines
3 # Corporation and others. All Rights Reserved.
5 # file name: dependencies.txt
7 # created on: 2011may26
8 # created by: Markus W. Scherer
10 # See http://site.icu-project.org/processes/release/tasks/healthy-code#TOC-Check-library-dependencies
12 # Standard library symbols used by ICU --------------------------------------- #
17 PIC system_debug malloc_functions c_strings c_string_formatting
18 floating_point trigonometry
21 stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn
26 # Position-Independent Code (-fPIC) requires a Global Offset Table.
30 __assert_fail __stack_chk_fail
32 group: malloc_functions
37 __ctype_b_loc # for <ctype.h>
38 # We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
39 strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
40 memcmp memcpy memmove memset
41 # Additional symbols in an optimized build.
42 __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
43 __rawmemchr __memcpy_chk __memmove_chk __memset_chk
45 group: c_string_formatting
46 atoi atol strtod strtol strtoul
48 # Additional symbols in an optimized build.
52 abs fabs floor ceil modf fmod log pow sqrt
55 acos asin atan atan2 cos sin tan
56 # Additional symbols in an optimized build.
63 pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock
64 pthread_cond_wait pthread_cond_broadcast pthread_cond_signal
69 gettimeofday localtime_r tzname tzset __timezone
72 fopen fclose fgets fread fseek ftell rewind feof fileno
73 # Additional symbols in an optimized build.
74 __fgets_chk __fread_chk
82 # Additional symbols in an optimized build.
85 group: readlink_function
86 readlink # putil.cpp uprv_tzname() calls this in a hack to get the time zone name
89 opendir closedir readdir # for a hack to get the time zone name
91 group: mmap_functions # for memory-mapped data loading
95 dlopen dlclose dlsym # called by putil.o only for icuplug.o
99 # The compiler generates references to the global operator delete
100 # even when no code actually uses it.
101 # ICU must not _use_ the global operator delete.
102 "operator delete(void*)"
103 # ICU also must not use the global operator new.
104 # "operator new[](unsigned long)"
106 # _Unwind_Resume is related to exceptions:
107 # "A call to this routine is inserted as the end of a landing pad that performs cleanup,
108 # but does not resume normal execution. It causes unwinding to proceed further."
109 # (Linux Standard Base Specification 1.3)
110 # Even though ICU does not actually use (nor handle) exceptions.
112 # std::terminate() looks similar to _Unwind_Resume:
113 # "Calls the current terminate handler."
117 "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)"
118 "std::basic_ios<char, std::char_traits<char> >::eof() const"
119 "std::basic_ios<char, std::char_traits<char> >::fail() const"
120 "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)"
122 std::istream::putback(char)
123 # Additional symbols in an optimized build.
124 "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)"
126 # ICU common library --------------------------------------------------------- #
129 stubdata.o # Exports icudt48_dat.
132 # All files in the common library are listed in its dependencies.
134 # Libraries and groups that the common library depends on.
138 uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
139 normlzr unormcmp unorm
142 unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
144 uniset_core uniset_props uniset_closure usetiter uset uset_props
146 ucasemap ucasemap_titlecase_brkiter script_runs
147 uprops ubidi_props ucase uscript uscript_props
150 resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
153 locale_display_names2
154 conversion converter_selector ucnv_set ucnvdisp
155 messagepattern simpleformatter
156 icu_utility icu_utility_with_props
159 ucharstriebuilder ucharstrieiterator
160 bytestriebuilder bytestrieiterator
161 hashtable uhash uvector uvector32 uvector64 ulist
162 propsvec utrie2 utrie2_builder
164 uinit utypes errorcode
169 # TODO: Move to i18n library, ticket #11926.
174 group: date_interval # class DateInterval
180 # We could try to split off a breakiterator_builder group,
181 # but we still need uniset_props for code like in the ThaiBreakEngine constructor
183 # fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
184 brkiter.o brkeng.o ubrk.o
185 rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
187 dictionarydata.o dictbe.o
188 # BreakIterator::makeInstance() factory implementation makes for circular dependency
189 # between BreakIterator base and FilteredBreakIteratorBuilder.
192 resourcebundle service_registration
193 schriter utext uniset_core uniset_props
196 ucharstriebuilder # for filteredbrk.o
197 normlzr # for dictbe.o, should switch to Normalizer2
198 uvector32 # for dictbe.o
200 group: unormcmp # unorm_compare()
204 uniset_props # for uniset_getUnicode32Instance()
207 group: unorm # old normalization C API
211 uniset_props # for uniset_getUnicode32Instance()
214 group: normlzr # old Normalizer C++ class
218 uniset_props # for uniset_getUnicode32Instance()
224 normalizer2 loadednormalizer2 punycode
225 uchar # for u_charType() (via U_GET_GC_MASK(c))
226 ubidi_props # for u_charDirection() & ubidi_getJoiningType()
229 group: filterednormalizer2
230 filterednormalizer2.o
242 unorm # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
246 group: canonical_iterator
251 group: loadednormalizer2
252 loadednormalizer2impl.o
261 utrie2_builder # for building CanonIterData & FCD
262 uvector # for building CanonIterData
263 uhash # for the instance cache
274 uniset_closure uniset_props uniset_core
281 group: uniset_closure
284 uniset_core unistr_case_locale unistr_titlecase_brkiter
287 uniset_props.o ruleiter.o
289 uniset_core uprops unistr_case
299 group: usetiter # UnicodeSetIterator
306 uniset.o bmpset.o unisetspan.o
312 group: icu_utility_with_props
315 icu_utility uchar ucase
320 patternprops platform
327 group: stringenumeration
334 # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
335 # so it depends on UnicodeString, therefore it makes little sense to split
336 # schriter and uchriter into separate groups.
362 uscript.o # uscript_getCode() accepts a locale ID and loads its script code data
366 group: uscript_props # script metadata properties
374 normalizer2 loadednormalizer2
377 unistr_case ustring_case # only for case folding
400 group: messagepattern # for MessageFormat and tools
403 patternprops platform
405 group: simpleformatter
421 ubidi.o ubidiln.o ubidiwrt.o
424 uchar # for doWriteReverse() which uses IS_COMBINING(u_charType(c))
436 group: unistr_case_locale
439 unistr_case ustring_case_locale
446 group: unistr_titlecase_brkiter
447 unistr_titlecase_brkiter.o
449 ustr_titlecase_brkiter
451 group: ustr_titlecase_brkiter
452 ustr_titlecase_brkiter.o
455 ustring_case_locale ucase
457 group: ucasemap_titlecase_brkiter
458 ucasemap_titlecase_brkiter.o
460 ucasemap breakiterator utext
466 resourcebundle # uloc_getName() etc.
468 group: ustring_case_locale
472 resourcebundle # for uloc_getDefault()
489 group: converter_selector
492 conversion propsvec utrie2_builder uset ucnv_set
494 group: ucnvdisp # ucnv_getDisplayName()
497 conversion resourcebundle
499 group: ucnv_set # ucnv_getUnicodeSet
506 ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
508 ucnvmbcs.o ucnv_ext.o
509 ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
510 ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
511 ucnvbocu.o ucnvscsu.o
518 sort stringenumeration udata
520 group: service_registration
521 serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
524 locale_display_names resourcebundle
528 listformatter.o ulistformatter.o
530 resourcebundle simpleformatter
532 group: ucat # message-catalog-like API
537 group: locale_display_names
538 locdispnames.o # Locale.getDisplayName()
542 group: locale_display_names2
543 locdspnm.o # class LocaleDisplayNames
545 resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
550 loclikely resourcebundle ulist ustring_case_locale
551 stdlib_qsort # for ucurr.o (which does not use ICU's uarrsort.o)
553 group: icudataver # u_getDataVersion()
561 resourcebundle uscript_props propname
564 # This was intended to collect locale functions that load resource bundle data.
565 # See the resourcebundle group about what else loads data.
570 group: resbund_cnv # paths are Unicode strings
573 conversion resourcebundle ures_cnv
575 group: ures_cnv # ures_openU, path is a Unicode string
578 conversion resourcebundle
580 group: resourcebundle
581 resource.o resbund.o uresbund.o uresdata.o
583 # uloc_tag.c and uloc_keytype.cpp convert between
584 # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
585 # They use data from resource bundles for some of the mappings.
586 # We might want to generate .h files for that data, to #include rather than load,
587 # to minimize dependencies from this code.
588 # Then we could separate this higher-level locale ID code from the resource bundle code.
589 uloc.o uloc_tag.o uloc_keytype.o
590 # Even basic locid.cpp via Locale constructors and Locale::getDefault()
591 # depend on canonicalization and data loading.
592 # We can probably only disentangle basic locale ID handling from resource bundle code
593 # by hardcoding all of the locale ID data.
594 locid.o locmap.o wintz.o
595 # Do we need class LocaleBased? http://bugs.icu-project.org/trac/ticket/8608
599 sort stringenumeration uhash uvector
602 udata.o ucmndata.o udatamem.o
605 uhash platform stubdata
606 file_io mmap_functions
614 group: ucharstriebuilder
617 ucharstrie stringtriebuilder sort
619 group: ucharstrieiterator
629 group: bytestriebuilder
632 bytestrie stringtriebuilder sort
634 group: bytestrieiterator
644 group: stringtriebuilder
654 group: utrie2_builder
659 utrie # for utrie2_fromUTrie()
660 ucol_swp # for utrie_swap()
667 group: utrie # Callers should use utrie2 instead.
672 group: hashtable # Maps UnicodeString to value.
691 sort # for UVector::sort()
731 utrie2 # Format version 4 uses UTrie2.
733 group: errorcode # ErrorCode base class
739 group: utypes # u_errorName()
743 # Files in the "platform" group.
745 cstring.o cwchar.o uinvchar.o
747 unistr.o # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
748 appendable.o stringpiece.o ustrtrns.o # for unistr.o
749 ustring.o # Other platform files really just need u_strlen
750 ustrfmt.o # uprv_itou
753 ucln_cmn.o # for putil.o which calls ucln_common_registerCleanup
754 udataswp.o # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
756 umutex.o sharedobject.o
759 # The "platform" group has no ICU dependencies.
760 PIC system_debug malloc_functions c_strings c_string_formatting
761 floating_point pthread system_locale
762 stdio_input readlink_function dir_io
763 dlfcn # Move related code into icuplug.c?
766 # ICU i18n library ----------------------------------------------------------- #
770 region localedata genderinfo charset_detector spoof_detection
771 alphabetic_index collation collation_builder string_search
773 formatting formattable_cnv regex regex_cnv translit
780 formatting # Temporary, TODO: Ticket #9982 class Region should use low-level ASCII-integer functions, and probably be moved to the common library.
787 uniset_props resourcebundle
788 uset_props # TODO: change to using C++ UnicodeSet, remove this dependency
797 group: charset_detector
798 csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
803 group: spoof_detection
804 uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o uspoof_wsconf.o
805 identifier_info.o scriptset.o
807 uniset_props regex unorm uscript
809 group: alphabetic_index
816 # The collation "runtime" code should not depend on the collation_builder code.
817 # For example, loading from resource bundles does not fall back to
818 # building from rules.
819 collation.o collationcompare.o collationdata.o
820 collationdatareader.o collationdatawriter.o
821 collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
822 collationroot.o collationrootelements.o collationsets.o
823 collationsettings.o collationtailoring.o rulebasedcollator.o
824 uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
825 bocsu.o coleitr.o coll.o sortkey.o ucol.o
826 ucol_res.o ucol_sit.o ucoleitr.o
828 bytestream normalizer2 resourcebundle service_registration unifiedcache
829 ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64
832 group: collation_builder
833 collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
834 collationruleparser.o collationweights.o
836 canonical_iterator collation ucharstriebuilder uset_props
839 search.o stsearch.o usearch.o
841 breakiterator collation
843 group: dayperiodrules
846 resourcebundle uclean_i18n
849 # TODO: Try to subdivide this ball of wax.
851 curramt.o currfmt.o currpinf.o currunit.o
853 dcfmtsym.o numsys.o unumsys.o
854 affixpatternparser.o decimfmtimpl.o digitaffix.o digitaffixesandpadding.o
855 digitformatter.o digitgrouping.o digitinterval.o
856 pluralaffix.o precision.o smallintformatter.o valueformatter.o
857 decfmtst.o decimfmt.o decimalformatpattern.o compactdecimalformat.o
860 # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
861 scientificnumberformatter.o
863 nfrs.o nfrule.o nfsubs.o rbnf.o
865 measfmt.o measunit.o quantityformatter.o
867 astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
868 gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
870 basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
871 vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
872 tzfmt.o tzgnames.o tznames.o tznames_impl.o
873 datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
874 smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
876 tmunit.o tmutamt.o tmutfmt.o
878 choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
880 digitlist formattable format
881 dayperiodrules pluralrules
882 collation collation_builder # for rbnf
884 floating_point # sqrt() for astro.o
885 trigonometry # for astro.o
886 sharedbreakiterator # for reldatefmt.o
889 group: sharedbreakiterator
890 sharedbreakiterator.o
895 digitlst.o decContext.o decNumber.o visibledigits.o
905 group: formattable_cnv
908 formattable unistr_cnv conversion
911 format.o fphdlimp.o fpositer.o ufieldpositer.o
913 resourcebundle parsepos uvector32
916 standardplural.o plurrule.o upluralrules.o
918 digitlist # plurals depend on decimals
919 patternprops resourcebundle uvector uvector32 unifiedcache
929 regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
931 uniset_closure utext uvector32 uvector64 ustack
933 uinit # TODO: Really needed?
937 anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
938 esctrn.o unesctrn.o nultrans.o
939 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
942 formatting # for Transliterator::getDisplayName()
945 group: universal_time_scale
953 # ICU io library ------------------------------------------------------------- #
957 ustdio ustream uclean_io
960 locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
962 formatting conversion translit
970 uchar # for u_isWhitespace()