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