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

declare_args() {
  skia_use_system_icu = is_official_build
}

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

if (skia_use_icu) {
  if (skia_use_system_icu) {
    system("icu") {
      libs = [ "icuuc" ]
      defines = [ "U_USING_ICU_NAMESPACE=0" ]
    }
  } else {
    data_assembly = "$target_gen_dir/icudtl_dat.S"
    data_dir = "../externals/icu/"
    if (is_android) {
      data_dir += "android"
    } else if (is_ios) {
      data_dir += "ios"
    } else {
      data_dir += "common"
    }
    action("make_data_assembly") {
      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("icu") {
      public_include_dirs = [
        "../externals/icu/source/common",
        "../externals/icu/source/i18n",
        ".",
      ]
      public_defines = [
        "U_USING_ICU_NAMESPACE=0",
        "SK_USING_THIRD_PARTY_ICU",
      ]
      configs -= [ "//gn:no_rtti" ]
      defines = [
        # http://userguide.icu-project.org/howtouseicu
        "U_COMMON_IMPLEMENTATION",
        "U_STATIC_IMPLEMENTATION",
        "U_ENABLE_DYLOAD=0",
        "U_I18N_IMPLEMENTATION",
      ]
      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",
        ]
      }
    }
    if (is_win) {
      copy("icudata") {
        sources = [
          "../externals/icu/windows/icudt.dll",
        ]
        outputs = [
          "$root_out_dir/icudt.dll",
        ]
        data = outputs
      }
    }
  }
}
