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
469 group: ucasemap_titlecase_brkiter
470 ucasemap_titlecase_brkiter.o
472 ucasemap breakiterator utext
477 ustring_case ustring_case_locale
478 resourcebundle # uloc_getName() etc.
480 group: ustring_case_locale
484 resourcebundle # for uloc_getDefault()
501 group: converter_selector
504 conversion propsvec utrie2_builder uset ucnv_set
506 group: ucnvdisp # ucnv_getDisplayName()
509 conversion resourcebundle
511 group: ucnv_set # ucnv_getUnicodeSet
518 ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
520 ucnvmbcs.o ucnv_ext.o
521 ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
522 ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
523 ucnvbocu.o ucnvscsu.o
530 sort stringenumeration udata
532 group: service_registration
533 serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
536 locale_display_names resourcebundle
540 listformatter.o ulistformatter.o
542 resourcebundle simpleformatter
544 group: ucat # message-catalog-like API
549 group: locale_display_names
550 locdispnames.o # Locale.getDisplayName()
554 group: locale_display_names2
555 locdspnm.o # class LocaleDisplayNames
557 resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
562 loclikely resourcebundle ulist ustring_case_locale
563 stdlib_qsort # for ucurr.o (which does not use ICU's uarrsort.o)
565 group: icudataver # u_getDataVersion()
573 resourcebundle uscript_props propname
576 # This was intended to collect locale functions that load resource bundle data.
577 # See the resourcebundle group about what else loads data.
582 group: resbund_cnv # paths are Unicode strings
585 conversion resourcebundle ures_cnv
587 group: ures_cnv # ures_openU, path is a Unicode string
590 conversion resourcebundle
592 group: resourcebundle
593 resource.o resbund.o uresbund.o uresdata.o
595 # uloc_tag.c and uloc_keytype.cpp convert between
596 # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
597 # They use data from resource bundles for some of the mappings.
598 # We might want to generate .h files for that data, to #include rather than load,
599 # to minimize dependencies from this code.
600 # Then we could separate this higher-level locale ID code from the resource bundle code.
601 uloc.o uloc_tag.o uloc_keytype.o
602 # Even basic locid.cpp via Locale constructors and Locale::getDefault()
603 # depend on canonicalization and data loading.
604 # We can probably only disentangle basic locale ID handling from resource bundle code
605 # by hardcoding all of the locale ID data.
606 locid.o locmap.o wintz.o
607 # Do we need class LocaleBased? http://bugs.icu-project.org/trac/ticket/8608
611 sort stringenumeration uhash uvector
614 udata.o ucmndata.o udatamem.o
617 uhash platform stubdata
618 file_io mmap_functions
626 group: ucharstriebuilder
629 ucharstrie stringtriebuilder sort
631 group: ucharstrieiterator
641 group: bytestriebuilder
644 bytestrie stringtriebuilder sort
646 group: bytestrieiterator
656 group: stringtriebuilder
666 group: utrie2_builder
671 utrie # for utrie2_fromUTrie()
672 ucol_swp # for utrie_swap()
679 group: utrie # Callers should use utrie2 instead.
684 group: hashtable # Maps UnicodeString to value.
703 sort # for UVector::sort()
743 utrie2 # Format version 4 uses UTrie2.
745 group: errorcode # ErrorCode base class
751 group: utypes # u_errorName()
755 # Files in the "platform" group.
757 cstring.o cwchar.o uinvchar.o
759 unistr.o # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
760 appendable.o stringpiece.o ustrtrns.o # for unistr.o
761 ustring.o # Other platform files really just need u_strlen
762 ustrfmt.o # uprv_itou
765 ucln_cmn.o # for putil.o which calls ucln_common_registerCleanup
766 udataswp.o # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
768 umutex.o sharedobject.o
771 # The "platform" group has no ICU dependencies.
772 PIC system_debug malloc_functions c_strings c_string_formatting
773 floating_point pthread system_locale
774 stdio_input readlink_function dir_io
775 dlfcn # Move related code into icuplug.c?
778 # ICU i18n library ----------------------------------------------------------- #
782 region localedata genderinfo charset_detector spoof_detection
783 alphabetic_index collation collation_builder string_search
785 formatting formattable_cnv regex regex_cnv translit
792 formatting # Temporary, TODO: Ticket #9982 class Region should use low-level ASCII-integer functions, and probably be moved to the common library.
799 uniset_props resourcebundle
800 uset_props # TODO: change to using C++ UnicodeSet, remove this dependency
809 group: charset_detector
810 csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
815 group: spoof_detection
816 uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
818 uniset_props regex unorm uscript
820 group: alphabetic_index
827 # The collation "runtime" code should not depend on the collation_builder code.
828 # For example, loading from resource bundles does not fall back to
829 # building from rules.
830 collation.o collationcompare.o collationdata.o
831 collationdatareader.o collationdatawriter.o
832 collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
833 collationroot.o collationrootelements.o collationsets.o
834 collationsettings.o collationtailoring.o rulebasedcollator.o
835 uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
836 bocsu.o coleitr.o coll.o sortkey.o ucol.o
837 ucol_res.o ucol_sit.o ucoleitr.o
839 bytestream normalizer2 resourcebundle service_registration unifiedcache
840 ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64
843 group: collation_builder
844 collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
845 collationruleparser.o collationweights.o
847 canonical_iterator collation ucharstriebuilder uset_props
850 search.o stsearch.o usearch.o
852 breakiterator collation
854 group: dayperiodrules
857 resourcebundle uclean_i18n
860 # TODO: Try to subdivide this ball of wax.
862 curramt.o currfmt.o currpinf.o currunit.o
864 dcfmtsym.o numsys.o unumsys.o
865 affixpatternparser.o decimfmtimpl.o digitaffix.o digitaffixesandpadding.o
866 digitformatter.o digitgrouping.o digitinterval.o
867 pluralaffix.o precision.o smallintformatter.o valueformatter.o
868 decfmtst.o decimfmt.o decimalformatpattern.o compactdecimalformat.o
872 standardplural.o plurrule.o upluralrules.o
873 # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
874 scientificnumberformatter.o
876 nfrs.o nfrule.o nfsubs.o rbnf.o
878 measfmt.o measunit.o quantityformatter.o
880 astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
881 gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
883 basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
884 vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
885 tzfmt.o tzgnames.o tznames.o tznames_impl.o
886 datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
887 smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
889 tmunit.o tmutamt.o tmutfmt.o
891 choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
893 digitlist formattable format
895 collation collation_builder # for rbnf
897 floating_point # sqrt() for astro.o
898 trigonometry # for astro.o
899 sharedbreakiterator # for reldatefmt.o
902 group: sharedbreakiterator
903 sharedbreakiterator.o
908 digitlst.o decContext.o decNumber.o visibledigits.o
918 group: formattable_cnv
921 formattable unistr_cnv conversion
924 format.o fphdlimp.o fpositer.o ufieldpositer.o
926 resourcebundle parsepos uvector32
934 regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
936 uniset_closure utext uvector32 uvector64 ustack
938 uinit # TODO: Really needed?
942 anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
943 esctrn.o unesctrn.o nultrans.o
944 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
947 formatting # for Transliterator::getDisplayName()
950 group: universal_time_scale
958 # ICU io library ------------------------------------------------------------- #
962 ustdio ustream uclean_io
965 locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
967 formatting conversion translit
975 uchar # for u_isWhitespace()