# Copyright 2014 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/features.gni")

# May need to make this a build arg, keep the name for now to match gyp
cld2_table_size = 2

core_files = [
  "src/internal/cld2tablesummary.h",
  "src/internal/cldutil.cc",
  "src/internal/cldutil.h",
  "src/internal/cldutil_shared.cc",
  "src/internal/cldutil_shared.h",
  "src/internal/compact_lang_det.cc",
  "src/internal/compact_lang_det_hint_code.cc",
  "src/internal/compact_lang_det_hint_code.h",
  "src/internal/compact_lang_det_impl.cc",
  "src/internal/compact_lang_det_impl.h",
  "src/internal/debug.h",
  "src/internal/debug_empty.cc",
  "src/internal/fixunicodevalue.cc",
  "src/internal/fixunicodevalue.h",
  "src/internal/generated_distinct_bi_0.cc",
  "src/internal/generated_entities.cc",
  "src/internal/generated_language.cc",
  "src/internal/generated_language.h",
  "src/internal/generated_ulscript.cc",
  "src/internal/generated_ulscript.h",
  "src/internal/getonescriptspan.cc",
  "src/internal/getonescriptspan.h",
  "src/internal/integral_types.h",
  "src/internal/lang_script.cc",
  "src/internal/lang_script.h",
  "src/internal/langspan.h",
  "src/internal/offsetmap.cc",
  "src/internal/offsetmap.h",
  "src/internal/port.h",
  "src/internal/scoreonescriptspan.cc",
  "src/internal/scoreonescriptspan.h",
  "src/internal/stringpiece.h",
  "src/internal/tote.cc",
  "src/internal/tote.h",
  "src/internal/utf8prop_lettermarkscriptnum.h",
  "src/internal/utf8repl_lettermarklower.h",
  "src/internal/utf8scannot_lettermarkspecial.h",
  "src/internal/utf8statetable.cc",
  "src/internal/utf8statetable.h",
  "src/public/compact_lang_det.h",
  "src/public/encodings.h",
]

data_loader_files = [
  "src/internal/cld2_dynamic_data.h",
  "src/internal/cld2_dynamic_data.cc",
  "src/internal/cld2_dynamic_data_loader.h",
  "src/internal/cld2_dynamic_data_loader.cc",
]

source_set("cld2_data") {
  sources = [
    "src/internal/cld2_generated_cjk_compatible.cc",
    "src/internal/cld2_generated_deltaoctachrome0122.cc",
    "src/internal/cld2_generated_distinctoctachrome0122.cc",
    "src/internal/cld_generated_cjk_delta_bi_4.cc",
    "src/internal/cld_generated_cjk_uni_prop_80.cc",
    "src/internal/cld_generated_score_quad_octa_0122_2.cc",
  ]
  if (cld2_table_size == 0) {
    sources += [ "src/internal/cld2_generated_quadchrome0122_16.cc" ]
  } else if (cld2_table_size == 1) {
    sources += [ "src/internal/cld2_generated_quadchrome0122_19.cc" ]
  } else if (cld2_table_size == 2) {
    sources += [ "src/internal/cld2_generated_quadchrome0122_2.cc" ]
  }

  include_dirs = [
    "src/internal",
    "src/public",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # size_t -> int conversion.
  }
}

static_library("cld2_static") {
  sources = core_files
  include_dirs = [
    "src/internal",
    "src/public",
  ]

  deps = [ ":cld2_data" ]
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # size_t -> int conversion.
  }
}

# Meta-target for convenience; dependents don't need to know if this if CLD2
# is in dynamic or static configuration.
group("cld_2") {
  if (cld2_data_source == "static") {
    deps = [ ":cld2_static" ]
  } else {
    deps = [ ":cld2_dynamic" ]
  }
}

config("cld2_dynamic_mode_config") {
  defines = [ "CLD2_DYNAMIC_MODE" ]
}

static_library("cld2_dynamic") {
  sources = core_files + data_loader_files
  all_dependent_configs = [ ":cld2_dynamic_mode_config" ]
  include_dirs = [
    "src/internal",
    "src/public",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # size_t -> int conversion.
  }
}

# Does not build on Windows.
if (!is_win) {
  executable("cld_2_dynamic_data_tool") {
    sources = [
      "src/internal/cld2_dynamic_data_extractor.h",
      "src/internal/cld2_dynamic_data_extractor.cc",
      "src/internal/cld2_dynamic_data_tool.cc",
    ]

    include_dirs = [
      "src/internal",
      "src/public",
    ]

    deps = [ ":cld2_data", ":cld2_dynamic" ]

    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]

    if (is_win) {
      cflags = [ "/wd4267" ]  # size_t -> int conversion.
    }
  }
}