# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/linux/pkg_config.gni")
import("//build/shim_headers.gni")

group("icu") {
  public_deps = [
    ":icui18n",
    ":icuuc",
  ]
}

config("icu_config") {
  defines = [
    "USING_SYSTEM_ICU=1",
    "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC",
    "UCHAR_TYPE=uint16_t",

    # U_EXPORT (defined in unicode/platform.h) is used to set public visibility
    # on classes through the U_COMMON_API and U_I18N_API macros (among others).
    # When linking against the system ICU library, we want its symbols to have
    # public LTO visibility. This disables CFI checks for the ICU classes and
    # allows whole-program optimization to be applied to the rest of Chromium.
    #
    # Both U_COMMON_API and U_I18N_API macros would be defined to U_EXPORT only
    # when U_COMBINED_IMPLEMENTATION is defined (see unicode/utypes.h). Because
    # we override the default system UCHAR_TYPE (char16_t), it is not possible
    # to use U_COMBINED_IMPLEMENTATION at this moment, meaning the U_COMMON_API
    # and U_I18N_API macros are set to U_IMPORT which is an empty definition.
    #
    # Until building with UCHAR_TYPE=char16_t is supported, one way to apply
    # public visibility (and thus public LTO visibility) to all ICU classes is
    # to define U_IMPORT to have the same value as U_EXPORT. For more details,
    # please see: https://crbug.com/822820
    "U_IMPORT=U_EXPORT",
  ]
}

pkg_config("system_icui18n") {
  packages = [ "icu-i18n" ]
}

pkg_config("system_icuuc") {
  packages = [ "icu-uc" ]
}

source_set("icui18n") {
  deps = [
    ":icui18n_shim",
  ]
  public_configs = [
    ":icu_config",
    ":system_icui18n",
  ]
}

source_set("icuuc") {
  deps = [
    ":icuuc_shim",
  ]
  public_configs = [
    ":icu_config",
    ":system_icuuc",
  ]
}

shim_headers("icui18n_shim") {
  root_path = "source/i18n"
  headers = [
    # This list can easily be updated using the commands below:
    # cd third_party/icu/source/i18n
    # find unicode -iname '*.h' -printf '    "%p",\n' | LC_ALL=C sort -u
    "unicode/alphaindex.h",
    "unicode/basictz.h",
    "unicode/calendar.h",
    "unicode/choicfmt.h",
    "unicode/coleitr.h",
    "unicode/coll.h",
    "unicode/compactdecimalformat.h",
    "unicode/curramt.h",
    "unicode/currpinf.h",
    "unicode/currunit.h",
    "unicode/datefmt.h",
    "unicode/dcfmtsym.h",
    "unicode/decimfmt.h",
    "unicode/dtfmtsym.h",
    "unicode/dtitvfmt.h",
    "unicode/dtitvinf.h",
    "unicode/dtptngen.h",
    "unicode/dtrule.h",
    "unicode/fieldpos.h",
    "unicode/fmtable.h",
    "unicode/format.h",
    "unicode/fpositer.h",
    "unicode/gender.h",
    "unicode/gregocal.h",
    "unicode/measfmt.h",
    "unicode/measunit.h",
    "unicode/measure.h",
    "unicode/msgfmt.h",
    "unicode/numfmt.h",
    "unicode/numsys.h",
    "unicode/plurfmt.h",
    "unicode/plurrule.h",
    "unicode/rbnf.h",
    "unicode/rbtz.h",
    "unicode/regex.h",
    "unicode/region.h",
    "unicode/reldatefmt.h",
    "unicode/scientificnumberformatter.h",
    "unicode/search.h",
    "unicode/selfmt.h",
    "unicode/simpletz.h",
    "unicode/smpdtfmt.h",
    "unicode/sortkey.h",
    "unicode/stsearch.h",
    "unicode/tblcoll.h",
    "unicode/timezone.h",
    "unicode/tmunit.h",
    "unicode/tmutamt.h",
    "unicode/tmutfmt.h",
    "unicode/translit.h",
    "unicode/tzfmt.h",
    "unicode/tznames.h",
    "unicode/tzrule.h",
    "unicode/tztrans.h",
    "unicode/ucal.h",
    "unicode/ucol.h",
    "unicode/ucoleitr.h",
    "unicode/ucsdet.h",
    "unicode/udat.h",
    "unicode/udateintervalformat.h",
    "unicode/udatpg.h",
    "unicode/ufieldpositer.h",
    "unicode/uformattable.h",
    "unicode/ugender.h",
    "unicode/ulocdata.h",
    "unicode/umsg.h",
    "unicode/unirepl.h",
    "unicode/unum.h",
    "unicode/unumsys.h",
    "unicode/upluralrules.h",
    "unicode/uregex.h",
    "unicode/uregion.h",
    "unicode/ureldatefmt.h",
    "unicode/usearch.h",
    "unicode/uspoof.h",
    "unicode/utmscale.h",
    "unicode/utrans.h",
    "unicode/vtzone.h",
  ]
}

