• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
6#
7# file name: dependencies.txt
8#
9# created on: 2011may26
10# created by: Markus W. Scherer
11#
12# See https://unicode-org.github.io/icu/processes/release/tasks/healthy-code.html#check-library-dependencies
13
14# Standard library symbols used by ICU --------------------------------------- #
15
16system_symbols:
17  deps
18    # C
19    PIC system_misc system_debug malloc_functions ubsan
20    c_strings c_string_formatting
21    int_functions floating_point trigonometry
22    exp_and_tanhf
23    stdlib_qsort
24    system_locale
25    stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn
26    # C++
27    cplusplus iostream
28    std_mutex
29
30group: PIC
31    # Position-Independent Code (-fPIC) requires a Global Offset Table.
32    _GLOBAL_OFFSET_TABLE_
33
34group: system_misc
35    abort
36
37group: system_debug
38    __assert_fail __stack_chk_fail
39
40group: malloc_functions
41    free malloc realloc
42
43group: std_mutex
44    std::condition_variable::notify_one()
45    std::condition_variable::wait(std::unique_lock<std::mutex>&)
46    std::condition_variable::notify_all()
47    std::condition_variable::condition_variable()
48    std::condition_variable::~condition_variable()
49    std::condition_variable_any::condition_variable_any()
50    std::condition_variable_any::~condition_variable_any()
51
52group: ubsan
53    # UBSan=UndefinedBehaviorSanitizer, clang -fsanitize=bounds
54    __ubsan_handle_out_of_bounds
55
56group: c_strings
57    isspace isdigit
58    __ctype_b_loc  # for <ctype.h>
59    # We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
60    strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
61    memchr memcmp memcpy memmove memset
62    # BSD version of memcmp().
63    bcmp
64    # Additional symbols in an optimized build.
65    __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
66    __rawmemchr __memcpy_chk __memmove_chk __memset_chk
67
68group: c_string_formatting
69    atoi atol strtod strtod_l strtol strtoul
70    sprintf snprintf
71    # Additional symbols in an optimized build.
72    __sprintf_chk
73
74group: int_functions
75    div
76
77group: floating_point
78    abs fabs floor ceil modf fmod log pow round sqrt trunc
79
80group: exp_and_tanhf
81    expf tanhf
82
83group: trigonometry
84    acos asin atan atan2 cos sin tan
85    # Additional symbols in an optimized build.
86    sincos
87
88group: stdlib_qsort
89    qsort
90
91group: system_locale
92    getenv
93    nl_langinfo setlocale newlocale freelocale
94    gettimeofday localtime_r tzname tzset __timezone
95
96group: stdio_input
97    fopen fclose fgets fread fseek ftell rewind feof fileno
98    # Additional symbols in an optimized build.
99    __fgets_chk __fread_chk fread_unlocked
100
101group: stdio_output
102    fflush fwrite
103    stdout
104
105group: file_io
106    open close stat
107    # Additional symbols in an optimized build.
108    __xstat
109
110group: readlink_function
111    readlink  # putil.cpp uprv_tzname() calls this in a hack to get the time zone name
112
113group: dir_io
114    opendir closedir readdir  # for a hack to get the time zone name
115
116group: mmap_functions  # for memory-mapped data loading
117    mmap munmap
118
119group: dlfcn
120    dlopen dlclose dlsym  # called by putil.o only for icuplug.o
121
122group: cplusplus
123    __dynamic_cast
124    # The compiler generates references to the global operator delete
125    # even when no code actually uses it.
126    # ICU must not _use_ the global operator delete.
127    "operator delete(void*)"
128    # ICU also must not use the global operator new.
129    # "operator new[](unsigned long)"
130
131    # _Unwind_Resume is related to exceptions:
132    # "A call to this routine is inserted as the end of a landing pad that performs cleanup,
133    # but does not resume normal execution. It causes unwinding to proceed further."
134    # (Linux Standard Base Specification 1.3)
135    # Even though ICU does not actually use (nor handle) exceptions.
136    _Unwind_Resume
137    # std::terminate() looks similar to _Unwind_Resume:
138    # "Calls the current terminate handler."
139    std::terminate()
140
141group: iostream
142    "std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)"
143    "std::basic_ios<char, std::char_traits<char> >::eof() const"
144    "std::basic_ios<char, std::char_traits<char> >::fail() const"
145    "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)"
146    std::ios_base::Init::Init()
147    std::ios_base::Init::~Init()
148    std::istream::get()
149    std::istream::putback(char)
150    # Additional symbols in an optimized build.
151    "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)"
152
153# ICU common library --------------------------------------------------------- #
154
155library: stubdata
156    stubdata.o  # Exports icudt48_dat.
157
158library: common
159    # All files in the common library are listed in its dependencies.
160  deps
161    # Libraries and groups that the common library depends on.
162    pluralmap
163    date_interval
164    breakiterator
165    uts46 filterednormalizer2 normalizer2 loadednormalizer2 canonical_iterator
166    normlzr unormcmp unorm
167    idna2003 stringprep
168    stringenumeration
169    unistr_props unistr_case unistr_case_locale unistr_titlecase_brkiter unistr_cnv
170    cstr
171    uniset_core uniset_props uniset_closure usetiter uset uset_props
172    static_unicode_sets
173    uiter edits
174    ucasemap ucasemap_titlecase_brkiter script_runs
175    uprops ubidi_props ucase uscript uscript_props emojiprops characterproperties
176    ubidi ushape ubiditransform
177    resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
178    currency
179    locale_display_names2
180    conversion converter_selector ucnv_set ucnvdisp
181    messagepattern simpleformatter
182    icu_utility icu_utility_with_props
183    ustr_wcs
184    unifiedcache
185    ucharstriebuilder ucharstrieiterator
186    bytestriebuilder bytestrieiterator
187    hashtable uhash uvector uvector32 uvector64 ulist
188    propsvec utrie2 utrie2_builder ucptrie umutablecptrie utrie_swap
189    sort
190    uinit utypes errorcode
191    icuplug
192    platform
193    localematcher
194
195group: pluralmap
196    # TODO: Move to i18n library, ticket #11926.
197    pluralmap.o
198  deps
199    platform
200
201group: date_interval  # class DateInterval
202    dtintrv.o
203  deps
204    platform
205
206group: breakiterator
207    # We could try to split off a breakiterator_builder group,
208    # but we still need uniset_props for code like in the ThaiBreakEngine constructor
209    # which does
210    #   fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status)
211    brkiter.o brkeng.o ubrk.o
212    rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
213    rbbidata.o rbbirb.o rbbi_cache.o
214    dictionarydata.o dictbe.o lstmbe.o
215    # BreakIterator::makeInstance() factory implementation makes for circular dependency
216    # between BreakIterator base and FilteredBreakIteratorBuilder.
217    filteredbrk.o
218  deps
219    resourcebundle service_registration
220    schriter utext uniset_core uniset_props
221    uhash ustack utrie2_builder
222    ucharstrie bytestrie
223    ucharstriebuilder  # for filteredbrk.o
224    normlzr  # for dictbe.o, should switch to Normalizer2
225    uvector32 # for dictbe.o
226    exp_and_tanhf # for lstmbe.o
227    usetiter # for dictbe.o
228
229group: unormcmp  # unorm_compare()
230    unormcmp.o
231  deps
232    filterednormalizer2
233    uniset_props  # for uniset_getUnicode32Instance()
234    ucase
235
236group: unorm  # old normalization C API
237    unorm.o
238  deps
239    filterednormalizer2
240    uniset_props  # for uniset_getUnicode32Instance()
241    uiter
242
243group: normlzr  # old Normalizer C++ class
244    normlzr.o
245  deps
246    filterednormalizer2
247    uniset_props  # for uniset_getUnicode32Instance()
248    schriter
249
250group: uts46
251    uts46.o
252  deps
253    normalizer2 loadednormalizer2 punycode
254    uchar  # for u_charType() (via U_GET_GC_MASK(c))
255    ubidi_props  # for u_charDirection() & ubidi_getJoiningType()
256    bytestream
257
258group: filterednormalizer2
259    filterednormalizer2.o
260  deps
261    normalizer2
262
263group: idna2003
264    uidna.o
265  deps
266    stringprep punycode
267
268group: stringprep
269    usprep.o
270  deps
271    unorm  # could change to use filterednormalizer2 directly for Unicode 3.2 normalization
272    normalizer2
273    ubidi_props utrie
274
275group: canonical_iterator
276    caniter.o
277  deps
278    normalizer2 usetiter
279
280group: loadednormalizer2
281    loadednormalizer2impl.o
282  deps
283    normalizer2
284
285group: normalizer2
286    normalizer2.o
287    normalizer2impl.o
288  deps
289    uniset_core
290    bytestream bytesinkutil  # for UTF-8 output
291    umutablecptrie  # for building CanonIterData & FCD
292    utrie_swap  # TODO(ICU-20170): move unorm2_swap() to a separate file
293    uvector  # for building CanonIterData
294    uhash  # for the instance cache
295    udata
296
297group: punycode
298    punycode.o
299  deps
300    platform
301
302group: static_unicode_sets
303    static_unicode_sets.o
304  deps
305    resourcebundle uniset_props
306
307group: uset_props
308    uset_props.o
309  deps
310    uniset_closure uniset_props uniset_core
311
312group: uset
313    uset.o
314  deps
315    uniset_core
316
317group: uniset_closure
318    uniset_closure.o
319  deps
320    uniset_core unistr_case_locale unistr_titlecase_brkiter
321
322group: uniset_props
323    uniset_props.o ruleiter.o
324  deps
325    uniset_core uprops unistr_case characterproperties
326    parsepos
327    resourcebundle
328    propname unames
329
330group: parsepos
331    parsepos.o
332  deps
333    platform
334
335group: usetiter  # UnicodeSetIterator
336    usetiter.o
337  deps
338    uniset_core
339
340group: uniset_core
341    unifilt.o unifunct.o
342    uniset.o bmpset.o unisetspan.o
343  deps
344    patternprops
345    icu_utility
346    uvector
347
348group: icu_utility_with_props
349    util_props.o
350  deps
351    icu_utility uchar ucase
352
353group: icu_utility
354    util.o
355  deps
356    patternprops platform
357
358group: utext
359    utext.o
360  deps
361    ucase
362
363group: stringenumeration
364    ustrenum.o uenum.o
365  deps
366    platform
367
368group: schriter
369    schriter.o
370    # The UCharCharacterIterator implements virtual void getText(UnicodeString& result)
371    # so it depends on UnicodeString, therefore it makes little sense to split
372    # schriter and uchriter into separate groups.
373    uchriter.o
374  deps
375    chariter
376
377group: chariter
378    chariter.o
379  deps
380    platform
381
382group: uiter
383    uiter.o
384  deps
385    platform
386
387group: unistr_cnv
388    unistr_cnv.o
389  deps
390    conversion
391
392group: cstr
393    cstr.o
394  deps
395    unistr_cnv
396
397group: uscript
398    uscript.o  # uscript_getCode() accepts a locale ID and loads its script code data
399  deps
400    propname resourcebundle
401
402group: uscript_props  # script metadata properties
403    uscript_props.o
404  deps
405    platform
406
407group: uprops
408    uprops.o
409  deps
410    normalizer2 loadednormalizer2
411    uchar
412    ubidi_props
413    unistr_case ustring_case  # only for case folding
414    ucase
415    emojiprops
416
417group: characterproperties
418    characterproperties.o
419  deps
420    uprops
421    uniset_core
422
423group: propname
424    propname.o
425  deps
426    bytestrie
427
428group: unames
429    unames.o
430  deps
431    uchar udata
432
433group: script_runs
434    usc_impl.o
435  deps
436    uchar
437
438group: uchar
439    uchar.o
440  deps
441    utrie2
442
443group: messagepattern  # for MessageFormat and tools
444    messagepattern.o
445  deps
446    patternprops platform
447
448group: simpleformatter
449    simpleformatter.o
450  deps
451    platform
452
453group: patternprops
454    patternprops.o
455  deps
456    PIC ubsan
457
458group: ushape
459    ushape.o
460  deps
461    ubidi_props
462
463group: ubidi
464    ubidi.o ubidiln.o ubidiwrt.o
465  deps
466    ubidi_props
467    uchar  # for doWriteReverse() which uses IS_COMBINING(u_charType(c))
468
469group: ubiditransform
470    ubiditransform.o
471  deps
472    ubidi ushape
473
474group: ubidi_props
475    ubidi_props.o
476  deps
477    utrie2
478
479group: emojiprops
480    emojiprops.o
481  deps
482    ucharstrie ucharstrieiterator
483    ucptrie udata
484
485group: unistr_props
486    unistr_props.o
487  deps
488    uchar platform
489
490group: unistr_case_locale
491    unistr_case_locale.o
492  deps
493    unistr_case ustring_case_locale
494
495group: unistr_case
496    unistr_case.o
497  deps
498    ustring_case
499
500group: unistr_titlecase_brkiter
501    unistr_titlecase_brkiter.o
502  deps
503    ustr_titlecase_brkiter
504
505group: ustr_titlecase_brkiter
506    ustr_titlecase_brkiter.o
507  deps
508    breakiterator
509    ustring_case_locale ucase
510
511group: edits
512    edits.o
513  deps
514    # Edits::Iterator::toString() calls ICU_Utility::appendNumber()
515    icu_utility
516    platform
517
518group: ucasemap_titlecase_brkiter
519    ucasemap_titlecase_brkiter.o
520  deps
521    ucasemap breakiterator utext
522    ustr_titlecase_brkiter  # ustrcase_getTitleBreakIterator()
523
524group: ucasemap
525    ucasemap.o
526  deps
527    ustring_case ustring_case_locale
528    bytestream bytesinkutil  # for UTF-8 output
529    resourcebundle  # uloc_getName() etc.
530
531group: ustring_case_locale
532    ustrcase_locale.o
533  deps
534    ustring_case
535    resourcebundle  # for uloc_getDefault()
536
537group: ustring_case
538    ustrcase.o
539  deps
540    ucase uchar edits
541
542group: ucase
543    ucase.o
544  deps
545    utrie2
546
547group: uinit
548    uinit.o
549  deps
550    ucnv_io icuplug
551
552group: converter_selector
553    ucnvsel.o
554  deps
555    conversion propsvec utrie2_builder utrie_swap uset ucnv_set
556
557group: ucnvdisp  # ucnv_getDisplayName()
558    ucnvdisp.o
559  deps
560    conversion resourcebundle
561
562group: ucnv_set  # ucnv_getUnicodeSet
563    ucnv_set.o
564  deps
565    uset
566
567group: conversion
568    ustr_cnv.o
569    ucnv.o ucnv_cnv.o ucnv_bld.o ucnv_cb.o ucnv_err.o
570    ucnv_ct.o
571    ucnvmbcs.o ucnv_ext.o
572    ucnvhz.o ucnvisci.o ucnv_lmb.o ucnv2022.o
573    ucnvlat1.o ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o
574    ucnvbocu.o ucnvscsu.o
575  deps
576    ucnv_io
577
578group: ucnv_io
579    ucnv_io.o
580  deps
581    sort stringenumeration udata
582
583group: service_registration
584    serv.o servnotf.o servlkf.o servlk.o servls.o servrbf.o servslkf.o
585    locutil.o
586  deps
587    locale_display_names resourcebundle
588    hashtable uvector
589
590group: ucat  # message-catalog-like API
591    ucat.o
592  deps
593    resourcebundle
594
595group: locale_display_names
596    locdispnames.o  # Locale.getDisplayName()
597  deps
598    locresdata
599
600group: locale_display_names2
601    locdspnm.o  # class LocaleDisplayNames
602  deps
603    resourcebundle currency simpleformatter unistr_titlecase_brkiter uchar
604
605group: currency
606    ucurr.o
607  deps
608    resourcebundle ulist ustring_case_locale
609    stdlib_qsort  # for ucurr.o (which does not use ICU's uarrsort.o)
610    static_unicode_sets usetiter
611
612group: icudataver  # u_getDataVersion()
613    icudataver.o
614  deps
615    resourcebundle
616
617group: locresdata
618    # This was intended to collect locale functions that load resource bundle data.
619    # See the resourcebundle group about what else loads data.
620    locresdata.o
621  deps
622    resourcebundle
623
624group: resbund_cnv  # paths are Unicode strings
625    resbund_cnv.o
626  deps
627    conversion resourcebundle ures_cnv
628
629group: ures_cnv  # ures_openU, path is a Unicode string
630    ures_cnv.o
631  deps
632    conversion resourcebundle
633
634group: resourcebundle
635    resource.o resbund.o uresbund.o uresdata.o
636    locavailable.o
637    # uloc_tag.c and uloc_keytype.cpp convert between
638    # old ICU/LDML/CLDR locale IDs and newer BCP 47 IDs.
639    # They use data from resource bundles for some of the mappings.
640    # We might want to generate .h files for that data, to #include rather than load,
641    # to minimize dependencies from this code.
642    # Then we could separate this higher-level locale ID code from the resource bundle code.
643    uloc.o uloc_tag.o uloc_keytype.o
644    # Even basic locid.cpp via Locale constructors and Locale::getDefault()
645    # depend on canonicalization and data loading.
646    # We can probably only disentangle basic locale ID handling from resource bundle code
647    # by hardcoding all of the locale ID data.
648    locid.o locmap.o wintz.o
649    # Do we need class LocaleBased? https://unicode-org.atlassian.net/browse/ICU-8608
650    locbased.o
651    loclikely.o
652    localebuilder.o
653  deps
654    udata ucol_swp
655    sort stringenumeration uhash uvector
656    uscript_props propname
657    bytesinkutil
658    errorcode
659
660group: localematcher
661    localematcher.o
662  deps
663    resourcebundle localeprioritylist loclikelysubtags locdistance lsr
664
665group: localeprioritylist
666    localeprioritylist.o
667  deps
668    resourcebundle
669
670group: locdistance
671    locdistance.o
672  deps
673    loclikelysubtags
674
675group: loclikelysubtags
676    loclikelysubtags.o
677  deps
678    lsr resourcebundle
679
680group: lsr
681    lsr.o
682  deps
683    platform
684
685group: udata
686    udata.o ucmndata.o udatamem.o restrace.o
687    umapfile.o
688  deps
689    uhash platform stubdata
690    file_io mmap_functions
691    icu_utility
692
693group: unifiedcache
694    unifiedcache.o
695  deps
696    uhash
697    platform
698
699group: ucharstriebuilder
700    ucharstriebuilder.o
701  deps
702    ucharstrie stringtriebuilder sort
703
704group: ucharstrieiterator
705    ucharstrieiterator.o
706  deps
707    ucharstrie uvector32
708
709group: ucharstrie
710    ucharstrie.o
711  deps
712    platform
713
714group: bytestriebuilder
715    bytestriebuilder.o
716  deps
717    bytestrie stringtriebuilder sort
718
719group: bytestrieiterator
720    bytestrieiterator.o
721  deps
722    bytestrie uvector32
723
724group: bytestrie
725    bytestrie.o
726  deps
727    platform
728
729group: stringtriebuilder
730    stringtriebuilder.o
731  deps
732    uhash
733
734group: propsvec
735    propsvec.o
736  deps
737    sort utrie2_builder
738
739group: utrie_swap
740    utrie_swap.o
741  deps
742    udata
743
744group: umutablecptrie
745    umutablecptrie.o
746  deps
747    ucptrie
748
749group: ucptrie
750    ucptrie.o
751  deps
752    platform
753
754group: utrie2_builder
755    utrie2_builder.o
756  deps
757    platform
758    utrie2
759    utrie  # for utrie2_fromUTrie()
760
761group: utrie2  # Try to switch users to ucptrie.
762    utrie2.o
763  deps
764    platform
765
766group: utrie  # Callers should use ucptrie instead.
767    utrie.o
768  deps
769    platform
770
771group: hashtable  # Maps UnicodeString to value.
772    uhash_us.o
773  deps
774    uhash
775
776group: uhash
777    uhash.o
778  deps
779    platform
780
781group: ustack
782    ustack.o
783  deps
784    uvector
785
786group: uvector
787    uvector.o
788  deps
789    platform
790    sort  # for UVector::sort()
791
792group: uvector32
793    uvectr32.o
794  deps
795    platform
796
797group: uvector64
798    uvectr64.o
799  deps
800    platform
801
802group: ulist
803    ulist.o
804  deps
805    platform
806
807group: sort
808    uarrsort.o
809  deps
810    platform
811
812group: ustr_wcs
813    ustr_wcs.o
814  deps
815    platform
816
817group: bytesinkutil
818    bytesinkutil.o
819  deps
820    bytestream edits
821
822group: bytestream
823    bytestream.o
824  deps
825    platform
826
827group: icuplug
828    icuplug.o
829  deps
830    platform
831
832group: ucol_swp
833    ucol_swp.o
834  deps
835    utrie_swap
836
837group: errorcode  # ErrorCode base class
838    errorcode.o
839  deps
840    utypes
841    platform
842
843group: utypes  # u_errorName()
844    utypes.o
845  deps
846    ubsan
847
848group: platform
849    # Files in the "platform" group.
850    cmemory.o uobject.o
851    cstring.o cwchar.o uinvchar.o
852    charstr.o
853    unistr.o  # for CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode)
854    appendable.o stringpiece.o ustrtrns.o  # for unistr.o
855    ustring.o  # Other platform files really just need u_strlen
856    ustrfmt.o  # uprv_itou
857    utf_impl.o
858    putil.o
859    ucln_cmn.o  # for putil.o which calls ucln_common_registerCleanup
860    udataswp.o  # for uinvchar.o; TODO: move uinvchar.o swapper functions to udataswp.o?
861    umath.o
862    umutex.o sharedobject.o
863    utrace.o
864  deps
865    # The "platform" group has no ICU dependencies.
866    PIC system_misc system_debug malloc_functions ubsan
867    c_strings c_string_formatting
868    floating_point system_locale
869    stdio_input readlink_function dir_io
870    dlfcn  # Move related code into icuplug.c?
871    cplusplus
872    std_mutex
873
874# ICU i18n library ----------------------------------------------------------- #
875
876library: i18n
877  deps
878    region localedata genderinfo charset_detector spoof_detection
879    alphabetic_index collation collation_builder string_search
880    dayperiodrules
881    listformatter
882    formatting formattable_cnv regex regex_cnv translit
883    double_conversion number_representation number_output numberformatter
884    number_skeletons number_usageprefs numberparser
885    units_extra unitsformatter
886    universal_time_scale
887    uclean_i18n
888    display_options
889
890group: region
891    region.o uregion.o
892  deps
893    icu_utility
894    resourcebundle
895    uvector uclean_i18n
896
897group: localedata
898    ulocdata.o
899  deps
900    uniset_props resourcebundle
901    uset_props  # TODO: change to using C++ UnicodeSet, remove this dependency
902
903group: genderinfo
904    gender.o
905  deps
906    resourcebundle
907    uclean_i18n
908
909group: charset_detector
910    csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o ucsdet.o
911  deps
912    conversion
913    uclean_i18n
914
915group: spoof_detection
916    uspoof.o uspoof_build.o uspoof_conf.o uspoof_impl.o scriptset.o
917  deps
918    uniset_props regex unorm uscript
919
920group: alphabetic_index
921    alphaindex.o
922  deps
923    collation localedata
924    uclean_i18n
925
926group: collation
927    # The collation "runtime" code should not depend on the collation_builder code.
928    # For example, loading from resource bundles does not fall back to
929    # building from rules.
930    collation.o collationcompare.o collationdata.o
931    collationdatareader.o collationdatawriter.o
932    collationfastlatin.o collationfcd.o collationiterator.o collationkeys.o
933    collationroot.o collationrootelements.o collationsets.o
934    collationsettings.o collationtailoring.o rulebasedcollator.o
935    uitercollationiterator.o utf16collationiterator.o utf8collationiterator.o
936    bocsu.o coleitr.o coll.o sortkey.o ucol.o
937    ucol_res.o ucol_sit.o ucoleitr.o
938  deps
939    bytestream normalizer2 resourcebundle service_registration unifiedcache
940    ucharstrieiterator uiter ulist uset usetiter uvector32 uvector64 utrie2
941    uclean_i18n propname
942
943group: collation_builder
944    collationbuilder.o collationdatabuilder.o collationfastlatinbuilder.o
945    collationruleparser.o collationweights.o
946  deps
947    canonical_iterator collation ucharstriebuilder uset_props
948
949group: string_search
950    search.o stsearch.o usearch.o
951  deps
952    breakiterator collation
953
954group: dayperiodrules
955    dayperiodrules.o
956  deps
957    resourcebundle uclean_i18n
958
959group: listformatter
960    listformatter.o ulistformatter.o
961  deps
962    uchar resourcebundle simpleformatter format uclean_i18n formatted_value_sbimpl
963
964group: double_conversion
965    double-conversion-bignum.o double-conversion-double-to-string.o
966    double-conversion-bignum-dtoa.o double-conversion-cached-powers.o
967    double-conversion-string-to-double.o double-conversion-fast-dtoa.o
968    double-conversion-strtod.o
969  deps
970    platform
971
972group: number_representation
973    number_decimalquantity.o string_segment.o number_utils.o
974    # TODO(ICU-21058) Move formatted_string_builder to its own unit.
975    formatted_string_builder.o
976  deps
977    decnumber double_conversion
978    # for trimming whitespace around fields
979    static_unicode_sets
980    # for data loading; that could be split off
981    resourcebundle
982    int_functions
983    ucase uniset_core
984    formatted_value
985
986group: number_output
987    # PluralRules and FormattedNumber
988    number_output.o
989    standardplural.o plurrule.o pluralranges.o
990  deps
991    # FormattedNumber internals:
992    number_representation format formatted_value_sbimpl units
993    # PluralRules internals:
994    unifiedcache
995    display_options
996
997group: numberformatter
998    # ICU 60+ NumberFormatter API
999    number_affixutils.o
1000    number_compact.o number_currencysymbols.o
1001    number_decimfmtprops.o
1002    number_fluent.o number_formatimpl.o
1003    number_grouping.o number_integerwidth.o number_longnames.o
1004    number_mapper.o number_modifiers.o
1005    number_notation.o number_padding.o
1006    number_patternmodifier.o number_patternstring.o
1007    number_scientific.o
1008    currpinf.o
1009    numrange_fluent.o numrange_impl.o
1010  deps
1011    decnumber double_conversion formattable units unitsformatter
1012    listformatter number_representation number_output
1013    numsys
1014    number_usageprefs
1015    number_rounding
1016    number_symbolswrapper
1017    uclean_i18n common
1018
1019group: numsys
1020    dcfmtsym.o
1021    numsys.o
1022  deps
1023    currency
1024    resourcebundle
1025    uclean_i18n
1026
1027group: number_usageprefs
1028    number_multiplier.o
1029    number_usageprefs.o
1030  deps
1031    number_rounding
1032    number_symbolswrapper
1033    unitsformatter
1034
1035group: number_rounding
1036    number_rounding.o
1037  deps
1038    currency
1039    number_representation
1040
1041group: number_skeletons
1042    # Number skeleton support; separated from numberformatter
1043    number_skeletons.o number_capi.o number_asformat.o numrange_capi.o
1044  deps
1045    numberformatter
1046    units_extra
1047
1048group: number_symbolswrapper
1049    number_symbolswrapper.o
1050  deps
1051    platform
1052    numsys
1053
1054group: numberparser
1055    numparse_affixes.o numparse_compositions.o numparse_currency.o
1056    numparse_decimal.o numparse_impl.o numparse_parsednumber.o
1057    numparse_scientific.o numparse_symbols.o
1058    numparse_validators.o
1059  deps
1060    numberformatter
1061
1062group: formatting
1063    # TODO: Try to subdivide this ball of wax.
1064    # currencyformat
1065    curramt.o currfmt.o
1066    # pluralrules C API
1067    upluralrules.o
1068    # decimalformat
1069    unumsys.o
1070    decimfmt.o compactdecimalformat.o
1071    numfmt.o unum.o
1072    winnmfmt.o
1073    # scientificnumberformatter - would depend on dcfmtsym, so would be circular.
1074    scientificnumberformatter.o
1075    # rbnf
1076    nfrs.o nfrule.o nfsubs.o rbnf.o
1077    # measureformat
1078    measfmt.o quantityformatter.o
1079    # dateformat
1080    astro.o buddhcal.o calendar.o cecal.o chnsecal.o coptccal.o dangical.o ethpccal.o
1081    gregocal.o gregoimp.o hebrwcal.o indiancal.o islamcal.o japancal.o persncal.o taiwncal.o
1082    erarules.o  # mostly for Japanese eras
1083    ucal.o
1084    basictz.o olsontz.o rbtz.o simpletz.o timezone.o tzrule.o tztrans.o
1085    vtzone.o vzone.o wintzimpl.o zonemeta.o zrule.o ztrans.o
1086    tzfmt.o tzgnames.o tznames.o tznames_impl.o
1087    datefmt.o dtfmtsym.o dtitvfmt.o dtitvinf.o dtptngen.o dtrule.o reldtfmt.o reldatefmt.o
1088    smpdtfmt.o smpdtfst.o udateintervalformat.o udatpg.o windtfmt.o
1089    udat.o
1090    tmunit.o tmutamt.o tmutfmt.o
1091    # messageformat
1092    choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
1093  deps
1094    decnumber formattable format units numberformatter number_skeletons numberparser
1095    formatted_value_sbimpl
1096    listformatter
1097    dayperiodrules
1098    collation collation_builder  # for rbnf
1099    common
1100    floating_point  # sqrt() for astro.o
1101    trigonometry  # for astro.o
1102    sharedbreakiterator # for reldatefmt.o
1103    uclean_i18n
1104    region
1105    formatted_value_iterimpl  # NOTE (2020-08-27): Not currently used.
1106
1107group: sharedbreakiterator
1108    sharedbreakiterator.o
1109  deps
1110    breakiterator
1111
1112group: units_extra
1113    measunit_extra.o
1114  deps
1115    units bytestriebuilder bytestrie resourcebundle uclean_i18n
1116
1117group: units
1118    measunit.o currunit.o
1119  deps
1120    stringenumeration errorcode
1121
1122group: unitsformatter
1123    units_data.o units_converter.o units_complexconverter.o units_router.o
1124  deps
1125    resourcebundle units_extra double_conversion number_representation formattable sort
1126    number_rounding
1127
1128group: decnumber
1129    decContext.o decNumber.o
1130  deps
1131    double_conversion uclean_i18n
1132
1133group: formattable
1134    fmtable.o
1135    measure.o
1136  deps
1137    decnumber number_representation
1138
1139group: formattable_cnv
1140    fmtable_cnv.o
1141  deps
1142    formattable unistr_cnv conversion
1143
1144group: formatted_value
1145    formattedvalue.o
1146  deps
1147    platform
1148
1149group: formatted_value_iterimpl
1150    formattedval_iterimpl.o
1151  deps
1152    formatted_value format uvector32
1153
1154group: formatted_value_sbimpl
1155    formattedval_sbimpl.o
1156  deps
1157    number_representation
1158
1159group: format
1160    format.o fphdlimp.o fpositer.o ufieldpositer.o
1161  deps
1162    resourcebundle parsepos uvector32
1163
1164group: regex_cnv
1165    uregexc.o
1166  deps
1167    regex unistr_cnv
1168
1169group: regex
1170    regexcmp.o regexst.o regextxt.o regeximp.o rematch.o repattrn.o uregex.o
1171  deps
1172    uniset_closure utext uvector32 uvector64 ustack
1173    breakiterator
1174    uinit  # TODO: Really needed?
1175    uclean_i18n
1176
1177group: translit
1178    anytrans.o brktrans.o casetrn.o cpdtrans.o name2uni.o uni2name.o nortrans.o remtrans.o titletrn.o tolowtrn.o toupptrn.o
1179    esctrn.o unesctrn.o nultrans.o
1180    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
1181  deps
1182    common
1183    formatting  # for Transliterator::getDisplayName()
1184    uclean_i18n
1185
1186group: universal_time_scale
1187    utmscale.o
1188  deps
1189    ubsan
1190
1191group: uclean_i18n
1192    ucln_in.o
1193  deps
1194    platform
1195
1196group: display_options
1197    displayoptions.o
1198  deps
1199    platform
1200
1201# ICU io library ------------------------------------------------------------- #
1202
1203library: io
1204  deps
1205    ustdio ustream uclean_io
1206
1207group: ustdio
1208    locbund.o sprintf.o sscanf.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o uscanf.o uscanf_p.o ustdio.o
1209  deps
1210    formatting conversion translit
1211    uclean_io
1212    stdio_output
1213
1214group: ustream
1215    ustream.o
1216  deps
1217    unistr_cnv
1218    uchar  # for u_isWhitespace()
1219    iostream
1220
1221group: uclean_io
1222    ucln_io.o
1223  deps
1224    platform
1225