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