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