# 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",

    # 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/listformatter.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/localematcher.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",
  ]
}
