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