# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../gn/skia.gni")
import("../third_party.gni")
import("icu.gni")

if (skia_use_system_icu) {
  system("icu") {
    libs = [ "icuuc" ]
    defines = [ "U_USING_ICU_NAMESPACE=0" ]
  }
} else {
  if (target_cpu == "wasm") {
    data_assembly = "$target_gen_dir/icudtl_dat.cpp"
  } else {
    data_assembly = "$target_gen_dir/icudtl_dat.S"
  }
  data_dir = "../externals/icu/"
  if (target_cpu == "wasm") {
    # Use a super super super stripped down version for wasm,
    # which is the same thing flutter is using.
    data_dir += "flutter"
  } else if (is_android) {
    data_dir += "android"
  } else if (is_ios) {
    data_dir += "ios"
  } else {
    data_dir += "common"
  }
  action("make_data_assembly") {
    if (target_cpu == "wasm") {
      _u_icu_version_major_num =
          "74"  # defined in source/common/unicode/uvernum.h
      script = "make_data_cpp.py"
      inputs = [ "$data_dir/icudtl.dat" ]
      outputs = [ data_assembly ]
      args = [
        "icudt${_u_icu_version_major_num}_dat",
        rebase_path(inputs[0], root_build_dir),
        rebase_path(data_assembly, root_build_dir),
      ]
    } else {
      script = "../externals/icu/scripts/make_data_assembly.py"
      inputs = [ "$data_dir/icudtl.dat" ]
      outputs = [ "$data_assembly" ]
      args = [
        rebase_path(inputs[0], root_build_dir),
        rebase_path(data_assembly, root_build_dir),
      ]
      if (is_mac || is_ios) {
        args += [ "--mac" ]
      }
    }
  }

  third_party("headers") {
    public_include_dirs = [
      "../externals/icu/source/common",
      "../externals/icu/source/i18n",
      ".",
    ]
  }

  third_party("icu") {
    public_include_dirs = [
      "../externals/icu/source/common",
      "../externals/icu/source/i18n",
      ".",
    ]
    public_defines = [ "SK_USING_THIRD_PARTY_ICU" ]
    configs = [ "//gn/portable:add_rtti" ]
    defines = [
      # http://userguide.icu-project.org/howtouseicu
      "U_COMMON_IMPLEMENTATION",
      "U_STATIC_IMPLEMENTATION",
      "U_ENABLE_DYLOAD=0",
      "U_I18N_IMPLEMENTATION",
      "U_DISABLE_RENAMING=1",
      "U_USING_ICU_NAMESPACE=0",

      # If we don't set this to zero, ICU will set it to 600,
      # which makes Macs set _POSIX_C_SOURCE=200112L,
      # which makes Macs set __DARWIN_C_LEVEL=_POSIX_C_SOURCE instead of =__DARWIN_C_FULL,
      # which makes <time.h> not expose timespec_get,
      # which makes recent libc++ <ctime> not #include-able with -std=c++17.
      "_XOPEN_SOURCE=0",
    ]
    if (target_cpu == "wasm") {
      # Tell ICU that we are a 32 bit platform, otherwise,
      # double-conversion-utils.h doesn't know how to operate.
      defines += [ "__i386__" ]
    }
    sources = icu_sources
    if (is_win) {
      deps = [ ":icudata" ]
      public_defines += [
        "U_NOEXCEPT=",
        "U_STATIC_IMPLEMENTATION",
      ]
      libs = [ "Advapi32.lib" ]
      sources += [
        "../externals/icu/source/stubdata/stubdata.cpp",
        "SkLoadICU.cpp",
      ]
    } else {
      sources += [ "$data_assembly" ]
      deps = [ ":make_data_assembly" ]
    }
  }

  copy("icudata") {
    sources = [ "../externals/icu/common/icudtl.dat" ]
    outputs = [ "$root_out_dir/icudtl.dat" ]
    data = [ "$root_out_dir/icudtl.dat" ]
  }
}
