Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / icu / icu.gyp
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 {
6   'includes': [
7     'icu.gypi',
8   ],
9   'variables': {
10     'use_system_icu%': 0,
11     'icu_use_data_file_flag%': 0,
12     'want_separate_host_toolset%': 1,
13   },
14   'target_defaults': {
15     'direct_dependent_settings': {
16       'defines': [
17         # Tell ICU to not insert |using namespace icu;| into its headers,
18         # so that chrome's source explicitly has to use |icu::|.
19         'U_USING_ICU_NAMESPACE=0',
20         # We don't use ICU plugins and dyload is only necessary for them.
21         # NaCl-related builds also fail looking for dlfcn.h when it's enabled.
22         'U_ENABLE_DYLOAD=0',
23       ],
24     },
25     'defines': [
26       'U_USING_ICU_NAMESPACE=0',
27       'HAVE_DLOPEN=0',
28     ],
29     'conditions': [
30       ['component=="static_library"', {
31         'defines': [
32           'U_STATIC_IMPLEMENTATION',
33         ],
34       }],
35       ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
36          or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \
37         (target_arch=="arm" or target_arch=="ia32" or \
38          target_arch=="mipsel")', {
39         'target_conditions': [
40           ['_toolset=="host"', {
41             'cflags': [ '-m32' ],
42             'ldflags': [ '-m32' ],
43             'asflags': [ '-32' ],
44             'xcode_settings': {
45               'ARCHS': [ 'i386' ],
46             },
47           }],
48         ],
49       }],
50       ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
51          or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \
52         (target_arch=="arm64" or target_arch=="x64" or \
53          target_arch=="mipsel64")', {
54         'target_conditions': [
55           ['_toolset=="host"', {
56             'cflags': [ '-m64' ],
57             'ldflags': [ '-m64' ],
58             'asflags': [ '-64' ],
59             'xcode_settings': {
60               'ARCHS': [ 'x86_64' ],
61             },
62           }],
63         ],
64       }],
65     ],
66     'include_dirs': [
67       'source/common',
68       'source/i18n',
69     ],
70     'msvs_disabled_warnings': [4005, 4068, 4355, 4996, 4267],
71   },
72   'conditions': [
73     ['use_system_icu==0 or want_separate_host_toolset==1', {
74       'targets': [
75         {
76           'target_name': 'copy_icudtl_dat',
77           'type': 'none',
78           # icudtl.dat is the same for both host/target, so this only supports a
79           # single toolset. If a target requires that the .dat file be copied
80           # to the output directory, it should explicitly depend on this target
81           # with the host toolset (like copy_icudtl_dat#host).
82           'toolsets': [ 'host' ],
83           'copies': [{
84             'destination': '<(PRODUCT_DIR)',
85             'conditions': [
86               ['OS == "android"', {
87                 'files': [
88                   'android/icudtl.dat',
89                 ],
90               } , { # else: OS != android
91                 'files': [
92                   'source/data/in/icudtl.dat',
93                 ],
94               }],
95             ],
96           }],
97         },
98         {
99           'target_name': 'icudata',
100           'type': 'static_library',
101           'defines': [
102             'U_HIDE_DATA_SYMBOL',
103           ],
104           'sources': [
105              # These are hand-generated, but will do for now.  The linux
106              # version is an identical copy of the (mac) icudtl_dat.S file,
107              # modulo removal of the .private_extern and .const directives and
108              # with no leading underscore on the icudt52_dat symbol.
109              'android/icudtl_dat.S',
110              'linux/icudtl_dat.S',
111              'mac/icudtl_dat.S',
112           ],
113           'conditions': [
114             [ 'use_system_icu==1 and want_separate_host_toolset==1', {
115               'toolsets': ['host'],
116             }],
117             [ 'use_system_icu==0 and want_separate_host_toolset==1', {
118               'toolsets': ['host', 'target'],
119             }],
120             [ 'use_system_icu==0 and want_separate_host_toolset==0', {
121               'toolsets': ['target'],
122             }],
123             [ 'OS == "win" and icu_use_data_file_flag==0', {
124               'type': 'none',
125               'copies': [
126                 {
127                   'destination': '<(PRODUCT_DIR)',
128                   'files': [
129                     'windows/icudt.dll',
130                   ],
131                 },
132               ],
133             }],
134             [ 'icu_use_data_file_flag==1', {
135               # Remove any assembly data file.
136               'sources/': [['exclude', 'icudtl_dat']],
137               # Compile in the stub data symbol.
138               'sources': ['source/stubdata/stubdata.c'],
139
140               # Make sure any binary depending on this gets the data file.
141               'conditions': [
142                 ['OS != "ios"', {
143                   'dependencies': [
144                     'copy_icudtl_dat#host',
145                   ],
146                 } , { # else: OS=="ios"
147                   'link_settings': {
148                     'mac_bundle_resources': [
149                       'source/data/in/icudtl.dat',
150                     ],
151                   },
152                 }], # OS!=ios
153               ], # conditions
154             }], # icu_use_data_file_flag
155           ], # conditions
156           'target_conditions': [
157             [ 'OS == "win" or OS == "mac" or OS == "ios" or '
158               '(OS == "android" and (_toolset != "host" or host_os != "linux")) or '
159               '(OS == "qnx" and (_toolset == "host" and host_os != "linux"))', {
160               'sources!': ['linux/icudtl_dat.S'],
161             }],
162             [ 'OS != "android" or _toolset == "host"', {
163               'sources!': ['android/icudtl_dat.S'],
164             }],
165             [ 'OS != "mac" and OS != "ios" and '
166               '((OS != "android" and OS != "qnx") or '
167               '_toolset != "host" or host_os != "mac")', {
168               'sources!': ['mac/icudtl_dat.S'],
169             }],
170           ], # target_conditions
171         },
172         {
173           'target_name': 'icui18n',
174           'type': '<(component)',
175           'sources': [
176             '<@(icui18n_sources)',
177           ],
178           'defines': [
179             'U_I18N_IMPLEMENTATION',
180           ],
181           'dependencies': [
182             'icuuc',
183           ],
184           'direct_dependent_settings': {
185             'include_dirs': [
186               'source/i18n',
187             ],
188           },
189           'variables': {
190             'clang_warning_flags': [
191               # ICU uses its own deprecated functions.
192               '-Wno-deprecated-declarations',
193               # ICU prefers `a && b || c` over `(a && b) || c`.
194               '-Wno-logical-op-parentheses',
195               # ICU has some `unsigned < 0` checks.
196               '-Wno-tautological-compare',
197               # Looks like a real issue, see http://crbug.com/114660
198               '-Wno-return-type-c-linkage',
199             ],
200           },
201           # Since ICU wants to internally use its own deprecated APIs, don't
202           # complain about it.
203           'cflags': [
204             '-Wno-deprecated-declarations',
205           ],
206           'cflags_cc': [
207             '-frtti',
208           ],
209           'xcode_settings': {
210             'GCC_ENABLE_CPP_RTTI': 'YES',       # -frtti
211           },
212           'msvs_settings': {
213             'VCCLCompilerTool': {
214               'RuntimeTypeInfo': 'true',
215             },
216           },
217           'conditions': [
218             [ 'use_system_icu==1 and want_separate_host_toolset==1', {
219               'toolsets': ['host'],
220             }],
221             [ 'use_system_icu==0 and want_separate_host_toolset==1', {
222               'toolsets': ['host', 'target'],
223             }],
224             [ 'use_system_icu==0 and want_separate_host_toolset==0', {
225               'toolsets': ['target'],
226             }],
227             ['OS == "android" and clang==0', {
228                 # Disable sincos() optimization to avoid a linker error since
229                 # Android's math library doesn't have sincos().  Either
230                 # -fno-builtin-sin or -fno-builtin-cos works.
231                 'cflags': [
232                     '-fno-builtin-sin',
233                 ],
234             }],
235             [ 'OS == "win" and clang==1', {
236               # Note: General clang warnings should go in the
237               # clang_warning_flags block above.
238               'msvs_settings': {
239                 'VCCLCompilerTool': {
240                   'AdditionalOptions': [
241                     # See http://bugs.icu-project.org/trac/ticket/11122
242                     '-Wno-inline-new-delete',
243                     '-Wno-implicit-exception-spec-mismatch',
244                   ],
245                 },
246               },
247             }],
248             ['OS == "android" and use_system_stlport == 1', {
249               'target_conditions': [
250                 ['_toolset == "target"', {
251                   # ICU requires RTTI, which is not present in the system's
252                   # stlport, so we have to include gabi++.
253                   'include_dirs': [
254                     '<(android_src)/abi/cpp/include',
255                   ],
256                 }],
257               ],
258             }],
259           ], # conditions
260         },
261         {
262           'target_name': 'icuuc',
263           'type': '<(component)',
264           'sources': [
265             '<@(icuuc_sources)',
266           ],
267           'defines': [
268             'U_COMMON_IMPLEMENTATION',
269           ],
270           'dependencies': [
271             'icudata',
272           ],
273           'direct_dependent_settings': {
274             'include_dirs': [
275               'source/common',
276             ],
277             'conditions': [
278               [ 'component=="static_library"', {
279                 'defines': [
280                   'U_STATIC_IMPLEMENTATION',
281                 ],
282               }],
283             ],
284           },
285           'variables': {
286             'clang_warning_flags': [
287               # ICU uses its own deprecated functions.
288               '-Wno-deprecated-declarations',
289               # ICU prefers `a && b || c` over `(a && b) || c`.
290               '-Wno-logical-op-parentheses',
291               # ICU has some `unsigned < 0` checks.
292               '-Wno-tautological-compare',
293               # uresdata.c has switch(RES_GET_TYPE(x)) code. The
294               # RES_GET_TYPE macro returns an UResType enum, but some switch
295               # statement contains case values that aren't part of that
296               # enum (e.g. URES_TABLE32 which is in UResInternalType). This
297               # is on purpose.
298               '-Wno-switch',
299             ],
300           },
301           'cflags': [
302             # Since ICU wants to internally use its own deprecated APIs,
303             # don't complain about it.
304             '-Wno-deprecated-declarations',
305             '-Wno-unused-function',
306           ],
307           'cflags_cc': [
308             '-frtti',
309           ],
310           'xcode_settings': {
311             'GCC_ENABLE_CPP_RTTI': 'YES',       # -frtti
312           },
313           'msvs_settings': {
314             'VCCLCompilerTool': {
315               'RuntimeTypeInfo': 'true',
316             },
317           },
318           'all_dependent_settings': {
319             'msvs_settings': {
320               'VCLinkerTool': {
321                 'AdditionalDependencies': [
322                   'advapi32.lib',
323                 ],
324               },
325             },
326           },
327           'conditions': [
328             [ 'use_system_icu==1 and want_separate_host_toolset==1', {
329               'toolsets': ['host'],
330             }],
331             [ 'use_system_icu==0 and want_separate_host_toolset==1', {
332               'toolsets': ['host', 'target'],
333             }],
334             [ 'use_system_icu==0 and want_separate_host_toolset==0', {
335               'toolsets': ['target'],
336             }],
337             [ 'OS == "win" and icu_use_data_file_flag==0', {
338               'sources': [
339                 'source/stubdata/stubdata.c',
340               ],
341             }],
342             [ 'OS == "win" and clang==1', {
343               # Note: General clang warnings should go in the
344               # clang_warning_flags block above.
345               'msvs_settings': {
346                 'VCCLCompilerTool': {
347                   'AdditionalOptions': [
348                     # See http://bugs.icu-project.org/trac/ticket/11122
349                     '-Wno-inline-new-delete',
350                     '-Wno-implicit-exception-spec-mismatch',
351                   ],
352                 },
353               },
354             }],
355             ['OS == "android" and use_system_stlport == 1', {
356               'target_conditions': [
357                 ['_toolset == "target"', {
358                   # ICU requires RTTI, which is not present in the system's
359                   # stlport, so we have to include gabi++.
360                   'include_dirs': [
361                     '<(android_src)/abi/cpp/include',
362                   ],
363                 }],
364               ],
365             }],
366           ], # conditions
367         },
368       ], # targets
369     }],
370     ['use_system_icu==1', {
371       'targets': [
372         {
373           'target_name': 'system_icu',
374           'type': 'none',
375           'conditions': [
376             ['OS=="android"', {
377               'direct_dependent_settings': {
378                 'include_dirs': [
379                   '<(android_src)/external/icu/icu4c/source/common',
380                   '<(android_src)/external/icu/icu4c/source/i18n',
381                 ],
382               },
383               'link_settings': {
384                 'libraries': [
385                   '-licui18n',
386                   '-licuuc',
387                 ],
388               },
389             }],
390             ['OS=="qnx"', {
391               'link_settings': {
392                 'libraries': [
393                   '-licui18n',
394                   '-licuuc',
395                 ],
396               },
397             }],
398             ['OS!="android" and OS!="qnx"', {
399               'link_settings': {
400                 'ldflags': [
401                   '<!@(icu-config --ldflags)',
402                 ],
403                 'libraries': [
404                   '<!@(icu-config --ldflags-libsonly)',
405                 ],
406               },
407             }],
408           ],
409         },
410         {
411           'target_name': 'icudata',
412           'type': 'none',
413           'dependencies': ['system_icu'],
414           'export_dependent_settings': ['system_icu'],
415           'toolsets': ['target'],
416         },
417         {
418           'target_name': 'icui18n',
419           'type': 'none',
420           'dependencies': ['system_icu'],
421           'export_dependent_settings': ['system_icu'],
422           'variables': {
423             'headers_root_path': 'source/i18n',
424             'header_filenames': [
425               # This list can easily be updated using the command below:
426               # find third_party/icu/source/i18n/unicode -iname '*.h' \
427               # -printf "'%p',\n" | \
428               # sed -e 's|third_party/icu/source/i18n/||' | sort -u
429               'unicode/alphaindex.h',
430               'unicode/basictz.h',
431               'unicode/calendar.h',
432               'unicode/choicfmt.h',
433               'unicode/coleitr.h',
434               'unicode/coll.h',
435               'unicode/compactdecimalformat.h',
436               'unicode/curramt.h',
437               'unicode/currpinf.h',
438               'unicode/currunit.h',
439               'unicode/datefmt.h',
440               'unicode/dcfmtsym.h',
441               'unicode/decimfmt.h',
442               'unicode/dtfmtsym.h',
443               'unicode/dtitvfmt.h',
444               'unicode/dtitvinf.h',
445               'unicode/dtptngen.h',
446               'unicode/dtrule.h',
447               'unicode/fieldpos.h',
448               'unicode/fmtable.h',
449               'unicode/format.h',
450               'unicode/fpositer.h',
451               'unicode/gender.h',
452               'unicode/gregocal.h',
453               'unicode/locdspnm.h',
454               'unicode/measfmt.h',
455               'unicode/measunit.h',
456               'unicode/measure.h',
457               'unicode/msgfmt.h',
458               'unicode/numfmt.h',
459               'unicode/numsys.h',
460               'unicode/plurfmt.h',
461               'unicode/plurrule.h',
462               'unicode/rbnf.h',
463               'unicode/rbtz.h',
464               'unicode/regex.h',
465               'unicode/region.h',
466               'unicode/search.h',
467               'unicode/selfmt.h',
468               'unicode/simpletz.h',
469               'unicode/smpdtfmt.h',
470               'unicode/sortkey.h',
471               'unicode/stsearch.h',
472               'unicode/tblcoll.h',
473               'unicode/timezone.h',
474               'unicode/tmunit.h',
475               'unicode/tmutamt.h',
476               'unicode/tmutfmt.h',
477               'unicode/translit.h',
478               'unicode/tzfmt.h',
479               'unicode/tznames.h',
480               'unicode/tzrule.h',
481               'unicode/tztrans.h',
482               'unicode/ucal.h',
483               'unicode/ucoleitr.h',
484               'unicode/ucol.h',
485               'unicode/ucsdet.h',
486               'unicode/ucurr.h',
487               'unicode/udateintervalformat.h',
488               'unicode/udat.h',
489               'unicode/udatpg.h',
490               'unicode/udisplaycontext.h',
491               'unicode/uformattable.h',
492               'unicode/ugender.h',
493               'unicode/uldnames.h',
494               'unicode/ulocdata.h',
495               'unicode/umsg.h',
496               'unicode/unirepl.h',
497               'unicode/unum.h',
498               'unicode/unumsys.h',
499               'unicode/upluralrules.h',
500               'unicode/uregex.h',
501               'unicode/uregion.h',
502               'unicode/usearch.h',
503               'unicode/uspoof.h',
504               'unicode/utmscale.h',
505               'unicode/utrans.h',
506               'unicode/vtzone.h',
507             ],
508           },
509           'includes': [
510             '../../build/shim_headers.gypi',
511           ],
512           'toolsets': ['target'],
513         },
514         {
515           'target_name': 'icuuc',
516           'type': 'none',
517           'dependencies': ['system_icu'],
518           'export_dependent_settings': ['system_icu'],
519           'variables': {
520             'headers_root_path': 'source/common',
521             'header_filenames': [
522               # This list can easily be updated using the command below:
523               # find third_party/icu/source/common/unicode -iname '*.h' \
524               # -printf "'%p',\n" | \
525               # sed -e 's|third_party/icu/source/common/||' | sort -u
526               'unicode/appendable.h',
527               'unicode/brkiter.h',
528               'unicode/bytestream.h',
529               'unicode/bytestriebuilder.h',
530               'unicode/bytestrie.h',
531               'unicode/caniter.h',
532               'unicode/chariter.h',
533               'unicode/dbbi.h',
534               'unicode/docmain.h',
535               'unicode/dtintrv.h',
536               'unicode/enumset.h',
537               'unicode/errorcode.h',
538               'unicode/icudataver.h',
539               'unicode/icuplug.h',
540               'unicode/idna.h',
541               'unicode/listformatter.h',
542               'unicode/localpointer.h',
543               'unicode/locid.h',
544               'unicode/messagepattern.h',
545               'unicode/normalizer2.h',
546               'unicode/normlzr.h',
547               'unicode/parseerr.h',
548               'unicode/parsepos.h',
549               'unicode/platform.h',
550               'unicode/ptypes.h',
551               'unicode/putil.h',
552               'unicode/rbbi.h',
553               'unicode/rep.h',
554               'unicode/resbund.h',
555               'unicode/schriter.h',
556               'unicode/std_string.h',
557               'unicode/strenum.h',
558               'unicode/stringpiece.h',
559               'unicode/stringtriebuilder.h',
560               'unicode/symtable.h',
561               'unicode/ubidi.h',
562               'unicode/ubrk.h',
563               'unicode/ucasemap.h',
564               'unicode/ucat.h',
565               'unicode/uchar.h',
566               'unicode/ucharstriebuilder.h',
567               'unicode/ucharstrie.h',
568               'unicode/uchriter.h',
569               'unicode/uclean.h',
570               'unicode/ucnv_cb.h',
571               'unicode/ucnv_err.h',
572               'unicode/ucnv.h',
573               'unicode/ucnvsel.h',
574               'unicode/uconfig.h',
575               'unicode/udata.h',
576               'unicode/uenum.h',
577               'unicode/uidna.h',
578               'unicode/uiter.h',
579               'unicode/uloc.h',
580               'unicode/umachine.h',
581               'unicode/umisc.h',
582               'unicode/unifilt.h',
583               'unicode/unifunct.h',
584               'unicode/unimatch.h',
585               'unicode/uniset.h',
586               'unicode/unistr.h',
587               'unicode/unorm2.h',
588               'unicode/unorm.h',
589               'unicode/uobject.h',
590               'unicode/urename.h',
591               'unicode/urep.h',
592               'unicode/ures.h',
593               'unicode/uscript.h',
594               'unicode/uset.h',
595               'unicode/usetiter.h',
596               'unicode/ushape.h',
597               'unicode/usprep.h',
598               'unicode/ustring.h',
599               'unicode/ustringtrie.h',
600               'unicode/utext.h',
601               'unicode/utf16.h',
602               'unicode/utf32.h',
603               'unicode/utf8.h',
604               'unicode/utf.h',
605               'unicode/utf_old.h',
606               'unicode/utrace.h',
607               'unicode/utypes.h',
608               'unicode/uvernum.h',
609               'unicode/uversion.h',
610             ],
611           },
612           'includes': [
613             '../../build/shim_headers.gypi',
614           ],
615           'toolsets': ['target'],
616         },
617       ], # targets
618     }],
619   ], # conditions
620 }