shim_headers("icuuc_shim") {
  root_path = "source/common"
  headers = [
    # This list can easily be updated using the commands below:
    # cd third_party/icu/source/common
    # find unicode -iname '*.h' -printf '    "%p",\n' | LC_ALL=C sort -u
    "unicode/appendable.h",
    "unicode/brkiter.h",
    "unicode/bytestream.h",
    "unicode/bytestrie.h",
    "unicode/bytestriebuilder.h",
    "unicode/caniter.h",
    "unicode/casemap.h",
    "unicode/char16ptr.h",
    "unicode/chariter.h",
    "unicode/dbbi.h",
    "unicode/docmain.h",
    "unicode/dtintrv.h",
    "unicode/edits.h",
    "unicode/enumset.h",
    "unicode/errorcode.h",
    "unicode/filteredbrk.h",
    "unicode/icudataver.h",
    "unicode/icuplug.h",
    "unicode/idna.h",
    "unicode/listformatter.h",
    "unicode/localpointer.h",
    "unicode/locdspnm.h",
    "unicode/locid.h",
    "unicode/messagepattern.h",
    "unicode/normalizer2.h",
    "unicode/normlzr.h",
    "unicode/parseerr.h",
    "unicode/parsepos.h",
    "unicode/platform.h",
    "unicode/ptypes.h",
    "unicode/putil.h",
    "unicode/rbbi.h",
    "unicode/rep.h",
    "unicode/resbund.h",
    "unicode/schriter.h",
    "unicode/simpleformatter.h",
    "unicode/std_string.h",
    "unicode/strenum.h",
    "unicode/stringpiece.h",
    "unicode/stringtriebuilder.h",
    "unicode/symtable.h",
    "unicode/ubidi.h",
    "unicode/ubiditransform.h",
    "unicode/ubrk.h",
    "unicode/ucasemap.h",
    "unicode/ucat.h",
    "unicode/uchar.h",
    "unicode/ucharstrie.h",
    "unicode/ucharstriebuilder.h",
    "unicode/uchriter.h",
    "unicode/uclean.h",
    "unicode/ucnv.h",
    "unicode/ucnv_cb.h",
    "unicode/ucnv_err.h",
    "unicode/ucnvsel.h",
    "unicode/uconfig.h",
    "unicode/ucurr.h",
    "unicode/udata.h",
    "unicode/udisplaycontext.h",
    "unicode/uenum.h",
    "unicode/uidna.h",
    "unicode/uiter.h",
    "unicode/uldnames.h",
    "unicode/ulistformatter.h",
    "unicode/uloc.h",
    "unicode/umachine.h",
    "unicode/umisc.h",
    "unicode/unifilt.h",
    "unicode/unifunct.h",
    "unicode/unimatch.h",
    "unicode/uniset.h",
    "unicode/unistr.h",
    "unicode/unorm.h",
    "unicode/unorm2.h",
    "unicode/uobject.h",
    "unicode/urename.h",
    "unicode/urep.h",
    "unicode/ures.h",
    "unicode/uscript.h",
    "unicode/uset.h",
    "unicode/usetiter.h",
    "unicode/ushape.h",
    "unicode/usprep.h",
    "unicode/ustring.h",
    "unicode/ustringtrie.h",
    "unicode/utext.h",
    "unicode/utf.h",
    "unicode/utf16.h",
    "unicode/utf32.h",
    "unicode/utf8.h",
    "unicode/utf_old.h",
    "unicode/utrace.h",
    "unicode/utypes.h",
    "unicode/uvernum.h",
    "unicode/uversion.h",
  ]
}
